lipa 0.3.0 → 1.0.0

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/NEWS.md CHANGED
@@ -1,3 +1,31 @@
1
+ 2011-11-05 Release-1.0.0
2
+ ----------------------
3
+ - Added method Node#eval_attrs to access to attrs node with eval
4
+
5
+ ```Ruby
6
+ node :some_node d:
7
+ param_1 1
8
+ param_2 run{ param_1 + 2}
9
+ end
10
+
11
+ node.attrs #=> {:param_1 => 1, :param_2 => Proc}
12
+ node.eval_attrs #=> {:param_1 => 1, :param_2 => 3}
13
+ ```
14
+
15
+ - Renamed Lipa::Tree -> Lipa::Root and added helper method for initialization
16
+
17
+ ```Ruby
18
+ tree = root :tree do
19
+ node :node_1
20
+ end
21
+ ```
22
+
23
+ - Fixed bug in Lipa::Node. Attributes is working with false values.
24
+ - Added :full_name attribute to Lipa::Node
25
+ - Attributes :name, :parent, :children, :root, :full_name, :kind are instance variables
26
+ - Fixed bug for calls: `node[""] #=> self` and `node["/"] #=> tree`
27
+ - All instances of Lipa::Tree have name an full name equal "/"
28
+
1
29
  2011-10-27 Release-0.3.0
2
30
  -----------------------
3
31
  - Added supporting references to other object as attribute ```Node#ref```
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
- Lipa - DSL for description treelike structures in Ruby
1
+ Lipa [![Build Status](https://secure.travis-ci.org/flipback/lipa.png)](http://travis-ci.org/flipback/lipa)
2
2
  =======================================================
3
3
 
4
+ Lipa - DSL for description treelike structures in Ruby
5
+
4
6
  Features
5
7
  ------------------------------------------------------
6
8
  - Creating treelike structures for Ruby in DSL style
@@ -16,7 +18,7 @@ Example
16
18
  ------------------------------------------------------
17
19
 
18
20
  require 'lipa'
19
- un = Lipa::Tree.new :universe do
21
+ un = root :universe do
20
22
  kind :planet_system do
21
23
  num_planet run{
22
24
  count = 0
@@ -61,3 +63,4 @@ Example
61
63
  Reference
62
64
  ----------------------------------
63
65
  Home page: http://lipa.flipback.net
66
+ Web access to Lipa https://github.com/flipback/lipa-web
@@ -1,13 +1,13 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__),'../lib')
2
2
  require 'lipa'
3
3
 
4
- tree = Lipa::Tree.new :tree do
4
+ tree = root :tree do
5
5
  kind :red do
6
6
  color "red"
7
7
  end
8
8
 
9
9
  node :branch do
10
- with :color => "green", do
10
+ with :color => "green" do
11
11
  node :leaf_green
12
12
  node :leaf_yelow, :color => "yelow"
13
13
  end
@@ -17,8 +17,8 @@ tree = Lipa::Tree.new :tree do
17
17
  end
18
18
 
19
19
  #Access
20
- puts Lipa::Tree["tree://branch/leaf_green"].color
20
+ puts Lipa::Root["tree://branch/leaf_green"].color
21
21
  #or
22
- puts tree["branch/leaf_yelow"].color
22
+ puts tree["/branch/leaf_yelow"].color
23
23
  #or
24
24
  puts tree.red_leaf.color
@@ -1,7 +1,7 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__),'../lib')
2
2
  require "lipa"
3
3
 
4
- store = Lipa::Tree.new :store do
4
+ store = root :store do
5
5
  kind :category do
6
6
  unit_count run{
7
7
  count = 0
@@ -1,7 +1,7 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__),'../lib')
2
2
  require 'lipa'
3
3
 
4
- un = Lipa::Tree.new :universe do
4
+ un = root :universe do
5
5
  kind :planet_system do
6
6
  num_planet run{
7
7
  count = 0
@@ -27,4 +27,8 @@ require "lipa/version"
27
27
  require "lipa/node"
28
28
  require "lipa/bunch"
29
29
  require "lipa/kind"
30
- require "lipa/tree"
30
+ require "lipa/root"
31
+
32
+ def root(name, &block)
33
+ Lipa::Root.new(name, &block)
34
+ end
@@ -27,7 +27,7 @@ module Lipa
27
27
  # Implementation of group description
28
28
  #
29
29
  # @example
30
- # tree = Lipa::Tree.new :tree do
30
+ # tree = root :tree do
31
31
  # bunch :param_1 => "some_param" do
32
32
  # leaf :obj_1
33
33
  # leaf :obj_2
@@ -45,8 +45,7 @@ module Lipa
45
45
  end
46
46
 
47
47
  def method_missing(name, *args, &block)
48
- args[1] ||= {}
49
- args[1] = @attrs.merge(args[1])
48
+ args[1] = @attrs.merge(args[1] || {})
50
49
  unless Node.add_node(name, @parent, *args, &block)
51
50
  super
52
51
  end
@@ -27,7 +27,7 @@ module Lipa
27
27
  # Implemenation of kind(template) for description
28
28
  #
29
29
  # @example
30
- # tree = Lipa::Tree.new :tree do
30
+ # tree = root :tree do
31
31
  # kind :some_kind do
32
32
  # param1 "some_param"
33
33
  # end
@@ -40,13 +40,8 @@ module Lipa
40
40
  class Kind
41
41
  attr_reader :attrs, :name, :for, :block
42
42
  def initialize(name, attrs = {}, &block)
43
- # OPTIMIZE: Make it shorter
44
- if attrs[:for]
45
- @for = attr[:for]
46
- attrs[:for] = nil
47
- else
48
- @for = :node
49
- end
43
+ @for = attrs.delete(:for)
44
+ @for ||= :node
50
45
 
51
46
  @attrs = attrs
52
47
  @name = name.to_sym
@@ -30,7 +30,7 @@ module Lipa
30
30
  # attributes by constant, variable or code
31
31
  #
32
32
  # @example
33
- # tree = Lipa::Tree.new :tree do
33
+ # tree = root :tree do
34
34
  # node :object, :param_1 => 4 do
35
35
  # param_2 "some_param"
36
36
  # param_3 run{1+param_3}
@@ -40,13 +40,18 @@ module Lipa
40
40
  # tree.object.param_2 #=> "some_param"
41
41
  # tree.object.param_3 #=> 5
42
42
  class Node
43
- attr_accessor :attrs
43
+ attr_accessor :attrs, :name, :children, :root, :parent, :full_name, :kind
44
44
  @@init_methods = {:node => self}
45
45
 
46
46
  def initialize(name, attrs = {}, &block)
47
+ @name = name.to_s
48
+ @children = {}
49
+ @parent = attrs.delete(:parent)
50
+ @root = attrs.delete(:root)
51
+ @full_name = attrs.delete(:full_name)
52
+ @kind = attrs.delete(:kind)
47
53
  @attrs = attrs
48
- @attrs[:name] = name.to_s
49
- @attrs[:children] ||= {}
54
+
50
55
  instance_eval &block if block_given?
51
56
  end
52
57
 
@@ -54,11 +59,13 @@ module Lipa
54
59
  unless Node.add_node(name, self, *args, &block)
55
60
  case args.size
56
61
  when 0
57
- child = @attrs[:children][name]
62
+ child = children[name]
58
63
  return child if child
59
64
 
60
65
  val = @attrs[name]
61
- super unless val
66
+
67
+ super if val.nil? #Raise MethodError if don't have it
68
+
62
69
  if val.class == Proc
63
70
  instance_eval &(val)
64
71
  else
@@ -74,6 +81,26 @@ module Lipa
74
81
  end
75
82
  end
76
83
 
84
+ # Copy attributes with eval
85
+ #
86
+ # @retun [Hash] hash
87
+ #
88
+ # @example
89
+ # node :some_node d:
90
+ # param_1 1
91
+ # param_2 run{ param_1 + 2}
92
+ # end
93
+ #
94
+ # node.attrs #=> {:param_1 => 1, :param_2 => Proc}
95
+ # node.eval_attrs #=> {:param_1 => 1, :param_2 => 3}
96
+ def eval_attrs
97
+ result = {}
98
+ @attrs.each_pair do |k,v|
99
+ result[k.to_sym] = instance_eval(k.to_s)
100
+ end
101
+ result
102
+ end
103
+
77
104
  # Accessor for node by path in Unix style
78
105
  # @param [String] path nodes
79
106
  # @return [Node] node
@@ -84,31 +111,36 @@ module Lipa
84
111
  # dir_2["./searched_obj"]
85
112
  # dir_2["../dir_2/searched_obj"]
86
113
  def [](path)
87
- split_path = path.split("/")
88
- obj = case split_path[0]
114
+ first, *rest_path = path.split("/")
115
+ obj = case first
116
+ when nil
117
+ if path == "/"
118
+ root
119
+ elsif path == ""
120
+ self
121
+ end
89
122
  when ""
90
- @attrs[:tree]
123
+ root
91
124
  when ".."
92
- @attrs[:parent]
125
+ parent
93
126
  when "."
94
127
  self
95
128
  else
96
- @attrs[:children][split_path[0].to_sym]
129
+ children[first.to_sym]
97
130
  end
98
131
 
99
- if obj
100
- if split_path.size > 1
101
- obj[split_path[1..-1].join("/")]
102
- else
103
- obj
104
- end
132
+ return nil if obj.nil?
133
+ if rest_path.size > 0
134
+ obj[rest_path.join("/")]
135
+ else
136
+ obj
105
137
  end
106
138
  end
107
139
 
108
140
  # Initial method for group description
109
141
  #
110
142
  # @example
111
- # tree = Lipa::Tree.new :tree do
143
+ # tree = root :tree do
112
144
  # with :param_1 => "some_param" do
113
145
  # node :obj_1
114
146
  # node :obj_2
@@ -128,7 +160,7 @@ module Lipa
128
160
  # @param block of code
129
161
  #
130
162
  # @example
131
- # Tree.new :tree do
163
+ # root :tree do
132
164
  # param_1 10
133
165
  # param_2 run{ param_1 * 10 }
134
166
  # end
@@ -159,7 +191,7 @@ module Lipa
159
191
  # init_methods :folder
160
192
  # end
161
193
  #
162
- # fls = Lipa::Tree.new :folders do
194
+ # fls = root :folders do
163
195
  # folder :folder_1 do
164
196
  # param_1 "some_param
165
197
  # end
@@ -185,40 +217,39 @@ module Lipa
185
217
  def self.add_node(name, parent, *args, &block)
186
218
  # OPTIMIZE: This code looks bad
187
219
  # Init from kind
188
- attrs = {}
189
220
  args[1] ||= {}
190
- attrs.merge!(args[1])
191
-
192
- kind = parent.attrs[:tree].kinds[name]
193
- if kind and kind.for
194
- init_class = @@init_methods[kind.for]
195
- attrs[:kind] = kind.name
196
- attrs.merge!(kind.attrs) do |key,v1,v2|
197
- v1
198
- end
221
+ attrs = {}
222
+
223
+ k = parent.root.kinds[name]
224
+ if k and k.for
225
+ init_class = @@init_methods[k.for]
199
226
  else
200
227
  #from init methods
201
228
  init_class = @@init_methods[name]
202
229
  end
203
230
 
204
231
  if init_class
232
+ # Init general attributes
205
233
  attrs[:parent] = parent
206
- attrs[:tree] = parent.attrs[:tree]
207
- child_name = args[0].to_sym
208
-
209
- existen_child = parent.attrs[:children][child_name]
210
- attrs = existen_child.attrs.merge(args[1]) if existen_child
211
-
212
- args[1].merge!(attrs) do |key,v1,v2|
213
- v1
214
- end
234
+ attrs[:root] = parent.root
235
+ fn = parent.full_name == "/" ? "" : parent.full_name
236
+ attrs[:full_name] = fn + "/" + args[0].to_s
215
237
 
216
- if kind
217
- parent.attrs[:children][child_name] = init_class.send(:new, *args.clone, &kind.block)
218
- parent.attrs[:children][child_name].attrs.merge!(attrs)
219
- parent.attrs[:children][child_name].instance_exec(&block) if block_given?
238
+ node_name = args[0].to_sym
239
+ children = parent.children
240
+ if k
241
+ attrs.merge! k.attrs
242
+ attrs[:kind] = k.name
243
+ #Node is descripted in kind
244
+ existen_child = parent.children[node_name]
245
+ attrs = existen_child.attrs.merge(attrs) if existen_child
246
+ #Init from kind
247
+ children[node_name] = init_class.send(:new, node_name, attrs, &k.block)
248
+ #Local modification
249
+ children[node_name].attrs.merge!(args[1])
250
+ children[node_name].instance_exec(&block) if block_given?
220
251
  else
221
- parent.attrs[:children][child_name] = init_class.send(:new, *args, &block )
252
+ children[node_name] = init_class.send(:new, node_name, attrs.merge(args[1]), &block )
222
253
  end
223
254
  true
224
255
  else
@@ -27,7 +27,7 @@ module Lipa
27
27
  # Implementaion of root of description
28
28
  # @example
29
29
  #
30
- # tree = Lipa::Tree.new :tree do
30
+ # tree = Lipa::Root.new :tree do
31
31
  # node :object do
32
32
  # param_1 "some_param"
33
33
  # param_2 run{param_1 + "!!!!"}
@@ -36,13 +36,19 @@ module Lipa
36
36
  #
37
37
  # tree.object.param_1 #=> "some_param"
38
38
  # tree.object.param_2 #=> "some_param!!!!"
39
- class Tree < Node
39
+ class Root < Node
40
40
  attr_reader :kinds
41
41
  @@trees = {}
42
- def initialize(name, attrs = {}, &block_given)
42
+ def initialize(name, &block)
43
43
  @kinds = {}
44
- attrs[:tree] = self
45
- super
44
+ @root = self
45
+ @children = {}
46
+ @attrs = {}
47
+ @name = "/"
48
+ @full_name = "/"
49
+
50
+ instance_eval &block if block_given?
51
+
46
52
  @@trees.merge! name.to_s => self
47
53
  end
48
54
 
@@ -56,7 +62,6 @@ module Lipa
56
62
  #
57
63
  # some_kind :some_instance
58
64
  def kind(name, attrs = {}, &block)
59
- attrs = { :tree => self }
60
65
  @kinds[name.to_sym] = Lipa::Kind.new(name, attrs, &block)
61
66
  end
62
67
 
@@ -68,7 +73,7 @@ module Lipa
68
73
  # @return [Node] node
69
74
  #
70
75
  # @example
71
- # Lipa::Tree["some_tree://node_1/node_2"]
76
+ # Lipa::Root["some_tree://node_1/node_2"]
72
77
  def self.[](uri)
73
78
  tree, path = uri.split("://")
74
79
  @@trees[tree][path] if @@trees[tree]
@@ -79,7 +84,7 @@ module Lipa
79
84
  # @param path to file
80
85
  #
81
86
  # @example
82
- # Lipa::Tree.new "lipa" do
87
+ # root "lipa" do
83
88
  # load_from File.dirname(__FILE__) + "/data/part_of_tree.rb"
84
89
  # end
85
90
  def load_from(path)
@@ -24,5 +24,5 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
24
  =end
25
25
 
26
26
  module Lipa
27
- VERSION = "0.3.0"
27
+ VERSION = "1.0.0"
28
28
  end
@@ -2,7 +2,7 @@ require 'lipa'
2
2
 
3
3
  describe "access to object by path in Unix style" do
4
4
  before :all do
5
- @tree = Lipa::Tree.new "lipa" do
5
+ @tree = root "lipa" do
6
6
  node :obj_1 do
7
7
  node :obj_2 do
8
8
  node :obj_3 do
@@ -34,4 +34,12 @@ describe "access to object by path in Unix style" do
34
34
  it 'should have access by absolute path' do
35
35
  @node["/obj_1/obj_2/obj_3"].should eql(@tree.obj_1.obj_2.obj_3)
36
36
  end
37
+
38
+ it 'should have access to self' do
39
+ @node[""].should eql(@node)
40
+ end
41
+
42
+ it 'should have access to root' do
43
+ @node["/"].should eql(@tree)
44
+ end
37
45
  end
@@ -2,7 +2,7 @@ require 'lipa'
2
2
 
3
3
  describe Lipa::Bunch do
4
4
  before :all do
5
- @tree = Lipa::Tree.new "lipa" do
5
+ @tree = root "lipa" do
6
6
  with :attr_1 => 100, :attr_2 => "attr_2" do
7
7
  node :obj_4
8
8
  node :obj_5
@@ -24,7 +24,7 @@ describe Lipa::Bunch do
24
24
  end
25
25
 
26
26
  it 'should have "with" initial method' do
27
- t = Lipa::Tree.new("1") do
27
+ t = root "t" do
28
28
  with :attr_1 => 999 do
29
29
  node :obj_1
30
30
  end
@@ -33,7 +33,7 @@ describe Lipa::Bunch do
33
33
  end
34
34
 
35
35
  it 'should work with kinds' do
36
- t = Lipa::Tree.new("1") do
36
+ t = root "t" do
37
37
  kind :some_kind, :for => :node
38
38
 
39
39
  with :attr_1 => 999 do
@@ -2,7 +2,7 @@ require 'lipa'
2
2
 
3
3
  describe Lipa::Kind do
4
4
  before :all do
5
- @tree = Lipa::Tree.new :tree do
5
+ @tree = root :tree do
6
6
  # Set #1
7
7
  kind :object, :for => :node
8
8
  kind :group, :for => :node do
@@ -54,4 +54,8 @@ describe Lipa::Kind do
54
54
  @tree.folder_1.name.should eql("folder_1")
55
55
  end
56
56
 
57
+ it 'should have attrs' do
58
+ @tree.folder_1.some_file.attrs.should eql({:ext => "txt", :size => 1024})
59
+ end
60
+
57
61
  end
@@ -1,8 +1,8 @@
1
1
  require 'lipa'
2
2
 
3
3
  describe Lipa::Node do
4
- before :all do
5
- @tree = Lipa::Tree.new "lipa" do
4
+ before :each do
5
+ @tree = root "lipa" do
6
6
  node :group_1 do
7
7
  any_attr "any attr"
8
8
 
@@ -16,7 +16,9 @@ describe Lipa::Node do
16
16
  end
17
17
  end
18
18
 
19
- node :other_object
19
+ node :other_object do
20
+ bool_attr false
21
+ end
20
22
 
21
23
  kind :some_kind do
22
24
  param_1 "something"
@@ -37,21 +39,6 @@ describe Lipa::Node do
37
39
  @node = @tree["group_1/obj_1"]
38
40
  end
39
41
 
40
- it 'should have name' do
41
- @node.name.should eql("obj_1")
42
- end
43
-
44
- it 'should have tree' do
45
- @node.tree.should eql(@tree)
46
- end
47
-
48
- it 'should kind' do
49
- @tree["obj_x"].kind.should eql(:some_kind)
50
- end
51
-
52
- it 'should have parent' do
53
- @node.parent.should eql(@tree["group_1"])
54
- end
55
42
 
56
43
  it 'should have descripted attr_1 eql 5' do
57
44
  @node.attr_1.should eql(5)
@@ -62,7 +49,6 @@ describe Lipa::Node do
62
49
  end
63
50
 
64
51
  it 'should have descripted attr_3 eql sum of attr_1 and attr_2' do
65
- @node.attr_3.should eql(8)
66
52
  @node.attr_2 = 10
67
53
  @node.attr_3.should eql(15)
68
54
  end
@@ -73,30 +59,31 @@ describe Lipa::Node do
73
59
  end
74
60
 
75
61
  it 'should have hash access for attrs' do
76
- @node.attrs[:attr_1].should eql(8)
62
+ @node.attrs[:attr_1].should eql(5)
77
63
  @node.attrs[:attr_1] = 9
78
64
  @node.attrs[:attr_1].should eql(9)
79
65
  end
80
66
 
81
- it 'should have children' do
82
- @node.children.values.should eql([@tree["group_1/obj_1/obj_2"], @tree["group_1/obj_1/obj_3"]])
83
- end
84
-
85
67
  it 'should have [] for access entry by path' do
86
68
  @node["obj_3"].should eql(@tree["group_1/obj_1/obj_3"])
87
69
  end
88
70
 
89
- it 'should access for children by .' do
90
- @node.obj_3.should eql(@tree["group_1/obj_1/obj_3"])
91
- end
92
-
93
71
  it 'should not have bug in tree of kind objects' do
94
- @tree.obj_x.obj_y1.children.keys.should eql([:obj_z1, :obj_z2])
95
- @tree.obj_x.children.keys.should eql([:obj_y1, :obj_y2])
96
- @tree.obj_x.obj_y2.obj_z3.children.keys.should eql([])
72
+ @tree.obj_x.obj_y1.children.keys.should =~ [:obj_z1, :obj_z2]
73
+ @tree.obj_x.children.keys.should =~ [:obj_y1, :obj_y2]
74
+ @tree.obj_x.obj_y2.obj_z3.children.keys.should =~ []
97
75
  end
98
76
 
99
77
  it 'should have access other object by reference' do
100
78
  @node.attr_4.should eql(@tree.other_object)
101
79
  end
80
+
81
+ it 'should have attrs with false ' do
82
+ @tree['other_object'].bool_attr.should be_false
83
+ end
84
+
85
+ it 'should have eval attrs read only' do
86
+ @node.eval_attrs.should eql({:attr_1 => 5, :attr_2 => 3, :attr_3 => 8, :attr_4 => @node["/other_object"]})
87
+ end
88
+
102
89
  end
@@ -0,0 +1,56 @@
1
+ require 'lipa'
2
+
3
+ describe Lipa::Node do
4
+ before :all do
5
+ @tree = root "lipa" do
6
+ node :group_1 do
7
+ node :obj_1, :attr_1 => 5 do
8
+
9
+ node :obj_2
10
+ node :obj_3
11
+ end
12
+ end
13
+
14
+ kind :some_kind do
15
+ param_1 "something"
16
+ end
17
+
18
+ some_kind :obj_x
19
+ end
20
+ @node = @tree["group_1/obj_1"]
21
+ end
22
+
23
+ it 'should have name' do
24
+ @node.name.should eql("obj_1")
25
+ end
26
+
27
+ it 'should have full_name' do
28
+ @node.full_name.should eql("/group_1/obj_1")
29
+ end
30
+
31
+ it 'should have root' do
32
+ @node.root.should eql(@tree)
33
+ end
34
+
35
+ it 'should kind' do
36
+ @tree["obj_x"].kind.should eql(:some_kind)
37
+ end
38
+
39
+ it 'should have parent' do
40
+ @node.parent.should eql(@tree["group_1"])
41
+ end
42
+
43
+ it 'should have children' do
44
+ @node.children.values.should =~ [@tree["group_1/obj_1/obj_2"], @tree["group_1/obj_1/obj_3"]]
45
+ end
46
+
47
+ it 'should access for children by .' do
48
+ @node.obj_3.should eql(@tree["group_1/obj_1/obj_3"])
49
+ end
50
+
51
+ it 'should not have attrs indentical withi instance varianles' do
52
+ [:attrs, :name, :children, :root, :parent, :full_name, :kind].each do |n|
53
+ @node.attrs.include?(n).should be_false
54
+ end
55
+ end
56
+ end
@@ -1,8 +1,8 @@
1
1
  require 'lipa'
2
2
 
3
- describe Lipa::Tree do
3
+ describe Lipa::Root do
4
4
  before :all do
5
- @tree = Lipa::Tree.new "lipa" do
5
+ @tree = root "lipa" do
6
6
  node :group_1 do
7
7
  any_attr "any attr"
8
8
 
@@ -19,12 +19,29 @@ describe Lipa::Tree do
19
19
  end
20
20
  end
21
21
 
22
+ it 'should have name "/"' do
23
+ @tree.name.should eql("/")
24
+ end
25
+
26
+ it 'should have full_name "/"' do
27
+ @tree.full_name.should eql("/")
28
+ end
29
+
22
30
  it "should have access any object in trees" do
23
- Lipa::Tree["lipa://group_1/obj_1"].should eql(@tree["group_1/obj_1"])
31
+ Lipa::Root["lipa://group_1/obj_1"].should eql(@tree["group_1/obj_1"])
24
32
  end
25
33
 
26
34
  it 'should load description from files' do
27
35
  @tree.external_node.msg.should eql("Hello!")
28
36
  end
37
+
38
+ it 'should support absolute path for access to object' do
39
+ @tree["/group_1/obj_1"].should eql(@tree["group_1/obj_1"])
40
+ end
41
+
42
+ it 'should support root access' do
43
+ @tree[""].should eql(@tree)
44
+ end
45
+
29
46
  end
30
47
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lipa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-27 00:00:00.000000000Z
12
+ date: 2011-11-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &12833120 !ruby/object:Gem::Requirement
16
+ requirement: &70409320 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *12833120
24
+ version_requirements: *70409320
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &12795600 !ruby/object:Gem::Requirement
27
+ requirement: &70409020 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *12795600
35
+ version_requirements: *70409020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &12794560 !ruby/object:Gem::Requirement
38
+ requirement: &70408690 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *12794560
46
+ version_requirements: *70408690
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: yard
49
- requirement: &12793300 !ruby/object:Gem::Requirement
49
+ requirement: &70408390 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *12793300
57
+ version_requirements: *70408390
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rdiscount
60
- requirement: &12792500 !ruby/object:Gem::Requirement
60
+ requirement: &70408090 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *12792500
68
+ version_requirements: *70408090
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
- requirement: &12791100 !ruby/object:Gem::Requirement
71
+ requirement: &70407720 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *12791100
79
+ version_requirements: *70407720
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: notes
82
- requirement: &12789280 !ruby/object:Gem::Requirement
82
+ requirement: &70407480 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,18 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *12789280
90
+ version_requirements: *70407480
91
+ - !ruby/object:Gem::Dependency
92
+ name: guard-rspec
93
+ requirement: &70407220 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70407220
91
102
  description:
92
103
  email: atimin@gmail.com
93
104
  executables: []
@@ -96,17 +107,18 @@ extra_rdoc_files:
96
107
  - README.md
97
108
  - NEWS.md
98
109
  files:
99
- - lib/lipa.rb
100
- - lib/lipa/version.rb
101
110
  - lib/lipa/kind.rb
111
+ - lib/lipa/version.rb
102
112
  - lib/lipa/node.rb
113
+ - lib/lipa/root.rb
103
114
  - lib/lipa/bunch.rb
104
- - lib/lipa/tree.rb
105
- - spec/tree_spec.rb
106
- - spec/node_spec.rb
107
- - spec/kind_spec.rb
108
- - spec/bunch_spec.rb
115
+ - lib/lipa.rb
116
+ - spec/node_attrs_spec.rb
117
+ - spec/root_spec.rb
109
118
  - spec/access_by_path_spec.rb
119
+ - spec/node_vars_spec.rb
120
+ - spec/bunch_spec.rb
121
+ - spec/kind_spec.rb
110
122
  - examples/simple_tree.rb
111
123
  - examples/universe.rb
112
124
  - examples/store.rb
@@ -138,8 +150,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
150
  version: '0'
139
151
  requirements: []
140
152
  rubyforge_project:
141
- rubygems_version: 1.8.11
153
+ rubygems_version: 1.8.10
142
154
  signing_key:
143
155
  specification_version: 3
144
156
  summary: Lipa - DSL for description treelike structures in Ruby
145
157
  test_files: []
158
+ has_rdoc: