restruct 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 220d7c61ca9fe2daff93071982a18b7934967c71
4
- data.tar.gz: bc038fb7d2126b6d30d770ab1d28687b031111a0
3
+ metadata.gz: b08da180cd16bfdb19e965f58ed2f6bdc0590558
4
+ data.tar.gz: 5eb60adcfa2585711ae48a8b26718d062c0fad8d
5
5
  SHA512:
6
- metadata.gz: 3357b7800bb6da26bdb54675d097300cd9f33b652f63ad7c5e9d1a0a71f4038459f20e8bade86f12d2b6562f57e08af5ed74400139307cbaea20d35fa5b2273f
7
- data.tar.gz: 5740e1bc9699cef63a9c5632c2c6198a48164b99aaf78e3b60bef61983352b5fcc6d48ce3a8b8524af50b673a905caa65c1655e97c3bc4500ee9e0e21fc5b4f5
6
+ metadata.gz: 15795162d1328da9f16764494398379e87004db5e9491672d60ebe94d99d17ba5ac8f7eaf83648f3a62b31aa34caa2c70350abbb730790131bb1ff54e1832b0e
7
+ data.tar.gz: 1bf098b79cdc7b020abf55849fe5a9fe399e0c6a43c9e0bc9efd65523df97ecf3d923610e756925632e8cf6a416588faf1d816669fbce95f8977592bcf7256a1
@@ -4,6 +4,9 @@ rvm:
4
4
  - 2.0
5
5
  - 2.1
6
6
  - 2.2
7
+ - 2.3.0
7
8
  - jruby
9
+ before_install:
10
+ - gem install bundler
8
11
  services:
9
- - redis-server
12
+ - redis-server
data/Gemfile CHANGED
@@ -2,5 +2,3 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in restruct.gemspec
4
4
  gemspec
5
-
6
- gem 'coveralls', require: false
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Restruct
2
2
 
3
- [![Gem Version](https://badge.fury.io/rb/restruct.png)](https://rubygems.org/gems/restruct)
4
- [![Build Status](https://travis-ci.org/gabynaiman/restruct.png?branch=master)](https://travis-ci.org/gabynaiman/restruct)
5
- [![Coverage Status](https://coveralls.io/repos/gabynaiman/restruct/badge.png?branch=master)](https://coveralls.io/r/gabynaiman/restruct?branch=master)
6
- [![Code Climate](https://codeclimate.com/github/gabynaiman/restruct.png)](https://codeclimate.com/github/gabynaiman/restruct)
7
- [![Dependency Status](https://gemnasium.com/gabynaiman/restruct.png)](https://gemnasium.com/gabynaiman/restruct)
3
+ [![Gem Version](https://badge.fury.io/rb/restruct.svg)](https://rubygems.org/gems/restruct)
4
+ [![Build Status](https://travis-ci.org/gabynaiman/restruct.svg?branch=master)](https://travis-ci.org/gabynaiman/restruct)
5
+ [![Coverage Status](https://coveralls.io/repos/gabynaiman/restruct/badge.svg?branch=master)](https://coveralls.io/r/gabynaiman/restruct?branch=master)
6
+ [![Code Climate](https://codeclimate.com/github/gabynaiman/restruct.svg)](https://codeclimate.com/github/gabynaiman/restruct)
7
+ [![Dependency Status](https://gemnasium.com/gabynaiman/restruct.svg)](https://gemnasium.com/gabynaiman/restruct)
8
8
 
9
9
  Redis structures
10
10
 
@@ -12,6 +12,9 @@ Redis structures
12
12
  - Set
13
13
  - Hash
14
14
  - NestedHash
15
+ - Queue
16
+ - Locker
17
+ - Channel
15
18
 
16
19
  ## Installation
17
20
 
data/Rakefile CHANGED
@@ -5,6 +5,12 @@ Rake::TestTask.new(:spec) do |t|
5
5
  t.libs << 'spec'
6
6
  t.pattern = 'spec/**/*_spec.rb'
7
7
  t.verbose = false
8
+ t.warning = false
9
+ t.loader = nil if ENV['TEST']
10
+ ENV['TEST'], ENV['LINE'] = ENV['TEST'].split(':') if ENV['TEST'] && !ENV['LINE']
11
+ t.options = ''
12
+ t.options << "--name=/#{ENV['NAME']}/ " if ENV['NAME']
13
+ t.options << "-l #{ENV['LINE']} " if ENV['LINE'] && ENV['TEST']
8
14
  end
9
15
 
10
16
  task :console do
@@ -11,12 +11,14 @@ require_relative 'restruct/array'
11
11
  require_relative 'restruct/set'
12
12
  require_relative 'restruct/hash'
13
13
  require_relative 'restruct/queue'
14
+ require_relative 'restruct/channel'
14
15
  require_relative 'restruct/nested_hash'
15
16
  require_relative 'restruct/marshalizable'
16
17
  require_relative 'restruct/marshal_array'
17
18
  require_relative 'restruct/marshal_set'
18
19
  require_relative 'restruct/marshal_hash'
19
20
  require_relative 'restruct/marshal_queue'
21
+ require_relative 'restruct/marshal_channel'
20
22
  require_relative 'restruct/locker'
21
23
  require_relative 'restruct/connection'
22
24
 
@@ -0,0 +1,31 @@
1
+ module Restruct
2
+ class Channel < Structure
3
+
4
+ def publish(message)
5
+ connection.call 'PUBLISH', id, serialize(message)
6
+ end
7
+
8
+ def subscribe
9
+ subscriber = connection.clone
10
+ subscriber.call 'SUBSCRIBE', id
11
+ loop do
12
+ yield deserialize(subscriber.read.last)
13
+ end
14
+ rescue => ex
15
+ raise ex
16
+ ensure
17
+ subscriber.call 'UNSUBSCRIBE', id
18
+ end
19
+
20
+ private
21
+
22
+ def serialize(string)
23
+ string
24
+ end
25
+
26
+ def deserialize(string)
27
+ string
28
+ end
29
+
30
+ end
31
+ end
@@ -2,6 +2,7 @@ module Restruct
2
2
  class Connection
3
3
 
4
4
  def initialize(*args)
5
+ @args = args
5
6
  @redis = Redic.new *args
6
7
  @scripts = {}
7
8
  @nesting = ::Hash.new { |h,k| h[k] = 0 }
@@ -44,6 +45,14 @@ module Restruct
44
45
  raise ex
45
46
  end
46
47
 
48
+ def read
49
+ redis.client.read
50
+ end
51
+
52
+ def clone
53
+ Connection.new *@args
54
+ end
55
+
47
56
  private
48
57
 
49
58
  attr_reader :redis, :scripts
@@ -3,6 +3,10 @@ module Restruct
3
3
 
4
4
  attr_reader :separator
5
5
 
6
+ def self.[](id)
7
+ new id
8
+ end
9
+
6
10
  def initialize(id, separator=nil)
7
11
  @separator = separator || Restruct.id_separator
8
12
  super id.to_s
@@ -0,0 +1,5 @@
1
+ module Restruct
2
+ class MarshalChannel < Channel
3
+ include Marshalizable
4
+ end
5
+ end
@@ -1,3 +1,3 @@
1
1
  module Restruct
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -21,11 +21,19 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency 'redic', '~> 1.5.0'
22
22
  spec.add_dependency 'class_config', '~> 0.0.1'
23
23
 
24
- spec.add_development_dependency 'bundler', '~> 1.6'
25
- spec.add_development_dependency 'rake'
26
- spec.add_development_dependency 'minitest', '~> 4.7'
24
+ spec.add_development_dependency 'bundler', '~> 1.12'
25
+ spec.add_development_dependency 'rake', '~> 11.0'
26
+ spec.add_development_dependency 'minitest', '~> 5.0'
27
27
  spec.add_development_dependency "minitest-great_expectations"
28
- spec.add_development_dependency 'turn', '~> 0.9'
29
- spec.add_development_dependency 'simplecov'
30
- spec.add_development_dependency 'pry-nav'
28
+ spec.add_development_dependency 'minitest-colorin', '~> 0.1'
29
+ spec.add_development_dependency 'minitest-line', '~> 0.6'
30
+ spec.add_development_dependency 'simplecov', '~> 0.12'
31
+ spec.add_development_dependency 'coveralls', '~> 0.8'
32
+ spec.add_development_dependency 'pry-nav', '~> 0.2'
33
+
34
+ if RUBY_VERSION < '2'
35
+ spec.add_development_dependency 'term-ansicolor', '~> 1.3.0'
36
+ spec.add_development_dependency 'tins', '~> 1.6.0'
37
+ spec.add_development_dependency 'json', '~> 1.8'
38
+ end
31
39
  end
@@ -0,0 +1,33 @@
1
+ require 'minitest_helper'
2
+
3
+ [Restruct::Channel, Restruct::MarshalChannel].each do |klass|
4
+
5
+ describe klass do
6
+
7
+ let(:channel) { klass.new }
8
+
9
+ it 'Subscribe and publish' do
10
+ messages = []
11
+
12
+ Thread.new do
13
+ channel.subscribe do |message|
14
+ messages << message
15
+ end
16
+ end
17
+ sleep 0.01 # Wait for establish connection
18
+
19
+ 3.times do |i|
20
+ channel.publish "Message #{i}"
21
+ end
22
+
23
+ Timeout.timeout(3) do
24
+ while messages.count < 3;
25
+ sleep 0.0001 # Wait for subscriptions
26
+ end
27
+ end
28
+
29
+ messages.must_equal 3.times.map { |i| "Message #{i}" }
30
+ end
31
+
32
+ end
33
+ end
@@ -3,6 +3,7 @@ require 'minitest_helper'
3
3
  describe Restruct::Connection do
4
4
 
5
5
  describe 'Success' do
6
+
6
7
  it 'call' do
7
8
  connection.call('HSET', 'test_id', 'key', 'test_key')
8
9
  connection.call('HGET', 'test_id', 'key').must_equal 'test_key'
@@ -1,8 +1,5 @@
1
1
  require 'simplecov'
2
2
  require 'coveralls'
3
3
 
4
- SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
5
- SimpleCov::Formatter::HTMLFormatter,
6
- Coveralls::SimpleCov::Formatter
7
- ]
4
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter.new [SimpleCov::Formatter::HTMLFormatter, Coveralls::SimpleCov::Formatter]
8
5
  SimpleCov.start
@@ -4,11 +4,11 @@ require 'minitest_helper'
4
4
 
5
5
  describe klass do
6
6
 
7
- let(:hash) { klass.new }
7
+ let(:sample_hash) { klass.new }
8
8
 
9
9
  def fill(data)
10
- data.each { |k,v| data[k] = hash.send(:serialize, v) }
11
- connection.call 'HMSET', hash.id, *data.flatten
10
+ data.each { |k,v| data[k] = sample_hash.send(:serialize, v) }
11
+ connection.call 'HMSET', sample_hash.id, *data.flatten
12
12
  end
13
13
 
14
14
  describe 'Getters' do
@@ -16,44 +16,44 @@ require 'minitest_helper'
16
16
  it '[]' do
17
17
  fill a: 'x', b: 'y'
18
18
 
19
- hash[:a].must_equal 'x'
20
- hash[:b].must_equal 'y'
21
- hash[:c].must_be_nil
19
+ sample_hash[:a].must_equal 'x'
20
+ sample_hash[:b].must_equal 'y'
21
+ sample_hash[:c].must_be_nil
22
22
  end
23
23
 
24
24
  it 'fetch' do
25
25
  fill a: 'x', b: 'y'
26
26
 
27
- hash.fetch(:a).must_equal 'x'
28
- hash.fetch(:b).must_equal 'y'
29
- hash.fetch(:c, 'z').must_equal 'z'
30
- hash.fetch(:c) { |k| k.to_s }.must_equal 'c'
27
+ sample_hash.fetch(:a).must_equal 'x'
28
+ sample_hash.fetch(:b).must_equal 'y'
29
+ sample_hash.fetch(:c, 'z').must_equal 'z'
30
+ sample_hash.fetch(:c) { |k| k.to_s }.must_equal 'c'
31
31
 
32
- error = proc { hash.fetch(:c) }.must_raise KeyError
32
+ error = proc { sample_hash.fetch(:c) }.must_raise KeyError
33
33
  error.message.must_equal 'key not found: c'
34
34
  end
35
35
 
36
36
  it 'key' do
37
37
  fill a: 'x', b: 'y', c: 'y'
38
38
 
39
- hash.key('x').must_equal 'a'
40
- hash.key('y').must_equal 'b'
41
- hash.key('z').must_be_nil
39
+ sample_hash.key('x').must_equal 'a'
40
+ sample_hash.key('y').must_equal 'b'
41
+ sample_hash.key('z').must_be_nil
42
42
  end
43
43
 
44
44
  it 'keys' do
45
45
  fill a: 'x', b: 'y', c: 'z'
46
- hash.keys.must_equal %w(a b c)
46
+ sample_hash.keys.must_equal %w(a b c)
47
47
  end
48
48
 
49
49
  it 'values' do
50
50
  fill a: 'x', b: 'y', c: 'z'
51
- hash.values.must_equal %w(x y z)
51
+ sample_hash.values.must_equal %w(x y z)
52
52
  end
53
53
 
54
54
  it 'values_at' do
55
55
  fill a: 'x', b: 'y', c: 'z'
56
- hash.values_at(:a, :f, :b, :g, :c).must_equal ['x', nil, 'y', nil, 'z']
56
+ sample_hash.values_at(:a, :f, :b, :g, :c).must_equal ['x', nil, 'y', nil, 'z']
57
57
  end
58
58
 
59
59
  end
@@ -64,11 +64,11 @@ require 'minitest_helper'
64
64
  it method do
65
65
  fill a: 'x', b: 'y'
66
66
 
67
- hash.send(method, :a, 'a').must_equal 'a'
68
- hash.to_h.must_equal 'a' => 'a', 'b' => 'y'
67
+ sample_hash.send(method, :a, 'a').must_equal 'a'
68
+ sample_hash.to_h.must_equal 'a' => 'a', 'b' => 'y'
69
69
 
70
- hash.send(method, :c, 'z').must_equal 'z'
71
- hash.to_h.must_equal 'a' => 'a', 'b' => 'y', 'c' => 'z'
70
+ sample_hash.send(method, :c, 'z').must_equal 'z'
71
+ sample_hash.to_h.must_equal 'a' => 'a', 'b' => 'y', 'c' => 'z'
72
72
  end
73
73
  end
74
74
 
@@ -76,42 +76,42 @@ require 'minitest_helper'
76
76
  it method do
77
77
  fill a: 'x', b: 'y'
78
78
 
79
- hash.send(method, a: 'a', c: 'z').must_equal hash
80
- hash.to_h.must_equal 'a' => 'a', 'b' => 'y', 'c' => 'z'
79
+ sample_hash.send(method, a: 'a', c: 'z').must_equal sample_hash
80
+ sample_hash.to_h.must_equal 'a' => 'a', 'b' => 'y', 'c' => 'z'
81
81
  end
82
82
  end
83
83
 
84
84
  it 'delete' do
85
85
  fill a: 'x', b: 'y'
86
86
 
87
- hash.delete(:b).must_equal 'y'
88
- hash.to_h.must_equal 'a' => 'x'
87
+ sample_hash.delete(:b).must_equal 'y'
88
+ sample_hash.to_h.must_equal 'a' => 'x'
89
89
 
90
- hash.delete(:c).must_be_nil
91
- hash.to_h.must_equal 'a' => 'x'
90
+ sample_hash.delete(:c).must_be_nil
91
+ sample_hash.to_h.must_equal 'a' => 'x'
92
92
  end
93
93
 
94
94
  it 'delete_if' do
95
95
  fill a: 'x', b: 'y'
96
96
 
97
- hash.delete_if { |k,v| v == 'x' }.must_equal hash
98
- hash.to_h.must_equal 'b' => 'y'
97
+ sample_hash.delete_if { |k,v| v == 'x' }.must_equal sample_hash
98
+ sample_hash.to_h.must_equal 'b' => 'y'
99
99
  end
100
100
 
101
101
  %w(keep_if select!).each do |method|
102
102
  it method do
103
103
  fill a: 'x', b: 'y'
104
104
 
105
- hash.send(method) { |k,v| v == 'x' }.must_equal hash
106
- hash.to_h.must_equal 'a' => 'x'
105
+ sample_hash.send(method) { |k,v| v == 'x' }.must_equal sample_hash
106
+ sample_hash.to_h.must_equal 'a' => 'x'
107
107
  end
108
108
  end
109
109
 
110
110
  it 'clear' do
111
111
  fill a: 'x', b: 'y'
112
112
 
113
- hash.clear.must_equal hash
114
- hash.must_be_empty
113
+ sample_hash.clear.must_equal sample_hash
114
+ sample_hash.must_be_empty
115
115
  end
116
116
 
117
117
  end
@@ -121,22 +121,22 @@ require 'minitest_helper'
121
121
  %w(size count length).each do |method|
122
122
  it method do
123
123
  fill a: 'x', b: 'y'
124
- hash.send(method).must_equal 2
124
+ sample_hash.send(method).must_equal 2
125
125
  end
126
126
  end
127
127
 
128
128
  it 'empty?' do
129
- hash.must_be :empty?
129
+ sample_hash.must_be :empty?
130
130
  fill a: 'x', b: 'y'
131
- hash.wont_be :empty?
131
+ sample_hash.wont_be :empty?
132
132
  end
133
133
 
134
134
  %w(key? has_key?).each do |method|
135
135
  it method do
136
136
  fill a: 'x', b: 'y'
137
137
 
138
- assert hash.send(method, :a)
139
- refute hash.send(method, :c)
138
+ assert sample_hash.send(method, :a)
139
+ refute sample_hash.send(method, :c)
140
140
  end
141
141
  end
142
142
 
@@ -144,8 +144,8 @@ require 'minitest_helper'
144
144
  it method do
145
145
  fill a: 'x', b: 'y'
146
146
 
147
- assert hash.send(method, 'x')
148
- refute hash.send(method, 'z')
147
+ assert sample_hash.send(method, 'x')
148
+ refute sample_hash.send(method, 'z')
149
149
  end
150
150
  end
151
151
 
@@ -156,23 +156,23 @@ require 'minitest_helper'
156
156
  %w(to_h to_primitive).each do |method|
157
157
  it method do
158
158
  fill a: 'x', b: 'y'
159
- hash.send(method).must_equal 'a' => 'x', 'b' => 'y'
159
+ sample_hash.send(method).must_equal 'a' => 'x', 'b' => 'y'
160
160
  end
161
161
  end
162
162
 
163
163
  it 'merge' do
164
164
  fill a: 'x', b: 'y'
165
- hash.merge('c' => 'z', 'a' => 'a').must_equal 'a' => 'a', 'b' => 'y', 'c' => 'z'
165
+ sample_hash.merge('c' => 'z', 'a' => 'a').must_equal 'a' => 'a', 'b' => 'y', 'c' => 'z'
166
166
  end
167
167
 
168
168
  it 'flatten' do
169
169
  fill a: 'x', b: 'y'
170
- hash.flatten.must_equal %w(a x b y)
170
+ sample_hash.flatten.must_equal %w(a x b y)
171
171
  end
172
172
 
173
173
  it 'invert' do
174
174
  fill a: 'x', b: 'y'
175
- hash.invert.must_equal 'x' => 'a', 'y' => 'b'
175
+ sample_hash.invert.must_equal 'x' => 'a', 'y' => 'b'
176
176
  end
177
177
 
178
178
  end
@@ -189,13 +189,13 @@ require 'minitest_helper'
189
189
 
190
190
  keys = []
191
191
  values = []
192
- hash.send(method) do |k,v|
192
+ sample_hash.send(method) do |k,v|
193
193
  keys << k
194
194
  values << v
195
195
  end
196
196
 
197
- keys.must_equal hash.keys
198
- values.must_equal hash.values
197
+ keys.must_equal sample_hash.keys
198
+ values.must_equal sample_hash.values
199
199
  end
200
200
  end
201
201
 
@@ -203,52 +203,52 @@ require 'minitest_helper'
203
203
  fill a: 'x', b: 'y'
204
204
 
205
205
  keys = []
206
- hash.each_key { |k| keys << k }
206
+ sample_hash.each_key { |k| keys << k }
207
207
 
208
- keys.must_equal hash.keys
208
+ keys.must_equal sample_hash.keys
209
209
  end
210
210
 
211
211
  it 'each_value' do
212
212
  fill a: 'x', b: 'y'
213
213
 
214
214
  values = []
215
- hash.each_value { |v| values << v }
215
+ sample_hash.each_value { |v| values << v }
216
216
 
217
- values.must_equal hash.values
217
+ values.must_equal sample_hash.values
218
218
  end
219
219
 
220
220
  end
221
221
 
222
222
  it 'Equality' do
223
- copy = klass.new id: hash.id
224
- assert hash == copy
225
- assert hash.eql? copy
226
- refute hash.equal? copy
223
+ copy = klass.new id: sample_hash.id
224
+ assert sample_hash == copy
225
+ assert sample_hash.eql? copy
226
+ refute sample_hash.equal? copy
227
227
  end
228
228
 
229
229
  it 'Dump/Restore' do
230
230
  fill a: 'x', b: 'y'
231
231
 
232
- dump = hash.dump
232
+ dump = sample_hash.dump
233
233
  other = klass.new
234
234
  other.restore dump
235
235
 
236
- other.id.wont_equal hash.id
237
- other.to_primitive.must_equal hash.to_primitive
236
+ other.id.wont_equal sample_hash.id
237
+ other.to_primitive.must_equal sample_hash.to_primitive
238
238
  end
239
239
 
240
240
  it 'Batch' do
241
241
  fill a: 'x', b: 'y', c: 'z'
242
242
 
243
- hash.connection.batch do
244
- hash[:d] = 'w'
245
- hash.delete :a
246
- hash.merge! b: 'x', e: 'v'
243
+ sample_hash.connection.batch do
244
+ sample_hash[:d] = 'w'
245
+ sample_hash.delete :a
246
+ sample_hash.merge! b: 'x', e: 'v'
247
247
 
248
- hash.to_h.must_equal 'a' => 'x', 'b' => 'y', 'c' => 'z'
248
+ sample_hash.to_h.must_equal 'a' => 'x', 'b' => 'y', 'c' => 'z'
249
249
  end
250
250
 
251
- hash.to_h.must_equal 'b' => 'x', 'c' => 'z', 'd' => 'w', 'e' => 'v'
251
+ sample_hash.to_h.must_equal 'b' => 'x', 'c' => 'z', 'd' => 'w', 'e' => 'v'
252
252
  end
253
253
 
254
254
  end
@@ -21,8 +21,7 @@ describe Restruct::Id do
21
21
  end
22
22
 
23
23
  it 'Be chainable' do
24
- id = Id.new 'foo'
25
- id['bar']['baz'].must_equal 'foo:bar:baz'
24
+ Id['foo']['bar']['baz'].must_equal 'foo:bar:baz'
26
25
  end
27
26
 
28
27
  it 'Accept symbols' do
@@ -1,17 +1,12 @@
1
1
  require 'coverage_helper'
2
2
  require 'restruct'
3
3
  require 'minitest/autorun'
4
+ require 'minitest/colorin'
4
5
  require 'minitest/great_expectations'
5
- require 'turn'
6
6
  require 'pry-nav'
7
7
 
8
- Turn.config do |c|
9
- c.format = :pretty
10
- c.natural = true
11
- c.ansi = true
12
- end
13
-
14
8
  class Minitest::Spec
9
+
15
10
  def connection
16
11
  Restruct.connection
17
12
  end
@@ -19,4 +14,5 @@ class Minitest::Spec
19
14
  after do
20
15
  connection.call('KEYS', Restruct::Id.new(:restruct)['*']).each { |k| connection.call 'DEL', k }
21
16
  end
17
+
22
18
  end
@@ -17,42 +17,42 @@ CounterHash = Restruct::NestedHash.new(Counter)
17
17
 
18
18
  describe Restruct::NestedHash do
19
19
 
20
- let(:hash) { CounterHash.new }
20
+ let(:counter_hash) { CounterHash.new }
21
21
 
22
22
  describe 'Getters' do
23
23
 
24
24
  it '[]' do
25
- hash[:a].current.must_equal 0
25
+ counter_hash[:a].current.must_equal 0
26
26
  end
27
27
 
28
28
  it 'fetch' do
29
- hash[:a].incr
29
+ counter_hash[:a].incr
30
30
 
31
- hash.fetch(:a).current.must_equal 1
31
+ counter_hash.fetch(:a).current.must_equal 1
32
32
 
33
- error = proc { hash.fetch(:c) }.must_raise KeyError
33
+ error = proc { counter_hash.fetch(:c) }.must_raise KeyError
34
34
  error.message.must_equal 'key not found: c'
35
35
  end
36
36
 
37
37
  it 'keys' do
38
- hash[:a].incr
39
- hash[:b].incr
38
+ counter_hash[:a].incr
39
+ counter_hash[:b].incr
40
40
 
41
- hash.keys.must_equal %w(a b)
41
+ counter_hash.keys.must_equal %w(a b)
42
42
  end
43
43
 
44
44
  it 'values' do
45
- hash[:a].incr.incr
46
- hash[:b].incr
45
+ counter_hash[:a].incr.incr
46
+ counter_hash[:b].incr
47
47
 
48
- hash.values.map(&:current).must_equal [2, 1]
48
+ counter_hash.values.map(&:current).must_equal [2, 1]
49
49
  end
50
50
 
51
51
  it 'values_at' do
52
- hash[:a].incr.incr
53
- hash[:b].incr
52
+ counter_hash[:a].incr.incr
53
+ counter_hash[:b].incr
54
54
 
55
- hash.values_at(:a, :f, :b, :g).map(&:current).must_equal [2, 0, 1, 0]
55
+ counter_hash.values_at(:a, :f, :b, :g).map(&:current).must_equal [2, 0, 1, 0]
56
56
  end
57
57
 
58
58
  end
@@ -60,38 +60,38 @@ describe Restruct::NestedHash do
60
60
  describe 'Setters' do
61
61
 
62
62
  it 'delete' do
63
- hash[:a].incr.incr
64
- hash[:b].incr
63
+ counter_hash[:a].incr.incr
64
+ counter_hash[:b].incr
65
65
 
66
- hash.delete(:a)
66
+ counter_hash.delete(:a)
67
67
 
68
- hash.keys.must_equal %w(b)
68
+ counter_hash.keys.must_equal %w(b)
69
69
  end
70
70
 
71
71
  it 'delete_if' do
72
- hash[:a].incr.incr
73
- hash[:b].incr
72
+ counter_hash[:a].incr.incr
73
+ counter_hash[:b].incr
74
74
 
75
- hash.delete_if { |k,v| v.current > 1 }.must_equal hash
76
- hash.keys.must_equal %w(b)
75
+ counter_hash.delete_if { |k,v| v.current > 1 }.must_equal counter_hash
76
+ counter_hash.keys.must_equal %w(b)
77
77
  end
78
78
 
79
79
  %w(keep_if select!).each do |method|
80
80
  it method do
81
- hash[:a].incr.incr
82
- hash[:b].incr
81
+ counter_hash[:a].incr.incr
82
+ counter_hash[:b].incr
83
83
 
84
- hash.send(method) { |k,v| v.current > 1 }.must_equal hash
85
- hash.keys.must_equal %w(a)
84
+ counter_hash.send(method) { |k,v| v.current > 1 }.must_equal counter_hash
85
+ counter_hash.keys.must_equal %w(a)
86
86
  end
87
87
  end
88
88
 
89
89
  it 'clear' do
90
- hash[:a].incr.incr
91
- hash[:b].incr
90
+ counter_hash[:a].incr.incr
91
+ counter_hash[:b].incr
92
92
 
93
- hash.clear.must_equal hash
94
- hash.must_be_empty
93
+ counter_hash.clear.must_equal counter_hash
94
+ counter_hash.must_be_empty
95
95
  end
96
96
 
97
97
  end
@@ -100,26 +100,26 @@ describe Restruct::NestedHash do
100
100
 
101
101
  %w(size count length).each do |method|
102
102
  it method do
103
- hash[:a].incr.incr
104
- hash[:b].incr
103
+ counter_hash[:a].incr.incr
104
+ counter_hash[:b].incr
105
105
 
106
- hash.send(method).must_equal 2
106
+ counter_hash.send(method).must_equal 2
107
107
  end
108
108
  end
109
109
 
110
110
  it 'empty?' do
111
- hash.must_be :empty?
112
- hash[:a].incr
113
- hash.wont_be :empty?
111
+ counter_hash.must_be :empty?
112
+ counter_hash[:a].incr
113
+ counter_hash.wont_be :empty?
114
114
  end
115
115
 
116
116
  %w(key? has_key?).each do |method|
117
117
  it method do
118
- hash[:a].incr.incr
119
- hash[:b].incr
118
+ counter_hash[:a].incr.incr
119
+ counter_hash[:b].incr
120
120
 
121
- assert hash.send(method, :a)
122
- refute hash.send(method, :c)
121
+ assert counter_hash.send(method, :a)
122
+ refute counter_hash.send(method, :c)
123
123
  end
124
124
  end
125
125
 
@@ -129,10 +129,10 @@ describe Restruct::NestedHash do
129
129
 
130
130
  %w(to_h to_primitive).each do |method|
131
131
  it method do
132
- hash[:a].incr.incr
133
- hash[:b].incr
132
+ counter_hash[:a].incr.incr
133
+ counter_hash[:b].incr
134
134
 
135
- hash.send(method).must_equal 'a' => 2, 'b' => 1
135
+ counter_hash.send(method).must_equal 'a' => 2, 'b' => 1
136
136
  end
137
137
  end
138
138
 
@@ -146,60 +146,60 @@ describe Restruct::NestedHash do
146
146
 
147
147
  %w(each each_pair).each do |method|
148
148
  it method do
149
- hash[:a].incr.incr
150
- hash[:b].incr
149
+ counter_hash[:a].incr.incr
150
+ counter_hash[:b].incr
151
151
 
152
152
  keys = []
153
153
  values = []
154
- hash.send(method) do |k,v|
154
+ counter_hash.send(method) do |k,v|
155
155
  keys << k
156
156
  values << v
157
157
  end
158
158
 
159
- keys.must_equal hash.keys
160
- values.must_equal hash.values
159
+ keys.must_equal counter_hash.keys
160
+ values.must_equal counter_hash.values
161
161
  end
162
162
  end
163
163
 
164
164
  it 'each_key' do
165
- hash[:a].incr.incr
166
- hash[:b].incr
165
+ counter_hash[:a].incr.incr
166
+ counter_hash[:b].incr
167
167
 
168
168
  keys = []
169
- hash.each_key { |k| keys << k }
169
+ counter_hash.each_key { |k| keys << k }
170
170
 
171
- keys.must_equal hash.keys
171
+ keys.must_equal counter_hash.keys
172
172
  end
173
173
 
174
174
  it 'each_value' do
175
- hash[:a].incr.incr
176
- hash[:b].incr
175
+ counter_hash[:a].incr.incr
176
+ counter_hash[:b].incr
177
177
 
178
178
  values = []
179
- hash.each_value { |v| values << v }
179
+ counter_hash.each_value { |v| values << v }
180
180
 
181
- values.must_equal hash.values
181
+ values.must_equal counter_hash.values
182
182
  end
183
183
 
184
184
  end
185
185
 
186
186
  it 'Equality' do
187
- copy = CounterHash.new id: hash.id
188
- assert hash == copy
189
- assert hash.eql? copy
190
- refute hash.equal? copy
187
+ copy = CounterHash.new id: counter_hash.id
188
+ assert counter_hash == copy
189
+ assert counter_hash.eql? copy
190
+ refute counter_hash.equal? copy
191
191
  end
192
192
 
193
193
  it 'Dump/Restore' do
194
- hash[:a].incr.incr
195
- hash[:b].incr
194
+ counter_hash[:a].incr.incr
195
+ counter_hash[:b].incr
196
196
 
197
- dump = hash.dump
197
+ dump = counter_hash.dump
198
198
  other = CounterHash.new
199
199
  other.restore dump
200
200
 
201
- other.id.wont_equal hash.id
202
- other.to_primitive.must_equal hash.to_primitive
201
+ other.id.wont_equal counter_hash.id
202
+ other.to_primitive.must_equal counter_hash.to_primitive
203
203
  end
204
204
 
205
205
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restruct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-24 00:00:00.000000000 Z
11
+ date: 2016-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redic
@@ -44,42 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: '1.6'
47
+ version: '1.12'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: '1.6'
54
+ version: '1.12'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '11.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '11.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: minitest
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - ~>
74
74
  - !ruby/object:Gem::Version
75
- version: '4.7'
75
+ version: '5.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - ~>
81
81
  - !ruby/object:Gem::Version
82
- version: '4.7'
82
+ version: '5.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: minitest-great_expectations
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -95,47 +95,75 @@ dependencies:
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
- name: turn
98
+ name: minitest-colorin
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: '0.1'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: '0.1'
111
+ - !ruby/object:Gem::Dependency
112
+ name: minitest-line
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ~>
102
116
  - !ruby/object:Gem::Version
103
- version: '0.9'
117
+ version: '0.6'
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - ~>
109
123
  - !ruby/object:Gem::Version
110
- version: '0.9'
124
+ version: '0.6'
111
125
  - !ruby/object:Gem::Dependency
112
126
  name: simplecov
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - '>='
129
+ - - ~>
116
130
  - !ruby/object:Gem::Version
117
- version: '0'
131
+ version: '0.12'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - '>='
136
+ - - ~>
123
137
  - !ruby/object:Gem::Version
124
- version: '0'
138
+ version: '0.12'
139
+ - !ruby/object:Gem::Dependency
140
+ name: coveralls
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: '0.8'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '0.8'
125
153
  - !ruby/object:Gem::Dependency
126
154
  name: pry-nav
127
155
  requirement: !ruby/object:Gem::Requirement
128
156
  requirements:
129
- - - '>='
157
+ - - ~>
130
158
  - !ruby/object:Gem::Version
131
- version: '0'
159
+ version: '0.2'
132
160
  type: :development
133
161
  prerelease: false
134
162
  version_requirements: !ruby/object:Gem::Requirement
135
163
  requirements:
136
- - - '>='
164
+ - - ~>
137
165
  - !ruby/object:Gem::Version
138
- version: '0'
166
+ version: '0.2'
139
167
  description: Redis structures
140
168
  email:
141
169
  - gabynaiman@gmail.com
@@ -154,12 +182,14 @@ files:
154
182
  - Rakefile
155
183
  - lib/restruct.rb
156
184
  - lib/restruct/array.rb
185
+ - lib/restruct/channel.rb
157
186
  - lib/restruct/connection.rb
158
187
  - lib/restruct/errors.rb
159
188
  - lib/restruct/hash.rb
160
189
  - lib/restruct/id.rb
161
190
  - lib/restruct/locker.rb
162
191
  - lib/restruct/marshal_array.rb
192
+ - lib/restruct/marshal_channel.rb
163
193
  - lib/restruct/marshal_hash.rb
164
194
  - lib/restruct/marshal_queue.rb
165
195
  - lib/restruct/marshal_set.rb
@@ -173,6 +203,7 @@ files:
173
203
  - lua/unregister.lua
174
204
  - restruct.gemspec
175
205
  - spec/array_spec.rb
206
+ - spec/channel_spec.rb
176
207
  - spec/connection_spec.rb
177
208
  - spec/coverage_helper.rb
178
209
  - spec/hash_spec.rb
@@ -202,12 +233,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
233
  version: '0'
203
234
  requirements: []
204
235
  rubyforge_project:
205
- rubygems_version: 2.4.7
236
+ rubygems_version: 2.4.8
206
237
  signing_key:
207
238
  specification_version: 4
208
239
  summary: Redis structures
209
240
  test_files:
210
241
  - spec/array_spec.rb
242
+ - spec/channel_spec.rb
211
243
  - spec/connection_spec.rb
212
244
  - spec/coverage_helper.rb
213
245
  - spec/hash_spec.rb