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.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/lib/nested.rb +155 -37
- data/nested.gemspec +2 -1
- data/test/nested_test.rb +138 -31
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21375312d61612409b9426ba1a4821957d9a1ce9
|
4
|
+
data.tar.gz: b1aa3ad4f18032944533d1658a5147c1c582d449
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f46a9615cb616a07499fb0ddb98d614cc90a1ccebdee00fd7fb80191ca7a8ba6b51e6b18e3c5519ebf0fa8b762f0a100cff44453d47ef2c60b01cdeae97e204a
|
7
|
+
data.tar.gz: 84fe7a451d482e183f00eccba73247bab1b8c376379ec35a84cf461b82d7b7f5e59f5f84d1fd947d187d8394d7553b110b0ca3d64077122c0ac509e3e30b263b
|
data/Gemfile
CHANGED
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
|
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
|
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,
|
161
|
+
@actions << {method: method, action: action}
|
140
162
|
|
141
163
|
resource = self
|
142
164
|
|
143
|
-
|
165
|
+
route = resource.route({}, action)
|
166
|
+
puts "sinatra router [#{method}] #{@sinatra.nested_config[:prefix]}#{route}"
|
144
167
|
|
145
|
-
@sinatra.send(method,
|
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
|
-
|
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
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
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
|
-
|
207
|
-
|
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
|
-
|
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
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
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
|
-
|
232
|
-
fun_name_arr << method
|
351
|
+
arr << action if action
|
233
352
|
|
234
|
-
|
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
|
250
|
-
if
|
251
|
-
@
|
367
|
+
def nested_config(config=nil)
|
368
|
+
if config
|
369
|
+
@nested_config = config
|
252
370
|
else
|
253
|
-
@
|
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.
|
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(:
|
317
|
+
@sinatra.expects(:nested_config).at_least_once.returns({})
|
279
318
|
|
280
319
|
singleton!
|
281
320
|
|
282
|
-
@sinatra.expects(:send).with(:get,
|
321
|
+
@sinatra.expects(:send).with(:get, "/project")
|
283
322
|
@r.create_sinatra_route(:get, nil) { }
|
284
|
-
assert_equal [{method: :get,
|
323
|
+
assert_equal [{method: :get, action: nil}], @r.actions
|
285
324
|
|
286
325
|
singleton!
|
287
326
|
|
288
|
-
@sinatra.expects(:send).with(:post,
|
327
|
+
@sinatra.expects(:send).with(:post, "/project")
|
289
328
|
@r.create_sinatra_route(:post, nil) { }
|
290
|
-
assert_equal [{method: :post,
|
329
|
+
assert_equal [{method: :post, action: nil}], @r.actions
|
291
330
|
|
292
331
|
singleton!
|
293
332
|
|
294
|
-
@sinatra.expects(:send).with(:post,
|
333
|
+
@sinatra.expects(:send).with(:post, "/project/action")
|
295
334
|
@r.create_sinatra_route(:post, :action) { }
|
296
|
-
assert_equal [{method: :post,
|
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 "
|
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 "
|
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 "
|
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
|
-
|
315
|
-
assert_equal "
|
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
|
-
|
321
|
-
assert_equal "myActionGet", Nested::JsUtil::generate_function_name(@r, :get, :my_action)
|
376
|
+
# with parent
|
322
377
|
|
323
378
|
singleton!
|
324
379
|
|
325
|
-
@
|
326
|
-
|
327
|
-
|
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 "
|
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
|
-
@
|
334
|
-
@sinatra.expects(:get)
|
335
|
-
@r2 = @r.singleton(:statistic) { get }
|
394
|
+
r2 = @r.singleton(:statistic) {}
|
336
395
|
|
337
|
-
assert_equal "
|
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
|
-
@
|
342
|
-
|
343
|
-
|
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 "
|
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.
|
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-
|
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: []
|