CRUDtree 0.1 → 0.1.1
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.
- data/README.rdoc +7 -3
- data/lib/crudtree/generator.rb +7 -6
- data/lib/crudtree/helper.rb +1 -1
- data/lib/crudtree/tree/endnode.rb +4 -0
- data/lib/crudtree/tree/node.rb +8 -0
- data/test/suite/lib/generator.rb +29 -3
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -21,9 +21,10 @@ EndNode:: A route endpoint.
|
|
21
21
|
|
22
22
|
=== as Tinkerer
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
require 'crudtree/interface/usher/rack'
|
25
|
+
|
26
26
|
Usher::Interface.for(:rack) do
|
27
|
+
extend CRUDtree::Interface::Usher::Rack
|
27
28
|
node(klass: Posts) do
|
28
29
|
sub(type: :member, call: :show, rest: :get)
|
29
30
|
sub(type: :collection, call: :index, rest: :get)
|
@@ -32,9 +33,12 @@ EndNode:: A route endpoint.
|
|
32
33
|
|
33
34
|
=== As Dev
|
34
35
|
|
35
|
-
|
36
|
+
require 'crudtree/interface/usher/rack'
|
37
|
+
require 'crudtree/helper'
|
36
38
|
|
37
39
|
Usher::Interface.for(:rack) do
|
40
|
+
extend CRUDtree::Interface::Usher::Rack
|
41
|
+
extend CRUDtree::Interface::Helper
|
38
42
|
resource(klass: Posts) do # the resource helper will include a bunch of default routes
|
39
43
|
member(call: :show, rest: :get)
|
40
44
|
collection(call: :index, rest: :get)
|
data/lib/crudtree/generator.rb
CHANGED
@@ -8,14 +8,15 @@ module CRUDtree
|
|
8
8
|
|
9
9
|
def generate(resource, *names)
|
10
10
|
if resource.is_a? Symbol
|
11
|
-
names
|
11
|
+
names.unshift(resource)
|
12
12
|
node = @master
|
13
13
|
url = ""
|
14
14
|
else
|
15
15
|
node, identifiers = find_node(resource)
|
16
|
+
last_identifier = identifiers.last
|
16
17
|
url = generate_url_from_node(node, identifiers)
|
17
18
|
end
|
18
|
-
|
19
|
+
generate_from_sub(node, names, url, last_identifier) unless names.empty?
|
19
20
|
url
|
20
21
|
end
|
21
22
|
|
@@ -71,12 +72,12 @@ module CRUDtree
|
|
71
72
|
identifiers.reverse
|
72
73
|
end
|
73
74
|
|
74
|
-
def generate_from_sub(node, names)
|
75
|
+
def generate_from_sub(node, names, url, last_identifier=nil)
|
75
76
|
name = names.shift
|
76
77
|
sub = node.subs.find{|sub| sub.name == name} or raise(ArgumentError, "No subnode found on #{node} with name of #{name}.")
|
77
|
-
url
|
78
|
-
url <<
|
79
|
-
url
|
78
|
+
url.chomp!("/#{last_identifier}") if last_identifier && sub.collection?
|
79
|
+
url << "/#{sub.path}"
|
80
|
+
generate_from_sub(sub, names, url) unless names.empty?
|
80
81
|
end
|
81
82
|
end
|
82
83
|
|
data/lib/crudtree/helper.rb
CHANGED
@@ -11,7 +11,7 @@ module CRUDtree
|
|
11
11
|
member(call: :update, rest: :put, path: "")
|
12
12
|
member(call: :delete, rest: :get)
|
13
13
|
member(call: :destroy, rest: :delete, path: "")
|
14
|
-
|
14
|
+
instance_eval(&resource_block) if resource_block
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/crudtree/tree/node.rb
CHANGED
data/test/suite/lib/generator.rb
CHANGED
@@ -172,7 +172,9 @@ BareTest.suite do
|
|
172
172
|
end
|
173
173
|
|
174
174
|
assert "generates the correct url from :names" do
|
175
|
-
|
175
|
+
url = ""
|
176
|
+
Generator.allocate.send(:generate_from_sub, @node, @names, url)
|
177
|
+
equal(@path, url)
|
176
178
|
end
|
177
179
|
|
178
180
|
end
|
@@ -182,8 +184,12 @@ BareTest.suite do
|
|
182
184
|
setup do
|
183
185
|
@master = Master.new
|
184
186
|
@master.node(klass: Klass0, model: Mod0) do
|
187
|
+
collection(call: :new)
|
188
|
+
member(call: :delete)
|
185
189
|
node(klass: Klass1, model: Mod1){:foo}
|
186
190
|
node(klass: Klass2, model: Mod2) do
|
191
|
+
member(call: :edit)
|
192
|
+
collection(call: :post)
|
187
193
|
node(klass: Klass2, model: Mod2){:foo}
|
188
194
|
end
|
189
195
|
end
|
@@ -205,8 +211,28 @@ BareTest.suite do
|
|
205
211
|
@path = "/klass0/0"
|
206
212
|
end
|
207
213
|
|
208
|
-
|
209
|
-
|
214
|
+
setup :model, "collection on base node" do
|
215
|
+
@resource = [:klass0, :new]
|
216
|
+
@path = "/klass0/new"
|
217
|
+
end
|
218
|
+
|
219
|
+
setup :model, "member on base node" do
|
220
|
+
@resource = [:klass0, :delete]
|
221
|
+
@path = "/klass0/delete"
|
222
|
+
end
|
223
|
+
|
224
|
+
setup :model, "member on simple node" do
|
225
|
+
@resource = [Mod2.new, :edit]
|
226
|
+
@path = "/klass0/0/klass2/2/edit"
|
227
|
+
end
|
228
|
+
|
229
|
+
setup :model, "collection on simple node" do
|
230
|
+
@resource = [Mod2.new, :post]
|
231
|
+
@path = "/klass0/0/klass2/post"
|
232
|
+
end
|
233
|
+
|
234
|
+
assert "#generate with :model" do
|
235
|
+
equal(@path, @generator.generate(*@resource))
|
210
236
|
end
|
211
237
|
|
212
238
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: CRUDtree
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Simon Hafner aka Tass
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
|
-
date: 2010-01-
|
11
|
+
date: 2010-01-30 00:00:00 +01:00
|
12
12
|
default_executable:
|
13
13
|
dependencies: []
|
14
14
|
|