octothorpe 0.4.0 → 0.4.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 +4 -4
- data/README.md +2 -2
- data/lib/octothorpe.rb +17 -9
- data/spec/octothorpe_spec.rb +24 -1
- metadata +18 -19
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1dc7649e0f220470c6ec828bdeb73cd870f0e1b6
|
|
4
|
+
data.tar.gz: b1828f26f8d683bdc0347eec4ede391320874cca
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 13788c201cf67ca740757ef58fd693d6b43bef1580b2ff25e3ee7fcc75c9ad642710a0d04b93f98dcdb03836bb826df8f75be8dbc3bef65442004ae1e5ffdf77
|
|
7
|
+
data.tar.gz: d8197ac01d73730e3a6a9c3066a48fb8057eca3284c8e4196358b5b9a0d70f8dc6ed349fecf342cdaacbce832219f14c99f446ccea1d6dc1fab7e2e422ec12c5
|
data/README.md
CHANGED
|
@@ -74,8 +74,8 @@ hash && (hash[:key] || {})[4]
|
|
|
74
74
|
... and for some reason Ruby's new lonely operator is a problem, then this might just possibly be
|
|
75
75
|
of use.
|
|
76
76
|
|
|
77
|
-
Alternatively you might try
|
|
78
|
-
|
|
77
|
+
Alternatively you might try a Struct. (Really, if you can use a Struct, then that would be better).
|
|
78
|
+
Or an OpenStruct, Rails' HashWithIndifferentAccess, or the Hashie gem.
|
|
79
79
|
|
|
80
80
|
### Why Read-Only?
|
|
81
81
|
|
data/lib/octothorpe.rb
CHANGED
|
@@ -41,7 +41,7 @@ class Octothorpe
|
|
|
41
41
|
def_delegators :@inner_hash, :select, :map, :reject, :inject
|
|
42
42
|
|
|
43
43
|
# Gem version number
|
|
44
|
-
VERSION = '0.4.
|
|
44
|
+
VERSION = '0.4.1'
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
# Generic Octothorpe error class
|
|
@@ -67,7 +67,7 @@ class Octothorpe
|
|
|
67
67
|
|
|
68
68
|
def method_missing(method, *attrs)
|
|
69
69
|
super if (::Kernel.block_given? || !attrs.empty?)
|
|
70
|
-
@octothorpe_store[method
|
|
70
|
+
@octothorpe_store[method]
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
end
|
|
@@ -98,11 +98,11 @@ class Octothorpe
|
|
|
98
98
|
#
|
|
99
99
|
# You can use >> to access member objects in somewhat the same way as an OpenStruct.
|
|
100
100
|
#
|
|
101
|
-
# ot =
|
|
101
|
+
# ot = Octothorpe.new(one: 1, "two" => 2)
|
|
102
102
|
# ot.>>.one # -> 1
|
|
103
103
|
#
|
|
104
|
-
# This will not work for members that have keys with spaces in,
|
|
105
|
-
#
|
|
104
|
+
# This will not work for members that have keys with spaces in, keys which have the same name as
|
|
105
|
+
# methods on Object, or keys that aren't String or Symbol. Use _get_ for those.
|
|
106
106
|
#
|
|
107
107
|
def >>; @store; end
|
|
108
108
|
|
|
@@ -118,7 +118,7 @@ class Octothorpe
|
|
|
118
118
|
# Unlike >>, this works for keys with spaces, or keys that have the same name as methods on
|
|
119
119
|
# Object.
|
|
120
120
|
#
|
|
121
|
-
def get(key); @store.octothorpe_store[key
|
|
121
|
+
def get(key); @store.octothorpe_store[octokey key]; end
|
|
122
122
|
|
|
123
123
|
alias send get
|
|
124
124
|
alias [] get
|
|
@@ -150,7 +150,7 @@ class Octothorpe
|
|
|
150
150
|
raise Frozen if self.frozen?
|
|
151
151
|
|
|
152
152
|
klass = args.shift unless block_given?
|
|
153
|
-
keys = args.map
|
|
153
|
+
keys = args.map{|k| octokey k}
|
|
154
154
|
|
|
155
155
|
if block_given?
|
|
156
156
|
keys.each{|k| @store.octothorpe_store[k] ||= yield k }
|
|
@@ -229,10 +229,10 @@ class Octothorpe
|
|
|
229
229
|
if thing.kind_of?(Octothorpe)
|
|
230
230
|
thing.to_h
|
|
231
231
|
else
|
|
232
|
-
thing.each_with_object({}) {|(k,v),m| m[k
|
|
232
|
+
thing.each_with_object({}) {|(k,v),m| m[octokey k] = v }
|
|
233
233
|
end
|
|
234
234
|
rescue
|
|
235
|
-
raise BadHash
|
|
235
|
+
raise BadHash, $!
|
|
236
236
|
end
|
|
237
237
|
|
|
238
238
|
|
|
@@ -246,5 +246,13 @@ class Octothorpe
|
|
|
246
246
|
thisHash.send(method, otherHash)
|
|
247
247
|
end
|
|
248
248
|
|
|
249
|
+
|
|
250
|
+
##
|
|
251
|
+
# Munge a potential key so we can use it
|
|
252
|
+
#
|
|
253
|
+
def octokey(thing)
|
|
254
|
+
thing.is_a?(String) ? thing.to_sym : thing
|
|
255
|
+
end
|
|
256
|
+
|
|
249
257
|
end
|
|
250
258
|
|
data/spec/octothorpe_spec.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'octothorpe'
|
|
2
|
+
require 'date'
|
|
2
3
|
|
|
3
4
|
describe Octothorpe do
|
|
4
5
|
|
|
@@ -28,6 +29,13 @@ describe Octothorpe do
|
|
|
28
29
|
expect{ Octothorpe.new(14) }.to raise_exception Octothorpe::BadHash
|
|
29
30
|
end
|
|
30
31
|
|
|
32
|
+
it "accepts a hash with a nil or non-string key" do
|
|
33
|
+
expect{ Octothorpe.new( {nil=>"foo"} ) }.not_to raise_exception
|
|
34
|
+
expect{ Octothorpe.new( {1=>"foo"} ) }.not_to raise_exception
|
|
35
|
+
expect{ Octothorpe.new( {Date.new=>"foo"} ) }.not_to raise_exception
|
|
36
|
+
expect{ Octothorpe.new( {Octothorpe.new=>"foo"} ) }.not_to raise_exception
|
|
37
|
+
end
|
|
38
|
+
|
|
31
39
|
end
|
|
32
40
|
|
|
33
41
|
|
|
@@ -66,6 +74,15 @@ describe Octothorpe do
|
|
|
66
74
|
expect( @ot.get('weird key') ).to eq @hash2[:'weird key']
|
|
67
75
|
end
|
|
68
76
|
|
|
77
|
+
it "will accept nil or non-string keys" do
|
|
78
|
+
hash = { nil => "nil", Date.new => "date", Octothorpe.new => "ot" }
|
|
79
|
+
ot = Octothorpe.new(hash)
|
|
80
|
+
|
|
81
|
+
hash.each do |k,v|
|
|
82
|
+
expect( ot.get(k) ).to eq v
|
|
83
|
+
end
|
|
84
|
+
end
|
|
85
|
+
|
|
69
86
|
end
|
|
70
87
|
|
|
71
88
|
|
|
@@ -99,6 +116,13 @@ describe Octothorpe do
|
|
|
99
116
|
expect( @ot.guard(Array, :foo) ).to eq @ot
|
|
100
117
|
end
|
|
101
118
|
|
|
119
|
+
it "will accept nil or non-string keys" do
|
|
120
|
+
hash = { nil => "nil", Date.new => "date", Octothorpe.new => "ot" }
|
|
121
|
+
ot = Octothorpe.new(hash)
|
|
122
|
+
|
|
123
|
+
expect{ ot.guard(Hash, *hash.keys) }.not_to raise_exception
|
|
124
|
+
end
|
|
125
|
+
|
|
102
126
|
context "when given a class" do
|
|
103
127
|
|
|
104
128
|
it "accepts a class and list of keys" do
|
|
@@ -148,7 +172,6 @@ describe Octothorpe do
|
|
|
148
172
|
|
|
149
173
|
end
|
|
150
174
|
|
|
151
|
-
|
|
152
175
|
end
|
|
153
176
|
|
|
154
177
|
|
metadata
CHANGED
|
@@ -1,83 +1,83 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: octothorpe
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.4.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andy Jones
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-12-15 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '1.7'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.7'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- - ~>
|
|
31
|
+
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '10.0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- - ~>
|
|
38
|
+
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '10.0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: rspec
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
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
54
|
version: '0'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: pry
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
|
-
- -
|
|
59
|
+
- - ">="
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
61
|
version: '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
68
|
version: '0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: pry-doc
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- -
|
|
73
|
+
- - ">="
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
75
|
version: '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
82
|
version: '0'
|
|
83
83
|
description: |
|
|
@@ -93,9 +93,9 @@ executables: []
|
|
|
93
93
|
extensions: []
|
|
94
94
|
extra_rdoc_files: []
|
|
95
95
|
files:
|
|
96
|
-
- .hgignore
|
|
97
|
-
- .hgtags
|
|
98
|
-
- .rspec
|
|
96
|
+
- ".hgignore"
|
|
97
|
+
- ".hgtags"
|
|
98
|
+
- ".rspec"
|
|
99
99
|
- Gemfile
|
|
100
100
|
- LICENSE.txt
|
|
101
101
|
- README.md
|
|
@@ -115,17 +115,17 @@ require_paths:
|
|
|
115
115
|
- lib
|
|
116
116
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
117
117
|
requirements:
|
|
118
|
-
- -
|
|
118
|
+
- - ">="
|
|
119
119
|
- !ruby/object:Gem::Version
|
|
120
120
|
version: '0'
|
|
121
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
122
|
requirements:
|
|
123
|
-
- -
|
|
123
|
+
- - ">="
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
125
|
version: '0'
|
|
126
126
|
requirements: []
|
|
127
127
|
rubyforge_project:
|
|
128
|
-
rubygems_version: 2.
|
|
128
|
+
rubygems_version: 2.6.12
|
|
129
129
|
signing_key:
|
|
130
130
|
specification_version: 4
|
|
131
131
|
summary: Like a Hash. Better for message passing between classes, I hope.
|
|
@@ -133,4 +133,3 @@ test_files:
|
|
|
133
133
|
- spec/doc_no_pending.rb
|
|
134
134
|
- spec/octothorpe_spec.rb
|
|
135
135
|
- spec/spec_helper.rb
|
|
136
|
-
has_rdoc:
|