closed_struct 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Build Status](https://travis-ci.org/obrok/closed_struct.png?branch=master)](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:
|