finer_struct 0.0.8 → 0.1.0
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/lib/finer_struct/anonymous_immutable.rb +8 -3
- data/lib/finer_struct/anonymous_mutable.rb +7 -4
- data/lib/finer_struct/version.rb +1 -1
- data/spec/named_immutable_spec.rb +4 -1
- data/spec/named_mutable_spec.rb +4 -1
- data/spec/shared_examples/serializable.rb +15 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a138624305cc893f3f77a51c8c688b77340b0f2c
|
4
|
+
data.tar.gz: a9b1f9876dece3c19255d80b49aa303afda049fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a6e1dfe66882a768136ae35fc733c0ef1c5ab00912cd28ce976247ac403fcbd43024b65b392ab65779d3b2d1e0a8d7284aee908c1b345c6b81a997fe3c116876
|
7
|
+
data.tar.gz: 1ec2bed7215fa39ae7716a2a6830f30fc1209a3b631aaef5e23a53dbdbbb979a5d718981d0c3c04d64aff756c3618a77d81edec13f06ef496f6b5e6bbd721cef
|
@@ -7,15 +7,15 @@ module FinerStruct
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def method_missing(method, *arguments)
|
10
|
-
if
|
10
|
+
if has_attribute?(method)
|
11
11
|
@attributes[method]
|
12
12
|
else
|
13
13
|
super
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
def respond_to?(method)
|
18
|
-
|
17
|
+
def respond_to?(method, include_all = false)
|
18
|
+
has_attribute?(method) || super
|
19
19
|
end
|
20
20
|
|
21
21
|
def to_hash
|
@@ -26,5 +26,10 @@ module FinerStruct
|
|
26
26
|
other.class == self.class && other.to_hash == to_hash
|
27
27
|
end
|
28
28
|
|
29
|
+
private
|
30
|
+
|
31
|
+
def has_attribute?(attribute)
|
32
|
+
@attributes && @attributes.has_key?(attribute)
|
33
|
+
end
|
29
34
|
end
|
30
35
|
end
|
@@ -6,17 +6,17 @@ module FinerStruct
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def method_missing(method, *arguments)
|
9
|
-
if
|
9
|
+
if has_attribute?(method)
|
10
10
|
@attributes[method]
|
11
|
-
elsif is_assigment?(method) &&
|
11
|
+
elsif is_assigment?(method) && has_attribute?(key_for_assignment(method))
|
12
12
|
@attributes[key_for_assignment(method)] = arguments[0]
|
13
13
|
else
|
14
14
|
super
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
-
def respond_to?(method)
|
19
|
-
|
18
|
+
def respond_to?(method, include_all = false)
|
19
|
+
has_attribute?(method) || super
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_hash
|
@@ -37,6 +37,9 @@ module FinerStruct
|
|
37
37
|
method.to_s[0..-2].to_sym
|
38
38
|
end
|
39
39
|
|
40
|
+
def has_attribute?(attribute)
|
41
|
+
@attributes && @attributes.has_key?(attribute)
|
42
|
+
end
|
40
43
|
end
|
41
44
|
end
|
42
45
|
|
data/lib/finer_struct/version.rb
CHANGED
@@ -2,9 +2,11 @@ require 'finer_struct'
|
|
2
2
|
require 'shared_examples/struct'
|
3
3
|
require 'shared_examples/named'
|
4
4
|
require 'shared_examples/immutable'
|
5
|
+
require 'shared_examples/serializable'
|
5
6
|
|
6
7
|
describe "a named immutable struct" do
|
7
|
-
|
8
|
+
TestNamedImmutableStruct = FinerStruct::Immutable(:a, :b)
|
9
|
+
let(:klass) { TestNamedImmutableStruct }
|
8
10
|
subject { klass.new(a: 1, b: 2) }
|
9
11
|
let(:identical) { klass.new(a: 1, b: 2) }
|
10
12
|
let(:different) { klass.new(a: 3, b: 4) }
|
@@ -12,4 +14,5 @@ describe "a named immutable struct" do
|
|
12
14
|
it_behaves_like "a struct"
|
13
15
|
it_behaves_like "a named struct"
|
14
16
|
it_behaves_like "an immutable struct"
|
17
|
+
it_behaves_like "a serializable"
|
15
18
|
end
|
data/spec/named_mutable_spec.rb
CHANGED
@@ -2,9 +2,11 @@ require 'finer_struct'
|
|
2
2
|
require 'shared_examples/struct'
|
3
3
|
require 'shared_examples/named'
|
4
4
|
require 'shared_examples/mutable'
|
5
|
+
require 'shared_examples/serializable'
|
5
6
|
|
6
7
|
describe "a named mutable struct" do
|
7
|
-
|
8
|
+
TestNamedMutableStruct = FinerStruct::Mutable(:a, :b)
|
9
|
+
let(:klass) { TestNamedMutableStruct }
|
8
10
|
subject { klass.new(a: 1, b: 2) }
|
9
11
|
let(:identical) { klass.new(a: 1, b: 2) }
|
10
12
|
let(:different) { klass.new(a: 3, b: 4) }
|
@@ -12,6 +14,7 @@ describe "a named mutable struct" do
|
|
12
14
|
it_behaves_like "a struct"
|
13
15
|
it_behaves_like "a named struct"
|
14
16
|
it_behaves_like "a mutable struct"
|
17
|
+
it_behaves_like "a serializable"
|
15
18
|
|
16
19
|
it "allows you alias attribute assignments" do
|
17
20
|
subclass = Class.new(klass) do
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
shared_examples "a serializable" do
|
4
|
+
it "can be serialized and de-serialized via YAML" do
|
5
|
+
serialized = YAML.dump(subject)
|
6
|
+
deserialized = YAML.load(serialized)
|
7
|
+
expect(deserialized).to eq(subject)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "can be serialized and de-serialized via binary" do
|
11
|
+
serialized = Marshal.dump(subject)
|
12
|
+
deserialized = Marshal.load(serialized)
|
13
|
+
expect(deserialized).to eq(subject)
|
14
|
+
end
|
15
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: finer_struct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pete Yandell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- spec/shared_examples/immutable.rb
|
80
80
|
- spec/shared_examples/mutable.rb
|
81
81
|
- spec/shared_examples/named.rb
|
82
|
+
- spec/shared_examples/serializable.rb
|
82
83
|
- spec/shared_examples/struct.rb
|
83
84
|
homepage: https://github.com/notahat/finer_struct
|
84
85
|
licenses:
|
@@ -100,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
101
|
version: '0'
|
101
102
|
requirements: []
|
102
103
|
rubyforge_project:
|
103
|
-
rubygems_version: 2.
|
104
|
+
rubygems_version: 2.5.1
|
104
105
|
signing_key:
|
105
106
|
specification_version: 4
|
106
107
|
summary: A nicer replacement for Ruby's Struct and OpenStruct
|
@@ -112,4 +113,5 @@ test_files:
|
|
112
113
|
- spec/shared_examples/immutable.rb
|
113
114
|
- spec/shared_examples/mutable.rb
|
114
115
|
- spec/shared_examples/named.rb
|
116
|
+
- spec/shared_examples/serializable.rb
|
115
117
|
- spec/shared_examples/struct.rb
|