lipa 0.3.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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: