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 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