CRUDtree 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -21,9 +21,10 @@ EndNode:: A route endpoint.
21
21
 
22
22
  === as Tinkerer
23
23
 
24
- CRUDtree::Interface.for(:usher_rack, rango: true).add_helper(CRUDtree::Interface::Helper)
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
- CRUDtree::Interface.for(:usher_rack, rango: true)
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)
@@ -8,14 +8,15 @@ module CRUDtree
8
8
 
9
9
  def generate(resource, *names)
10
10
  if resource.is_a? Symbol
11
- names << resource
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
- url << generate_from_sub(node, names) unless names.empty?
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 = "/#{sub.path}"
78
- url << generate_from_sub(sub, names) unless names.empty?
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
 
@@ -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
- eval(&resource_block) if resource_block
14
+ instance_eval(&resource_block) if resource_block
15
15
  end
16
16
  end
17
17
  end
@@ -36,5 +36,9 @@ module CRUDtree
36
36
 
37
37
  attr_reader :type, :path, :rest, :call, :name, :parent
38
38
 
39
+ def collection?
40
+ type == :collection
41
+ end
42
+
39
43
  end
40
44
  end
@@ -111,6 +111,14 @@ module CRUDtree
111
111
  @paths.first
112
112
  end
113
113
 
114
+ def subs
115
+ endnodes
116
+ end
117
+
118
+ def collection?
119
+ false
120
+ end
121
+
114
122
  private
115
123
  def find_parent(node)
116
124
  if node.parent.respond_to? :parent
@@ -172,7 +172,9 @@ BareTest.suite do
172
172
  end
173
173
 
174
174
  assert "generates the correct url from :names" do
175
- equal @path, Generator.allocate.send(:generate_from_sub, @node, @names)
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
- assert "#generate" do
209
- equal(@path, @generator.generate(@resource))
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: "0.1"
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-25 00:00:00 +01:00
11
+ date: 2010-01-30 00:00:00 +01:00
12
12
  default_executable:
13
13
  dependencies: []
14
14