type_struct 0.1.0 → 0.1.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/type_struct/version.rb +1 -1
- data/lib/type_struct.rb +14 -6
- data/lib/type_struct_test.rb +24 -3
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a27067e9d45914510c4dc7ac39e5927ac10169e4
|
4
|
+
data.tar.gz: 55b6804d69ca33abed2512f981262bf4131640e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69fa0b767895bb4acfc900ee449c7c7c364f37dcdfadeb9d355ecf6bfec8aa18d360ead266e728143c7760b27118c6e20ea0d960a176c31168c51d9279faa6ec
|
7
|
+
data.tar.gz: 1360dc44909bb05bda962e05e2705406381af5f017044d411e6afb954c8415d84dd2e85beeeba412fdecb82ed491d2fa6d215273ff5a965b36efa540156fdcbe
|
data/README.md
CHANGED
@@ -16,13 +16,13 @@ class Sample < TypeStruct.new(
|
|
16
16
|
|
17
17
|
sample = Sample.new(
|
18
18
|
str: "instance of String",
|
19
|
-
reg: "
|
19
|
+
reg: "match to regexp",
|
20
20
|
num: 10,
|
21
21
|
any: true,
|
22
22
|
)
|
23
23
|
|
24
24
|
p sample
|
25
|
-
#=> #<
|
25
|
+
#=> #<Sample str="instance of String", reg="not match to regexp", num=10, any=true>
|
26
26
|
|
27
27
|
p sample.to_h
|
28
28
|
#=> {:str=>"instance of String", :reg=>"not match to regexp", :num=>10, :any=>true}
|
data/lib/type_struct/version.rb
CHANGED
data/lib/type_struct.rb
CHANGED
@@ -7,7 +7,6 @@ class TypeStruct
|
|
7
7
|
class << self
|
8
8
|
def new(**args)
|
9
9
|
Class.new do
|
10
|
-
attr_accessor *args.keys
|
11
10
|
const_set :MEMBERS, args
|
12
11
|
|
13
12
|
class << self
|
@@ -24,6 +23,20 @@ class TypeStruct
|
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
26
|
+
args.keys.each do |k, _|
|
27
|
+
define_method(k) do
|
28
|
+
instance_variable_get("@#{k}")
|
29
|
+
end
|
30
|
+
|
31
|
+
define_method("#{k}=") do |v|
|
32
|
+
raise TypeStruct::NoMemberError unless respond_to?(k)
|
33
|
+
unless self.class.valid?(k, v)
|
34
|
+
raise TypeError, "expect #{self.class.type(k)} got #{v.class}"
|
35
|
+
end
|
36
|
+
instance_variable_set("@#{k}", v)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
27
40
|
def initialize(**arg)
|
28
41
|
self.class.members.each do |k, _|
|
29
42
|
self[k] = arg[k]
|
@@ -31,15 +44,10 @@ class TypeStruct
|
|
31
44
|
end
|
32
45
|
|
33
46
|
def []=(k, v)
|
34
|
-
raise TypeStruct::NoMemberError unless respond_to?(k)
|
35
|
-
unless self.class.valid?(k, v)
|
36
|
-
raise TypeError, "expect #{self.class.type(k)} got #{v.class}"
|
37
|
-
end
|
38
47
|
__send__("#{k}=", v)
|
39
48
|
end
|
40
49
|
|
41
50
|
def [](k)
|
42
|
-
raise TypeStruct::NoMemberError unless respond_to?(k)
|
43
51
|
__send__(k)
|
44
52
|
end
|
45
53
|
|
data/lib/type_struct_test.rb
CHANGED
@@ -77,10 +77,19 @@ module TypeStructTest
|
|
77
77
|
if err != nil
|
78
78
|
t.error("expect not raise error when valid value get. got #{err}")
|
79
79
|
end
|
80
|
+
_, err = go { dummy.str }
|
81
|
+
if err != nil
|
82
|
+
t.error("expect not raise error when valid value get. got #{err}")
|
83
|
+
end
|
84
|
+
|
80
85
|
_, err = go { dummy[:nothing] }
|
81
86
|
if err == nil
|
82
87
|
t.error("expect not raise error when invalid value get")
|
83
88
|
end
|
89
|
+
_, err = go { dummy.nothing }
|
90
|
+
if err == nil
|
91
|
+
t.error("expect not raise error when invalid value get")
|
92
|
+
end
|
84
93
|
end
|
85
94
|
|
86
95
|
def test_setter(t)
|
@@ -90,17 +99,29 @@ module TypeStructTest
|
|
90
99
|
if err == nil
|
91
100
|
t.error("expect raise error when invalid value set")
|
92
101
|
end
|
102
|
+
_, err = go { dummy.__send__("#{k}=", nil) }
|
103
|
+
if err == nil
|
104
|
+
t.error("expect raise error when invalid value set")
|
105
|
+
end
|
93
106
|
end
|
94
107
|
|
95
108
|
_, err = go { dummy[:any] = nil }
|
96
109
|
if err != nil
|
97
110
|
t.error("expect not raise error when valid value set got #{err}")
|
98
111
|
end
|
112
|
+
_, err = go { dummy.any = nil }
|
113
|
+
if err != nil
|
114
|
+
t.error("expect not raise error when valid value set got #{err}")
|
115
|
+
end
|
99
116
|
|
100
117
|
_, err = go { dummy[:nothing] = nil }
|
101
118
|
if err == nil
|
102
119
|
t.error("expect not raise error when valid value set got #{err}")
|
103
120
|
end
|
121
|
+
_, err = go { dummy.nothing = nil }
|
122
|
+
if err == nil
|
123
|
+
t.error("expect not raise error when valid value set got #{err}")
|
124
|
+
end
|
104
125
|
end
|
105
126
|
|
106
127
|
class Sample < TypeStruct.new(
|
@@ -113,15 +134,15 @@ module TypeStructTest
|
|
113
134
|
def example_readme
|
114
135
|
sample = Sample.new(
|
115
136
|
str: "instance of String",
|
116
|
-
reg: "
|
137
|
+
reg: "match to regexp",
|
117
138
|
num: 10,
|
118
139
|
any: true,
|
119
140
|
)
|
120
141
|
p sample
|
121
142
|
p sample.to_h
|
122
143
|
# Output:
|
123
|
-
# #<TypeStructTest::Sample str="instance of String", reg="
|
124
|
-
# {:str=>"instance of String", :reg=>"
|
144
|
+
# #<TypeStructTest::Sample str="instance of String", reg="match to regexp", num=10, any=true>
|
145
|
+
# {:str=>"instance of String", :reg=>"match to regexp", :num=>10, :any=>true}
|
125
146
|
end
|
126
147
|
|
127
148
|
private
|
metadata
CHANGED
@@ -1,55 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: type_struct
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-08-
|
11
|
+
date: 2015-08-24 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.10'
|
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.10'
|
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: rgot
|
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
|
description: Imitating static typed struct.
|
@@ -59,8 +59,8 @@ executables: []
|
|
59
59
|
extensions: []
|
60
60
|
extra_rdoc_files: []
|
61
61
|
files:
|
62
|
-
-
|
63
|
-
-
|
62
|
+
- .gitignore
|
63
|
+
- .travis.yml
|
64
64
|
- Gemfile
|
65
65
|
- LICENSE.txt
|
66
66
|
- README.md
|
@@ -79,17 +79,17 @@ require_paths:
|
|
79
79
|
- lib
|
80
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
|
-
- -
|
82
|
+
- - '>='
|
83
83
|
- !ruby/object:Gem::Version
|
84
84
|
version: '0'
|
85
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
90
|
requirements: []
|
91
91
|
rubyforge_project:
|
92
|
-
rubygems_version: 2.
|
92
|
+
rubygems_version: 2.0.14
|
93
93
|
signing_key:
|
94
94
|
specification_version: 4
|
95
95
|
summary: Imitating static typed struct.
|