rabl 0.13.1 → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +4 -2
  3. data/CHANGELOG.md +4 -0
  4. data/README.md +16 -10
  5. data/Rakefile +12 -3
  6. data/fixtures/ashared/NOTES +46 -0
  7. data/fixtures/ashared/controllers_rails_5/posts_controller.rb +17 -0
  8. data/fixtures/ashared/controllers_rails_5/users_controller.rb +11 -0
  9. data/fixtures/{rails5/app → ashared}/helpers/application_helper.rb +0 -0
  10. data/fixtures/rails3/db/schema.rb +42 -0
  11. data/fixtures/rails4/Gemfile +5 -1
  12. data/fixtures/rails4/config/environments/test.rb +3 -0
  13. data/fixtures/rails4/db/schema.rb +42 -0
  14. data/fixtures/rails5/Gemfile +1 -0
  15. data/fixtures/rails5/Rakefile +1 -1
  16. data/fixtures/rails5/app/controllers/posts_controller.rb +1 -0
  17. data/fixtures/rails5/app/controllers/users_controller.rb +1 -0
  18. data/fixtures/rails5/app/helpers +1 -0
  19. data/fixtures/rails5/config/initializers/mime_types.rb +2 -0
  20. data/fixtures/rails5/test/functional/posts_controller_test.rb +1 -0
  21. data/fixtures/rails5/test/functional/users_controller_test.rb +1 -0
  22. data/fixtures/rails5_api/.gitignore +21 -0
  23. data/fixtures/rails5_api/Gemfile +46 -0
  24. data/fixtures/rails5_api/README.md +24 -0
  25. data/fixtures/rails5_api/Rakefile +13 -0
  26. data/fixtures/rails5_api/app/channels/application_cable/channel.rb +4 -0
  27. data/fixtures/rails5_api/app/channels/application_cable/connection.rb +4 -0
  28. data/fixtures/rails5_api/app/controllers/application_controller.rb +2 -0
  29. data/fixtures/rails5_api/app/controllers/concerns/.keep +0 -0
  30. data/fixtures/rails5_api/app/controllers/posts_controller.rb +1 -0
  31. data/fixtures/rails5_api/app/controllers/users_controller.rb +1 -0
  32. data/fixtures/rails5_api/app/helpers +1 -0
  33. data/fixtures/rails5_api/app/jobs/application_job.rb +2 -0
  34. data/fixtures/rails5_api/app/mailers/application_mailer.rb +4 -0
  35. data/fixtures/rails5_api/app/models +1 -0
  36. data/fixtures/rails5_api/app/views +1 -0
  37. data/fixtures/rails5_api/bin/bundle +3 -0
  38. data/fixtures/rails5_api/bin/rails +9 -0
  39. data/fixtures/rails5_api/bin/rake +9 -0
  40. data/fixtures/rails5_api/bin/setup +34 -0
  41. data/fixtures/rails5_api/bin/spring +17 -0
  42. data/fixtures/rails5_api/bin/update +29 -0
  43. data/fixtures/rails5_api/config.ru +5 -0
  44. data/fixtures/rails5_api/config/application.rb +30 -0
  45. data/fixtures/rails5_api/config/boot.rb +3 -0
  46. data/fixtures/rails5_api/config/cable.yml +9 -0
  47. data/fixtures/rails5_api/config/database.yml +25 -0
  48. data/fixtures/rails5_api/config/environment.rb +5 -0
  49. data/fixtures/rails5_api/config/environments/development.rb +47 -0
  50. data/fixtures/rails5_api/config/environments/production.rb +78 -0
  51. data/fixtures/rails5_api/config/environments/test.rb +42 -0
  52. data/fixtures/rails5_api/config/initializers/application_controller_renderer.rb +6 -0
  53. data/fixtures/rails5_api/config/initializers/backtrace_silencers.rb +7 -0
  54. data/fixtures/rails5_api/config/initializers/cors.rb +16 -0
  55. data/fixtures/rails5_api/config/initializers/filter_parameter_logging.rb +4 -0
  56. data/fixtures/rails5_api/config/initializers/inflections.rb +16 -0
  57. data/fixtures/rails5_api/config/initializers/mime_types.rb +5 -0
  58. data/fixtures/rails5_api/config/initializers/new_framework_defaults.rb +18 -0
  59. data/fixtures/rails5_api/config/initializers/wrap_parameters.rb +14 -0
  60. data/fixtures/rails5_api/config/locales/en.yml +23 -0
  61. data/fixtures/rails5_api/config/puma.rb +47 -0
  62. data/fixtures/rails5_api/config/routes.rb +8 -0
  63. data/fixtures/rails5_api/config/secrets.yml +22 -0
  64. data/fixtures/rails5_api/config/spring.rb +6 -0
  65. data/fixtures/rails5_api/db/migrate +1 -0
  66. data/fixtures/rails5_api/db/schema.rb +41 -0
  67. data/fixtures/rails5_api/db/seeds.rb +7 -0
  68. data/fixtures/rails5_api/lib/tasks/.keep +0 -0
  69. data/fixtures/rails5_api/log/.keep +0 -0
  70. data/fixtures/rails5_api/public/robots.txt +5 -0
  71. data/fixtures/rails5_api/test/controllers/.keep +0 -0
  72. data/fixtures/rails5_api/test/fixtures/.keep +0 -0
  73. data/fixtures/rails5_api/test/fixtures/files/.keep +0 -0
  74. data/fixtures/rails5_api/test/functional/posts_controller_test.rb +1 -0
  75. data/fixtures/rails5_api/test/functional/users_controller_test.rb +1 -0
  76. data/fixtures/rails5_api/test/integration/.keep +0 -0
  77. data/fixtures/rails5_api/test/mailers/.keep +0 -0
  78. data/fixtures/rails5_api/test/models/.keep +0 -0
  79. data/fixtures/rails5_api/test/test_helper.rb +39 -0
  80. data/fixtures/rails5_api/tmp/.keep +0 -0
  81. data/lib/rabl.rb +1 -1
  82. data/lib/rabl/builder.rb +13 -3
  83. data/lib/rabl/configuration.rb +2 -0
  84. data/lib/rabl/engine.rb +2 -0
  85. data/lib/rabl/railtie.rb +17 -0
  86. data/lib/rabl/version.rb +1 -1
  87. data/rabl.gemspec +1 -1
  88. data/test/builder_test.rb +26 -0
  89. data/test/engine_test.rb +6 -0
  90. data/test/integration/rails5/posts_controller_test.rb +251 -0
  91. data/test/integration/rails5/users_controller_test.rb +87 -0
  92. data/test/models/user.rb +10 -9
  93. metadata +74 -6
  94. data/fixtures/rails5/app/controllers/posts_controller.rb +0 -17
  95. data/fixtures/rails5/app/controllers/users_controller.rb +0 -11
@@ -1,3 +1,3 @@
1
1
  module Rabl
2
- VERSION = "0.13.1"
2
+ VERSION = "0.14.0"
3
3
  end
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
30
30
  s.add_development_dependency 'rake'
31
31
  s.add_development_dependency 'tilt'
32
32
  s.add_development_dependency 'oj'
33
- s.add_development_dependency 'msgpack', '~> 0.4.5'
33
+ s.add_development_dependency 'msgpack', '~> 1.0.0'
34
34
  s.add_development_dependency 'bson', '~> 1.7.0'
35
35
  s.add_development_dependency 'plist'
36
36
  end
@@ -91,6 +91,32 @@ context "Rabl::Builder" do
91
91
  Rabl.configuration.exclude_nil_values = false
92
92
  end
93
93
  end
94
+
95
+ context "when keys are camelized" do
96
+ setup do
97
+ Rabl.configuration.camelize_keys = true
98
+ builder(nil, { :attributes => [ { :name => :first_pets_name } ] })
99
+ end
100
+ asserts "that the key is camelized" do
101
+ topic.to_hash(User.new)
102
+ end.equivalent_to({ :firstPetsName => 'jack' })
103
+ teardown do
104
+ Rabl.configuration.camelize_keys = false
105
+ end
106
+ end
107
+
108
+ context "when keys are camelized with upper case first letter" do
109
+ setup do
110
+ Rabl.configuration.camelize_keys = :upper
111
+ builder(nil, { :attributes => [ { :name => :first_pets_name } ] })
112
+ end
113
+ asserts "that the key is camelized with upper case first letter" do
114
+ topic.to_hash(User.new)
115
+ end.equivalent_to({ :FirstPetsName => 'jack' })
116
+ teardown do
117
+ Rabl.configuration.camelize_keys = false
118
+ end
119
+ end
94
120
  end
95
121
 
96
122
  context "#attribute" do
@@ -23,6 +23,12 @@ context "Rabl::Engine" do
23
23
  asserts_topic.assigns :_view_path
24
24
  end
25
25
 
26
+ context "#apply" do
27
+ denies("that it raises exception when given frozen locals").raises(RuntimeError) do
28
+ Rabl::Engine.new("").apply(Object.new, {}.freeze)
29
+ end
30
+ end
31
+
26
32
  context "#request_format" do
27
33
  context "is json by default" do
28
34
  setup do
@@ -0,0 +1,251 @@
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
+ require 'rexml/document'
11
+
12
+ context "PostsController" do
13
+ helper(:json_output) { JSON.parse(last_response.body) }
14
+
15
+ setup do
16
+ create_users!
17
+ Post.delete_all
18
+ @post1 = Post.create(:title => "Foo", :body => "Bar", :user_id => @user1.id)
19
+ @post2 = Post.create(:title => "Baz", :body => "Bah", :user_id => @user2.id)
20
+ @post3 = Post.create(:title => "Kaz", :body => "<script>alert('xss & test');</script>", :user_id => @user3.id)
21
+ @posts = [@post1, @post2, @post3]
22
+ end
23
+
24
+ context "for index action" do
25
+ setup do
26
+ get "/posts", format: :json
27
+ end
28
+
29
+ # Attributes (regular)
30
+ asserts("contains post titles") do
31
+ json_output['articles'].map { |o| o["article"]["title"] }
32
+ end.equals { @posts.map(&:title) }
33
+
34
+ asserts("contains post bodies") do
35
+ json_output['articles'].map { |o| o["article"]["body"] }
36
+ end.equals { @posts.map(&:body) }
37
+
38
+ # Attributes (custom name)
39
+ asserts("contains post posted_at") do
40
+ json_output['articles'].map { |o| o["article"]["posted_at"] }
41
+ end.equals { @posts.map(&:created_at).map{ |t| t.strftime("%Y-%m-%d %H:%M:%S %Z") } }
42
+
43
+ # Child
44
+ asserts("contains post user child username") do
45
+ json_output['articles'].map { |o| o["article"]["user"]["username"] }
46
+ end.equals { @posts.map(&:user).map(&:username) }
47
+
48
+ asserts("contains post user child role") do
49
+ json_output['articles'].map { |o| o["article"]["user"]["role"] }
50
+ end.equals { ["normal", "normal", "admin"] }
51
+
52
+ # Child Numbers of the Child User
53
+ asserts("contains post user child numbers") do
54
+ json_output['articles'].map { |o| o["article"]["user"]["pnumbers"][0]["pnumber"]["formatted"] }
55
+ end.equals { @posts.map(&:user).map(&:phone_numbers).map(&:first).map(&:formatted) }
56
+
57
+ # Glue (username to article)
58
+ asserts("contains glued usernames") do
59
+ json_output['articles'].map { |o| o["article"]["author_name"] }
60
+ end.equals { @posts.map(&:user).map(&:username) }
61
+
62
+ # Conditional Child (admin)
63
+ asserts("contains admin child only for admins") do
64
+ json_output['articles'].map { |o| o["article"]["admin"]["username"] if o["article"].has_key?("admin") }.compact
65
+ end.equals { [@user3.username] }
66
+
67
+ # Conditional Node (created_by_admin)
68
+ asserts("contains created_by_admin node for admins") do
69
+ json_output['articles'].last['article']['created_by_admin']
70
+ end.equals { true }
71
+
72
+ denies("contains no created_by_admin node for non-admins") do
73
+ json_output['articles'].first['article']
74
+ end.includes(:created_by_admin)
75
+ end # index action, json
76
+
77
+ context "escaping output in index action" do
78
+ context "for first post" do
79
+ setup do
80
+ Rabl.configuration.escape_all_output = true
81
+ get "/posts/#{@post1.id}", format: :json
82
+ json_output['post']
83
+ end
84
+
85
+ # Attributes (regular)
86
+ asserts("contains post title") { topic['title'] }.equals { @post1.title }
87
+ asserts("contains post body") { topic['body'] }.equals { @post1.body }
88
+ end
89
+
90
+ context "for third post with script tags" do
91
+ setup do
92
+ Rabl.configuration.escape_all_output = true
93
+ get "/posts/#{@post3.id}", format: :json
94
+ json_output['post']
95
+ end
96
+
97
+ # Attributes (regular)
98
+ asserts("contains post title") { topic['title'] }.equals { @post3.title }
99
+ asserts("contains escaped post body") { topic['body'] }.equals { ERB::Util.h(@post3.body) }
100
+ end
101
+ end # escaping output
102
+
103
+ context "for show action" do
104
+ setup do
105
+ get "/posts/#{@post1.id}", format: :json
106
+ json_output['post']
107
+ end
108
+
109
+ # Attributes (regular)
110
+ asserts("contains post title") { topic['title'] }.equals { @post1.title }
111
+ asserts("contains post body") { topic['body'] }.equals { @post1.body }
112
+
113
+ # Attributes (custom name)
114
+ asserts("contains post posted_at") { topic['posted_at'] }.equals { @post1.created_at.strftime("%Y-%m-%d %H:%M:%S %Z") }
115
+
116
+ # Child
117
+ asserts("contains post user child username") { topic["user"]["username"] }.equals { @post1.user.username }
118
+ asserts("contains post user child role") { topic["user"]["role"] }.equals { "normal" }
119
+
120
+ # Child Numbers of the Child User
121
+ asserts("contains post user child numbers") do
122
+ topic["user"]["pnumbers"][0]["pnumber"]["formatted"]
123
+ end.equals { @post1.user.phone_numbers[0].formatted }
124
+
125
+ # Glue (username to article)
126
+ asserts("contains glued username") { topic["author_name"] }.equals { @post1.user.username }
127
+
128
+ # Non-ORM Date Node Partial
129
+ context "for date node" do
130
+ setup { json_output['post']['created_date'] }
131
+ asserts("contains date partial with day") { topic['day'] }.equals { @post1.created_at.day }
132
+ asserts("contains date partial with hour") { topic['hour'] }.equals { @post1.created_at.hour }
133
+ asserts("contains date partial with full") { topic['full'] }.equals { @post1.created_at.iso8601 }
134
+ end # date node
135
+
136
+ asserts("contains helper action") { topic["foo"] }.equals { "BAR!" }
137
+ denies("contains helper action") { topic["created_at_in_words"] }.nil
138
+
139
+ asserts("contains post attributes via node") { topic["post"] }.equals { [@post1.title, @post1.body] }
140
+ end # show action, json
141
+
142
+ context "renderer" do
143
+ setup do
144
+ mock(ActionController::Base).perform_caching.any_number_of_times { true }
145
+ get "/posts/#{@post1.id}/renderer"
146
+ json_output['post']
147
+ end
148
+
149
+ # Attributes (regular)
150
+ asserts("contains post title") { topic['title'] }.equals { @post1.title }
151
+ asserts("contains post body") { topic['body'] }.equals { @post1.body }
152
+
153
+ # Attributes (partial)
154
+ asserts("contains post partial title") { topic['partial']['title'] }.equals { @post1.title }
155
+ asserts("contains post partial body") { topic['partial']['body'] }.equals { @post1.body }
156
+ end # renderer action, json
157
+
158
+ # HTML isn't supported in API mode
159
+ unless Rails.application.config.api_only
160
+ context "for index action rendering JSON within HTML" do
161
+ setup do
162
+ get "/posts", format: :html
163
+ end
164
+
165
+ asserts(:body).includes { "<html>" }
166
+ end # index action, html
167
+
168
+ context "for show action rendering JSON within HTML" do
169
+ setup do
170
+ get "/posts/#{@post1.id}", format: :html
171
+ end
172
+
173
+ asserts(:body).includes { "<html>" }
174
+ end # show action, html
175
+ end
176
+
177
+ context "mime_type" do
178
+ setup do
179
+ get "/posts/#{@post1.id}", format: :rabl_test_v1
180
+ end
181
+
182
+ asserts("contains post title") { json_output['post']['title_v1'] }.equals { @post1.title }
183
+ asserts("contains username") { json_output['post']['user']['username_v1'] }.equals { @post1.user.username }
184
+ end
185
+
186
+ # context "caching" do
187
+ # helper(:cache_hit) do |key|
188
+ # Rails.cache.read(ActiveSupport::Cache.expand_cache_key(key, :rabl))
189
+ # end
190
+ #
191
+ # setup do
192
+ # mock(ActionController::Base).perform_caching.any_number_of_times { true }
193
+ # Rails.cache.clear
194
+ # end
195
+ #
196
+ # context "for index action with caching in json" do
197
+ # setup do
198
+ # get "/posts", format: :json
199
+ # end
200
+ #
201
+ # asserts("contains post titles") do
202
+ # json_output['articles'].map { |o| o['article']['title'] }
203
+ # end.equals { @posts.map(&:title) }
204
+ #
205
+ # asserts(:body).equals { cache_hit ['kittens!', @posts, nil, 'json', 'e83f65eee5ffb454c418a59105f222c4'] }
206
+ #
207
+ # asserts("contains cache hits per object (posts by title)") do
208
+ # json_output['articles'].map { |o| o['article']['title'] }
209
+ # end.equals { @posts.map { |p| cache_hit([p, nil, 'hash', 'e373525f49a3b3b044af05255e84839d'])[:title] } }
210
+ # end # index action, caching, json
211
+ #
212
+ # context "for index action with caching in xml" do
213
+ # setup do
214
+ # get "/posts", format: :xml
215
+ # end
216
+ #
217
+ # asserts("contains post titles") do
218
+ # doc = REXML::Document.new topic.body
219
+ # doc.elements.inject('articles/article/title', []) {|arr, ele| arr << ele.text}
220
+ # end.equals { @posts.map(&:title) }
221
+ #
222
+ # asserts(:body).equals { cache_hit ['kittens!', @posts, nil, 'xml', 'e83f65eee5ffb454c418a59105f222c4'] }
223
+ # end # index action, caching, xml
224
+ #
225
+ # context "for show action with caching" do
226
+ # setup do
227
+ # get "/posts/#{@post1.id}", format: :json
228
+ # end
229
+ #
230
+ # asserts("contains post title") { json_output['post']['title'] }.equals { @post1.title }
231
+ #
232
+ # asserts(:body).equals { cache_hit [@post1, nil, 'json', 'e373525f49a3b3b044af05255e84839d'] }
233
+ # end # show action, caching, json
234
+ #
235
+ # context "cache_all_output" do
236
+ # helper(:cache_hit) do |key|
237
+ # Rails.cache.read(ActiveSupport::Cache.expand_cache_key([key, 'article', 'json'], :rabl))
238
+ # end
239
+ #
240
+ # setup do
241
+ # Rabl.configuration.cache_all_output = true
242
+ # get "/posts", format: :json
243
+ # end
244
+ #
245
+ # asserts("contains cache hits per object (posts by title)") do
246
+ # json_output['articles'].map { |o| o['article']['title'] }
247
+ # end.equals { @posts.map{ |p| cache_hit(p)['article'][:title] } }
248
+ # end # index action, cache_all_output
249
+ # end
250
+
251
+ 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", format: :json
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 { |t| t.strftime("%Y-%m-%d %H:%M:%S %Z") } }
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 reversed node numbers") do
52
+ json_output.map { |u| u["user"]["node_numbers"].map { |n| n["reversed"] } }
53
+ end.equals { @users.map { |u| u.phone_numbers.map(&:formatted).map(&:reverse) } }
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}", format: :json
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.strftime("%Y-%m-%d %H:%M:%S %Z") }
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
@@ -1,17 +1,18 @@
1
1
  unless defined?(User)
2
2
  class User
3
- attr_accessor :age, :city, :name, :first, :float, :hobbies, :twitter
3
+ attr_accessor :age, :city, :name, :first, :float, :hobbies, :twitter, :first_pets_name
4
4
 
5
- DEFAULT_AGE = 24
6
- DEFAULT_CITY = 'irvine'
7
- DEFAULT_NAME = 'rabl'
8
- DEFAULT_FIRST = 'bob'
9
- DEFAULT_FLOAT = 1234.56
10
- DEFAULT_HOBBIES = ['Photography']
11
- DEFAULT_TWITTER = 'rablgem'
5
+ DEFAULT_AGE = 24
6
+ DEFAULT_CITY = 'irvine'
7
+ DEFAULT_NAME = 'rabl'
8
+ DEFAULT_FIRST = 'bob'
9
+ DEFAULT_FLOAT = 1234.56
10
+ DEFAULT_HOBBIES = ['Photography']
11
+ DEFAULT_TWITTER = 'rablgem'
12
+ DEFAULT_FIRST_PETS_NAME = 'jack'
12
13
 
13
14
  def initialize(attributes = {})
14
- %w(age city name first float hobbies twitter).each do |attr|
15
+ %w(age city name first float hobbies twitter first_pets_name).each do |attr|
15
16
  self.send "#{attr}=", (attributes.has_key?(attr.to_sym) ? attributes[attr.to_sym] : self.class.const_get("DEFAULT_#{attr.upcase}"))
16
17
  end
17
18
  self.hobbies = self.hobbies.map { |h| Hobby.new(h) }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.1
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Esquenazi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-21 00:00:00.000000000 Z
11
+ date: 2018-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.4.5
103
+ version: 1.0.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.4.5
110
+ version: 1.0.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: bson
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -156,6 +156,9 @@ files:
156
156
  - examples/inherited.json.rabl
157
157
  - fixtures/ashared/NOTES
158
158
  - fixtures/ashared/README
159
+ - fixtures/ashared/controllers_rails_5/posts_controller.rb
160
+ - fixtures/ashared/controllers_rails_5/users_controller.rb
161
+ - fixtures/ashared/helpers/application_helper.rb
159
162
  - fixtures/ashared/migrate/20111002092016_create_users.rb
160
163
  - fixtures/ashared/migrate/20111002092019_create_posts.rb
161
164
  - fixtures/ashared/migrate/20111002092024_create_phone_numbers.rb
@@ -280,6 +283,7 @@ files:
280
283
  - fixtures/rails3/config/locales/en.yml
281
284
  - fixtures/rails3/config/routes.rb
282
285
  - fixtures/rails3/db/migrate
286
+ - fixtures/rails3/db/schema.rb
283
287
  - fixtures/rails3/db/seeds.rb
284
288
  - fixtures/rails3/lib/tasks/.gitkeep
285
289
  - fixtures/rails3/public/404.html
@@ -395,6 +399,7 @@ files:
395
399
  - fixtures/rails4/config/locales/en.yml
396
400
  - fixtures/rails4/config/routes.rb
397
401
  - fixtures/rails4/db/migrate
402
+ - fixtures/rails4/db/schema.rb
398
403
  - fixtures/rails4/db/seeds.rb
399
404
  - fixtures/rails4/lib/assets/.keep
400
405
  - fixtures/rails4/lib/tasks/.keep
@@ -431,7 +436,7 @@ files:
431
436
  - fixtures/rails5/app/controllers/concerns/.keep
432
437
  - fixtures/rails5/app/controllers/posts_controller.rb
433
438
  - fixtures/rails5/app/controllers/users_controller.rb
434
- - fixtures/rails5/app/helpers/application_helper.rb
439
+ - fixtures/rails5/app/helpers
435
440
  - fixtures/rails5/app/jobs/application_job.rb
436
441
  - fixtures/rails5/app/mailers/application_mailer.rb
437
442
  - fixtures/rails5/app/models
@@ -482,6 +487,8 @@ files:
482
487
  - fixtures/rails5/test/controllers/.keep
483
488
  - fixtures/rails5/test/fixtures/.keep
484
489
  - fixtures/rails5/test/fixtures/files/.keep
490
+ - fixtures/rails5/test/functional/posts_controller_test.rb
491
+ - fixtures/rails5/test/functional/users_controller_test.rb
485
492
  - fixtures/rails5/test/helpers/.keep
486
493
  - fixtures/rails5/test/integration/.keep
487
494
  - fixtures/rails5/test/mailers/.keep
@@ -490,6 +497,65 @@ files:
490
497
  - fixtures/rails5/tmp/.keep
491
498
  - fixtures/rails5/vendor/assets/javascripts/.keep
492
499
  - fixtures/rails5/vendor/assets/stylesheets/.keep
500
+ - fixtures/rails5_api/.gitignore
501
+ - fixtures/rails5_api/Gemfile
502
+ - fixtures/rails5_api/README.md
503
+ - fixtures/rails5_api/Rakefile
504
+ - fixtures/rails5_api/app/channels/application_cable/channel.rb
505
+ - fixtures/rails5_api/app/channels/application_cable/connection.rb
506
+ - fixtures/rails5_api/app/controllers/application_controller.rb
507
+ - fixtures/rails5_api/app/controllers/concerns/.keep
508
+ - fixtures/rails5_api/app/controllers/posts_controller.rb
509
+ - fixtures/rails5_api/app/controllers/users_controller.rb
510
+ - fixtures/rails5_api/app/helpers
511
+ - fixtures/rails5_api/app/jobs/application_job.rb
512
+ - fixtures/rails5_api/app/mailers/application_mailer.rb
513
+ - fixtures/rails5_api/app/models
514
+ - fixtures/rails5_api/app/views
515
+ - fixtures/rails5_api/bin/bundle
516
+ - fixtures/rails5_api/bin/rails
517
+ - fixtures/rails5_api/bin/rake
518
+ - fixtures/rails5_api/bin/setup
519
+ - fixtures/rails5_api/bin/spring
520
+ - fixtures/rails5_api/bin/update
521
+ - fixtures/rails5_api/config.ru
522
+ - fixtures/rails5_api/config/application.rb
523
+ - fixtures/rails5_api/config/boot.rb
524
+ - fixtures/rails5_api/config/cable.yml
525
+ - fixtures/rails5_api/config/database.yml
526
+ - fixtures/rails5_api/config/environment.rb
527
+ - fixtures/rails5_api/config/environments/development.rb
528
+ - fixtures/rails5_api/config/environments/production.rb
529
+ - fixtures/rails5_api/config/environments/test.rb
530
+ - fixtures/rails5_api/config/initializers/application_controller_renderer.rb
531
+ - fixtures/rails5_api/config/initializers/backtrace_silencers.rb
532
+ - fixtures/rails5_api/config/initializers/cors.rb
533
+ - fixtures/rails5_api/config/initializers/filter_parameter_logging.rb
534
+ - fixtures/rails5_api/config/initializers/inflections.rb
535
+ - fixtures/rails5_api/config/initializers/mime_types.rb
536
+ - fixtures/rails5_api/config/initializers/new_framework_defaults.rb
537
+ - fixtures/rails5_api/config/initializers/wrap_parameters.rb
538
+ - fixtures/rails5_api/config/locales/en.yml
539
+ - fixtures/rails5_api/config/puma.rb
540
+ - fixtures/rails5_api/config/routes.rb
541
+ - fixtures/rails5_api/config/secrets.yml
542
+ - fixtures/rails5_api/config/spring.rb
543
+ - fixtures/rails5_api/db/migrate
544
+ - fixtures/rails5_api/db/schema.rb
545
+ - fixtures/rails5_api/db/seeds.rb
546
+ - fixtures/rails5_api/lib/tasks/.keep
547
+ - fixtures/rails5_api/log/.keep
548
+ - fixtures/rails5_api/public/robots.txt
549
+ - fixtures/rails5_api/test/controllers/.keep
550
+ - fixtures/rails5_api/test/fixtures/.keep
551
+ - fixtures/rails5_api/test/fixtures/files/.keep
552
+ - fixtures/rails5_api/test/functional/posts_controller_test.rb
553
+ - fixtures/rails5_api/test/functional/users_controller_test.rb
554
+ - fixtures/rails5_api/test/integration/.keep
555
+ - fixtures/rails5_api/test/mailers/.keep
556
+ - fixtures/rails5_api/test/models/.keep
557
+ - fixtures/rails5_api/test/test_helper.rb
558
+ - fixtures/rails5_api/tmp/.keep
493
559
  - fixtures/sinatra_test/Gemfile
494
560
  - fixtures/sinatra_test/Rakefile
495
561
  - fixtures/sinatra_test/app.rb
@@ -530,6 +596,8 @@ files:
530
596
  - test/integration/rails3_2/users_controller_test.rb
531
597
  - test/integration/rails4/posts_controller_test.rb
532
598
  - test/integration/rails4/users_controller_test.rb
599
+ - test/integration/rails5/posts_controller_test.rb
600
+ - test/integration/rails5/users_controller_test.rb
533
601
  - test/integration/test_init.rb
534
602
  - test/integration/users_controller_test.rb
535
603
  - test/models/ormless.rb
@@ -563,7 +631,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
563
631
  version: '0'
564
632
  requirements: []
565
633
  rubyforge_project: rabl
566
- rubygems_version: 2.6.7
634
+ rubygems_version: 2.7.7
567
635
  signing_key:
568
636
  specification_version: 4
569
637
  summary: General ruby templating with json, bson, xml and msgpack support