nested 0.0.2 → 0.0.3

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 (6) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -1
  3. data/lib/nested.rb +155 -37
  4. data/nested.gemspec +2 -1
  5. data/test/nested_test.rb +138 -31
  6. metadata +16 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4fce21e39de8c613e2eed1e9af4653bf0a702d0c
4
- data.tar.gz: c84216e905f7c07ea445f4f772bcaaa253b73f58
3
+ metadata.gz: 21375312d61612409b9426ba1a4821957d9a1ce9
4
+ data.tar.gz: b1aa3ad4f18032944533d1658a5147c1c582d449
5
5
  SHA512:
6
- metadata.gz: 4a261bdf267fa0930ef3471612656748cecbafb30f71e39d394791b90472593f40d501d048d51362a847cc0bf441e884f7b2949b938851e9eb87b5fb765990a3
7
- data.tar.gz: 596e8b07cbca6300e6d31d6b84d19b1edc619d4937c1fbbd644c26fb7793b097a74a10f69d72bf1c696a0d4d548ee0799863cdd83667946eccde0e84e341ae44
6
+ metadata.gz: f46a9615cb616a07499fb0ddb98d614cc90a1ccebdee00fd7fb80191ca7a8ba6b51e6b18e3c5519ebf0fa8b762f0a100cff44453d47ef2c60b01cdeae97e204a
7
+ data.tar.gz: 84fe7a451d482e183f00eccba73247bab1b8c376379ec35a84cf461b82d7b7f5e59f5f84d1fd947d187d8394d7553b110b0ca3d64077122c0ac509e3e30b263b
data/Gemfile CHANGED
@@ -3,4 +3,5 @@ ruby "2.0.0"
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gem "activesupport"
6
- gem "mocha"
6
+ gem "mocha"
7
+ gem "json"
data/lib/nested.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "json"
2
+
1
3
  module Nested
2
4
 
3
5
  class OneWithNameInManyError < StandardError
@@ -9,7 +11,14 @@ module Nested
9
11
  class SingletonAndCollectionError < StandardError
10
12
  end
11
13
 
14
+ class NameMissingError < StandardError
15
+ end
16
+
12
17
  class Resource
18
+ SERIALIZE = ->(obj, ctrl, resource) do
19
+ obj
20
+ end
21
+
13
22
  FETCH = ->(resource, ctrl) do
14
23
  raise "implement fetch for resource #{resource.name}" unless resource.parent
15
24
  raise "implement fetch for singleton #{resource.name}" if resource.singleton?
@@ -29,6 +38,7 @@ module Nested
29
38
 
30
39
  def initialize(sinatra, name, singleton, collection, parent)
31
40
  raise SingletonAndCollectionError.new if singleton && collection
41
+ raise NameMissingError.new if (singleton || collection) && !name
32
42
 
33
43
  @sinatra = sinatra
34
44
  @name = name
@@ -55,11 +65,19 @@ module Nested
55
65
  @__fetch = block
56
66
  end
57
67
 
68
+ def serialize(&block)
69
+ @__serialize = block
70
+ end
71
+
72
+ def serialize_object(obj, ctrl)
73
+ (@__serialize || SERIALIZE).call(obj, ctrl, self)
74
+ end
75
+
58
76
  def fetch_object(ctrl)
59
77
  (@__fetch || FETCH).call(self, ctrl)
60
78
  end
61
79
 
62
- def route(args={})
80
+ def route(args={}, action=nil)
63
81
  "".tap do |r|
64
82
  r << @parent.route(args) if @parent
65
83
 
@@ -80,15 +98,13 @@ module Nested
80
98
  r << ":#{key}"
81
99
  end
82
100
  end
101
+
102
+ r << "/#{action}" if action
83
103
  end
84
104
  end
85
105
 
86
106
  def get(action=nil, &block)
87
- create_sinatra_route :get, action, &(block || get_default)
88
- end
89
-
90
- def get_default
91
- ->(resource) { instance_variable_get("@#{resource.instance_variable_name}") }
107
+ create_sinatra_route :get, action, &(block||proc {})
92
108
  end
93
109
 
94
110
  def post(action=nil, &block)
@@ -124,7 +140,13 @@ module Nested
124
140
  end
125
141
 
126
142
  def instance_variable_name
127
- @name.to_s.send(collection? ? :pluralize : :singularize).to_sym
143
+ if @name
144
+ @name.to_s.send(collection? ? :pluralize : :singularize).to_sym
145
+ elsif member? && @parent
146
+ @parent.name.to_s.singularize.to_sym
147
+ else
148
+ nil
149
+ end
128
150
  end
129
151
 
130
152
  def parents
@@ -136,13 +158,14 @@ module Nested
136
158
  end
137
159
 
138
160
  def create_sinatra_route(method, action, &block)
139
- @actions << {method: method, actions: action}
161
+ @actions << {method: method, action: action}
140
162
 
141
163
  resource = self
142
164
 
143
- puts "sinatra router [#{method}] #{@sinatra.prefix}#{resource.route}"
165
+ route = resource.route({}, action)
166
+ puts "sinatra router [#{method}] #{@sinatra.nested_config[:prefix]}#{route}"
144
167
 
145
- @sinatra.send(method, resource.route) do
168
+ @sinatra.send(method, route) do
146
169
  content_type :json
147
170
 
148
171
  resource.self_and_parents.reverse.each do |res|
@@ -152,7 +175,37 @@ module Nested
152
175
  instance_variable_set("@#{res.instance_variable_name}", resource_obj)
153
176
  end
154
177
 
155
- case response = instance_exec(resource, &block)
178
+ if [:get, :delete].include?(method)
179
+ instance_exec(resource, &block)
180
+ else [:put, :post].include?(method)
181
+ request.body.rewind
182
+ data = HashWithIndifferentAccess.new JSON.parse(request.body.read)
183
+ instance_exec(data, resource, &block) if method == :put
184
+ instance_variable_set("@#{resource.instance_variable_name}", instance_exec(data, resource, &block)) if method == :post
185
+ end
186
+
187
+ response = instance_variable_get("@#{resource.instance_variable_name}")
188
+
189
+ if response.is_a?(ActiveModel::Errors) || response.respond_to?(:errors) && !response.errors.empty?
190
+ errors = response.is_a?(ActiveModel::Errors) ? response : response.errors
191
+
192
+ data = errors.to_hash.inject({}) do |memo, e|
193
+ memo[e[0]] = e[1][0]
194
+ memo
195
+ end
196
+
197
+ response = {data: data, ok: false}
198
+ else
199
+ data = if response.respond_to?(:to_a)
200
+ response.to_a.map{|e| resource.serialize_object(e, self)}
201
+ else
202
+ resource.serialize_object(response, self)
203
+ end
204
+
205
+ response = {data: data, ok: true}
206
+ end
207
+
208
+ case response
156
209
  when String then response
157
210
  else response.to_json
158
211
  end
@@ -169,6 +222,15 @@ module Nested
169
222
  def create_resource(name, singleton, collection, &block)
170
223
  angularize(super)
171
224
  end
225
+
226
+ def nested_angular_config(config=nil)
227
+ if config
228
+ @nested_angular_config = config
229
+ else
230
+ @nested_angular_config ||= {}
231
+ end
232
+ end
233
+
172
234
  end
173
235
 
174
236
  def angular_add_functions(js, resource)
@@ -184,17 +246,48 @@ module Nested
184
246
  memo[:"#{e}_id"] = "'+(typeof(values[#{idx}]) == 'number' ? values[#{idx}].toString() : values[#{idx}].id)+'"
185
247
  memo
186
248
  end
187
- route = "#{self.prefix}" + resource.route(route_args)
188
-
189
- js << " impl.#{fun_name} = function(#{args.join(',')}){"
190
-
191
- args = args.map{|a| "$q.when(#{a})"}
192
-
193
- js << " return $q.all([#{args.join(',')}]).then(function(values){" unless args.empty?
194
- js << (args.length > 1 ? " " : "") + " return $http({method: '#{method}', url: '#{route}'})"
195
- js << " });" unless args.empty?
196
-
197
- js << " }"
249
+ route = "#{self.nested_config[:prefix]}" + resource.route(route_args, action)
250
+ when_args = args.map{|a| "$q.when(#{a})"}
251
+
252
+ if [:get, :delete].include?(method)
253
+ js << " impl.#{fun_name} = function(#{args.join(',')}){"
254
+ js << " var deferred = $q.defer()"
255
+ js << " $q.all([#{when_args.join(',')}]).then(function(values){"
256
+ js << " $http({method: '#{method}', url: '#{route}'})"
257
+ js << " .success(function(responseData){"
258
+ js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
259
+ js << " })"
260
+ js << " .error(function(){ deferred.reject() })"
261
+ js << " });"
262
+ js << " return deferred.promise"
263
+ js << " }"
264
+ elsif method == :post
265
+ js << " impl.#{fun_name} = function(#{(args+['data']).join(',')}){"
266
+ js << " var deferred = $q.defer()"
267
+ js << " $q.all([#{when_args.join(',')}]).then(function(values){"
268
+ js << " $http({method: '#{method}', url: '#{route}', data: data})"
269
+ js << " .success(function(responseData){"
270
+ js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
271
+ js << " })"
272
+ js << " .error(function(){ deferred.reject() })"
273
+ js << " });"
274
+ js << " return deferred.promise"
275
+ js << " }"
276
+ elsif method == :put
277
+ args << "data" if args.empty?
278
+
279
+ js << " impl.#{fun_name} = function(#{args.join(',')}){"
280
+ js << " var deferred = $q.defer()"
281
+ js << " $q.all([#{when_args.join(',')}]).then(function(values){"
282
+ js << " $http({method: '#{method}', url: '#{route}', data: #{args.last}})"
283
+ js << " .success(function(responseData){"
284
+ js << " deferred[responseData.ok ? 'resolve' : 'reject'](responseData.data)"
285
+ js << " })"
286
+ js << " .error(function(){ deferred.reject() })"
287
+ js << " });"
288
+ js << " return deferred.promise"
289
+ js << " }"
290
+ end
198
291
  end
199
292
 
200
293
  resource.resources.each {|r| angular_add_functions(js, r) }
@@ -203,8 +296,10 @@ module Nested
203
296
  def angularize(resource)
204
297
  js = []
205
298
 
206
- js << "angular.module('Nested-#{resource.name.to_s.gsub(/_/, '-')}', ['ngResource'])"
207
- js << ".factory('#{resource.name.to_s.camelcase.capitalize}Service', function($http, $q){"
299
+ module_name = "nested_#{resource.name}".camelcase(:lower)
300
+
301
+ js << "angular.module('#{module_name}', ['ngResource'])"
302
+ js << ".factory('#{resource.name.to_s.camelcase.capitalize}#{nested_angular_config[:service_suffix]}', function($http, $q){"
208
303
 
209
304
  js << " var impl = {}"
210
305
  angular_add_functions(js, resource)
@@ -221,21 +316,44 @@ module Nested
221
316
 
222
317
  module JsUtil
223
318
  def self.generate_function_name(resource, method, action)
224
- arr = resource.self_and_parents
319
+ arr = []
320
+
321
+ arr << "update" if method == :put
322
+ arr << "create" if method == :post
323
+ arr << "destroy" if method == :delete
324
+
325
+ parents = resource.parents
326
+ parents.each_with_index do |p, idx|
327
+ if p.collection? && method != :post && ((parents[idx + 1] && parents[idx + 1].singleton?) || parents.last == p)
328
+ arr << p.name.to_s.send(:pluralize)
329
+ else
330
+ arr << p.name.to_s.send(:singularize)
331
+ end
332
+ end
225
333
 
226
- fun_name_arr = arr
227
- .reject{|r| r == arr.last }
228
- .map{|r| r.name || :one}
229
- .reverse
334
+ if resource.member?
335
+ if resource.parent
336
+ arr = arr.slice(0...-1)
337
+ arr << resource.parent.name.to_s.send(:singularize)
338
+ else
339
+ arr << resource.name.to_s.send(:singularize)
340
+ end
341
+ elsif resource.singleton?
342
+ arr << resource.name.to_s.send(:singularize)
343
+ elsif resource.collection?
344
+ if method == :post
345
+ arr << resource.name.to_s.send(:singularize)
346
+ else
347
+ arr << resource.name.to_s.send(:pluralize)
348
+ end
349
+ end
230
350
 
231
- fun_name_arr << action if action
232
- fun_name_arr << method
351
+ arr << action if action
233
352
 
234
- fun_name_arr.map(&:to_s).join("_").camelcase(:lower)
353
+ arr.map(&:to_s).join("_").camelcase(:lower)
235
354
  end
236
355
 
237
356
  def self.function_arguments(resource)
238
-
239
357
  resource
240
358
  .self_and_parents.select{|r| r.member?}
241
359
  .map{|r| r.name || r.parent.name}
@@ -246,11 +364,11 @@ module Nested
246
364
  end
247
365
 
248
366
  module Sinatra
249
- def prefix(prefix=nil)
250
- if prefix
251
- @prefix = prefix
367
+ def nested_config(config=nil)
368
+ if config
369
+ @nested_config = config
252
370
  else
253
- @prefix
371
+ @nested_config ||= {}
254
372
  end
255
373
  end
256
374
  def singleton(name, &block)
data/nested.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "nested"
3
- s.version = "0.0.2"
3
+ s.version = "0.0.3"
4
4
 
5
5
  s.authors = ["Jan Zimmek"]
6
6
  s.email = %q{jan.zimmek@web.de}
@@ -16,4 +16,5 @@ Gem::Specification.new do |s|
16
16
 
17
17
  s.add_runtime_dependency "activesupport"
18
18
  s.add_runtime_dependency "sinatra"
19
+ s.add_runtime_dependency "json"
19
20
  end
data/test/nested_test.rb CHANGED
@@ -21,6 +21,16 @@ class NestedTest < Test::Unit::TestCase
21
21
  @sinatra = mock
22
22
  end
23
23
 
24
+ def test_initialize_name
25
+ assert_raise Nested::NameMissingError do
26
+ Nested::Resource.new({}, nil, true, false, nil)
27
+ end
28
+
29
+ assert_raise Nested::NameMissingError do
30
+ Nested::Resource.new({}, nil, false, true, nil)
31
+ end
32
+ end
33
+
24
34
  def test_is_singleton
25
35
  singleton!
26
36
  assert_equal true, @r.singleton?
@@ -57,6 +67,15 @@ class NestedTest < Test::Unit::TestCase
57
67
  assert_equal(fetch, @r.instance_variable_get("@__fetch"))
58
68
  end
59
69
 
70
+ def test_serialize
71
+ singleton!
72
+
73
+ serialize = -> { }
74
+ @r.serialize &serialize
75
+
76
+ assert_equal(serialize, @r.instance_variable_get("@__serialize"))
77
+ end
78
+
60
79
  def test_fetch_object
61
80
  singleton!
62
81
 
@@ -70,6 +89,19 @@ class NestedTest < Test::Unit::TestCase
70
89
  @r.fetch_object({})
71
90
  end
72
91
 
92
+ def test_serialize_object
93
+ singleton!
94
+
95
+ Nested::Resource::SERIALIZE.expects(:call).with({name: :joe}, {}, @r)
96
+ @r.serialize_object({name: :joe}, {})
97
+
98
+ serialize = -> { }
99
+ @r.serialize &serialize
100
+
101
+ serialize.expects(:call).with({name: :joe}, {}, @r)
102
+ @r.serialize_object({name: :joe}, {})
103
+ end
104
+
73
105
  def test_route
74
106
  # no parent
75
107
  singleton!
@@ -82,6 +114,10 @@ class NestedTest < Test::Unit::TestCase
82
114
  assert_equal "/projects/:project_id", @r.route
83
115
  assert_equal "/projects/1", @r.route(project_id: 1)
84
116
 
117
+ member!
118
+ assert_equal "/projects/:project_id/myaction", @r.route({}, :myaction)
119
+ assert_equal "/projects/1/myaction", @r.route({project_id: 1}, :myaction)
120
+
85
121
  # --- singleton
86
122
 
87
123
  singleton!
@@ -124,7 +160,6 @@ class NestedTest < Test::Unit::TestCase
124
160
  @r2 = @r.one(:statistic) { }
125
161
  assert_equal "/projects/:project_id/statistics/:statistic_id", @r2.route
126
162
  assert_equal "/projects/1/statistics/2", @r2.route(project_id: 1, statistic_id: 2)
127
-
128
163
  end
129
164
 
130
165
 
@@ -250,6 +285,10 @@ class NestedTest < Test::Unit::TestCase
250
285
 
251
286
  collection!
252
287
  assert_equal :projects, @r.instance_variable_name
288
+
289
+ collection!
290
+ r2 = @r.one {}
291
+ assert_equal :project, r2.instance_variable_name
253
292
  end
254
293
 
255
294
  def test_parents
@@ -275,74 +314,142 @@ class NestedTest < Test::Unit::TestCase
275
314
  end
276
315
 
277
316
  def test_create_sinatra_route
278
- @sinatra.expects(:prefix).at_least_once.returns(nil)
317
+ @sinatra.expects(:nested_config).at_least_once.returns({})
279
318
 
280
319
  singleton!
281
320
 
282
- @sinatra.expects(:send).with(:get, @r.route)
321
+ @sinatra.expects(:send).with(:get, "/project")
283
322
  @r.create_sinatra_route(:get, nil) { }
284
- assert_equal [{method: :get, actions: nil}], @r.actions
323
+ assert_equal [{method: :get, action: nil}], @r.actions
285
324
 
286
325
  singleton!
287
326
 
288
- @sinatra.expects(:send).with(:post, @r.route)
327
+ @sinatra.expects(:send).with(:post, "/project")
289
328
  @r.create_sinatra_route(:post, nil) { }
290
- assert_equal [{method: :post, actions: nil}], @r.actions
329
+ assert_equal [{method: :post, action: nil}], @r.actions
291
330
 
292
331
  singleton!
293
332
 
294
- @sinatra.expects(:send).with(:post, @r.route)
333
+ @sinatra.expects(:send).with(:post, "/project/action")
295
334
  @r.create_sinatra_route(:post, :action) { }
296
- assert_equal [{method: :post, actions: :action}], @r.actions
335
+ assert_equal [{method: :post, action: :action}], @r.actions
297
336
  end
298
337
 
299
338
  # ----
300
339
 
301
340
 
302
-
303
-
304
341
  def test_function_name
305
342
  singleton!
306
- assert_equal "get", Nested::JsUtil::generate_function_name(@r, :get, nil)
343
+ assert_equal "project", Nested::JsUtil::generate_function_name(@r, :get, nil)
344
+ assert_equal "updateProject", Nested::JsUtil::generate_function_name(@r, :put, nil)
345
+ assert_equal "createProject", Nested::JsUtil::generate_function_name(@r, :post, nil)
346
+ assert_equal "destroyProject", Nested::JsUtil::generate_function_name(@r, :delete, nil)
347
+
348
+ assert_equal "projectAction", Nested::JsUtil::generate_function_name(@r, :get, :action)
349
+ assert_equal "updateProjectAction", Nested::JsUtil::generate_function_name(@r, :put, :action)
350
+ assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(@r, :post, :action)
351
+ assert_equal "destroyProjectAction", Nested::JsUtil::generate_function_name(@r, :delete, :action)
307
352
 
308
353
  collection!
309
- assert_equal "get", Nested::JsUtil::generate_function_name(@r, :get, nil)
354
+ assert_equal "projects", Nested::JsUtil::generate_function_name(@r, :get, nil)
355
+ assert_equal "updateProjects", Nested::JsUtil::generate_function_name(@r, :put, nil)
356
+ assert_equal "createProject", Nested::JsUtil::generate_function_name(@r, :post, nil)
357
+ assert_equal "destroyProjects", Nested::JsUtil::generate_function_name(@r, :delete, nil)
358
+
359
+ assert_equal "projectsAction", Nested::JsUtil::generate_function_name(@r, :get, :action)
360
+ assert_equal "updateProjectsAction", Nested::JsUtil::generate_function_name(@r, :put, :action)
361
+ assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(@r, :post, :action)
362
+ assert_equal "destroyProjectsAction", Nested::JsUtil::generate_function_name(@r, :delete, :action)
310
363
 
311
364
  member!
312
- assert_equal "get", Nested::JsUtil::generate_function_name(@r, :get, nil)
365
+ assert_equal "project", Nested::JsUtil::generate_function_name(@r, :get, nil)
366
+ assert_equal "updateProject", Nested::JsUtil::generate_function_name(@r, :put, nil)
367
+ assert_equal "createProject", Nested::JsUtil::generate_function_name(@r, :post, nil)
368
+ assert_equal "destroyProject", Nested::JsUtil::generate_function_name(@r, :delete, nil)
313
369
 
314
- singleton!
315
- assert_equal "myActionGet", Nested::JsUtil::generate_function_name(@r, :get, :my_action)
370
+ assert_equal "projectAction", Nested::JsUtil::generate_function_name(@r, :get, :action)
371
+ assert_equal "updateProjectAction", Nested::JsUtil::generate_function_name(@r, :put, :action)
372
+ assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(@r, :post, :action)
373
+ assert_equal "destroyProjectAction", Nested::JsUtil::generate_function_name(@r, :delete, :action)
316
374
 
317
- collection!
318
- assert_equal "myActionGet", Nested::JsUtil::generate_function_name(@r, :get, :my_action)
319
375
 
320
- member!
321
- assert_equal "myActionGet", Nested::JsUtil::generate_function_name(@r, :get, :my_action)
376
+ # with parent
322
377
 
323
378
  singleton!
324
379
 
325
- @sinatra.expects(:prefix).returns(nil)
326
- @sinatra.expects(:get)
327
- @r2 = @r.singleton(:statistic) { get }
380
+ r2 = @r.singleton(:statistic) {}
381
+
382
+ assert_equal "projectStatistic", Nested::JsUtil::generate_function_name(r2, :get, nil)
383
+ assert_equal "updateProjectStatistic", Nested::JsUtil::generate_function_name(r2, :put, nil)
384
+ assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
385
+ assert_equal "destroyProjectStatistic", Nested::JsUtil::generate_function_name(r2, :delete, nil)
328
386
 
329
- assert_equal "statisticGet", Nested::JsUtil::generate_function_name(@r2, :get, nil)
387
+ assert_equal "projectStatisticAction", Nested::JsUtil::generate_function_name(r2, :get, :action)
388
+ assert_equal "updateProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :put, :action)
389
+ assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :post, :action)
390
+ assert_equal "destroyProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :delete, :action)
330
391
 
331
392
  member!
332
393
 
333
- @sinatra.expects(:prefix).returns(nil)
334
- @sinatra.expects(:get)
335
- @r2 = @r.singleton(:statistic) { get }
394
+ r2 = @r.singleton(:statistic) {}
336
395
 
337
- assert_equal "statisticGet", Nested::JsUtil::generate_function_name(@r2, :get, nil)
396
+ assert_equal "projectStatistic", Nested::JsUtil::generate_function_name(r2, :get, nil)
397
+ assert_equal "updateProjectStatistic", Nested::JsUtil::generate_function_name(r2, :put, nil)
398
+ assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
399
+ assert_equal "destroyProjectStatistic", Nested::JsUtil::generate_function_name(r2, :delete, nil)
400
+
401
+ assert_equal "projectStatisticAction", Nested::JsUtil::generate_function_name(r2, :get, :action)
402
+ assert_equal "updateProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :put, :action)
403
+ assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :post, :action)
404
+ assert_equal "destroyProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :delete, :action)
338
405
 
339
406
  collection!
340
407
 
341
- @sinatra.expects(:prefix).returns(nil)
342
- @sinatra.expects(:get)
343
- @r2 = @r.singleton(:statistic) { get }
408
+ r2 = @r.singleton(:statistic) {}
409
+
410
+ assert_equal "projectsStatistic", Nested::JsUtil::generate_function_name(r2, :get, nil)
411
+ assert_equal "updateProjectsStatistic", Nested::JsUtil::generate_function_name(r2, :put, nil)
412
+ assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
413
+ assert_equal "destroyProjectsStatistic", Nested::JsUtil::generate_function_name(r2, :delete, nil)
414
+
415
+ assert_equal "projectsStatisticAction", Nested::JsUtil::generate_function_name(r2, :get, :action)
416
+ assert_equal "updateProjectsStatisticAction", Nested::JsUtil::generate_function_name(r2, :put, :action)
417
+ assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :post, :action)
418
+ assert_equal "destroyProjectsStatisticAction", Nested::JsUtil::generate_function_name(r2, :delete, :action)
419
+
420
+ singleton!
421
+
422
+ r2 = @r.many(:statistics) {}
423
+ r3 = r2.one {}
424
+
425
+ assert_equal "projectStatistic", Nested::JsUtil::generate_function_name(r3, :get, nil)
426
+ assert_equal "updateProjectStatistic", Nested::JsUtil::generate_function_name(r3, :put, nil)
427
+ assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r3, :post, nil)
428
+ assert_equal "destroyProjectStatistic", Nested::JsUtil::generate_function_name(r3, :delete, nil)
429
+
430
+ assert_equal "projectStatisticAction", Nested::JsUtil::generate_function_name(r3, :get, :action)
431
+ assert_equal "updateProjectStatisticAction", Nested::JsUtil::generate_function_name(r3, :put, :action)
432
+ assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(r3, :post, :action)
433
+ assert_equal "destroyProjectStatisticAction", Nested::JsUtil::generate_function_name(r3, :delete, :action)
434
+
435
+
436
+ singleton!
437
+ r2 = @r.many(:statistics) {}
438
+ assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
439
+
440
+
441
+ singleton!
442
+ r2 = @r.many(:statistics) {}
443
+ r3 = r2.singleton(:user) {}
444
+
445
+ assert_equal "projectStatisticsUser", Nested::JsUtil::generate_function_name(r3, :get, nil)
446
+
447
+ singleton!
448
+ r2 = @r.many(:statistics) {}
449
+ r3 = r2.one {}
450
+ r4 = r3.singleton(:user) {}
344
451
 
345
- assert_equal "statisticGet", Nested::JsUtil::generate_function_name(@r2, :get, nil)
452
+ assert_equal "projectStatisticUser", Nested::JsUtil::generate_function_name(r4, :get, nil)
346
453
  end
347
454
 
348
455
  # -----------------
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nested
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Zimmek
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-20 00:00:00.000000000 Z
11
+ date: 2013-10-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: json
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
41
55
  description: a nestable dsl to create a restful api
42
56
  email: jan.zimmek@web.de
43
57
  executables: []