nested 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: []