rabl 0.3.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +10 -0
  3. data/CHANGELOG.md +34 -0
  4. data/Gemfile +14 -1
  5. data/README.md +53 -4
  6. data/Rakefile +26 -1
  7. data/fixtures/ashared/NOTES +35 -0
  8. data/fixtures/ashared/README +35 -0
  9. data/fixtures/ashared/migrate/20111002092016_create_users.rb +15 -0
  10. data/fixtures/ashared/migrate/20111002092019_create_posts.rb +14 -0
  11. data/fixtures/ashared/migrate/20111002092024_create_phone_numbers.rb +16 -0
  12. data/fixtures/ashared/models/phone_number.rb +7 -0
  13. data/fixtures/ashared/models/post.rb +3 -0
  14. data/fixtures/ashared/models/user.rb +3 -0
  15. data/fixtures/ashared/views/layouts/application.html.erb +6 -0
  16. data/fixtures/ashared/views/posts/date.json.rabl +3 -0
  17. data/fixtures/ashared/views/posts/index.json.rabl +11 -0
  18. data/fixtures/ashared/views/posts/show.json.rabl +16 -0
  19. data/fixtures/ashared/views/users/index.rabl +3 -0
  20. data/fixtures/ashared/views/users/phone_number.rabl +6 -0
  21. data/fixtures/ashared/views/users/show.rabl +16 -0
  22. data/fixtures/padrino_test/.components +7 -0
  23. data/fixtures/padrino_test/.gitignore +7 -0
  24. data/fixtures/padrino_test/Gemfile +17 -0
  25. data/fixtures/padrino_test/Rakefile +3 -0
  26. data/fixtures/padrino_test/app/app.rb +59 -0
  27. data/fixtures/padrino_test/app/controllers/posts.rb +11 -0
  28. data/fixtures/padrino_test/app/controllers/users.rb +11 -0
  29. data/fixtures/padrino_test/app/helpers/posts_helper.rb +7 -0
  30. data/fixtures/padrino_test/app/helpers/users_helper.rb +7 -0
  31. data/fixtures/padrino_test/config.ru +9 -0
  32. data/fixtures/padrino_test/config/apps.rb +34 -0
  33. data/fixtures/padrino_test/config/boot.rb +29 -0
  34. data/fixtures/padrino_test/config/database.rb +43 -0
  35. data/fixtures/padrino_test/db/schema.rb +42 -0
  36. data/fixtures/padrino_test/public/favicon.ico +0 -0
  37. data/fixtures/padrino_test/test/app/controllers/posts_controller_test.rb +108 -0
  38. data/fixtures/padrino_test/test/app/controllers/users_controller_test.rb +87 -0
  39. data/fixtures/padrino_test/test/test.rake +18 -0
  40. data/fixtures/padrino_test/test/test_config.rb +18 -0
  41. data/fixtures/rails2/.gitignore +1 -0
  42. data/fixtures/rails2/Gemfile +8 -0
  43. data/fixtures/rails2/Rakefile +14 -0
  44. data/fixtures/rails2/app/controllers/application_controller.rb +10 -0
  45. data/fixtures/rails2/app/controllers/posts_controller.rb +15 -0
  46. data/fixtures/rails2/app/controllers/users_controller.rb +15 -0
  47. data/fixtures/rails2/config/boot.rb +129 -0
  48. data/fixtures/rails2/config/database.yml +16 -0
  49. data/fixtures/rails2/config/environment.rb +42 -0
  50. data/fixtures/rails2/config/environments/development.rb +17 -0
  51. data/fixtures/rails2/config/environments/production.rb +28 -0
  52. data/fixtures/rails2/config/environments/test.rb +28 -0
  53. data/fixtures/rails2/config/initializers/backtrace_silencers.rb +7 -0
  54. data/fixtures/rails2/config/initializers/cookie_verification_secret.rb +7 -0
  55. data/fixtures/rails2/config/initializers/inflections.rb +10 -0
  56. data/fixtures/rails2/config/initializers/mime_types.rb +5 -0
  57. data/fixtures/rails2/config/initializers/new_rails_defaults.rb +21 -0
  58. data/fixtures/rails2/config/initializers/session_store.rb +15 -0
  59. data/fixtures/rails2/config/locales/en.yml +5 -0
  60. data/fixtures/rails2/config/preinitializer.rb +20 -0
  61. data/fixtures/rails2/config/routes.rb +45 -0
  62. data/fixtures/rails2/db/schema.rb +40 -0
  63. data/fixtures/rails2/db/seeds.rb +7 -0
  64. data/fixtures/rails2/public/404.html +30 -0
  65. data/fixtures/rails2/public/422.html +30 -0
  66. data/fixtures/rails2/public/500.html +30 -0
  67. data/fixtures/rails2/public/favicon.ico +0 -0
  68. data/fixtures/rails2/public/images/rails.png +0 -0
  69. data/fixtures/rails2/public/index.html +275 -0
  70. data/fixtures/rails2/public/robots.txt +5 -0
  71. data/fixtures/rails2/script/about +4 -0
  72. data/fixtures/rails2/script/console +3 -0
  73. data/fixtures/rails2/script/dbconsole +3 -0
  74. data/fixtures/rails2/script/destroy +3 -0
  75. data/fixtures/rails2/script/generate +3 -0
  76. data/fixtures/rails2/script/performance/benchmarker +3 -0
  77. data/fixtures/rails2/script/performance/profiler +3 -0
  78. data/fixtures/rails2/script/plugin +3 -0
  79. data/fixtures/rails2/script/runner +3 -0
  80. data/fixtures/rails2/script/server +3 -0
  81. data/fixtures/rails2/test/functionals/posts_controller_test.rb +108 -0
  82. data/fixtures/rails2/test/functionals/users_controller_test.rb +87 -0
  83. data/fixtures/rails2/test/test_helper.rb +33 -0
  84. data/fixtures/rails3/.gitignore +4 -0
  85. data/fixtures/rails3/Gemfile +37 -0
  86. data/fixtures/rails3/Rakefile +12 -0
  87. data/fixtures/rails3/app/controllers/application_controller.rb +14 -0
  88. data/fixtures/rails3/app/controllers/posts_controller.rb +11 -0
  89. data/fixtures/rails3/app/controllers/users_controller.rb +11 -0
  90. data/fixtures/rails3/config.ru +4 -0
  91. data/fixtures/rails3/config/application.rb +42 -0
  92. data/fixtures/rails3/config/boot.rb +6 -0
  93. data/fixtures/rails3/config/database.yml +22 -0
  94. data/fixtures/rails3/config/environment.rb +5 -0
  95. data/fixtures/rails3/config/environments/development.rb +26 -0
  96. data/fixtures/rails3/config/environments/production.rb +49 -0
  97. data/fixtures/rails3/config/environments/test.rb +35 -0
  98. data/fixtures/rails3/config/initializers/backtrace_silencers.rb +7 -0
  99. data/fixtures/rails3/config/initializers/inflections.rb +10 -0
  100. data/fixtures/rails3/config/initializers/mime_types.rb +5 -0
  101. data/fixtures/rails3/config/initializers/secret_token.rb +7 -0
  102. data/fixtures/rails3/config/initializers/session_store.rb +8 -0
  103. data/fixtures/rails3/config/locales/en.yml +5 -0
  104. data/fixtures/rails3/config/routes.rb +61 -0
  105. data/fixtures/rails3/db/seeds.rb +7 -0
  106. data/fixtures/rails3/lib/tasks/.gitkeep +0 -0
  107. data/fixtures/rails3/public/404.html +26 -0
  108. data/fixtures/rails3/public/422.html +26 -0
  109. data/fixtures/rails3/public/500.html +26 -0
  110. data/fixtures/rails3/public/favicon.ico +0 -0
  111. data/fixtures/rails3/public/images/rails.png +0 -0
  112. data/fixtures/rails3/public/index.html +239 -0
  113. data/fixtures/rails3/public/robots.txt +5 -0
  114. data/fixtures/rails3/public/stylesheets/.gitkeep +0 -0
  115. data/fixtures/rails3/script/rails +6 -0
  116. data/fixtures/rails3/test/functional/posts_controller_test.rb +108 -0
  117. data/fixtures/rails3/test/functional/users_controller_test.rb +87 -0
  118. data/fixtures/rails3/test/test_helper.rb +26 -0
  119. data/fixtures/sinatra_test/Gemfile +13 -0
  120. data/fixtures/sinatra_test/Rakefile +6 -0
  121. data/fixtures/sinatra_test/app.rb +44 -0
  122. data/fixtures/sinatra_test/config.ru +7 -0
  123. data/fixtures/sinatra_test/test/functional/posts_controller_test.rb +108 -0
  124. data/fixtures/sinatra_test/test/functional/users_controller_test.rb +87 -0
  125. data/fixtures/sinatra_test/test/test_helper.rb +19 -0
  126. data/lib/rabl.rb +13 -1
  127. data/lib/rabl/builder.rb +14 -7
  128. data/lib/rabl/configuration.rb +41 -1
  129. data/lib/rabl/engine.rb +29 -19
  130. data/lib/rabl/helpers.rb +45 -18
  131. data/lib/rabl/template.rb +1 -1
  132. data/lib/rabl/version.rb +1 -1
  133. data/rabl.gemspec +6 -5
  134. data/test/builder_test.rb +4 -4
  135. data/test/configuration_test.rb +7 -22
  136. data/test/engine_test.rb +63 -44
  137. data/test/helpers_test.rb +68 -0
  138. data/test/integration/posts_controller_test.rb +108 -0
  139. data/test/integration/test_init.rb +35 -0
  140. data/test/integration/users_controller_test.rb +87 -0
  141. data/test/models/ormless.rb +2 -0
  142. data/test/models/user.rb +17 -6
  143. data/test/msgpack_engine_test.rb +332 -0
  144. data/test/silence.rb +21 -0
  145. data/test/teststrap.rb +22 -6
  146. metadata +160 -14
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ $LOAD_PATH.unshift "#{RAILTIES_PATH}/builtin/rails_info"
4
+ require 'commands/about'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/dbconsole'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../../config/boot', __FILE__)
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../../config/boot', __FILE__)
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path('../../config/boot', __FILE__)
3
+ require 'commands/server'
@@ -0,0 +1,108 @@
1
+ # Lives in <rabl>/test/integration/posts_controller_test.rb
2
+ # Symlinked to fixture applications
3
+
4
+ begin # Padrino
5
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
6
+ rescue LoadError # Rails
7
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
8
+ end
9
+
10
+ context "PostsController" do
11
+ helper(:json_output) { JSON.parse(last_response.body) }
12
+
13
+ setup do
14
+ create_users!
15
+ Post.delete_all
16
+ @post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
17
+ @post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
18
+ @post3 = Post.create(:title => "Kaz", :body => "Paz", :user_id => @user3.id)
19
+ @posts = [@post1, @post2, @post3]
20
+ end
21
+
22
+ context "for index action" do
23
+ setup do
24
+ get "/posts"
25
+ end
26
+
27
+ # Attributes (regular)
28
+ asserts("contains post titles") do
29
+ json_output['articles'].map { |o| o["article"]["title"] }
30
+ end.equals { @posts.map(&:title) }
31
+
32
+ asserts("contains post bodies") do
33
+ json_output['articles'].map { |o| o["article"]["body"] }
34
+ end.equals { @posts.map(&:body) }
35
+
36
+ # Attributes (custom name)
37
+ asserts("contains post posted_at") do
38
+ json_output['articles'].map { |o| o["article"]["posted_at"] }
39
+ end.equals { @posts.map(&:created_at).map(&:iso8601) }
40
+
41
+ # Child
42
+ asserts("contains post user child username") do
43
+ json_output['articles'].map { |o| o["article"]["user"]["username"] }
44
+ end.equals { @posts.map(&:user).map(&:username) }
45
+
46
+ asserts("contains post user child role") do
47
+ json_output['articles'].map { |o| o["article"]["user"]["role"] }
48
+ end.equals { ["normal", "normal", "admin"] }
49
+
50
+ # Child Numbers of the Child User
51
+ asserts("contains post user child numbers") do
52
+ json_output['articles'].map { |o| o["article"]["user"]["pnumbers"][0]["pnumber"]["formatted"] }
53
+ end.equals { @posts.map(&:user).map(&:phone_numbers).map(&:first).map(&:formatted) }
54
+
55
+ # Glue (username to article)
56
+ asserts("contains glued usernames") do
57
+ json_output['articles'].map { |o| o["article"]["author_name"] }
58
+ end.equals { @posts.map(&:user).map(&:username) }
59
+
60
+ # Conditional Child (admin)
61
+ asserts("contains admin child only for admins") do
62
+ json_output['articles'].map { |o| o["article"]["admin"]["username"] if o["article"].has_key?("admin") }.compact
63
+ end.equals { [@user3.username] }
64
+
65
+ # Conditional Node (created_by_admin)
66
+ asserts("contains created_by_admin node for admins") do
67
+ json_output['articles'].last['article']['created_by_admin']
68
+ end.equals { true }
69
+
70
+ denies("contains no created_by_admin node for non-admins") do
71
+ json_output['articles'].first['article']
72
+ end.includes(:created_by_admin)
73
+ end # index action
74
+
75
+ context "for show action" do
76
+ setup do
77
+ get "/posts/#{@post1.id}"
78
+ json_output['post']
79
+ end
80
+
81
+ # Attributes (regular)
82
+ asserts("contains post title") { topic['title'] }.equals { @post1.title }
83
+ asserts("contains post body") { topic['body'] }.equals { @post1.body }
84
+
85
+ # Attributes (custom name)
86
+ asserts("contains post posted_at") { topic['posted_at'] }.equals { @post1.created_at.iso8601 }
87
+
88
+ # Child
89
+ asserts("contains post user child username") { topic["user"]["username"] }.equals { @post1.user.username }
90
+ asserts("contains post user child role") { topic["user"]["role"] }.equals { "normal" }
91
+
92
+ # Child Numbers of the Child User
93
+ asserts("contains post user child numbers") do
94
+ topic["user"]["pnumbers"][0]["pnumber"]["formatted"]
95
+ end.equals { @post1.user.phone_numbers[0].formatted }
96
+
97
+ # Glue (username to article)
98
+ asserts("contains glued username") { topic["author_name"] }.equals { @post1.user.username }
99
+
100
+ # Non-ORM Date Node Partial
101
+ context "for date node" do
102
+ setup { json_output['post']['created_date'] }
103
+ asserts("contains date partial with day") { topic['day'] }.equals { @post1.created_at.day }
104
+ asserts("contains date partial with hour") { topic['hour'] }.equals { @post1.created_at.hour }
105
+ asserts("contains date partial with full") { topic['full'] }.equals { @post1.created_at.iso8601 }
106
+ end # date node
107
+ end # show action
108
+ end
@@ -0,0 +1,87 @@
1
+ # Lives in <rabl>/test/integration/users_controller_test.rb
2
+ # Symlinked to fixture applications
3
+
4
+ begin # Sinatra
5
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_config.rb')
6
+ rescue LoadError # Rails
7
+ require File.expand_path(File.dirname(__FILE__) + '/../test_helper.rb')
8
+ end
9
+
10
+ context "UsersController" do
11
+ helper(:json_output) { JSON.parse(last_response.body) }
12
+
13
+ setup do
14
+ create_users!
15
+ end
16
+
17
+ context "for index action" do
18
+ # Tests `collection @users` extending from 'show' template
19
+
20
+ setup do
21
+ get "/users"
22
+ end
23
+
24
+ # Attributes (regular)
25
+ asserts("contains user usernames") do
26
+ json_output.map { |u| u["user"]["username"] }
27
+ end.equals { @users.map(&:username) }
28
+ asserts("contains email") do
29
+ json_output.map { |u| u["user"]["email"] }
30
+ end.equals { @users.map(&:email) }
31
+ asserts("contains location") do
32
+ json_output.map { |u| u["user"]["location"] }
33
+ end.equals { @users.map(&:location) }
34
+
35
+ # Attributes (custom name)
36
+ asserts("contains registered_at") do
37
+ json_output.map { |u| u["user"]["registered_at"] }
38
+ end.equals { @users.map(&:created_at).map(&:iso8601) }
39
+
40
+ # Node (renders based on attribute)
41
+ asserts("contains role") do
42
+ json_output.map { |u| u["user"]["role"] }
43
+ end.equals ['normal', 'normal', 'admin']
44
+
45
+ # Child (custom collection name)
46
+ asserts("contains formatted phone numbers") do
47
+ json_output.map { |u| u["user"]["pnumbers"].map { |n| n["pnumber"]["formatted"] } }
48
+ end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
49
+
50
+ # Node (renders collection partial)
51
+ asserts("contains formatted node numbers") do
52
+ json_output.map { |u| u["user"]["node_numbers"].map { |n| n["formatted"] } }
53
+ end.equals { @users.map { |u| u.phone_numbers.map(&:formatted) } }
54
+ end # index
55
+
56
+ context "for show action" do
57
+ # Tests `object :user => :person` custom parent node name
58
+ setup do
59
+ get "/users/#{@user1.id}"
60
+ end
61
+
62
+ # Attributes (regular)
63
+ asserts("contains username") { json_output["person"]["username"] }.equals { @user1.username }
64
+ asserts("contains email") { json_output["person"]["email"] }.equals { @user1.email }
65
+ asserts("contains location") { json_output["person"]["location"] }.equals { @user1.location }
66
+ # Attributes (custom name)
67
+ asserts("contains registered_at") { json_output["person"]["registered_at"] }.equals { @user1.created_at.iso8601 }
68
+ # Node (renders based on attribute)
69
+ asserts("contains role node") { json_output["person"]["role"] }.equals "normal"
70
+
71
+ # Child (custom collection name)
72
+ asserts("contains first phone number") {
73
+ json_output["person"]["pnumbers"][0]["pnumber"]["formatted"]
74
+ }.equals { @user1.phone_numbers[0].formatted }
75
+ asserts("contains second phone number") {
76
+ json_output["person"]["pnumbers"][1]["pnumber"]["formatted"]
77
+ }.equals { @user1.phone_numbers[1].formatted }
78
+
79
+ # Node (renders collection partial)
80
+ asserts("contains first node number") {
81
+ json_output["person"]["node_numbers"][0]["formatted"]
82
+ }.equals { @user1.phone_numbers[0].formatted }
83
+ asserts("contains second node number") {
84
+ json_output["person"]["node_numbers"][1]["formatted"]
85
+ }.equals { @user1.phone_numbers[1].formatted }
86
+ end # show
87
+ end
@@ -0,0 +1,33 @@
1
+ # Load Silence Functionality
2
+ require File.expand_path(File.dirname(__FILE__) + "/../../../test/silence.rb")
3
+
4
+ # Load Environment
5
+ silence_warnings do
6
+ ENV["RAILS_ENV"] = "test"
7
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
8
+ require 'test_help'
9
+ end
10
+
11
+ # Load Riot Test Environment
12
+ require File.expand_path(File.dirname(__FILE__) + "/../../../test/integration/test_init.rb")
13
+
14
+ # Run Migrations
15
+ silence_stream(STDOUT) do
16
+ dbconf = YAML::load(File.open('config/database.yml'))[Rails.env]
17
+ ActiveRecord::Base.establish_connection(dbconf)
18
+ ActiveRecord::Base.logger = Logger.new(File.open('log/database.log', 'a'))
19
+ silence_stream(STDOUT) { ActiveRecord::Migrator.up('db/migrate') }
20
+ end
21
+
22
+ class Riot::Situation
23
+ def app
24
+ ActionController::Dispatcher.new
25
+ end
26
+ end
27
+
28
+ class ActiveSupport::TestCase
29
+ self.use_transactional_fixtures = true
30
+ self.use_instantiated_fixtures = false
31
+ end
32
+
33
+
@@ -0,0 +1,4 @@
1
+ .bundle
2
+ db/*.sqlite3
3
+ log/*.log
4
+ tmp/
@@ -0,0 +1,37 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rails', '3.0.8'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ gem 'sqlite3'
9
+ gem 'json'
10
+ gem 'rabl', :path => File.expand_path(File.dirname(__FILE__) + "/../../")
11
+
12
+ # TEST
13
+ gem 'riot', :group => "test"
14
+ gem 'rack-test', :require => "rack/test", :group => "test"
15
+
16
+ # Use unicorn as the web server
17
+ # gem 'unicorn'
18
+
19
+ # Deploy with Capistrano
20
+ # gem 'capistrano'
21
+
22
+ # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
23
+ # gem 'ruby-debug'
24
+ # gem 'ruby-debug19', :require => 'ruby-debug'
25
+
26
+ # Bundle the extra gems:
27
+ # gem 'bj'
28
+ # gem 'nokogiri'
29
+ # gem 'sqlite3-ruby', :require => 'sqlite3'
30
+ # gem 'aws-s3', :require => 'aws/s3'
31
+
32
+ # Bundle gems for the local environment. Make sure to
33
+ # put test-only gems in this group so their generators
34
+ # and rake tasks are available in development mode:
35
+ # group :development, :test do
36
+ # gem 'webrat'
37
+ # end
@@ -0,0 +1,12 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+ require 'rake'
6
+
7
+ Rails3::Application.load_tasks
8
+
9
+ Rake::TestTask.new("test:rabl") do |test|
10
+ test.pattern = "test/functional/**/*_test.rb"
11
+ test.verbose = true
12
+ end
@@ -0,0 +1,14 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ before_filter :default_format_json
5
+
6
+ protected
7
+
8
+ def default_format_json
9
+ if(request.headers["HTTP_ACCEPT"].nil? &&
10
+ params[:format].nil?)
11
+ request.format = "json"
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class PostsController < ApplicationController
2
+ respond_to :json
3
+
4
+ def index
5
+ @posts = Post.all(:order => "id ASC")
6
+ end
7
+
8
+ def show
9
+ @post = Post.find(params[:id])
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class UsersController < ApplicationController
2
+ respond_to :json
3
+
4
+ def index
5
+ @users = User.all(:order => "username ASC")
6
+ end
7
+
8
+ def show
9
+ @user = User.find(params[:id])
10
+ end
11
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run Rails3::Application
@@ -0,0 +1,42 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ require 'rails/all'
4
+
5
+ # If you have a Gemfile, require the gems listed there, including any gems
6
+ # you've limited to :test, :development, or :production.
7
+ Bundler.require(:default, Rails.env) if defined?(Bundler)
8
+
9
+ module Rails3
10
+ class Application < Rails::Application
11
+ # Settings in config/environments/* take precedence over those specified here.
12
+ # Application configuration should go into files in config/initializers
13
+ # -- all .rb files in that directory are automatically loaded.
14
+
15
+ # Custom directories with classes and modules you want to be autoloadable.
16
+ # config.autoload_paths += %W(#{config.root}/extras)
17
+
18
+ # Only load the plugins named here, in the order given (default is alphabetical).
19
+ # :all can be used as a placeholder for all plugins not explicitly named.
20
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
21
+
22
+ # Activate observers that should always be running.
23
+ # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
24
+
25
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
26
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
27
+ # config.time_zone = 'Central Time (US & Canada)'
28
+
29
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
30
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
31
+ # config.i18n.default_locale = :de
32
+
33
+ # JavaScript files you want as :defaults (application.js is always included).
34
+ # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
35
+
36
+ # Configure the default encoding used in templates for Ruby 1.9.
37
+ config.encoding = "utf-8"
38
+
39
+ # Configure sensitive parameters which will be filtered from the log file.
40
+ config.filter_parameters += [:password]
41
+ end
42
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+
3
+ # Set up gems listed in the Gemfile.
4
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
5
+
6
+ require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])