lipa 0.2.0 → 0.2.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/NEWS.md CHANGED
@@ -1,3 +1,19 @@
1
+ 2011-10-19 Release-0.2.1
2
+
3
+ - Fixed bug in Lipa::Node class. Now is working:
4
+
5
+ ```Ruby
6
+ t = Lipa::Tree.new("1") do
7
+ kind :some_kind, :for => :node
8
+
9
+ with :attr_1 => 999 do
10
+ some_kind :obj_1
11
+ end
12
+ end
13
+ ```
14
+
15
+ - Refactoring. Added method Node#init_node for making cnildren nodes
16
+
1
17
  2011-10-17 Release-0.2.0
2
18
  ------------------------
3
19
  - New clear API with one general class ```Lipa::Node```. Classes ```Lipa::Leaf``` and ```Lipa::Branch```
@@ -40,19 +40,14 @@ module Lipa
40
40
  def initialize(parent, attrs = {}, &block)
41
41
  @attrs = attrs
42
42
  @parent = parent
43
- @parent.attrs[:children] ||= {}
44
43
 
45
44
  instance_eval &block if block_given?
46
45
  end
47
46
 
48
47
  def method_missing(name, *args, &block)
49
- init_class = Lipa::Node.init_methods[name]
50
- if init_class and init_class.class == Class
51
- args[1] ||= {}
52
- args[1] = @attrs.merge(args[1]) #to save local attrs
53
- args[1][:parent] = @parent
54
- @parent.attrs[:children][args[0].to_sym] = init_class.send(:new, *args, &block )
55
- else
48
+ args[1] ||= {}
49
+ args[1] = @attrs.merge(args[1])
50
+ unless Node.add_node(name, @parent, *args, &block)
56
51
  super
57
52
  end
58
53
  end
@@ -59,25 +59,7 @@ module Lipa
59
59
  end
60
60
 
61
61
  def method_missing(name, *args, &block)
62
- @attrs[:children] ||= {}
63
-
64
- # Init from kind
65
- kind = @@kinds[name]
66
- if kind and kind.for
67
- init_class = @@init_methods[kind.for]
68
- args[1] ||= {}
69
- args[1][:kind] = kind.name
70
- else
71
- #from init methods
72
- init_class = @@init_methods[name]
73
- end
74
-
75
- if init_class
76
- # Making children objects
77
- args[1] ||= {}
78
- args[1][:parent] = self
79
- @attrs[:children][args[0].to_sym] = init_class.send(:new, *args, &block )
80
- else
62
+ unless Node.add_node(name, self, *args, &block)
81
63
  case args.size
82
64
  when 0
83
65
  child = @attrs[:children][name]
@@ -145,6 +127,35 @@ module Lipa
145
127
  end
146
128
  end
147
129
 
130
+ # Making children node
131
+ #
132
+ # @param [String] name of initial method or kind
133
+ # @param [Node] parent node
134
+ # @param args of node
135
+ # @param block for node
136
+ def self.add_node(name, parent, *args, &block)
137
+ parent.attrs[:children] ||= {}
138
+
139
+ # Init from kind
140
+ kind = @@kinds[name]
141
+ if kind and kind.for
142
+ init_class = @@init_methods[kind.for]
143
+ args[1] ||= {}
144
+ args[1][:kind] = kind.name
145
+ else
146
+ #from init methods
147
+ init_class = @@init_methods[name]
148
+ end
149
+
150
+ if init_class
151
+ args[1] ||= {}
152
+ args[1][:parent] = parent
153
+ parent.attrs[:children][args[0].to_sym] = init_class.send(:new, *args, &block )
154
+ else
155
+ nil
156
+ end
157
+ end
158
+
148
159
  #Deprecated methods
149
160
  def bunch(attrs = {}, &block)
150
161
  warn "#{__FILE__}:#{__LINE__} Deprecated method. Please use Lipa::Node. It is removing in 0.3.0 version"
@@ -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.2.0"
27
+ VERSION = "0.2.1"
28
28
  end
@@ -19,4 +19,17 @@ describe Lipa::Bunch do
19
19
  end
20
20
  t["obj_1"].attr_1.should eql(999)
21
21
  end
22
+
23
+ it 'should work with kinds' do
24
+ t = Lipa::Tree.new("1") do
25
+ kind :some_kind, :for => :node
26
+
27
+ with :attr_1 => 999 do
28
+ some_kind :obj_1
29
+ end
30
+ end
31
+ t["obj_1"].attr_1.should eql(999)
32
+ end
33
+
34
+
22
35
  end
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.2.0
4
+ version: 0.2.1
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-17 00:00:00.000000000Z
12
+ date: 2011-10-19 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &21636340 !ruby/object:Gem::Requirement
16
+ requirement: &9989380 !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: *21636340
24
+ version_requirements: *9989380
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &21635780 !ruby/object:Gem::Requirement
27
+ requirement: &9988620 !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: *21635780
35
+ version_requirements: *9988620
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rspec
38
- requirement: &21635220 !ruby/object:Gem::Requirement
38
+ requirement: &9987980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *21635220
46
+ version_requirements: *9987980
47
47
  description:
48
48
  email: atimin@gmail.com
49
49
  executables: []