octothorpe 0.1.2 → 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: 04716672658edfc3209de1cf393dd97f6bc8704a
4
- data.tar.gz: 87efb8325fbe599b1ee0c17ac3dd854a2190a601
3
+ metadata.gz: 44e56895848bd74e1a1c1e0fce48dd52d529bac4
4
+ data.tar.gz: d930fc76de139a233b1b9695d4f1881fb545168a
5
5
  SHA512:
6
- metadata.gz: 95250990bf652fef1126436b8f86cfebc049cac2074f59355a819847b9f5fde15d85cf151930df174d48fb095be3b8fd8293c8cf6f6f60329fd40f5ca286a35f
7
- data.tar.gz: 931b5b36ee0e1976831ee8f9d6ee8a7d3df86a7557407229c0010fc9ab3469700089496ddd505b6a42a243db1d4cc1945eedab7bcc5ce82bbdcfcd986d668712
6
+ metadata.gz: b5fed196557a740921eded0a1ee32e7e2d92400a35a0498db54d98f895bc2af3f2e5cd6085bba9709526f624553ca93aad8041e3633fd711470d788524fd0761
7
+ data.tar.gz: c0909d019f3509d7a8ab001d470652a0d1929bc67fbb9e9a2d3f3990133bc8d068cd9c5d8e976d01f747b06ba41be5e900b362d268f00f7393f4be464dc1440b
data/.hgignore CHANGED
@@ -12,3 +12,4 @@ tmp/
12
12
  mkmf.log
13
13
  .ruby*
14
14
  .rbenv*
15
+ .project
data/.hgtags ADDED
@@ -0,0 +1 @@
1
+ a17ae5a3dedd4d2b74b0840a7161e153efd72741 0.2.0
@@ -32,6 +32,7 @@ require 'forwardable'
32
32
  # empty?, has_key?, has_value?, include?
33
33
  # each, each_key, each_value, keys, values
34
34
  # select, map, reject, inject
35
+ # merge, <, >
35
36
  #
36
37
  class Octothorpe
37
38
  extend Forwardable
@@ -41,7 +42,7 @@ class Octothorpe
41
42
  def_delegators :@inner_hash, :select, :map, :reject, :inject
42
43
 
43
44
  # Gem version number
44
- VERSION = '0.1.2'
45
+ VERSION = '0.2.0'
45
46
 
46
47
 
47
48
  # Generic Octothorpe error class
@@ -177,6 +178,34 @@ class Octothorpe
177
178
  end
178
179
 
179
180
 
181
+ ##
182
+ # Return true if this OT is a subset of the given OT or Hash
183
+ #
184
+ def <(other)
185
+ thisHash = @store.octothorpe_store.to_h
186
+ otherHash = symbol_hash(other)
187
+ thisHash < otherHash
188
+ end
189
+
190
+
191
+ ##
192
+ # Return true if this OT is a superset of the given OT or Hash
193
+ #
194
+ def >(other)
195
+ thisHash = @store.octothorpe_store.to_h
196
+ otherHash = symbol_hash(other)
197
+ thisHash > otherHash
198
+ end
199
+
200
+
201
+ ##
202
+ # Inspect exposes a view of the inner hash
203
+ #
204
+ def inspect
205
+ "#<Octothorpe#{@store.octothorpe_store.inspect}>"
206
+ end
207
+
208
+
180
209
  private
181
210
 
182
211
 
@@ -4,9 +4,11 @@ describe Octothorpe do
4
4
 
5
5
 
6
6
  before do
7
- @hash = {one: 'a', 'two' => 2, dup: 3, "weird key" => 4}
8
- @hash2 = @hash.each_with_object({}) {|(k,v),m| m[k.to_sym] = v }
9
- @ot = Octothorpe.new(@hash)
7
+ @hash = {one: 'a', 'two' => 2, dup: 3, "weird key" => 4}
8
+ @hash2 = @hash.each_with_object({}) {|(k,v),m| m[k.to_sym] = v }
9
+ @ot = Octothorpe.new(@hash)
10
+ @subset = @hash.reject{|k,_| k == :dup }
11
+ @superset = @hash.dup; @superset[:extra] = 42
10
12
  end
11
13
 
12
14
 
@@ -41,8 +43,8 @@ describe Octothorpe do
41
43
  end
42
44
 
43
45
  it "throws an exception if passed a parameter or block" do
44
- expect{ @ot.>>.three(1) }.to raise_exception
45
- expect{ @ot.>>.three{|x| puts x} }.to raise_exception
46
+ expect{ @ot.>>.two(1) }.to raise_exception NoMethodError
47
+ expect{ @ot.>>.two{|x| puts x} }.to raise_exception NoMethodError
46
48
  end
47
49
 
48
50
  end
@@ -161,6 +163,56 @@ describe Octothorpe do
161
163
  end
162
164
 
163
165
 
166
+ describe "#>" do
167
+
168
+ context 'when passed a hash' do
169
+ it 'returns true for a subset' do
170
+ expect( @ot > @subset ).to eq true
171
+ end
172
+
173
+ it 'returns false for a superset' do
174
+ expect( @ot > @superset ).to eq false
175
+ end
176
+ end
177
+
178
+ context 'when passed an OT' do
179
+ it 'returns true for a subset' do
180
+ expect( @ot > Octothorpe.new(@subset) ).to eq true
181
+ end
182
+
183
+ it 'returns false for a superset' do
184
+ expect( @ot > Octothorpe.new(@superset) ).to eq false
185
+ end
186
+ end
187
+
188
+ end
189
+
190
+
191
+ describe '#<' do
192
+
193
+ context 'when passed a hash' do
194
+ it 'returns false for a subset' do
195
+ expect( @ot < @subset ).to eq false
196
+ end
197
+
198
+ it 'returns true for a superset' do
199
+ expect( @ot < @superset ).to eq true
200
+ end
201
+ end
202
+
203
+ context 'when passed an OT' do
204
+ it 'returns false for a subset' do
205
+ expect( @ot < Octothorpe.new(@subset) ).to eq false
206
+ end
207
+
208
+ it 'returns true for a superset' do
209
+ expect( @ot < Octothorpe.new(@superset) ).to eq true
210
+ end
211
+ end
212
+
213
+ end
214
+
215
+
164
216
  describe "(miscelaneous other stuff)" do
165
217
  # I "imagine" that the actual class uses Forwardable, but the test code
166
218
  # shouldn't know or care about that. In any case, just testing with
@@ -178,6 +230,7 @@ describe Octothorpe do
178
230
 
179
231
  expect( @ot.include?(:two) ).to eq true
180
232
  expect( @ot.include?(:foo) ).not_to eq true
233
+
181
234
  end
182
235
 
183
236
  it "behaves like a hash for a bunch of methods that return an array" do
@@ -18,6 +18,9 @@ RSpec.configure do |config|
18
18
  # rspec-expectations config goes here. You can use an alternate
19
19
  # assertion/expectation library such as wrong or the stdlib/minitest
20
20
  # assertions if you prefer.
21
+ config.filter_run :focus
22
+ config.run_all_when_everything_filtered = true
23
+
21
24
  config.expect_with :rspec do |expectations|
22
25
  # This option will default to `true` in RSpec 4. It makes the `description`
23
26
  # and `failure_message` of custom matchers include text for helper methods
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octothorpe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Jones
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-25 00:00:00.000000000 Z
11
+ date: 2016-04-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,7 @@ extensions: []
94
94
  extra_rdoc_files: []
95
95
  files:
96
96
  - ".hgignore"
97
+ - ".hgtags"
97
98
  - ".rspec"
98
99
  - Gemfile
99
100
  - LICENSE.txt