astruct 2.11.0 → 3.0.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 +7 -0
- data/lib/astruct.rb +6 -81
- data/lib/astruct/behavior.rb +251 -0
- data/lib/astruct/version.rb +1 -2
- data/spec/lib/astruct/behavior_spec.rb +10 -0
- data/spec/lib/astruct/version_spec.rb +7 -0
- data/spec/lib/astruct_spec.rb +13 -0
- data/spec/spec_helper.rb +30 -0
- data/test/lib/{astruct_test.rb → astruct/test_behavior.rb} +13 -13
- data/test/test_helper.rb +2 -0
- metadata +91 -78
- data/.gitignore +0 -34
- data/.rvmrc +0 -49
- data/.travis.yml +0 -1
- data/Gemfile +0 -4
- data/Guardfile +0 -14
- data/LICENSE +0 -22
- data/README.md +0 -32
- data/Rakefile +0 -43
- data/astruct.gemspec +0 -23
- data/bench/add_more_vs_ostruct.rb +0 -34
- data/bench/delete_vs_ostruct.rb +0 -33
- data/bench/dump_vs_ostruct.rb +0 -33
- data/bench/dynamic_vs_ostruct.rb +0 -37
- data/bench/inspect_vs_ostruct.rb +0 -33
- data/bench/load_vs_ostruct.rb +0 -33
- data/bench/nested_vs_ostruct.rb +0 -37
- data/bench/new_vs_ostruct.rb +0 -31
- data/bench/some_updates_vs_ostruct.rb +0 -34
- data/lib/astruct/module.rb +0 -162
- data/test/helper.rb +0 -3
- data/test/lib/ostruct_test.rb +0 -227
data/test/helper.rb
DELETED
data/test/lib/ostruct_test.rb
DELETED
@@ -1,227 +0,0 @@
|
|
1
|
-
# require 'helper'
|
2
|
-
# require 'minitest/autorun'
|
3
|
-
|
4
|
-
# class TestOpenStruct < MiniTest::Unit::TestCase
|
5
|
-
# def setup
|
6
|
-
# @empty = OpenStruct.new
|
7
|
-
# @example = OpenStruct.new name: "Kurtis", age: 24
|
8
|
-
# end
|
9
|
-
|
10
|
-
# def test_equality_with_two_empty_ostructs
|
11
|
-
# empty2 = OpenStruct.new
|
12
|
-
# assert_equal @empty, empty2
|
13
|
-
# end
|
14
|
-
|
15
|
-
# def test_equality_vs_ostruct_with_fields
|
16
|
-
# refute_equal @example, @empty
|
17
|
-
# end
|
18
|
-
|
19
|
-
# def test_equality_vs_object_with_fake_table
|
20
|
-
# empty_object = Object.new
|
21
|
-
# empty_object.instance_eval { @table = { name: "Kurtis", age: 24 } }
|
22
|
-
# expected = @example
|
23
|
-
# actual = empty_object
|
24
|
-
# refute_equal expected, actual
|
25
|
-
# end
|
26
|
-
|
27
|
-
# def test_inspect_with_no_fields
|
28
|
-
# expected = "#<OpenStruct>"
|
29
|
-
# actual = @empty.inspect
|
30
|
-
# assert_equal expected, actual
|
31
|
-
# end
|
32
|
-
|
33
|
-
# def test_inspect_with_fields
|
34
|
-
# @empty.example1 = 1
|
35
|
-
# @empty.example2 = 2
|
36
|
-
# expected = "#<OpenStruct example1=1, example2=2>"
|
37
|
-
# actual = @empty.inspect
|
38
|
-
# assert_equal expected, actual
|
39
|
-
# end
|
40
|
-
|
41
|
-
# def test_inspect_with_sub_struct_duplicate
|
42
|
-
# @empty.struct2 = OpenStruct.new
|
43
|
-
# @empty.struct2.struct3 = @empty
|
44
|
-
# expected = '#<OpenStruct struct2=#<OpenStruct struct3=#<OpenStruct ...>>>'
|
45
|
-
# actual = @empty.inspect
|
46
|
-
# assert_equal expected, actual
|
47
|
-
# end
|
48
|
-
|
49
|
-
# def test_inspect_with_sub_struct
|
50
|
-
# @example.friends = OpenStruct.new name: "Jason", age: 24
|
51
|
-
# @example.friends.friends = OpenStruct.new name: "John", age: 15
|
52
|
-
# @example.friends.friends.friends = OpenStruct.new name: "Ally", age: 32
|
53
|
-
# expected = '#<OpenStruct name="Kurtis", age=24, friends=#<OpenStruct name="Jason", age=24, friends=#<OpenStruct name="John", age=15, friends=#<OpenStruct name="Ally", age=32>>>>'
|
54
|
-
# actual = @example.inspect
|
55
|
-
# assert_equal expected, actual
|
56
|
-
# end
|
57
|
-
|
58
|
-
# def test_inspect_with_twice_inspected_struct
|
59
|
-
# @example.inspect
|
60
|
-
# @example.inspect
|
61
|
-
# expected = '#<OpenStruct name="Kurtis", age=24>'
|
62
|
-
# actual = @example.inspect
|
63
|
-
# assert_equal expected, actual
|
64
|
-
# end
|
65
|
-
|
66
|
-
# def test_inspect_with_empty_sub_struct
|
67
|
-
# @empty.struct2 = OpenStruct.new
|
68
|
-
# expected = '#<OpenStruct struct2=#<OpenStruct>>'
|
69
|
-
# actual = @empty.inspect
|
70
|
-
# assert_equal expected, actual
|
71
|
-
# end
|
72
|
-
|
73
|
-
# def test_freeze_stops_new_assignments
|
74
|
-
# @example.freeze
|
75
|
-
# assert_raises(RuntimeError) { @example.age = 24 }
|
76
|
-
# end
|
77
|
-
|
78
|
-
# def test_freeze_still_returns_values
|
79
|
-
# @example.freeze
|
80
|
-
# expecteds = "Kurtis"
|
81
|
-
# actual = @example.name
|
82
|
-
# assert_equal expecteds, actual
|
83
|
-
# end
|
84
|
-
|
85
|
-
# def test_freeze_stops_reassignments
|
86
|
-
# @example.freeze
|
87
|
-
# assert_raises(RuntimeError) { @example.name = "Jazzy" }
|
88
|
-
# end
|
89
|
-
|
90
|
-
# # def test_freeze_stops_reassign_even_if_frozen_redefined
|
91
|
-
# # @example.freeze
|
92
|
-
# # def @example.frozen?; nil end
|
93
|
-
# # @example.freeze
|
94
|
-
# # message = '[ruby-core:22559]'
|
95
|
-
# # assert_raises(RuntimeError, message) { @example.name = "Jazzy" }
|
96
|
-
# # # assert_raises(TypeError, message) { @example.name = "Jazzy" }
|
97
|
-
# # end
|
98
|
-
|
99
|
-
# def test_ostruct_doesn_respond_to_non_existant_keys_getter
|
100
|
-
# refute_respond_to @empty, :akey
|
101
|
-
# end
|
102
|
-
|
103
|
-
# def test_ostruct_doesn_respond_to_non_existant_keys_setter
|
104
|
-
# refute_respond_to @empty, :akey=
|
105
|
-
# end
|
106
|
-
|
107
|
-
# def test_delete_field_removes_getter_method
|
108
|
-
# bug = '[ruby-core:33010]'
|
109
|
-
# @example.delete_field :name
|
110
|
-
# refute_respond_to @example, :name, bug
|
111
|
-
# end
|
112
|
-
|
113
|
-
# def test_delete_field_removes_setter_method
|
114
|
-
# bug = '[ruby-core:33010]'
|
115
|
-
# @example.delete_field :name
|
116
|
-
# refute_respond_to @example, :name=, bug
|
117
|
-
# end
|
118
|
-
|
119
|
-
# def test_delete_field_removes_table_key_value
|
120
|
-
# @example.delete_field :name
|
121
|
-
# expected = nil
|
122
|
-
# actual = @example.table[:name]
|
123
|
-
# assert_equal expected, actual
|
124
|
-
# end
|
125
|
-
|
126
|
-
# def test_delete_field_returns_value_of_deleted_key
|
127
|
-
# expected = "Kurtis"
|
128
|
-
# actual = @example.delete_field :name
|
129
|
-
# assert_equal expected, actual
|
130
|
-
# end
|
131
|
-
|
132
|
-
# def test_method_missing_handles_square_bracket_equals
|
133
|
-
# assert_raises(ArgumentError) { @empty[:foo] = :bar }
|
134
|
-
# end
|
135
|
-
|
136
|
-
# def test_method_missing_handles_square_brackets
|
137
|
-
# assert_raises(NoMethodError) { @empty[:foo] }
|
138
|
-
# end
|
139
|
-
|
140
|
-
# def test_to_hash_returns_hash
|
141
|
-
# expected = { name: "John Smith", age: 70, pension: 300 }
|
142
|
-
# actual = OpenStruct.new(expected).to_hash
|
143
|
-
# assert_equal expected, actual
|
144
|
-
# end
|
145
|
-
|
146
|
-
# def test_to_hash_modified_modifies_ostruct
|
147
|
-
# @example.to_hash[:age] = 70
|
148
|
-
# expected = 70
|
149
|
-
# actual = @example.age
|
150
|
-
# assert_equal expected, actual
|
151
|
-
# end
|
152
|
-
|
153
|
-
# def test_empty_example_has_empty_table
|
154
|
-
# expected = {}
|
155
|
-
# actual = @empty.table
|
156
|
-
# assert_equal expected, actual
|
157
|
-
# end
|
158
|
-
|
159
|
-
# def test_example_has_name_method
|
160
|
-
# assert_respond_to @example, :name
|
161
|
-
# end
|
162
|
-
|
163
|
-
# def test_example_has_given_name
|
164
|
-
# expected = "Kurtis"
|
165
|
-
# actual = @example.name
|
166
|
-
# assert_equal expected, actual
|
167
|
-
# end
|
168
|
-
|
169
|
-
# def test_example_takes_name
|
170
|
-
# assert_send [@example, :name=, "Dave"]
|
171
|
-
# end
|
172
|
-
|
173
|
-
# def test_example_has_taken_name
|
174
|
-
# @example.name = "Dave"
|
175
|
-
# expected = "Dave"
|
176
|
-
# actual = @example.name
|
177
|
-
# assert_equal expected, actual
|
178
|
-
# end
|
179
|
-
|
180
|
-
# def test_load_takes_a_hash
|
181
|
-
# assert_send [@example, :load, { nickname: "Kurt" }]
|
182
|
-
# end
|
183
|
-
|
184
|
-
# def test_load_sets_methods
|
185
|
-
# @example.load nickname: "Kurt"
|
186
|
-
# assert_respond_to @example, :nickname
|
187
|
-
# end
|
188
|
-
|
189
|
-
# def test_ostruct_has_getter_methods_with_non_alpha_numeric_characters
|
190
|
-
# @example.load "Length (In Inchs)" => 72
|
191
|
-
# assert_send [@example, :"Length (In Inchs)"]
|
192
|
-
# end
|
193
|
-
|
194
|
-
# def test_ostruct_has_getter_methods_with_non_alpha_numeric_characters
|
195
|
-
# @example.load "Length (In Inchs)" => 72
|
196
|
-
# assert_send [@example, :"Length (In Inchs)=", 73]
|
197
|
-
# end
|
198
|
-
|
199
|
-
# def test_load_sets_correct_value
|
200
|
-
# @example.load nickname: "Kurt"
|
201
|
-
# expected = "Kurt"
|
202
|
-
# actual = @example.nickname
|
203
|
-
# assert_equal expected, actual
|
204
|
-
# end
|
205
|
-
|
206
|
-
# def test_dump_contains_values
|
207
|
-
# expected = { name: "Kurtis", age: 24 }
|
208
|
-
# actual = @example.marshal_dump
|
209
|
-
# assert_equal expected, actual
|
210
|
-
# end
|
211
|
-
|
212
|
-
# def test_selective_dump_contains_selective_values
|
213
|
-
# expected = { age: 24 }
|
214
|
-
# actual = @example.dump :age
|
215
|
-
# assert_equal expected, actual
|
216
|
-
# end
|
217
|
-
|
218
|
-
# def test_inspect_has_values_delimited_by_comma
|
219
|
-
# expected = /name="Kurtis", age=24/
|
220
|
-
# actual = @example.inspect
|
221
|
-
# assert_match expected, actual
|
222
|
-
# end
|
223
|
-
|
224
|
-
# def test_other_object_isnt_affected
|
225
|
-
# refute_respond_to @empty, :name
|
226
|
-
# end
|
227
|
-
# end
|