closed_struct 0.0.1 → 0.0.2
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/.travis.yml +10 -0
- data/README.md +9 -2
- data/closed_struct.gemspec +2 -1
- data/lib/closed_struct.rb +22 -2
- data/lib/closed_struct/version.rb +2 -2
- data/spec/closed_struct_spec.rb +31 -0
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 870ae047c83a20f0836d92bdec2aefc3c40fba7a
|
4
|
+
data.tar.gz: 1ce68c69beaa55da5a6c25328b8eaf260636700b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b56fcf53e6642e6e78c402b22f4f3df0af875ecb1a14bc83ff18ee596daf869ac810acf02dce50fe94bf9a4dd0a1c825dc4463e7fd62b890fe7f25da1cafee2
|
7
|
+
data.tar.gz: ba5ac81b034a84980d9fc36972cd77c3d69be72ce2c8f6aad9e1f9381643cd8c71f908ba92e8b3ddd68e94b426087c5d7958ad11ebad9196f11094d2f0ddccf4
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# ClosedStruct
|
2
2
|
|
3
|
-
|
3
|
+
[](https://travis-ci.org/obrok/closed_struct)
|
4
|
+
|
5
|
+
ClosedStructs work like OpenStruct, with the exception of being immutable and not responding to methods which haven't been listed in the input hash
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
@@ -18,7 +20,12 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
```ruby
|
24
|
+
|
25
|
+
ClosedStruct.new(:a => :b).a # => :b
|
26
|
+
ClosedStruct.new("a" => :b).a # => :b
|
27
|
+
ClosedStruct.new(:a => :b).c # => raises NoMethodError
|
28
|
+
```
|
22
29
|
|
23
30
|
## Contributing
|
24
31
|
|
data/closed_struct.gemspec
CHANGED
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", "~> 1.
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rspec"
|
23
24
|
end
|
data/lib/closed_struct.rb
CHANGED
@@ -1,5 +1,25 @@
|
|
1
1
|
require "closed_struct/version"
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
class ClosedStruct
|
4
|
+
def initialize(contents)
|
5
|
+
@contents = contents
|
6
|
+
|
7
|
+
singleton_class = (class << self; self; end)
|
8
|
+
@contents.each do |key, value|
|
9
|
+
singleton_class.send(:define_method, key) { value }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
@contents
|
15
|
+
end
|
16
|
+
|
17
|
+
def hash
|
18
|
+
@contents.hash
|
19
|
+
end
|
20
|
+
|
21
|
+
def ==(other)
|
22
|
+
(other.class == self.class) && (other.to_h == self.to_h)
|
23
|
+
end
|
24
|
+
alias_method :eql?, :==
|
5
25
|
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.0.
|
1
|
+
class ClosedStruct
|
2
|
+
VERSION = "0.0.2"
|
3
3
|
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler/setup"
|
3
|
+
require "closed_struct"
|
4
|
+
|
5
|
+
describe ClosedStruct do
|
6
|
+
it "delegates method calls to hash lookups" do
|
7
|
+
expect(ClosedStruct.new(:a => :b).a).to eq(:b)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "does not delegate for keys that don't exist in the input" do
|
11
|
+
expect { ClosedStruct.new(:a => :b).c }.to raise_error(NoMethodError)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "is equal for the same arguments" do
|
15
|
+
first = ClosedStruct.new(:a => :b)
|
16
|
+
second = ClosedStruct.new(:a => :b)
|
17
|
+
|
18
|
+
expect(first == second).to be_true
|
19
|
+
expect(first.eql?(second)).to be_true
|
20
|
+
expect(first.hash).to eq(second.hash)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "is unequal for different arguments" do
|
24
|
+
first = ClosedStruct.new(:a => :b)
|
25
|
+
second = ClosedStruct.new(:a => :c)
|
26
|
+
|
27
|
+
expect(first == second).to be_false
|
28
|
+
expect(first.eql?(second)).to be_false
|
29
|
+
expect(first.hash).not_to eq(second.hash)
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: closed_struct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Paweł Obrok
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.5'
|
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
|
-
version: '1.
|
26
|
+
version: '1.5'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: ClosedStructs work like OpenStruct, with the exception of being immutable
|
42
56
|
and not responding to methods which haven't been listed in the input hash
|
43
57
|
email:
|
@@ -47,6 +61,7 @@ extensions: []
|
|
47
61
|
extra_rdoc_files: []
|
48
62
|
files:
|
49
63
|
- ".gitignore"
|
64
|
+
- ".travis.yml"
|
50
65
|
- Gemfile
|
51
66
|
- LICENSE.txt
|
52
67
|
- README.md
|
@@ -54,6 +69,7 @@ files:
|
|
54
69
|
- closed_struct.gemspec
|
55
70
|
- lib/closed_struct.rb
|
56
71
|
- lib/closed_struct/version.rb
|
72
|
+
- spec/closed_struct_spec.rb
|
57
73
|
homepage: ''
|
58
74
|
licenses:
|
59
75
|
- MIT
|
@@ -78,5 +94,6 @@ rubygems_version: 2.2.2
|
|
78
94
|
signing_key:
|
79
95
|
specification_version: 4
|
80
96
|
summary: An immutable, strict version of OpenStruct
|
81
|
-
test_files:
|
97
|
+
test_files:
|
98
|
+
- spec/closed_struct_spec.rb
|
82
99
|
has_rdoc:
|