nested 0.0.24 → 0.0.25
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nested.rb +155 -102
- data/nested.gemspec +1 -1
- data/test/nested_test.rb +211 -367
- data/test/serializer_field_test.rb +13 -0
- data/test/serializer_test.rb +31 -0
- data/test/test_helper.rb +9 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: da43c009c3ff14c2773df3a11e9ea8d5ae2f8de0
|
4
|
+
data.tar.gz: f63ecccb28294309d354362ca5bcff05937dd11a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dc57e5a73bea891b475bc0810cecd6b9e3f48f3710d173f6b30c358c5345bf19e5075c9e8424effaf46aa5196b23951b522e09e3c0e717f2c8b314ff3049a469
|
7
|
+
data.tar.gz: 3b753f26a8ac5d8d57133b707637e78ce1ce80751ae8132b3979be3037edb1030ab72415a789a74e4409f3ca9021fa158b5da150c6a55e0c5d3e83f14c6389d1
|
data/lib/nested.rb
CHANGED
@@ -2,9 +2,6 @@ require "json"
|
|
2
2
|
|
3
3
|
module Nested
|
4
4
|
|
5
|
-
class OneWithNameInManyError < StandardError
|
6
|
-
end
|
7
|
-
|
8
5
|
class ManyInManyError < StandardError
|
9
6
|
end
|
10
7
|
|
@@ -21,23 +18,60 @@ module Nested
|
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
24
|
-
class
|
25
|
-
|
26
|
-
|
27
|
-
|
21
|
+
class SerializerField
|
22
|
+
attr_accessor :name, :condition
|
23
|
+
def initialize(name, condition)
|
24
|
+
@name = name
|
25
|
+
@condition = condition
|
26
|
+
end
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
29
|
+
class Serializer
|
30
|
+
attr_accessor :includes, :excludes
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
32
|
+
def initialize(includes=[])
|
33
|
+
@includes = includes.clone
|
34
|
+
@excludes = []
|
35
|
+
end
|
36
|
+
|
37
|
+
def +(field)
|
38
|
+
field = field.is_a?(SerializerField) ? field : SerializerField.new(field, ->{ true })
|
39
|
+
|
40
|
+
@includes << field unless @includes.detect{|e| e.name == field.name}
|
41
|
+
@excludes = @excludes.reject{|e| e.name == field.name}
|
42
|
+
self
|
43
|
+
end
|
44
|
+
|
45
|
+
def -(field)
|
46
|
+
field = field.is_a?(SerializerField) ? field : SerializerField.new(field, ->{ true })
|
47
|
+
|
48
|
+
@excludes << field unless @excludes.detect{|e| e.name == field.name}
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def serialize
|
53
|
+
this = self
|
54
|
+
->(obj) do
|
55
|
+
excludes = this.excludes.select{|e| instance_exec(&e.condition)}
|
56
|
+
|
57
|
+
this.includes.reject{|e| excludes.detect{|e2| e2.name == e.name}}.inject({}) do |memo, field|
|
58
|
+
if instance_exec(&field.condition)
|
59
|
+
case field.name
|
60
|
+
when Symbol
|
61
|
+
memo[field.name] = obj.is_a?(Hash) ? obj[field.name] : obj.send(field.name)
|
62
|
+
when Hash
|
63
|
+
field_name, proc = field.name.to_a.first
|
64
|
+
memo[field_name] = instance_exec(obj, &proc)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
memo
|
68
|
+
end
|
37
69
|
end
|
38
70
|
end
|
71
|
+
end
|
39
72
|
|
40
|
-
|
73
|
+
class Resource
|
74
|
+
attr_reader :name, :parent, :actions, :resources, :serializer
|
41
75
|
|
42
76
|
def initialize(sinatra, name, singleton, collection, parent, init_block)
|
43
77
|
raise SingletonAndCollectionError.new if singleton && collection
|
@@ -50,18 +84,10 @@ module Nested
|
|
50
84
|
@parent = parent
|
51
85
|
@resources = []
|
52
86
|
@actions = []
|
87
|
+
@init_block = init_block
|
88
|
+
@run_blocks = []
|
53
89
|
|
54
|
-
|
55
|
-
fetched = instance_exec(&(init_block||FETCH))
|
56
|
-
|
57
|
-
# puts "set @#{@__resource.instance_variable_name} to #{fetched.inspect} for #{self}"
|
58
|
-
# self.instance_variable_set("@#{@__resource.instance_variable_name}", fetched)
|
59
|
-
@__resource.sinatra_set_instance_variable(self, @__resource.instance_variable_name, fetched)
|
60
|
-
end
|
61
|
-
|
62
|
-
if member?
|
63
|
-
serialize *@parent.instance_variable_get("@__serialize_args")
|
64
|
-
end
|
90
|
+
@serializer = Serializer.new(member? ? parent.serializer.includes : [])
|
65
91
|
end
|
66
92
|
|
67
93
|
def singleton?
|
@@ -76,6 +102,11 @@ module Nested
|
|
76
102
|
@collection == true
|
77
103
|
end
|
78
104
|
|
105
|
+
def run(&block)
|
106
|
+
@run_blocks << block
|
107
|
+
self
|
108
|
+
end
|
109
|
+
|
79
110
|
def type
|
80
111
|
if singleton?
|
81
112
|
:singleton
|
@@ -89,46 +120,34 @@ module Nested
|
|
89
120
|
end
|
90
121
|
|
91
122
|
def serialize(*args)
|
92
|
-
|
93
|
-
|
94
|
-
@__serialize = ->(obj) do
|
95
|
-
args.inject({}) do |memo, field|
|
96
|
-
case field
|
97
|
-
when Symbol
|
98
|
-
memo[field] = obj.is_a?(Hash) ? obj[field] : obj.send(field)
|
99
|
-
when Hash
|
100
|
-
field, proc = field.to_a.first
|
101
|
-
memo[field] = self.instance_exec(obj, &proc)
|
102
|
-
end
|
103
|
-
memo
|
104
|
-
end
|
105
|
-
end
|
123
|
+
args.each {|arg| serializer + arg }
|
124
|
+
serializer
|
106
125
|
end
|
107
126
|
|
108
|
-
def
|
109
|
-
@
|
127
|
+
def serialize_include_if(condition, *args)
|
128
|
+
args.each {|arg| @serializer + SerializerField.new(arg, condition) }
|
110
129
|
end
|
111
130
|
|
112
|
-
def
|
131
|
+
def serialize_exclude_if(condition, *args)
|
132
|
+
args.each {|arg| @serializer - SerializerField.new(arg, condition) }
|
133
|
+
end
|
134
|
+
|
135
|
+
def route_replace(route, args)
|
136
|
+
args.each do |k, v|
|
137
|
+
route = route.gsub(":#{k}", "#{v}")
|
138
|
+
end
|
139
|
+
route
|
140
|
+
end
|
141
|
+
|
142
|
+
def route(action=nil)
|
113
143
|
"".tap do |r|
|
114
|
-
r << @parent.route
|
144
|
+
r << @parent.route if @parent
|
115
145
|
|
116
|
-
if singleton?
|
117
|
-
r << "/" + @name.to_s.singularize
|
118
|
-
elsif collection?
|
119
|
-
r << "/" + @name.to_s.pluralize
|
120
|
-
else
|
121
|
-
if @name
|
122
|
-
r << "/" + @name.to_s.pluralize
|
123
|
-
end
|
124
|
-
r << "/"
|
125
|
-
key = ((@name || @parent.name).to_s.singularize + "_id").to_sym
|
126
146
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
end
|
147
|
+
if singleton? || collection?
|
148
|
+
r << "/#{@name}"
|
149
|
+
else
|
150
|
+
r << "/:#{@name}_id"
|
132
151
|
end
|
133
152
|
|
134
153
|
r << "/#{action}" if action
|
@@ -152,17 +171,45 @@ module Nested
|
|
152
171
|
end
|
153
172
|
|
154
173
|
def singleton(name, init_block=nil, &block)
|
155
|
-
child_resource(name, true, false, init_block, &block)
|
174
|
+
child_resource(name, true, false, init_block, &(block||Proc.new{ }))
|
156
175
|
end
|
157
176
|
|
158
177
|
def many(name, init_block=nil, &block)
|
159
178
|
raise ManyInManyError.new "do not nest many in many" if collection?
|
160
|
-
child_resource(name, false, true, init_block, &block)
|
179
|
+
child_resource(name, false, true, init_block, &(block||Proc.new{ }))
|
180
|
+
end
|
181
|
+
|
182
|
+
def default_init_block_singleton
|
183
|
+
if parent
|
184
|
+
Proc.new{ instance_variable_get("@#{@__resource.parent.instance_variable_name}").send(@__resource.name) }
|
185
|
+
else
|
186
|
+
Proc.new { nil }
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def default_init_block_many
|
191
|
+
if parent
|
192
|
+
Proc.new{ instance_variable_get("@#{@__resource.parent.instance_variable_name}").send(@__resource.name) }
|
193
|
+
else
|
194
|
+
Proc.new { nil }
|
195
|
+
end
|
161
196
|
end
|
162
197
|
|
163
|
-
def
|
164
|
-
|
165
|
-
|
198
|
+
def default_init_block_one
|
199
|
+
if parent
|
200
|
+
Proc.new do
|
201
|
+
instance_variable_get("@#{@__resource.parent.instance_variable_name}")
|
202
|
+
.where(id: params[:"#{@__resource.parent.name.to_s.singularize.to_sym}_id"])
|
203
|
+
.first
|
204
|
+
end
|
205
|
+
else
|
206
|
+
Proc.new { nil }
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def one(&block)
|
211
|
+
raise "calling one() is only allowed within many() resource" unless collection?
|
212
|
+
child_resource(self.name.to_s.singularize.to_sym, false, false, nil, &(block||Proc.new{ }))
|
166
213
|
end
|
167
214
|
|
168
215
|
def child_resource(name, singleton, collection, init_block, &block)
|
@@ -172,13 +219,7 @@ module Nested
|
|
172
219
|
end
|
173
220
|
|
174
221
|
def instance_variable_name
|
175
|
-
|
176
|
-
@name.to_s.send(collection? ? :pluralize : :singularize).to_sym
|
177
|
-
elsif member? && @parent
|
178
|
-
@parent.name.to_s.singularize.to_sym
|
179
|
-
else
|
180
|
-
nil
|
181
|
-
end
|
222
|
+
member? ? parent.name.to_s.singularize.to_sym : @name
|
182
223
|
end
|
183
224
|
|
184
225
|
def parents
|
@@ -198,7 +239,22 @@ module Nested
|
|
198
239
|
|
199
240
|
def sinatra_init(sinatra)
|
200
241
|
sinatra.instance_variable_set("@__resource", self)
|
201
|
-
|
242
|
+
|
243
|
+
init_block = if @init_block
|
244
|
+
@init_block
|
245
|
+
else
|
246
|
+
if singleton?
|
247
|
+
default_init_block_singleton
|
248
|
+
elsif collection?
|
249
|
+
default_init_block_many
|
250
|
+
else
|
251
|
+
default_init_block_one
|
252
|
+
end
|
253
|
+
end
|
254
|
+
|
255
|
+
sinatra.instance_variable_set("@#{self.instance_variable_name}", sinatra.instance_exec(&init_block))
|
256
|
+
|
257
|
+
@run_blocks.each{|e| sinatra.instance_exec(&e)}
|
202
258
|
end
|
203
259
|
|
204
260
|
def sinatra_exec_get_block(sinatra, &block)
|
@@ -267,9 +323,9 @@ module Nested
|
|
267
323
|
|
268
324
|
def sinatra_response_create_data(sinatra, response, method)
|
269
325
|
data = if response && (collection? || response.is_a?(Array)) && method != :post
|
270
|
-
response.to_a.map{|e| sinatra.instance_exec(e, &@
|
326
|
+
response.to_a.map{|e| sinatra.instance_exec(e, &@serializer.serialize) }
|
271
327
|
else
|
272
|
-
sinatra.instance_exec(response, &@
|
328
|
+
sinatra.instance_exec(response, &@serializer.serialize)
|
273
329
|
end
|
274
330
|
|
275
331
|
{data: data, ok: true}
|
@@ -292,8 +348,7 @@ module Nested
|
|
292
348
|
|
293
349
|
resource = self
|
294
350
|
|
295
|
-
route = resource.route(
|
296
|
-
puts "sinatra router [#{method}] #{@sinatra.nested_config[:prefix]}#{route}"
|
351
|
+
route = resource.route(action)
|
297
352
|
|
298
353
|
@sinatra.send(method, route) do
|
299
354
|
def self.error(message)
|
@@ -319,10 +374,19 @@ module Nested
|
|
319
374
|
context_arr << "route: #{route}"
|
320
375
|
context_arr << "method: #{method}"
|
321
376
|
context_arr << "action: #{action}"
|
322
|
-
context_arr << "resource: #{resource.name} (#{resource.type})"
|
323
377
|
|
378
|
+
context_arr << "resource: #{resource.name} (#{resource.type})"
|
324
379
|
resource_object = instance_variable_get("@#{resource.instance_variable_name}")
|
325
380
|
context_arr << "@#{resource.instance_variable_name}: #{resource_object.inspect}"
|
381
|
+
|
382
|
+
parent = resource.try(:parent)
|
383
|
+
|
384
|
+
if parent
|
385
|
+
context_arr << "parent: #{parent.try(:name)} (#{parent.try(:type)})"
|
386
|
+
parent_object = instance_variable_get("@#{parent.try(:instance_variable_name)}")
|
387
|
+
context_arr << "@#{parent.try(:instance_variable_name)}: #{parent_object.inspect}"
|
388
|
+
end
|
389
|
+
|
326
390
|
puts context_arr.join("\n")
|
327
391
|
raise e
|
328
392
|
end
|
@@ -365,7 +429,7 @@ module Nested
|
|
365
429
|
memo[:"#{e}_id"] = "'+(typeof(values[#{idx}]) == 'number' ? values[#{idx}].toString() : (values[#{idx}].id || values[#{idx}]))+'"
|
366
430
|
memo
|
367
431
|
end
|
368
|
-
route = "#{self.nested_config[:prefix]}" + resource.route(
|
432
|
+
route = "#{self.nested_config[:prefix]}" + resource.route_replace(resource.route(action), route_args)
|
369
433
|
when_args = args.map{|a| "$q.when(#{a})"}
|
370
434
|
|
371
435
|
js << " impl.#{fun_name}Url = function(#{args.join(',')}){"
|
@@ -457,29 +521,21 @@ module Nested
|
|
457
521
|
arr << "create" if method == :post
|
458
522
|
arr << "destroy" if method == :delete
|
459
523
|
|
460
|
-
|
461
|
-
parents.each_with_index do |p, idx|
|
462
|
-
if p.collection? && method != :post && ((parents[idx + 1] && parents[idx + 1].singleton?) || parents.last == p)
|
463
|
-
arr << p.name.to_s.send(:pluralize)
|
464
|
-
else
|
465
|
-
arr << p.name.to_s.send(:singularize)
|
466
|
-
end
|
467
|
-
end
|
524
|
+
all = resource.self_and_parents.reverse
|
468
525
|
|
469
|
-
|
470
|
-
if
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
arr << resource.name.to_s.send(:singularize)
|
526
|
+
all.each do |e|
|
527
|
+
if e.collection?
|
528
|
+
if e == all.last
|
529
|
+
if method == :post
|
530
|
+
arr << e.name.to_s.singularize.to_sym
|
531
|
+
else
|
532
|
+
arr << e.name
|
533
|
+
end
|
534
|
+
else
|
535
|
+
arr << e.name unless all[all.index(e) + 1].member?
|
536
|
+
end
|
481
537
|
else
|
482
|
-
arr <<
|
538
|
+
arr << e.name
|
483
539
|
end
|
484
540
|
end
|
485
541
|
|
@@ -512,9 +568,6 @@ module Nested
|
|
512
568
|
def many(name, init_block=nil, &block)
|
513
569
|
create_resource(name, false, true, init_block, &block)
|
514
570
|
end
|
515
|
-
def one(name, init_block=nil, &block)
|
516
|
-
create_resource(name, false, false, init_block, &block)
|
517
|
-
end
|
518
571
|
def create_resource(name, singleton, collection, init_block, &block)
|
519
572
|
::Nested::Resource.new(self, name, singleton, collection, nil, init_block).tap{|r| r.instance_eval(&block) }
|
520
573
|
end
|
data/nested.gemspec
CHANGED
data/test/nested_test.rb
CHANGED
@@ -4,20 +4,11 @@ require "active_support/all"
|
|
4
4
|
require "active_model/errors"
|
5
5
|
require "active_record"
|
6
6
|
require "nested"
|
7
|
+
require "./test/test_helper"
|
7
8
|
|
8
9
|
class NestedTest < Test::Unit::TestCase
|
9
10
|
|
10
|
-
|
11
|
-
@r = Nested::Resource.new(@sinatra, :project, true, false, nil, nil)
|
12
|
-
end
|
13
|
-
|
14
|
-
def collection!
|
15
|
-
@r = Nested::Resource.new(@sinatra, :project, false, true, nil, nil)
|
16
|
-
end
|
17
|
-
|
18
|
-
def member!
|
19
|
-
@r = Nested::Resource.new(@sinatra, :project, false, false, nil, nil)
|
20
|
-
end
|
11
|
+
include TestHelper
|
21
12
|
|
22
13
|
def setup
|
23
14
|
@sinatra = mock
|
@@ -34,481 +25,334 @@ class NestedTest < Test::Unit::TestCase
|
|
34
25
|
end
|
35
26
|
|
36
27
|
def test_is_singleton
|
37
|
-
singleton
|
38
|
-
assert_equal
|
39
|
-
|
40
|
-
collection!
|
41
|
-
assert_equal false, @r.singleton?
|
28
|
+
assert_equal true, singleton(:project).singleton?
|
29
|
+
assert_equal false, many(:projects).singleton?
|
30
|
+
assert_equal false, many(:projects).one.singleton?
|
42
31
|
end
|
43
32
|
|
44
33
|
def test_is_collection
|
45
|
-
collection
|
46
|
-
assert_equal
|
47
|
-
|
48
|
-
singleton!
|
49
|
-
assert_equal false, @r.collection?
|
34
|
+
assert_equal true, many(:projects).collection?
|
35
|
+
assert_equal false, many(:projects).one.collection?
|
36
|
+
assert_equal false, singleton(:project).collection?
|
50
37
|
end
|
51
38
|
|
52
39
|
def test_is_member
|
53
|
-
member
|
54
|
-
assert_equal
|
55
|
-
|
56
|
-
singleton!
|
57
|
-
assert_equal false, @r.member?
|
58
|
-
|
59
|
-
collection!
|
60
|
-
assert_equal false, @r.member?
|
40
|
+
assert_equal true, many(:projects).one.member?
|
41
|
+
assert_equal false, many(:projects).member?
|
42
|
+
assert_equal false, singleton(:project).member?
|
61
43
|
end
|
62
44
|
|
63
|
-
def test_init
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
@r.init &init
|
68
|
-
|
69
|
-
assert_equal init, @r.instance_variable_get("@__init")
|
70
|
-
end
|
45
|
+
# def test_init
|
46
|
+
# init = ->{ }
|
47
|
+
# assert_equal init, singleton(:project).init(&init).instance_variable_get("@__init")
|
48
|
+
# end
|
71
49
|
|
72
50
|
def test_serialize
|
73
|
-
|
51
|
+
serializer = mock()
|
74
52
|
|
75
|
-
|
53
|
+
r = singleton(:project)
|
54
|
+
r.stubs(:serializer).returns(serializer)
|
76
55
|
|
77
|
-
assert_equal
|
78
|
-
end
|
56
|
+
assert_equal serializer, r.serialize
|
79
57
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
assert_equal "/project", @r.route
|
84
|
-
|
85
|
-
collection!
|
86
|
-
assert_equal "/projects", @r.route
|
87
|
-
|
88
|
-
member!
|
89
|
-
assert_equal "/projects/:project_id", @r.route
|
90
|
-
assert_equal "/projects/1", @r.route(project_id: 1)
|
91
|
-
|
92
|
-
member!
|
93
|
-
assert_equal "/projects/:project_id/myaction", @r.route({}, :myaction)
|
94
|
-
assert_equal "/projects/1/myaction", @r.route({project_id: 1}, :myaction)
|
58
|
+
serializer.expects(:+).with(:name)
|
59
|
+
r.serialize :name
|
60
|
+
end
|
95
61
|
|
96
|
-
|
62
|
+
def test_route_replace
|
63
|
+
resource = many(:projects).one
|
97
64
|
|
98
|
-
|
99
|
-
|
100
|
-
assert_equal "/project/statistic", @r2.route
|
65
|
+
assert_equal "/projects/1", resource.route_replace(resource.route, project_id: 1)
|
66
|
+
assert_equal "/projects/1/myaction", resource.route_replace(resource.route(:myaction), project_id: 1)
|
101
67
|
|
102
|
-
singleton
|
103
|
-
|
104
|
-
assert_equal "/project/statistics", @r2.route
|
68
|
+
resource = singleton(:project).many(:statistics).one
|
69
|
+
assert_equal "/project/statistics/1", resource.route_replace(resource.route, statistic_id: 1)
|
105
70
|
|
106
|
-
singleton
|
107
|
-
|
108
|
-
assert_equal "/project/statistics/:statistic_id", @r2.route
|
109
|
-
assert_equal "/project/statistics/1", @r2.route(statistic_id: 1)
|
71
|
+
resource = singleton(:project).many(:statistics).one.singleton(:today)
|
72
|
+
assert_equal "/project/statistics/1/today", resource.route_replace(resource.route, statistic_id: 1)
|
110
73
|
|
111
|
-
|
74
|
+
resource = singleton(:project).many(:statistics).one.many(:entries)
|
75
|
+
assert_equal "/project/statistics/1/entries", resource.route_replace(resource.route, statistic_id: 1)
|
112
76
|
|
113
|
-
|
114
|
-
|
115
|
-
|
77
|
+
resource = singleton(:project).many(:statistics).one.many(:entries).one
|
78
|
+
assert_equal "/project/statistics/1/entries/2", resource.route_replace(resource.route, statistic_id: 1, entry_id: 2)
|
79
|
+
end
|
116
80
|
|
117
|
-
|
118
|
-
|
119
|
-
assert_equal "/projects
|
120
|
-
assert_equal "/projects/1", @r2.route(project_id: 1)
|
81
|
+
def test_route
|
82
|
+
assert_equal "/project", singleton(:project).route
|
83
|
+
assert_equal "/projects", many(:projects).route
|
121
84
|
|
122
|
-
|
85
|
+
assert_equal "/projects/:project_id", many(:projects).one.route
|
86
|
+
assert_equal "/projects/:project_id/myaction", many(:projects).one.route(:myaction)
|
123
87
|
|
124
|
-
|
125
|
-
|
126
|
-
assert_equal "/projects/:project_id/statistic", @r2.route
|
127
|
-
assert_equal "/projects/1/statistic", @r2.route(project_id: 1)
|
88
|
+
assert_equal "/project/statistic", singleton(:project).singleton(:statistic).route
|
89
|
+
assert_equal "/project/statistics", singleton(:project).many(:statistics).route
|
128
90
|
|
129
|
-
|
130
|
-
|
131
|
-
assert_equal "/projects/:project_id/statistics", @r2.route
|
132
|
-
assert_equal "/projects/1/statistics", @r2.route(project_id: 1)
|
91
|
+
assert_equal "/project/statistics/:statistic_id", singleton(:project).many(:statistics).one.route
|
92
|
+
assert_equal "/project/statistics/:statistic_id/today", singleton(:project).many(:statistics).one.singleton(:today).route
|
133
93
|
|
134
|
-
|
135
|
-
|
136
|
-
assert_equal "/projects/:project_id/statistics/:statistic_id", @r2.route
|
137
|
-
assert_equal "/projects/1/statistics/2", @r2.route(project_id: 1, statistic_id: 2)
|
94
|
+
assert_equal "/project/statistics/:statistic_id/entries", singleton(:project).many(:statistics).one.many(:entries).route
|
95
|
+
assert_equal "/project/statistics/:statistic_id/entries/:entry_id", singleton(:project).many(:statistics).one.many(:entries).one.route
|
138
96
|
end
|
139
97
|
|
140
98
|
|
141
99
|
def test_singleton
|
142
|
-
singleton
|
143
|
-
|
144
|
-
|
100
|
+
resource = singleton(:project)
|
101
|
+
resource.expects(:child_resource).with(:statistic, true, false, nil)
|
102
|
+
resource.singleton(:statistic)
|
145
103
|
|
146
|
-
|
147
|
-
|
148
|
-
|
104
|
+
resource = many(:projects)
|
105
|
+
resource.expects(:child_resource).with(:statistic, true, false, nil)
|
106
|
+
resource.singleton(:statistic)
|
149
107
|
|
150
|
-
|
151
|
-
|
152
|
-
|
108
|
+
resource = many(:projects).one
|
109
|
+
resource.expects(:child_resource).with(:statistic, true, false, nil)
|
110
|
+
resource.singleton(:statistic)
|
153
111
|
end
|
154
112
|
|
155
113
|
def test_one
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
member!
|
161
|
-
@r.expects(:child_resource).with(:statistic, false, false, nil)
|
162
|
-
@r.one(:statistic)
|
163
|
-
|
164
|
-
collection!
|
165
|
-
@r.expects(:child_resource).with(nil, false, false, nil)
|
166
|
-
@r.one
|
167
|
-
|
168
|
-
collection!
|
169
|
-
assert_raise ::Nested::OneWithNameInManyError do
|
170
|
-
@r.one :statistic
|
171
|
-
end
|
114
|
+
resource = many(:projects)
|
115
|
+
resource.expects(:child_resource).with(:project, false, false, nil)
|
116
|
+
resource.one
|
172
117
|
end
|
173
118
|
|
174
119
|
def test_many
|
175
|
-
singleton
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
member!
|
180
|
-
@r.expects(:child_resource).with(:statistics, false, true, nil)
|
181
|
-
@r.many(:statistics)
|
120
|
+
resource = singleton(:project)
|
121
|
+
resource.expects(:child_resource).with(:statistics, false, true, nil)
|
122
|
+
resource.many(:statistics)
|
182
123
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
end
|
124
|
+
resource = singleton(:project).many(:statistics).one
|
125
|
+
resource.expects(:child_resource).with(:entries, false, true, nil)
|
126
|
+
resource.many(:entries)
|
187
127
|
end
|
188
128
|
|
189
129
|
def test_get
|
190
|
-
singleton
|
130
|
+
resource = singleton(:project)
|
191
131
|
|
192
|
-
|
193
|
-
|
132
|
+
resource.expects(:create_sinatra_route).with(:get, nil)
|
133
|
+
resource.get
|
194
134
|
|
195
|
-
|
196
|
-
|
135
|
+
resource.expects(:create_sinatra_route).with(:get, :action)
|
136
|
+
resource.get :action
|
197
137
|
end
|
198
138
|
|
199
139
|
def test_post
|
200
|
-
singleton
|
140
|
+
resource = singleton(:project)
|
201
141
|
|
202
|
-
|
203
|
-
|
142
|
+
resource.expects(:create_sinatra_route).with(:post, nil)
|
143
|
+
resource.post
|
204
144
|
|
205
|
-
|
206
|
-
|
145
|
+
resource.expects(:create_sinatra_route).with(:post, :action)
|
146
|
+
resource.post :action
|
207
147
|
end
|
208
148
|
|
209
149
|
def test_put
|
210
|
-
singleton
|
150
|
+
resource = singleton(:project)
|
211
151
|
|
212
|
-
|
213
|
-
|
152
|
+
resource.expects(:create_sinatra_route).with(:put, nil)
|
153
|
+
resource.put
|
214
154
|
|
215
|
-
|
216
|
-
|
155
|
+
resource.expects(:create_sinatra_route).with(:put, :action)
|
156
|
+
resource.put :action
|
217
157
|
end
|
218
158
|
|
219
159
|
def test_delete
|
220
|
-
singleton
|
160
|
+
resource = singleton(:project)
|
221
161
|
|
222
|
-
|
223
|
-
|
162
|
+
resource.expects(:create_sinatra_route).with(:delete, nil)
|
163
|
+
resource.delete
|
224
164
|
|
225
|
-
|
226
|
-
|
165
|
+
resource.expects(:create_sinatra_route).with(:delete, :action)
|
166
|
+
resource.delete :action
|
227
167
|
end
|
228
168
|
|
229
169
|
def test_child_resource
|
230
|
-
singleton
|
231
|
-
|
232
|
-
assert_equal
|
233
|
-
assert_equal false,
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
assert_equal
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
singleton
|
243
|
-
|
244
|
-
assert_equal :statistic, r.name
|
245
|
-
assert_equal false, r.instance_variable_get("@singleton")
|
246
|
-
assert_equal true, r.instance_variable_get("@collection")
|
247
|
-
|
248
|
-
singleton!
|
249
|
-
assert_raise Nested::SingletonAndCollectionError do
|
250
|
-
@r.child_resource(:statistic, true, true, nil) { }
|
251
|
-
end
|
170
|
+
resource = singleton(:project).child_resource(:statistic, false, false, nil) { }
|
171
|
+
assert_equal :statistic, resource.name
|
172
|
+
assert_equal false, resource.instance_variable_get("@singleton")
|
173
|
+
assert_equal false, resource.instance_variable_get("@collection")
|
174
|
+
|
175
|
+
resource = singleton(:project).child_resource(:statistic, true, false, nil) { }
|
176
|
+
assert_equal :statistic, resource.name
|
177
|
+
assert_equal true, resource.instance_variable_get("@singleton")
|
178
|
+
assert_equal false, resource.instance_variable_get("@collection")
|
179
|
+
|
180
|
+
resource = singleton(:project).child_resource(:statistic, false, true, nil) { }
|
181
|
+
assert_equal :statistic, resource.name
|
182
|
+
assert_equal false, resource.instance_variable_get("@singleton")
|
183
|
+
assert_equal true, resource.instance_variable_get("@collection")
|
252
184
|
end
|
253
185
|
|
254
186
|
def test_instance_variable_name
|
255
|
-
singleton
|
256
|
-
assert_equal :
|
257
|
-
|
258
|
-
member!
|
259
|
-
assert_equal :project, @r.instance_variable_name
|
260
|
-
|
261
|
-
collection!
|
262
|
-
assert_equal :projects, @r.instance_variable_name
|
263
|
-
|
264
|
-
collection!
|
265
|
-
r2 = @r.one {}
|
266
|
-
assert_equal :project, r2.instance_variable_name
|
187
|
+
assert_equal :project, singleton(:project).instance_variable_name
|
188
|
+
assert_equal :projects, many(:projects).instance_variable_name
|
189
|
+
assert_equal :project, many(:projects).one.instance_variable_name
|
267
190
|
end
|
268
191
|
|
269
192
|
def test_parents
|
270
|
-
singleton
|
271
|
-
|
193
|
+
r1 = singleton(:project)
|
194
|
+
r2 = r1.many(:todos)
|
195
|
+
r3 = r2.one
|
272
196
|
|
273
|
-
|
274
|
-
assert_equal [
|
275
|
-
|
276
|
-
r3 = r2.singleton(:statistic) { }
|
277
|
-
assert_equal [@r, r2], r3.parents
|
197
|
+
assert_equal [], r1.parents
|
198
|
+
assert_equal [r1], r2.parents
|
199
|
+
assert_equal [r1, r2], r3.parents
|
278
200
|
end
|
279
201
|
|
280
202
|
def test_self_and_parents
|
281
|
-
singleton
|
282
|
-
|
283
|
-
|
284
|
-
r2 = @r.singleton(:statistic) { }
|
285
|
-
assert_equal [r2, @r], r2.self_and_parents
|
203
|
+
r1 = singleton(:project)
|
204
|
+
r2 = r1.many(:todos)
|
205
|
+
r3 = r2.one
|
286
206
|
|
287
|
-
|
288
|
-
assert_equal [
|
207
|
+
assert_equal [r1], r1.self_and_parents
|
208
|
+
assert_equal [r2, r1], r2.self_and_parents
|
209
|
+
assert_equal [r3, r2, r1], r3.self_and_parents
|
289
210
|
end
|
290
211
|
|
291
212
|
def test_create_sinatra_route
|
292
|
-
|
293
|
-
|
294
|
-
singleton!
|
213
|
+
# get
|
295
214
|
|
296
215
|
@sinatra.expects(:send).with(:get, "/project")
|
297
|
-
|
298
|
-
@r.create_sinatra_route(:get, nil, &block)
|
299
|
-
assert_equal [{method: :get, action: nil, block: block}], @r.actions
|
216
|
+
singleton(:project).get
|
300
217
|
|
301
|
-
|
218
|
+
@sinatra.expects(:send).with(:get, "/project/action")
|
219
|
+
singleton(:project).get(:action)
|
302
220
|
|
303
|
-
|
304
|
-
@r.create_sinatra_route(:post, nil, &block)
|
305
|
-
assert_equal [{method: :post, action: nil, block: block}], @r.actions
|
221
|
+
# post
|
306
222
|
|
307
|
-
|
223
|
+
@sinatra.expects(:send).with(:post, "/project")
|
224
|
+
singleton(:project).post
|
308
225
|
|
309
226
|
@sinatra.expects(:send).with(:post, "/project/action")
|
310
|
-
|
311
|
-
assert_equal [{method: :post, action: :action, block: block}], @r.actions
|
312
|
-
end
|
227
|
+
singleton(:project).post(:action)
|
313
228
|
|
314
|
-
|
315
|
-
singleton!
|
229
|
+
# put
|
316
230
|
|
317
|
-
@
|
231
|
+
@sinatra.expects(:send).with(:put, "/project")
|
232
|
+
singleton(:project).put
|
318
233
|
|
319
|
-
|
320
|
-
|
321
|
-
assert_equal({name: "joe"}, @r.instance_variable_get("@__serialize").call(OpenStruct.new({name: "joe"})))
|
234
|
+
@sinatra.expects(:send).with(:put, "/project/action")
|
235
|
+
singleton(:project).put(:action)
|
322
236
|
|
323
|
-
|
324
|
-
assert_equal({name: "joe", virtual: "joe!!"}, @r.instance_variable_get("@__serialize").call({name: "joe"}))
|
325
|
-
end
|
326
|
-
|
327
|
-
# ----
|
237
|
+
# delete
|
328
238
|
|
329
|
-
|
330
|
-
singleton
|
331
|
-
assert_equal :error, @r.sinatra_response_type(ActiveModel::Errors.new({}))
|
332
|
-
|
333
|
-
obj = OpenStruct.new(errors: ActiveModel::Errors.new({}))
|
334
|
-
assert_equal :data, @r.sinatra_response_type(obj)
|
239
|
+
@sinatra.expects(:send).with(:delete, "/project")
|
240
|
+
singleton(:project).delete
|
335
241
|
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
assert_equal :data, @r.sinatra_response_type(nil)
|
340
|
-
assert_equal :data, @r.sinatra_response_type(123)
|
242
|
+
@sinatra.expects(:send).with(:delete, "/project/action")
|
243
|
+
singleton(:project).delete(:action)
|
341
244
|
end
|
342
245
|
|
343
246
|
|
344
|
-
#
|
345
|
-
|
346
|
-
|
347
|
-
def test_function_name
|
348
|
-
singleton!
|
349
|
-
assert_equal "project", Nested::JsUtil::generate_function_name(@r, :get, nil)
|
350
|
-
assert_equal "updateProject", Nested::JsUtil::generate_function_name(@r, :put, nil)
|
351
|
-
assert_equal "createProject", Nested::JsUtil::generate_function_name(@r, :post, nil)
|
352
|
-
assert_equal "destroyProject", Nested::JsUtil::generate_function_name(@r, :delete, nil)
|
353
|
-
|
354
|
-
assert_equal "projectAction", Nested::JsUtil::generate_function_name(@r, :get, :action)
|
355
|
-
assert_equal "updateProjectAction", Nested::JsUtil::generate_function_name(@r, :put, :action)
|
356
|
-
assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(@r, :post, :action)
|
357
|
-
assert_equal "destroyProjectAction", Nested::JsUtil::generate_function_name(@r, :delete, :action)
|
358
|
-
|
359
|
-
collection!
|
360
|
-
assert_equal "projects", Nested::JsUtil::generate_function_name(@r, :get, nil)
|
361
|
-
assert_equal "updateProjects", Nested::JsUtil::generate_function_name(@r, :put, nil)
|
362
|
-
assert_equal "createProject", Nested::JsUtil::generate_function_name(@r, :post, nil)
|
363
|
-
assert_equal "destroyProjects", Nested::JsUtil::generate_function_name(@r, :delete, nil)
|
364
|
-
|
365
|
-
assert_equal "projectsAction", Nested::JsUtil::generate_function_name(@r, :get, :action)
|
366
|
-
assert_equal "updateProjectsAction", Nested::JsUtil::generate_function_name(@r, :put, :action)
|
367
|
-
assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(@r, :post, :action)
|
368
|
-
assert_equal "destroyProjectsAction", Nested::JsUtil::generate_function_name(@r, :delete, :action)
|
369
|
-
|
370
|
-
member!
|
371
|
-
assert_equal "project", Nested::JsUtil::generate_function_name(@r, :get, nil)
|
372
|
-
assert_equal "updateProject", Nested::JsUtil::generate_function_name(@r, :put, nil)
|
373
|
-
assert_equal "createProject", Nested::JsUtil::generate_function_name(@r, :post, nil)
|
374
|
-
assert_equal "destroyProject", Nested::JsUtil::generate_function_name(@r, :delete, nil)
|
247
|
+
# def test_serializer
|
248
|
+
# singleton!
|
375
249
|
|
376
|
-
|
377
|
-
assert_equal "updateProjectAction", Nested::JsUtil::generate_function_name(@r, :put, :action)
|
378
|
-
assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(@r, :post, :action)
|
379
|
-
assert_equal "destroyProjectAction", Nested::JsUtil::generate_function_name(@r, :delete, :action)
|
250
|
+
# @r.serialize :name
|
380
251
|
|
252
|
+
# assert_equal({name: "joe"}, @r.instance_variable_get("@__serialize").call({name: "joe"}))
|
253
|
+
# assert_equal({name: "joe"}, @r.instance_variable_get("@__serialize").call({name: "joe", boss: true}))
|
254
|
+
# assert_equal({name: "joe"}, @r.instance_variable_get("@__serialize").call(OpenStruct.new({name: "joe"})))
|
381
255
|
|
382
|
-
|
256
|
+
# @r.serialize :name, virtual: ->(o){ o[:name] + "!!" }
|
257
|
+
# assert_equal({name: "joe", virtual: "joe!!"}, @r.instance_variable_get("@__serialize").call({name: "joe"}))
|
258
|
+
# end
|
383
259
|
|
384
|
-
|
260
|
+
# # ----
|
385
261
|
|
386
|
-
|
262
|
+
def test_sinatra_response_type
|
263
|
+
assert_equal :error, singleton(:project).sinatra_response_type(ActiveModel::Errors.new({}))
|
387
264
|
|
388
|
-
|
389
|
-
assert_equal
|
390
|
-
assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
|
391
|
-
assert_equal "destroyProjectStatistic", Nested::JsUtil::generate_function_name(r2, :delete, nil)
|
265
|
+
obj = OpenStruct.new(errors: ActiveModel::Errors.new({}))
|
266
|
+
assert_equal :data, singleton(:project).sinatra_response_type(obj)
|
392
267
|
|
393
|
-
|
394
|
-
assert_equal
|
395
|
-
assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :post, :action)
|
396
|
-
assert_equal "destroyProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :delete, :action)
|
268
|
+
obj.errors.add(:somefield, "some error")
|
269
|
+
assert_equal :error, singleton(:project).sinatra_response_type(obj)
|
397
270
|
|
398
|
-
|
271
|
+
assert_equal :data, singleton(:project).sinatra_response_type(nil)
|
272
|
+
assert_equal :data, singleton(:project).sinatra_response_type(123)
|
273
|
+
end
|
399
274
|
|
400
|
-
r2 = @r.singleton(:statistic) {}
|
401
275
|
|
402
|
-
|
403
|
-
assert_equal "updateProjectStatistic", Nested::JsUtil::generate_function_name(r2, :put, nil)
|
404
|
-
assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
|
405
|
-
assert_equal "destroyProjectStatistic", Nested::JsUtil::generate_function_name(r2, :delete, nil)
|
276
|
+
# # ----
|
406
277
|
|
407
|
-
|
408
|
-
|
409
|
-
assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :post, :action)
|
410
|
-
assert_equal "destroyProjectStatisticAction", Nested::JsUtil::generate_function_name(r2, :delete, :action)
|
278
|
+
def test_function_name
|
279
|
+
resource = singleton(:project)
|
411
280
|
|
412
|
-
|
281
|
+
assert_equal "project", Nested::JsUtil::generate_function_name(resource, :get, nil)
|
282
|
+
assert_equal "updateProject", Nested::JsUtil::generate_function_name(resource, :put, nil)
|
283
|
+
assert_equal "createProject", Nested::JsUtil::generate_function_name(resource, :post, nil)
|
284
|
+
assert_equal "destroyProject", Nested::JsUtil::generate_function_name(resource, :delete, nil)
|
413
285
|
|
414
|
-
|
286
|
+
assert_equal "projectAction", Nested::JsUtil::generate_function_name(resource, :get, :action)
|
287
|
+
assert_equal "updateProjectAction", Nested::JsUtil::generate_function_name(resource, :put, :action)
|
288
|
+
assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(resource, :post, :action)
|
289
|
+
assert_equal "destroyProjectAction", Nested::JsUtil::generate_function_name(resource, :delete, :action)
|
415
290
|
|
416
|
-
|
417
|
-
assert_equal "updateProjectsStatistic", Nested::JsUtil::generate_function_name(r2, :put, nil)
|
418
|
-
assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(r2, :post, nil)
|
419
|
-
assert_equal "destroyProjectsStatistic", Nested::JsUtil::generate_function_name(r2, :delete, nil)
|
291
|
+
resource = many(:projects)
|
420
292
|
|
421
|
-
assert_equal "
|
422
|
-
assert_equal "
|
423
|
-
assert_equal "
|
424
|
-
assert_equal "
|
293
|
+
assert_equal "projects", Nested::JsUtil::generate_function_name(resource, :get, nil)
|
294
|
+
assert_equal "updateProjects", Nested::JsUtil::generate_function_name(resource, :put, nil)
|
295
|
+
assert_equal "createProject", Nested::JsUtil::generate_function_name(resource, :post, nil)
|
296
|
+
assert_equal "destroyProjects", Nested::JsUtil::generate_function_name(resource, :delete, nil)
|
425
297
|
|
426
|
-
|
298
|
+
assert_equal "projectsAction", Nested::JsUtil::generate_function_name(resource, :get, :action)
|
299
|
+
assert_equal "updateProjectsAction", Nested::JsUtil::generate_function_name(resource, :put, :action)
|
300
|
+
assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(resource, :post, :action)
|
301
|
+
assert_equal "destroyProjectsAction", Nested::JsUtil::generate_function_name(resource, :delete, :action)
|
427
302
|
|
428
|
-
|
429
|
-
r3 = r2.one {}
|
303
|
+
resource = many(:projects).one
|
430
304
|
|
431
|
-
assert_equal "
|
432
|
-
assert_equal "
|
433
|
-
assert_equal "
|
434
|
-
assert_equal "
|
305
|
+
assert_equal "project", Nested::JsUtil::generate_function_name(resource, :get, nil)
|
306
|
+
assert_equal "updateProject", Nested::JsUtil::generate_function_name(resource, :put, nil)
|
307
|
+
assert_equal "createProject", Nested::JsUtil::generate_function_name(resource, :post, nil)
|
308
|
+
assert_equal "destroyProject", Nested::JsUtil::generate_function_name(resource, :delete, nil)
|
435
309
|
|
436
|
-
assert_equal "
|
437
|
-
assert_equal "
|
438
|
-
assert_equal "
|
439
|
-
assert_equal "
|
310
|
+
assert_equal "projectAction", Nested::JsUtil::generate_function_name(resource, :get, :action)
|
311
|
+
assert_equal "updateProjectAction", Nested::JsUtil::generate_function_name(resource, :put, :action)
|
312
|
+
assert_equal "createProjectAction", Nested::JsUtil::generate_function_name(resource, :post, :action)
|
313
|
+
assert_equal "destroyProjectAction", Nested::JsUtil::generate_function_name(resource, :delete, :action)
|
440
314
|
|
315
|
+
resource = singleton(:project).many(:statistics)
|
441
316
|
|
442
|
-
|
443
|
-
|
444
|
-
assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(
|
317
|
+
assert_equal "projectStatistics", Nested::JsUtil::generate_function_name(resource, :get, nil)
|
318
|
+
assert_equal "updateProjectStatistics", Nested::JsUtil::generate_function_name(resource, :put, nil)
|
319
|
+
assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(resource, :post, nil)
|
320
|
+
assert_equal "destroyProjectStatistics", Nested::JsUtil::generate_function_name(resource, :delete, nil)
|
445
321
|
|
322
|
+
assert_equal "projectStatisticsAction", Nested::JsUtil::generate_function_name(resource, :get, :action)
|
323
|
+
assert_equal "updateProjectStatisticsAction", Nested::JsUtil::generate_function_name(resource, :put, :action)
|
324
|
+
assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(resource, :post, :action)
|
325
|
+
assert_equal "destroyProjectStatisticsAction", Nested::JsUtil::generate_function_name(resource, :delete, :action)
|
446
326
|
|
447
|
-
singleton
|
448
|
-
r2 = @r.many(:statistics) {}
|
449
|
-
r3 = r2.singleton(:user) {}
|
327
|
+
resource = singleton(:project).many(:statistics).one
|
450
328
|
|
451
|
-
assert_equal "
|
329
|
+
assert_equal "projectStatistic", Nested::JsUtil::generate_function_name(resource, :get, nil)
|
330
|
+
assert_equal "updateProjectStatistic", Nested::JsUtil::generate_function_name(resource, :put, nil)
|
331
|
+
assert_equal "createProjectStatistic", Nested::JsUtil::generate_function_name(resource, :post, nil)
|
332
|
+
assert_equal "destroyProjectStatistic", Nested::JsUtil::generate_function_name(resource, :delete, nil)
|
452
333
|
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
334
|
+
assert_equal "projectStatisticAction", Nested::JsUtil::generate_function_name(resource, :get, :action)
|
335
|
+
assert_equal "updateProjectStatisticAction", Nested::JsUtil::generate_function_name(resource, :put, :action)
|
336
|
+
assert_equal "createProjectStatisticAction", Nested::JsUtil::generate_function_name(resource, :post, :action)
|
337
|
+
assert_equal "destroyProjectStatisticAction", Nested::JsUtil::generate_function_name(resource, :delete, :action)
|
457
338
|
|
458
|
-
|
339
|
+
resource = singleton(:project).many(:statistics).one.many(:entries)
|
340
|
+
assert_equal "projectStatisticEntries", Nested::JsUtil::generate_function_name(resource, :get, nil)
|
459
341
|
end
|
460
342
|
|
461
|
-
# -----------------
|
462
|
-
|
463
343
|
def test_function_arguments
|
464
|
-
|
465
|
-
singleton
|
466
|
-
assert_equal [], Nested::JsUtil.function_arguments(
|
467
|
-
|
468
|
-
|
469
|
-
assert_equal [], Nested::JsUtil.function_arguments(
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
singleton
|
475
|
-
assert_equal ["
|
476
|
-
|
477
|
-
singleton!
|
478
|
-
r2 = @r.one(:statistic) {}
|
479
|
-
r3 = r2.singleton(:test) {}
|
480
|
-
assert_equal ["statistic"], Nested::JsUtil.function_arguments(r3)
|
481
|
-
|
482
|
-
# --- member
|
483
|
-
|
484
|
-
member!
|
485
|
-
assert_equal ["project"], Nested::JsUtil.function_arguments(@r)
|
486
|
-
|
487
|
-
member!
|
488
|
-
assert_equal ["project"], Nested::JsUtil.function_arguments(@r.singleton(:statistic) {})
|
489
|
-
|
490
|
-
member!
|
491
|
-
assert_equal ["project"], Nested::JsUtil.function_arguments(@r.many(:statistics) {})
|
492
|
-
|
493
|
-
member!
|
494
|
-
assert_equal ["project", "statistic"], Nested::JsUtil.function_arguments(@r.one(:statistic) {})
|
495
|
-
|
496
|
-
# --- collection
|
497
|
-
|
498
|
-
collection!
|
499
|
-
assert_equal [], Nested::JsUtil.function_arguments(@r)
|
500
|
-
|
501
|
-
collection!
|
502
|
-
assert_equal [], Nested::JsUtil.function_arguments(@r.singleton(:statistic) {})
|
503
|
-
|
504
|
-
collection!
|
505
|
-
assert_equal ["project"], Nested::JsUtil.function_arguments(@r.one {})
|
506
|
-
|
507
|
-
collection!
|
508
|
-
r2 = @r.one {}
|
509
|
-
r3 = r2.one(:statistic) {}
|
510
|
-
|
511
|
-
assert_equal ["project", "statistic"], Nested::JsUtil.function_arguments(r3)
|
344
|
+
assert_equal [], Nested::JsUtil.function_arguments(singleton(:project))
|
345
|
+
assert_equal [], Nested::JsUtil.function_arguments(singleton(:project).singleton(:statistic))
|
346
|
+
assert_equal [], Nested::JsUtil.function_arguments(singleton(:project).many(:statistics))
|
347
|
+
assert_equal ["statistic"], Nested::JsUtil.function_arguments(singleton(:project).many(:statistics).one)
|
348
|
+
|
349
|
+
assert_equal [], Nested::JsUtil.function_arguments(many(:projects))
|
350
|
+
assert_equal [], Nested::JsUtil.function_arguments(many(:projects).singleton(:statistic))
|
351
|
+
assert_equal ["project"], Nested::JsUtil.function_arguments(many(:projects).one)
|
352
|
+
|
353
|
+
assert_equal ["project"], Nested::JsUtil.function_arguments(many(:projects).one.singleton(:today))
|
354
|
+
assert_equal [], Nested::JsUtil.function_arguments(many(:projects).singleton(:statistic).singleton(:today))
|
355
|
+
assert_equal ["project", "entry"], Nested::JsUtil.function_arguments(many(:projects).one.many(:entries).one)
|
512
356
|
end
|
513
357
|
|
514
358
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "mocha/setup"
|
3
|
+
require "active_support/all"
|
4
|
+
require "active_model/errors"
|
5
|
+
require "active_record"
|
6
|
+
require "nested"
|
7
|
+
|
8
|
+
class SerializerFieldTest < Test::Unit::TestCase
|
9
|
+
def test_initialize
|
10
|
+
assert_equal :name, Nested::SerializerField.new(:name, :condition).name
|
11
|
+
assert_equal :condition, Nested::SerializerField.new(:name, :condition).condition
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "test/unit"
|
2
|
+
require "mocha/setup"
|
3
|
+
require "active_support/all"
|
4
|
+
require "active_model/errors"
|
5
|
+
require "active_record"
|
6
|
+
require "nested"
|
7
|
+
|
8
|
+
class SerializerTest < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def test_initialize
|
11
|
+
assert_equal [], Nested::Serializer.new.includes
|
12
|
+
assert_equal [], Nested::Serializer.new.excludes
|
13
|
+
|
14
|
+
assert_equal [1,2,3], Nested::Serializer.new([1,2,3]).includes
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_operator_plus
|
18
|
+
ser = Nested::Serializer.new
|
19
|
+
assert_equal ser, ser + :name
|
20
|
+
assert_equal 1, ser.includes.length
|
21
|
+
assert_equal :name, ser.includes[0].name
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_operator_minus
|
25
|
+
ser = Nested::Serializer.new([:name])
|
26
|
+
assert_equal ser, ser - :name
|
27
|
+
assert_equal 1, ser.excludes.length
|
28
|
+
assert_equal :name, ser.excludes[0].name
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/test/test_helper.rb
ADDED
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.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jan Zimmek
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -81,6 +81,9 @@ files:
|
|
81
81
|
- lib/nested.rb
|
82
82
|
- nested.gemspec
|
83
83
|
- test/nested_test.rb
|
84
|
+
- test/serializer_field_test.rb
|
85
|
+
- test/serializer_test.rb
|
86
|
+
- test/test_helper.rb
|
84
87
|
homepage:
|
85
88
|
licenses: []
|
86
89
|
metadata: {}
|
@@ -106,3 +109,6 @@ specification_version: 4
|
|
106
109
|
summary: a nestable dsl to create a restful api
|
107
110
|
test_files:
|
108
111
|
- test/nested_test.rb
|
112
|
+
- test/serializer_field_test.rb
|
113
|
+
- test/serializer_test.rb
|
114
|
+
- test/test_helper.rb
|