iotas 0.0.4 → 0.0.5
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/Changelog +4 -9
- data/Gemfile.lock +1 -1
- data/README.md +4 -14
- data/iotas.gemspec +1 -1
- data/lib/version.rb +1 -1
- metadata +4 -30
- data/lib/iotas.rb +0 -51
- data/lib/iotas/board.rb +0 -69
- data/lib/iotas/door.rb +0 -93
- data/lib/iotas/iota.rb +0 -67
- data/lib/iotas/link.rb +0 -70
- data/lib/iotas/particle.rb +0 -226
- data/lib/iotas/room.rb +0 -192
- data/lib/iotas/spin.rb +0 -159
- data/spec/board_spec.rb +0 -95
- data/spec/door_spec.rb +0 -98
- data/spec/link_spec.rb +0 -38
- data/spec/particle_spec.rb +0 -257
- data/spec/room_spec.rb +0 -303
- data/spec/spec_helper.rb +0 -38
- data/spec/spin_spec.rb +0 -129
- data/spec/spot_spec.rb +0 -26
- data/test/test_iotas.rb +0 -168
data/spec/board_spec.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
# -*- coding: UTF-8 -*-
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'spec_helper'
|
6
|
-
#
|
7
|
-
describe Iotas::Board do
|
8
|
-
#
|
9
|
-
before (:all) do
|
10
|
-
@spin = Iotas::Spin.new 'dom0'
|
11
|
-
end
|
12
|
-
#
|
13
|
-
before(:each) do
|
14
|
-
@spin.clear!
|
15
|
-
end
|
16
|
-
#
|
17
|
-
it "require_p release_p" do
|
18
|
-
board = Iotas::Board.new 'hell', @spin
|
19
|
-
p0 = board.require_p Iotas::Particle
|
20
|
-
p0.src.should be board
|
21
|
-
p1 = board.require_p Iotas::Particle
|
22
|
-
p1.src.should be board
|
23
|
-
(p0===p1).should be_false
|
24
|
-
board.release_p p0
|
25
|
-
p2 = board.require_p Iotas::Particle
|
26
|
-
p2.src.should be board
|
27
|
-
(p0===p2).should be_true
|
28
|
-
end
|
29
|
-
#
|
30
|
-
it "particle wait and merge" do
|
31
|
-
p0 = Iotas::Particle.new
|
32
|
-
p0['k0'] = 'v0'
|
33
|
-
p0['k1'] = 'neither'
|
34
|
-
p0['k2'] = 'v2'
|
35
|
-
p0.set_link_fields 'k0,k2'
|
36
|
-
p0.link_value.should eql 'v0v2'
|
37
|
-
p1 = Iotas::Particle.new
|
38
|
-
p1['k0'] = 'v0'
|
39
|
-
p1['k1'] = 'nore'
|
40
|
-
p1['k2'] = 'v2'
|
41
|
-
p1.set_link_fields 'k0,k2'
|
42
|
-
p1.link_value.should eql 'v0v2'
|
43
|
-
P0 = p0
|
44
|
-
P1 = p1
|
45
|
-
class Board0 < Iotas::Board
|
46
|
-
attr_reader :ok, :follow
|
47
|
-
def receive_p p
|
48
|
-
@ok = false
|
49
|
-
case p.action
|
50
|
-
when Iotas::ACT_FOLLOW
|
51
|
-
@follow = true
|
52
|
-
@ok = (p===P0 and p.merged(0)===P1)
|
53
|
-
else
|
54
|
-
@follow = false
|
55
|
-
@ok = (p===P1 and p.merged(0)===P0)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
59
|
-
b0 = Board0.new 'door0', @spin
|
60
|
-
b0.process_p p0
|
61
|
-
p0.merged(0).should be_nil
|
62
|
-
b0.process_p p1
|
63
|
-
b0.ok.should be_true
|
64
|
-
b0.follow.should be_false
|
65
|
-
#
|
66
|
-
p1.merged_shift
|
67
|
-
#
|
68
|
-
b0.process_p p0
|
69
|
-
p0.merged(0).should be_nil
|
70
|
-
# need to set it to p0 too, so case in Board0 is ok
|
71
|
-
p0.add_dst Iotas::ACT_FOLLOW
|
72
|
-
p0.split_dst!
|
73
|
-
p1.add_dst Iotas::ACT_FOLLOW
|
74
|
-
p1.split_dst!
|
75
|
-
b0.process_p p1
|
76
|
-
b0.ok.should be_true
|
77
|
-
b0.follow.should be_true
|
78
|
-
end
|
79
|
-
#
|
80
|
-
it "board->json->board" do
|
81
|
-
board = Iotas::Board.new 'hell', @spin
|
82
|
-
p0 = Iotas::Particle.new
|
83
|
-
p1 = Iotas::Particle.new
|
84
|
-
p1['v0']=0
|
85
|
-
p1.set_link_fields 'v0'
|
86
|
-
board.process_p p0
|
87
|
-
board.process_p p1
|
88
|
-
hell = Iotas::Board.json_create( JSON.load( JSON.generate(board) ) )
|
89
|
-
board.name.should eql hell.name
|
90
|
-
JSON.generate(board).should eql JSON.generate(hell)
|
91
|
-
end
|
92
|
-
#
|
93
|
-
end
|
94
|
-
#
|
95
|
-
# EOF
|
data/spec/door_spec.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
# -*- coding: UTF-8 -*-
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'spec_helper'
|
6
|
-
#
|
7
|
-
describe Iotas::Door do
|
8
|
-
#
|
9
|
-
before (:all) do
|
10
|
-
@spin = Iotas::Spin.new 'dom0'
|
11
|
-
end
|
12
|
-
#
|
13
|
-
before(:each) do
|
14
|
-
@spin.clear!
|
15
|
-
end
|
16
|
-
#
|
17
|
-
it "require_p release_p" do
|
18
|
-
door = Iotas::Door.new 'hell', @spin
|
19
|
-
p0 = door.require_p Iotas::Particle
|
20
|
-
p0.src.should be door
|
21
|
-
p1 = door.require_p Iotas::Particle
|
22
|
-
p1.src.should be door
|
23
|
-
(p0===p1).should be_false
|
24
|
-
door.release_p p0
|
25
|
-
p2 = door.require_p Iotas::Particle
|
26
|
-
p2.src.should be door
|
27
|
-
(p0===p2).should be_true
|
28
|
-
end
|
29
|
-
#
|
30
|
-
it "NoMethodError when receive_p not overridden" do
|
31
|
-
class Door0 < Iotas::Door
|
32
|
-
end
|
33
|
-
f = Fake.new 'fake', @spin
|
34
|
-
d0 = Door0.new 'door0', f
|
35
|
-
p0 = d0.require_p Iotas::Particle
|
36
|
-
lambda { d0.process_p p0 }.should raise_error(NoMethodError)
|
37
|
-
end
|
38
|
-
#
|
39
|
-
it "send_p, send_sys_p, release_p and release of lost particles" do
|
40
|
-
class Door0 < Iotas::Door
|
41
|
-
def receive_p p
|
42
|
-
case p.action
|
43
|
-
when 'RELEASE'
|
44
|
-
release_p p
|
45
|
-
when 'SEND'
|
46
|
-
send_p p
|
47
|
-
when 'SEND_SYS'
|
48
|
-
send_sys_p p
|
49
|
-
else
|
50
|
-
# lost!!
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
f = Fake.new 'fake', @spin
|
55
|
-
d0 = Door0.new 'door0', f
|
56
|
-
p0 = d0.require_p Iotas::Particle
|
57
|
-
#
|
58
|
-
p0.add_dst 'SEND'
|
59
|
-
p0.split_dst!
|
60
|
-
d0.process_p p0
|
61
|
-
f.p.should eql p0
|
62
|
-
p0.clear_dsts!
|
63
|
-
#
|
64
|
-
p0.add_dst 'SEND_SYS'
|
65
|
-
p0.split_dst!
|
66
|
-
d0.process_p p0
|
67
|
-
f.sp.should eql p0
|
68
|
-
p0.clear_dsts!
|
69
|
-
#
|
70
|
-
p0.add_dst 'RELEASE'
|
71
|
-
p0.split_dst!
|
72
|
-
d0.process_p p0
|
73
|
-
p1 = d0.require_p Iotas::Particle
|
74
|
-
p1.should be p0
|
75
|
-
p0.clear_dsts!
|
76
|
-
#
|
77
|
-
p0.add_dst 'LOST'
|
78
|
-
p0.split_dst!
|
79
|
-
d0.process_p p0
|
80
|
-
p1 = d0.require_p Iotas::Particle
|
81
|
-
p1.should be p0
|
82
|
-
p0.clear_dsts!
|
83
|
-
#
|
84
|
-
d0.process_sys_p p0
|
85
|
-
p1 = @spin.require_p Iotas::Particle
|
86
|
-
p1.should be p0
|
87
|
-
end
|
88
|
-
#
|
89
|
-
it "door->json->door" do
|
90
|
-
door = Iotas::Door.new 'hell', @spin
|
91
|
-
hell = Iotas::Door.json_create( JSON.load( JSON.generate(door) ) )
|
92
|
-
door.name.should eql hell.name
|
93
|
-
JSON.generate(door).should eql JSON.generate(hell)
|
94
|
-
end
|
95
|
-
#
|
96
|
-
end
|
97
|
-
#
|
98
|
-
# EOF
|
data/spec/link_spec.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
# -*- coding: UTF-8 -*-
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'spec_helper'
|
6
|
-
#
|
7
|
-
describe Iotas::Link do
|
8
|
-
#
|
9
|
-
it "from particle data" do
|
10
|
-
@spin = Iotas::Spin.new 'dom0'
|
11
|
-
p = @spin.require_p Iotas::Particle
|
12
|
-
p.set_data Iotas::LNK_SRC, 'input1'
|
13
|
-
p.set_data Iotas::LNK_DSTS, 'concat1?follow,output1'
|
14
|
-
p.set_data Iotas::LNK_FIELDS, 'f0,f2'
|
15
|
-
p.set_data Iotas::LNK_CONDF, 'f0,f1,f2'
|
16
|
-
p.set_data Iotas::LNK_CONDV, 'v0v1v2'
|
17
|
-
lnk = Iotas::Link.from_particle_data p
|
18
|
-
lnk.src.should eql 'input1'
|
19
|
-
lnk.dsts.should eql 'concat1?follow,output1'
|
20
|
-
lnk.fields.should eql 'f0,f2'
|
21
|
-
lnk.cond_fields.should eql 'f0,f1,f2'
|
22
|
-
lnk.cond_value.should eql 'v0v1v2'
|
23
|
-
end
|
24
|
-
#
|
25
|
-
it "link->json->link" do
|
26
|
-
link = Iotas::Link.new 'input1', 'concat1?follow,output1', 'f0,f2', 'f0,f1,f2', 'v0v1v2'
|
27
|
-
lnk = Iotas::Link.json_create( JSON.load( JSON.generate(link) ) )
|
28
|
-
link.src.should eql lnk.src
|
29
|
-
link.dsts.should eql lnk.dsts
|
30
|
-
link.fields.should eql lnk.fields
|
31
|
-
link.cond_fields.should eql lnk.cond_fields
|
32
|
-
link.cond_value.should eql lnk.cond_value
|
33
|
-
JSON.generate(link).should eql JSON.generate(lnk)
|
34
|
-
end
|
35
|
-
#
|
36
|
-
end
|
37
|
-
#
|
38
|
-
# EOF
|
data/spec/particle_spec.rb
DELETED
@@ -1,257 +0,0 @@
|
|
1
|
-
#! /usr/bin/env ruby
|
2
|
-
# -*- coding: UTF-8 -*-
|
3
|
-
#
|
4
|
-
|
5
|
-
require 'spec_helper'
|
6
|
-
#
|
7
|
-
describe Iotas::Particle do
|
8
|
-
#
|
9
|
-
it "payload manipulation" do
|
10
|
-
p = Iotas::Particle.new
|
11
|
-
#
|
12
|
-
p['key']=666
|
13
|
-
p['key'].should eql 666
|
14
|
-
p.data('key').should eql 666
|
15
|
-
p.get_data('key').should eql 666
|
16
|
-
#
|
17
|
-
p.set_data 'key', 69
|
18
|
-
p['key'].should eql 69
|
19
|
-
p.data('key').should eql 69
|
20
|
-
p.get_data('key').should eql 69
|
21
|
-
end
|
22
|
-
#
|
23
|
-
it "payload clone" do
|
24
|
-
p = Iotas::Particle.new
|
25
|
-
p['k00'] = { 'k0'=>0,'k1'=>1}
|
26
|
-
p['k11'] = [1,2,3]
|
27
|
-
o = Iotas::Particle.new
|
28
|
-
o.clone_data p
|
29
|
-
p['k00']=nil
|
30
|
-
p['k00'].should be_nil
|
31
|
-
o['k00']['k0'].should eql 0
|
32
|
-
o['k00']['k1'].should eql 1
|
33
|
-
p['k11']=nil
|
34
|
-
p['k11'].should be_nil
|
35
|
-
o['k11'][0].should eql 1
|
36
|
-
o['k11'][1].should eql 2
|
37
|
-
o['k11'][2].should eql 3
|
38
|
-
end
|
39
|
-
#
|
40
|
-
it "particle merge" do
|
41
|
-
p = Iotas::Particle.new
|
42
|
-
q = Iotas::Particle.new
|
43
|
-
o = Iotas::Particle.new
|
44
|
-
p.merge! q
|
45
|
-
p.merge! o
|
46
|
-
p.merged(0).should be q
|
47
|
-
p.merged(1).should be o
|
48
|
-
p.merged(2).should be_nil
|
49
|
-
p.merged_shift.should be q
|
50
|
-
p.merged(0).should be o
|
51
|
-
p.merged(1).should be_nil
|
52
|
-
p.merged_shift.should be o
|
53
|
-
p.merged(0).should be_nil
|
54
|
-
p.merge! q
|
55
|
-
p.merge! o
|
56
|
-
p.merged(0).should be q
|
57
|
-
p.merged(1).should be o
|
58
|
-
p.clear_merged!
|
59
|
-
p.merged(0).should be_nil
|
60
|
-
end
|
61
|
-
#
|
62
|
-
it "routing: add_dsts, next_dst and dst_routed!" do
|
63
|
-
p = Iotas::Particle.new
|
64
|
-
d0 = Iotas::Door.new 'door0', nil
|
65
|
-
d1 = Iotas::Door.new 'door1', nil
|
66
|
-
p.dst.should be_nil
|
67
|
-
p.next_dst.should be_nil
|
68
|
-
p.add_dsts 'some?where,room0/room1/door?action,room/door,door'
|
69
|
-
p.next_dst.should eql 'some?where'
|
70
|
-
p.dst_routed! d0
|
71
|
-
p.dst.should be d0
|
72
|
-
p.next_dst.should eql 'room0/room1/door?action'
|
73
|
-
p.dst_routed! d1
|
74
|
-
p.dst.should be d1
|
75
|
-
p.next_dst.should eql 'room/door'
|
76
|
-
p.dst_routed! nil
|
77
|
-
p.dst.should be_nil
|
78
|
-
p.next_dst.should eql 'door'
|
79
|
-
end
|
80
|
-
#
|
81
|
-
it "wrong path should raise exeption" do
|
82
|
-
p = Iotas::Particle.new
|
83
|
-
lambda { p.add_dst 'action', '/room' }.should raise_error(Iotas::Exception)
|
84
|
-
lambda { p.add_dst 'action', 'room/' }.should raise_error(Iotas::Exception)
|
85
|
-
lambda { p.add_dst '', 'room/' }.should raise_error(Iotas::Exception)
|
86
|
-
lambda { p.add_dst 'action', 'room//door' }.should raise_error(Iotas::Exception)
|
87
|
-
lambda { p.add_dst ' ' }.should raise_error(Iotas::Exception)
|
88
|
-
lambda { p.add_dst ' ', '' }.should raise_error(Iotas::Exception)
|
89
|
-
lambda { p.add_dst 'f f' }.should raise_error(Iotas::Exception)
|
90
|
-
lambda { p.add_dst '', ' d' }.should raise_error(Iotas::Exception)
|
91
|
-
lambda { p.add_dst '' }.should raise_error(Iotas::Exception)
|
92
|
-
lambda { p.add_dst '', '' }.should raise_error(Iotas::Exception)
|
93
|
-
lambda { p.add_dst nil }.should raise_error(TypeError)
|
94
|
-
lambda { p.add_dst 'action', nil }.should raise_error(NoMethodError)
|
95
|
-
end
|
96
|
-
#
|
97
|
-
it "routing: set_dst!" do
|
98
|
-
p = Iotas::Particle.new
|
99
|
-
d0 = Iotas::Door.new 'door0', nil
|
100
|
-
#
|
101
|
-
p.set_dst! 'action', d0
|
102
|
-
p.action.should eql 'action'
|
103
|
-
p.dst.should be d0
|
104
|
-
end
|
105
|
-
#
|
106
|
-
it "routing: add_dst and split_dst!" do
|
107
|
-
p = Iotas::Particle.new
|
108
|
-
d0 = Iotas::Door.new 'door0', nil
|
109
|
-
#
|
110
|
-
p.split_dst!
|
111
|
-
p.room.should be_nil
|
112
|
-
p.door.should be_nil
|
113
|
-
p.action.should be_nil
|
114
|
-
#
|
115
|
-
p.add_dst 'action', 'room0/room1/door'
|
116
|
-
p.split_dst!
|
117
|
-
p.room.should eql 'room0/room1'
|
118
|
-
p.door.should eql 'door'
|
119
|
-
p.action.should eql 'action'
|
120
|
-
p.clear_dsts!
|
121
|
-
#
|
122
|
-
p.add_dst 'action', 'room/door'
|
123
|
-
p.split_dst!
|
124
|
-
p.room.should eql 'room'
|
125
|
-
p.door.should eql 'door'
|
126
|
-
p.action.should eql 'action'
|
127
|
-
p.clear_dsts!
|
128
|
-
#
|
129
|
-
p.add_dst 'action', ''
|
130
|
-
p.split_dst!
|
131
|
-
p.room.should be_nil
|
132
|
-
p.door.should be_nil
|
133
|
-
p.action.should eql 'action'
|
134
|
-
p.clear_dsts!
|
135
|
-
#
|
136
|
-
p.add_dst 'action'
|
137
|
-
p.split_dst!
|
138
|
-
p.room.should be_nil
|
139
|
-
p.door.should be_nil
|
140
|
-
p.action.should eql 'action'
|
141
|
-
p.clear_dsts!
|
142
|
-
#
|
143
|
-
p.add_dsts 'door?action,?action'
|
144
|
-
p.split_dst!
|
145
|
-
p.room.should be_nil
|
146
|
-
p.door.should eql 'door'
|
147
|
-
p.action.should eql 'action'
|
148
|
-
#
|
149
|
-
p.dst_routed! d0
|
150
|
-
#
|
151
|
-
p.dst.should be d0
|
152
|
-
p.split_dst!
|
153
|
-
p.room.should be_nil
|
154
|
-
p.door.should be_nil
|
155
|
-
p.action.should eql 'action'
|
156
|
-
#
|
157
|
-
end
|
158
|
-
#
|
159
|
-
it "routing: error!" do
|
160
|
-
p = Iotas::Particle.new
|
161
|
-
d = Iotas::Door.new 'door', nil
|
162
|
-
p.init! d
|
163
|
-
p.add_dsts 'door?action,?action'
|
164
|
-
p.next_dst.should eql 'door?action'
|
165
|
-
p.error! 'err_msg'
|
166
|
-
p[Iotas::FIELD_ERROR_MSG].should eql 'err_msg'
|
167
|
-
p.action.should eq Iotas::ACT_ERROR
|
168
|
-
p.dst.should be d
|
169
|
-
end
|
170
|
-
#
|
171
|
-
it "link fields and link value" do
|
172
|
-
p = Iotas::Particle.new
|
173
|
-
p['k0'] = 'v0'
|
174
|
-
p['k1'] = 'v1'
|
175
|
-
p['k2'] = 'v2'
|
176
|
-
p.set_link_fields 'k0,k2'
|
177
|
-
p.link_value.should eql 'v0v2'
|
178
|
-
p.set_link_fields 'k1,k0'
|
179
|
-
p.link_value.should eql 'v1v0'
|
180
|
-
p['k0']='vx'
|
181
|
-
p.link_value.should eql 'v1vx'
|
182
|
-
end
|
183
|
-
#
|
184
|
-
it "apply_link!" do
|
185
|
-
p = Iotas::Particle.new
|
186
|
-
p['k0'] = 'v0'
|
187
|
-
p['k1'] = 'v1'
|
188
|
-
p['k2'] = 'v2'
|
189
|
-
p.set_link_fields 'k0,k2'
|
190
|
-
p.add_dsts 'door?action,?action'
|
191
|
-
p.src.should be_nil
|
192
|
-
p.link_value.should eql 'v0v2'
|
193
|
-
p.next_dst.should eql 'door?action'
|
194
|
-
lnk = Iotas::Link.new('door0', 'door1?get,door2', 'k1', 'f0,f1', 'v0v1')
|
195
|
-
f = Fake.new 'fake', nil
|
196
|
-
lnk.door = f
|
197
|
-
p.apply_link! lnk
|
198
|
-
p.src.should be f
|
199
|
-
p.next_dst.should eql 'door1?get'
|
200
|
-
p.link_value.should eql 'v1'
|
201
|
-
end
|
202
|
-
#
|
203
|
-
it "particle->json->particle" do
|
204
|
-
s0 = Iotas::Spin.new 'top'
|
205
|
-
s1 = Iotas::Room.new 'room0', s0
|
206
|
-
s2 = Iotas::Room.new 'room1', s1
|
207
|
-
s3 = Iotas::Door.new 'doora', s2
|
208
|
-
s4 = Iotas::Door.new 'doorb', s1
|
209
|
-
p0 = Iotas::Particle.new
|
210
|
-
p0['k0'] = 'v0'
|
211
|
-
p0['k1'] = 'v1'
|
212
|
-
p0['k2'] = 'v2'
|
213
|
-
p0.init! s3
|
214
|
-
p0.set_link_fields 'k0,k2'
|
215
|
-
p0.add_dsts 'room0/room1/room2/doorX?myaction,door?action,?action'
|
216
|
-
p0.split_dst!
|
217
|
-
p1 = Iotas::Particle.new
|
218
|
-
p1['k3'] = 'v6'
|
219
|
-
p1['k4'] = 'v7'
|
220
|
-
p1['k5'] = 'v8'
|
221
|
-
p1.init! s3
|
222
|
-
p1.dst_routed! s4
|
223
|
-
p1.set_link_fields 'k5,k4,k3'
|
224
|
-
p1.add_dsts 'room0/room1/door?action,output?action'
|
225
|
-
p0.merge! p1
|
226
|
-
o = JSON.load( JSON.generate(p0) )
|
227
|
-
o['spin'] = s0
|
228
|
-
px = Iotas::Particle.json_create( o )
|
229
|
-
((px.ts-p0.ts)<0.5).should be_true
|
230
|
-
px.src.should be s3
|
231
|
-
px.dst.should be_nil
|
232
|
-
px.room.should eql 'room0/room1/room2'
|
233
|
-
px.door.should eql 'doorX'
|
234
|
-
px.action.should eql 'myaction'
|
235
|
-
px.next_dst.should eql 'room0/room1/room2/doorX?myaction'
|
236
|
-
px.link_value.should eql 'v0v2'
|
237
|
-
px['k0'].should eql 'v0'
|
238
|
-
px['k1'].should eql 'v1'
|
239
|
-
px['k2'].should eql 'v2'
|
240
|
-
py = px.merged(0)
|
241
|
-
((py.ts-p1.ts)<0.5).should be_true
|
242
|
-
py.src.should be s3
|
243
|
-
py.dst.should be s4
|
244
|
-
py.room.should be_nil
|
245
|
-
py.door.should be_nil
|
246
|
-
py.action.should be_nil
|
247
|
-
py.next_dst.should eql 'room0/room1/door?action'
|
248
|
-
py.link_value.should eql 'v8v7v6'
|
249
|
-
py['k3'].should eql 'v6'
|
250
|
-
py['k4'].should eql 'v7'
|
251
|
-
py['k5'].should eql 'v8'
|
252
|
-
JSON.generate(p0).should eql JSON.generate(px)
|
253
|
-
end
|
254
|
-
#
|
255
|
-
end
|
256
|
-
#
|
257
|
-
# EOF
|