config.ru 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. require 'erb'
  2. require 'active_record'
  3. Bundler.require :default
  4. db_config = YAML.load(ERB.new(File.read("config/database.yml")).result)[ENV['RACK_ENV']]
  5. ActiveRecord::Base.establish_connection(db_config)
  6. class World < ActiveRecord::Base
  7. self.table_name = "World"
  8. end
  9. module Acme
  10. class HelloWorld < Grape::API
  11. get '/json' do
  12. {message:"Hello, World!"}
  13. end
  14. end
  15. class PlainText < Grape::API
  16. content_type :plain, "text/plain; charset=utf-8"
  17. format :plain
  18. get '/plaintext' do
  19. "Hello, World!"
  20. end
  21. end
  22. class DatabaseQueries < Grape::API
  23. get '/db' do
  24. ActiveRecord::Base.connection_pool.with_connection do
  25. World.find(Random.rand(10000) + 1)
  26. end
  27. end
  28. get '/query' do
  29. queries = params[:queries].to_i
  30. queries = 1 if queries < 1
  31. queries = 500 if queries > 500
  32. ActiveRecord::Base.connection_pool.with_connection do
  33. results = (1..queries).map do
  34. World.find(Random.rand(10000) + 1)
  35. end
  36. end
  37. end
  38. get '/updates' do
  39. queries = params[:queries].to_i
  40. queries = 1 if queries < 1
  41. queries = 500 if queries > 500
  42. ActiveRecord::Base.connection_pool.with_connection do
  43. worlds = (1..queries).map do
  44. world = World.find(Random.rand(10000) + 1)
  45. world.randomNumber = Random.rand(10000) + 1
  46. world
  47. end
  48. World.import worlds, :on_duplicate_key_update => [:randomNumber]
  49. worlds
  50. end
  51. end
  52. end
  53. class API < Grape::API
  54. content_type :json, "application/json; charset=utf-8"
  55. format :json
  56. mount ::Acme::HelloWorld
  57. mount ::Acme::PlainText
  58. mount ::Acme::DatabaseQueries
  59. end
  60. end
  61. run Acme::API