basilik 0.0.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.
- checksums.yaml +15 -0
- data/.autotest +1 -0
- data/.gitignore +4 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +42 -0
- data/README.md +319 -0
- data/Rakefile +21 -0
- data/basilik.gemspec +27 -0
- data/examples/a.rb +10 -0
- data/examples/b.rb +5 -0
- data/examples/c.rb +6 -0
- data/examples/d.rb +15 -0
- data/examples/e.rb +21 -0
- data/examples/f.rb +20 -0
- data/examples/g.rb +20 -0
- data/examples/h.rb +22 -0
- data/examples/i.rb +26 -0
- data/examples/j.rb +10 -0
- data/lib/basilik/action.rb +141 -0
- data/lib/basilik/core.rb +1 -0
- data/lib/basilik/core_ext/map.rb +23 -0
- data/lib/basilik/core_ext/string.rb +15 -0
- data/lib/basilik/faults.rb +9 -0
- data/lib/basilik/load.rb +22 -0
- data/lib/basilik/ref.rb +64 -0
- data/lib/basilik/snapshot.rb +99 -0
- data/lib/basilik/version.rb +3 -0
- data/lib/basilik.rb +17 -0
- data/spec/basilik/.firebase_spec.rb.swp +0 -0
- data/spec/basilik/core_ext/map_spec.rb +45 -0
- data/spec/basilik/core_ext/string_spec.rb +26 -0
- data/spec/basilik/ref_spec.rb +109 -0
- data/spec/basilik/root_spec.rb +301 -0
- data/spec/basilik/snapshot_spec.rb +174 -0
- data/spec/spec_helper.rb +10 -0
- metadata +105 -0
@@ -0,0 +1,301 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Basilik::Load do
|
4
|
+
before :all do
|
5
|
+
@url = ENV['fb_url']
|
6
|
+
@fb = Basilik::Load.new( @url )
|
7
|
+
end
|
8
|
+
|
9
|
+
describe '#inc' do
|
10
|
+
before :all do
|
11
|
+
@fb.remove
|
12
|
+
@fb.set(
|
13
|
+
{
|
14
|
+
a: {
|
15
|
+
a_1: 1,
|
16
|
+
},
|
17
|
+
b: {
|
18
|
+
b_1: 1.5
|
19
|
+
},
|
20
|
+
c: {
|
21
|
+
c_1: "fred"
|
22
|
+
}
|
23
|
+
}
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "increases an integer value correctly" do
|
28
|
+
@fb.child( :a ).inc( :a_1 )
|
29
|
+
@fb.child( 'a/a_1' ).read.should == 2
|
30
|
+
end
|
31
|
+
|
32
|
+
it "increases an float value correctly" do
|
33
|
+
@fb.child( :b ).inc( :b_1 )
|
34
|
+
@fb.child( 'b/b_1' ).read.should == 2.5
|
35
|
+
end
|
36
|
+
|
37
|
+
it "set the value to zero is the data does not exist" do
|
38
|
+
@fb.child( :b ).inc( :b_2 )
|
39
|
+
@fb.child( 'b/b_2' ).read.should == 0
|
40
|
+
end
|
41
|
+
|
42
|
+
it "fails if the field is non numeric" do
|
43
|
+
lambda { @fb.child( :c ).inc( :c_1 ) }.should raise_error( Basilik::Load::NonNumericFieldError )
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#dec' do
|
48
|
+
before :all do
|
49
|
+
@fb.remove
|
50
|
+
@fb.set(
|
51
|
+
{
|
52
|
+
a: {
|
53
|
+
a_1: 2,
|
54
|
+
},
|
55
|
+
b: {
|
56
|
+
b_1: 1.5
|
57
|
+
},
|
58
|
+
c: {
|
59
|
+
c_1: "fred"
|
60
|
+
}
|
61
|
+
}
|
62
|
+
)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "decreases an integer value correctly" do
|
66
|
+
@fb.child( :a ).dec( :a_1 )
|
67
|
+
@fb.child( 'a/a_1' ).read.should == 1
|
68
|
+
end
|
69
|
+
|
70
|
+
it "decreases an float value correctly" do
|
71
|
+
@fb.child( :b ).dec( :b_1 )
|
72
|
+
@fb.child( 'b/b_1' ).read.should == 0.5
|
73
|
+
end
|
74
|
+
|
75
|
+
it "set the value to zero is the data does not exist" do
|
76
|
+
@fb.child( :b ).dec( :b_2 )
|
77
|
+
@fb.child( 'b/b_2' ).read.should == 0
|
78
|
+
end
|
79
|
+
|
80
|
+
it "fails if the field is non numeric" do
|
81
|
+
lambda { @fb.child( :c ).dec( :c_1 ) }.should raise_error( Basilik::Load::NonNumericFieldError )
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
describe '#set_rules' do
|
86
|
+
before :each do
|
87
|
+
@auth_fb = Basilik::Load.new( @url, ENV['fb_auth_token'] )
|
88
|
+
end
|
89
|
+
|
90
|
+
after :each do
|
91
|
+
@auth_fb.set_rules( { '.read' => true, '.write' => true } )
|
92
|
+
end
|
93
|
+
|
94
|
+
it "fetch security rules correctly" do
|
95
|
+
@auth_fb.set( tmp: { a: 0, b: 1 } )
|
96
|
+
@auth_fb.set_rules(
|
97
|
+
{ '.read' => true, '.write' => false,
|
98
|
+
"tmp" => { '.read' => true, '.write' => false }
|
99
|
+
})
|
100
|
+
res= @auth_fb.get_rules
|
101
|
+
res.rules.tmp['.read'].should be_true
|
102
|
+
res.rules.tmp['.write'].should be_false
|
103
|
+
|
104
|
+
res = @fb.child(:tmp).read
|
105
|
+
res.should == { a: 0, b: 1 }
|
106
|
+
|
107
|
+
lambda { @fb.set( tmp: { d: 0 } ) }.should raise_error Basilik::Load::PermissionDeniedError
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "#read" do
|
112
|
+
before :all do
|
113
|
+
@fb.remove
|
114
|
+
@fb.set( {
|
115
|
+
test_1: {
|
116
|
+
test_1_1: {
|
117
|
+
key_1: 'Hello',
|
118
|
+
key_2: 'World'
|
119
|
+
},
|
120
|
+
test_1_2: {
|
121
|
+
key_1: 10,
|
122
|
+
key_2: [10,20,30],
|
123
|
+
key_3: {
|
124
|
+
test_1_2_1: {
|
125
|
+
key_1: 50
|
126
|
+
}
|
127
|
+
}
|
128
|
+
}
|
129
|
+
},
|
130
|
+
test_2: 10,
|
131
|
+
test_3: :Blee,
|
132
|
+
test_4: %w[hello world],
|
133
|
+
test_5: [{a:1,b:2}, {c:3,d:4}]
|
134
|
+
}
|
135
|
+
)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "reads a simple number correctly" do
|
139
|
+
@fb.child( :test_2 ).read.to_i.should == 10
|
140
|
+
end
|
141
|
+
|
142
|
+
it "reads a string correctly" do
|
143
|
+
@fb.child( :test_3 ).read.should == "Blee"
|
144
|
+
end
|
145
|
+
|
146
|
+
it "reads a simple array correctly" do
|
147
|
+
@fb.child( :test_4 ).read.should == %w[hello world]
|
148
|
+
end
|
149
|
+
|
150
|
+
it "reads an array of hash correctly" do
|
151
|
+
@fb.child( 'test_5/0' ).read.a.should == 1
|
152
|
+
end
|
153
|
+
|
154
|
+
it "reads a deeply nested hash correctly" do
|
155
|
+
@fb.child( 'test_1/test_1_2/key_3').read.test_1_2_1.key_1.should == 50
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe '#push' do
|
160
|
+
before :each do
|
161
|
+
@fb.remove
|
162
|
+
end
|
163
|
+
|
164
|
+
it "makes up an empty ref if no data" do
|
165
|
+
resp = @fb.push()
|
166
|
+
resp.name.should_not be_nil
|
167
|
+
end
|
168
|
+
|
169
|
+
it "builds a list with values" do
|
170
|
+
resp = @fb.push( {a:1,b:2} )
|
171
|
+
resp.name.should_not be_nil
|
172
|
+
@fb.child( resp.name ).read.a.should == 1
|
173
|
+
@fb.child( resp.name ).read.b.should == 2
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
describe 'priority' do
|
178
|
+
before :each do
|
179
|
+
@fb.remove
|
180
|
+
end
|
181
|
+
|
182
|
+
it "sets priority with complex data correctly" do
|
183
|
+
@fb.set( c:{d:1} )
|
184
|
+
ref = @fb.child( :c )
|
185
|
+
ref.set_priority( 2.0 )
|
186
|
+
ref.get_priority.to_i.should == 2.0
|
187
|
+
end
|
188
|
+
|
189
|
+
it "unsets priority correctly" do
|
190
|
+
@fb.set( c:{d:1} )
|
191
|
+
ref = @fb.child( :c )
|
192
|
+
ref.set_priority( 2.0 )
|
193
|
+
ref.get_priority.to_i.should == 2.0
|
194
|
+
ref.set_priority( nil )
|
195
|
+
ref.get_priority.should == nil
|
196
|
+
end
|
197
|
+
|
198
|
+
it "sets priority for lists correctly" do
|
199
|
+
a_ref = @fb.push( {b:1, a:2} )
|
200
|
+
b_ref = @fb.push( {e:1, d:2} )
|
201
|
+
a_ref.set_priority( 20 )
|
202
|
+
b_ref.set_priority( 10 )
|
203
|
+
a_ref.get_priority.to_i.should == 20
|
204
|
+
b_ref.get_priority.to_i.should == 10
|
205
|
+
res = a_ref.parent.read
|
206
|
+
keys = [b_ref.name, a_ref.name]
|
207
|
+
index = 0
|
208
|
+
res.each_pair do |k,v|
|
209
|
+
k.should == keys[index]
|
210
|
+
index += 1
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
it "sets priority for lists correctly" do
|
215
|
+
a_ref = @fb.push
|
216
|
+
a1_ref = a_ref.push( a:1 )
|
217
|
+
a2_ref = a_ref.push( b:1 )
|
218
|
+
b_ref = @fb.push
|
219
|
+
b1_ref = b_ref.push( c:1 )
|
220
|
+
b2_ref = b_ref.push( d:1 )
|
221
|
+
|
222
|
+
a_ref.set_priority( 20 )
|
223
|
+
a1_ref.set_priority( 50 )
|
224
|
+
a2_ref.set_priority( 30 )
|
225
|
+
b_ref.set_priority( 10 )
|
226
|
+
b1_ref.set_priority( 50 )
|
227
|
+
b2_ref.set_priority( 30 )
|
228
|
+
|
229
|
+
a1_ref.get_priority.to_i.should == 50
|
230
|
+
a2_ref.get_priority.to_i.should == 30
|
231
|
+
b1_ref.get_priority.to_i.should == 50
|
232
|
+
b2_ref.get_priority.to_i.should == 30
|
233
|
+
|
234
|
+
res = a_ref.parent.read
|
235
|
+
keys = [b_ref.name, a_ref.name]
|
236
|
+
index = 0
|
237
|
+
res.each_pair do |k,v|
|
238
|
+
k.should == keys[index]
|
239
|
+
index += 1
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
|
245
|
+
it "reads a simple number correctly" do
|
246
|
+
@fb.update( {test_1: 20 } )
|
247
|
+
@fb.child( :test_1 ).read.to_i.should == 20
|
248
|
+
end
|
249
|
+
|
250
|
+
describe '#remove' do
|
251
|
+
before :each do
|
252
|
+
@fb.remove
|
253
|
+
end
|
254
|
+
|
255
|
+
it "removes data correctly" do
|
256
|
+
@fb.set( {fred: 10} )
|
257
|
+
@fb.child( :fred ).remove
|
258
|
+
lambda { @fb.child( :fred ).read }.should raise_error( /No data/ )
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
describe '#update' do
|
263
|
+
before :all do
|
264
|
+
@fb.remove
|
265
|
+
@fb.set( a:{b:1,c:2} )
|
266
|
+
@a_ref = @fb.child( :a )
|
267
|
+
end
|
268
|
+
|
269
|
+
describe 'oneshot' do
|
270
|
+
it "updates an integer correctly" do
|
271
|
+
@a_ref.update( c:5 )
|
272
|
+
@a_ref.child( :c ).read.should == 5
|
273
|
+
end
|
274
|
+
|
275
|
+
it "updates a float correctly" do
|
276
|
+
@a_ref.update( c:5.0 )
|
277
|
+
@a_ref.child( :c ).read.should == 5.0
|
278
|
+
end
|
279
|
+
|
280
|
+
it "updates a boolean correctly" do
|
281
|
+
@a_ref.update( c:true )
|
282
|
+
@a_ref.child( :c ).read.should be_true
|
283
|
+
end
|
284
|
+
|
285
|
+
it "updates a boolean correctly" do
|
286
|
+
@a_ref.update( c:true )
|
287
|
+
@a_ref.child( :c ).read.should be_true
|
288
|
+
end
|
289
|
+
|
290
|
+
it "updates an object correctly" do
|
291
|
+
@a_ref.update( c:{fred:'Hello', blee:'World'} )
|
292
|
+
@a_ref.child( :c ).read.should == {fred:'Hello', blee:'World'}
|
293
|
+
end
|
294
|
+
|
295
|
+
it "updates an array correctly" do
|
296
|
+
@a_ref.update( c:%w[Hello World] )
|
297
|
+
@a_ref.child( :c ).read.should == %w[Hello World]
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
describe Basilik::Snapshot do
|
5
|
+
|
6
|
+
describe '#to_map' do
|
7
|
+
it "sorts a simple hierarchy correctly" do
|
8
|
+
snap = Basilik::Snapshot.new( {a:{b:1} } )
|
9
|
+
snap.to_map.a.should == {b:1}
|
10
|
+
end
|
11
|
+
|
12
|
+
it "sorts a priority hierarchy correctly" do
|
13
|
+
snap = Basilik::Snapshot.new({
|
14
|
+
a: {
|
15
|
+
'.priority' => 1000,
|
16
|
+
a_1: {
|
17
|
+
'.priority' => 20,
|
18
|
+
a_1_1: 1
|
19
|
+
},
|
20
|
+
a_2: {
|
21
|
+
'.priority' => 10,
|
22
|
+
a_2_1: 1
|
23
|
+
}
|
24
|
+
},
|
25
|
+
b: {
|
26
|
+
'.priority' => 0,
|
27
|
+
b_1: {
|
28
|
+
'.priority' => 50,
|
29
|
+
b_1_1: 1
|
30
|
+
},
|
31
|
+
b_2: {
|
32
|
+
'.priority' => 10,
|
33
|
+
b_2_1: 1
|
34
|
+
}
|
35
|
+
}
|
36
|
+
})
|
37
|
+
map = snap.to_map
|
38
|
+
map.keys.should == %w(b a)
|
39
|
+
map.b.keys.should == %w(b_2 b_1)
|
40
|
+
map.a.keys.should == %w(a_2 a_1)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "sorts a mixed priority hierarchy correctly" do
|
44
|
+
snap = Basilik::Snapshot.new({
|
45
|
+
a: {
|
46
|
+
a_1: {
|
47
|
+
'.priority' => 20,
|
48
|
+
a_1_1: 1
|
49
|
+
},
|
50
|
+
a_2: {
|
51
|
+
'.priority' => 10,
|
52
|
+
a_2_1: 1
|
53
|
+
}
|
54
|
+
},
|
55
|
+
b: {
|
56
|
+
b_1: {
|
57
|
+
'.priority' => "10",
|
58
|
+
b_1_1: 1
|
59
|
+
},
|
60
|
+
b_2: {
|
61
|
+
'.priority' => "10",
|
62
|
+
b_2_1: 1
|
63
|
+
}
|
64
|
+
}
|
65
|
+
})
|
66
|
+
map = snap.to_map
|
67
|
+
map.keys.should == %w(a b)
|
68
|
+
map.b.keys.should == %w(b_1 b_2)
|
69
|
+
map.a.keys.should == %w(a_2 a_1)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "sorts a firebase hierarchy correctly" do
|
73
|
+
map = Map( JSON.parse( '{
|
74
|
+
"-IrIRswPWIABbNj1q045" : {
|
75
|
+
".priority" : 10.0,
|
76
|
+
"-IrIRt0-K0Ae0VkYGzPz" : {
|
77
|
+
"c" : 1,
|
78
|
+
".priority" : 50.0
|
79
|
+
},
|
80
|
+
"-IrIRt4bNTVPk7bILOqR" : {
|
81
|
+
".priority" : 30.0,
|
82
|
+
"d" : 1
|
83
|
+
}
|
84
|
+
},
|
85
|
+
"-IrIRsiaW32Hp5xUOyMZ" : {
|
86
|
+
".priority" : 20.0,
|
87
|
+
"-IrIRsnD1QRcgMU4lgH1" : {
|
88
|
+
".priority" : 50.0,
|
89
|
+
"a" : 1
|
90
|
+
},
|
91
|
+
"-IrIRsrpWvE7ykm4tRBT" : {
|
92
|
+
".priority" : 30.0,
|
93
|
+
"b" : 1
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}'))
|
97
|
+
snap = Basilik::Snapshot.new( map )
|
98
|
+
map = snap.to_map
|
99
|
+
map.keys.should == %w(-IrIRswPWIABbNj1q045 -IrIRsiaW32Hp5xUOyMZ)
|
100
|
+
map['-IrIRsiaW32Hp5xUOyMZ'].keys.should == %w(-IrIRsrpWvE7ykm4tRBT -IrIRsnD1QRcgMU4lgH1)
|
101
|
+
end
|
102
|
+
|
103
|
+
it "sorts a complex hierarchy correctly" do
|
104
|
+
map = Map( JSON.parse( '{
|
105
|
+
"-IrIRswPWIABbNj1q045" : {
|
106
|
+
".priority" : 10.0,
|
107
|
+
"-IrIRt0-K0Ae0VkYGzPz" : {
|
108
|
+
"c" : 1,
|
109
|
+
".priority" : 50.0
|
110
|
+
},
|
111
|
+
"-IrIRt4bNTVPk7bILOqR" : {
|
112
|
+
".priority" : 30.0,
|
113
|
+
"d" : 1
|
114
|
+
}
|
115
|
+
},
|
116
|
+
"-IrIRsiaW32Hp5xUOyMZ" : {
|
117
|
+
"-IrIRsnD1QRcgMU4lgH1" : {
|
118
|
+
".priority" : 50.0,
|
119
|
+
"a" : 1
|
120
|
+
},
|
121
|
+
"-IrIRsrpWvE7ykm4tRBT" : {
|
122
|
+
".priority" : 30.0,
|
123
|
+
"b" : 1
|
124
|
+
}
|
125
|
+
}
|
126
|
+
}'))
|
127
|
+
snap = Basilik::Snapshot.new( map )
|
128
|
+
map = snap.to_map
|
129
|
+
map.keys.should == %w(-IrIRsiaW32Hp5xUOyMZ -IrIRswPWIABbNj1q045)
|
130
|
+
map['-IrIRsiaW32Hp5xUOyMZ'].keys.should == %w(-IrIRsrpWvE7ykm4tRBT -IrIRsnD1QRcgMU4lgH1)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "sorts a complex hierarchy correctly" do
|
134
|
+
map = Map( JSON.parse( '{
|
135
|
+
"-IrIRswPWIABbNj1q045" : {
|
136
|
+
".priority" : "10.0",
|
137
|
+
"-IrIRt0-K0Ae0VkYGzPz" : {
|
138
|
+
"c" : 1,
|
139
|
+
".priority" : 50.0
|
140
|
+
},
|
141
|
+
"-IrIRt4bNTVPk7bILOqR" : {
|
142
|
+
".priority" : 30.0,
|
143
|
+
"d" : 1
|
144
|
+
}
|
145
|
+
},
|
146
|
+
"-IrIRsiaW32Hp5xUOyMZ" : {
|
147
|
+
".priority" : 10.0,
|
148
|
+
"-IrIRsnD1QRcgMU4lgH1" : {
|
149
|
+
".priority" : 50.0,
|
150
|
+
"a" : 1
|
151
|
+
},
|
152
|
+
"-IrIRsrpWvE7ykm4tRBT" : {
|
153
|
+
".priority" : 30.0,
|
154
|
+
"b" : 1
|
155
|
+
}
|
156
|
+
},
|
157
|
+
"-IrIRsiaW32Hp5xUOyMA" : {
|
158
|
+
"-IrIRsnD1QRcgMU4lgH1" : {
|
159
|
+
".priority" : 50.0,
|
160
|
+
"a" : 1
|
161
|
+
},
|
162
|
+
"-IrIRsrpWvE7ykm4tRBT" : {
|
163
|
+
".priority" : 30.0,
|
164
|
+
"b" : 1
|
165
|
+
}
|
166
|
+
}
|
167
|
+
}'))
|
168
|
+
snap = Basilik::Snapshot.new( map )
|
169
|
+
map = snap.to_map
|
170
|
+
map.keys.should == %w(-IrIRsiaW32Hp5xUOyMA -IrIRsiaW32Hp5xUOyMZ -IrIRswPWIABbNj1q045)
|
171
|
+
map['-IrIRsiaW32Hp5xUOyMZ'].keys.should == %w(-IrIRsrpWvE7ykm4tRBT -IrIRsnD1QRcgMU4lgH1)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: basilik
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fernand Galiana
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-04-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
prerelease: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 6.3.0
|
20
|
+
name: map
|
21
|
+
requirement: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ~>
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 6.3.0
|
26
|
+
type: :runtime
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
prerelease: false
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.6.2
|
34
|
+
name: typhoeus
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ~>
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: 0.6.2
|
40
|
+
type: :runtime
|
41
|
+
description: Ruby implementation of Firebase framework
|
42
|
+
email:
|
43
|
+
- fernand.galiana@gmail.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .autotest
|
49
|
+
- .gitignore
|
50
|
+
- Gemfile
|
51
|
+
- Gemfile.lock
|
52
|
+
- README.md
|
53
|
+
- Rakefile
|
54
|
+
- basilik.gemspec
|
55
|
+
- examples/a.rb
|
56
|
+
- examples/b.rb
|
57
|
+
- examples/c.rb
|
58
|
+
- examples/d.rb
|
59
|
+
- examples/e.rb
|
60
|
+
- examples/f.rb
|
61
|
+
- examples/g.rb
|
62
|
+
- examples/h.rb
|
63
|
+
- examples/i.rb
|
64
|
+
- examples/j.rb
|
65
|
+
- lib/basilik.rb
|
66
|
+
- lib/basilik/action.rb
|
67
|
+
- lib/basilik/core.rb
|
68
|
+
- lib/basilik/core_ext/map.rb
|
69
|
+
- lib/basilik/core_ext/string.rb
|
70
|
+
- lib/basilik/faults.rb
|
71
|
+
- lib/basilik/load.rb
|
72
|
+
- lib/basilik/ref.rb
|
73
|
+
- lib/basilik/snapshot.rb
|
74
|
+
- lib/basilik/version.rb
|
75
|
+
- spec/basilik/.firebase_spec.rb.swp
|
76
|
+
- spec/basilik/core_ext/map_spec.rb
|
77
|
+
- spec/basilik/core_ext/string_spec.rb
|
78
|
+
- spec/basilik/ref_spec.rb
|
79
|
+
- spec/basilik/root_spec.rb
|
80
|
+
- spec/basilik/snapshot_spec.rb
|
81
|
+
- spec/spec_helper.rb
|
82
|
+
homepage: https://github.com/derailed/basilik
|
83
|
+
licenses: []
|
84
|
+
metadata: {}
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project: firebase
|
101
|
+
rubygems_version: 2.0.3
|
102
|
+
signing_key:
|
103
|
+
specification_version: 4
|
104
|
+
summary: Ruby implementation of Firebase framework
|
105
|
+
test_files: []
|