attribute_struct 0.2.8 → 0.2.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce43bf5414fc669856d07c0cfb12d5f49794c598
4
- data.tar.gz: 60d3f21d07df5d5493db11d258f5912799e51d50
3
+ metadata.gz: f9b868b2158e6d4180a0284e6570aae190f912dd
4
+ data.tar.gz: fea21780da1c0b5aec42317079e94201089ce9a6
5
5
  SHA512:
6
- metadata.gz: 59b0637283bbba0d8fc6b4519b299a1645d91441a45dabfc0a23e51c0789acd08a57e4ef3667bfdd297d35c1ec4d46867d3cdfa2175a2842389f9a16e3538a70
7
- data.tar.gz: edbb7022af9cd5650a6770ceba589dfb8bcac78a6de906b07f0c2d198b8f18690496cfca5b77ae01ff535b3905e8ce3303d8cb74591e4b6240394eae23d47764
6
+ metadata.gz: d808083f54a73f7d445fe5c2e87433930b18907267ed3bd917679783a1afc82746622b7dc123a21cd9db4b158920a4b88ebf0fd4ea5b53162c327a3752e39c25
7
+ data.tar.gz: c0e1f1ef8ffdd5bf32de73ab95d13680829b751470d1c6d1f2d4d7069a2d1eb48753942435e57afd2159533fe972cab0f6e0c1193e0650023238bc0f86092f2a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## v0.2.10
2
+ * Add support for multi parameter set
3
+
1
4
  ## v0.2.8
2
5
  * Fix class mismatch issue
3
6
 
@@ -10,5 +10,5 @@ Gem::Specification.new do |s|
10
10
  s.homepage = 'http://github.com/chrisroberts/attribute_struct'
11
11
  s.description = 'Attribute structures'
12
12
  s.require_path = 'lib'
13
- s.files = Dir['**/*']
13
+ s.files = Dir['lib/**/*'] + %w(attribute_struct.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
14
14
  end
@@ -46,6 +46,8 @@ class AttributeStruct < BasicObject
46
46
 
47
47
  end
48
48
 
49
+ class CollapseArray < ::Array; end
50
+
49
51
  # @return [Truthy, Falsey] current camelizing setting
50
52
  attr_reader :_camel_keys
51
53
  # @return [AtributeStruct::AttributeHash, Mash] holding space for state
@@ -194,7 +196,7 @@ class AttributeStruct < BasicObject
194
196
  end
195
197
  @table[sym] = result
196
198
  else
197
- if(args.size > 1)
199
+ if(args.size > 1 && args.all?{|i| i.is_a?(::String) || i.is_a?(::Symbol)})
198
200
  @table[sym] = _klass_new unless @table[sym].is_a?(_klass)
199
201
  endpoint = args.inject(@table[sym]) do |memo, k|
200
202
  unless(memo[k].is_a?(_klass))
@@ -205,11 +207,11 @@ class AttributeStruct < BasicObject
205
207
  return endpoint # custom break out
206
208
  else
207
209
  if(_state(:value_collapse) && !(leaf = @table[sym]).nil?)
208
- leaf = [leaf] unless leaf.is_a?(::Array)
209
- leaf << args.first
210
+ leaf = CollapseArray.new.push(leaf) unless leaf.is_a?(CollapseArray)
211
+ leaf << (args.size > 1 ? args : args.first)
210
212
  @table[sym] = leaf
211
213
  else
212
- @table[sym] = args.first
214
+ @table[sym] = (args.size > 1 ? args : args.first)
213
215
  end
214
216
  end
215
217
  end
@@ -2,5 +2,5 @@ require 'attribute_struct/attribute_struct'
2
2
 
3
3
  class AttributeStruct
4
4
  # Current library version
5
- VERSION = ::Gem::Version.new('0.2.8')
5
+ VERSION = ::Gem::Version.new('0.2.10')
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attribute_struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-28 00:00:00.000000000 Z
11
+ date: 2015-03-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Attribute structures
14
14
  email: chrisroberts.code@gmail.com
@@ -18,12 +18,8 @@ extra_rdoc_files: []
18
18
  files:
19
19
  - CHANGELOG.md
20
20
  - CONTRIBUTING.md
21
- - Gemfile
22
- - Gemfile.lock
23
21
  - LICENSE
24
22
  - README.md
25
- - attribute_struct-0.2.6.gem
26
- - attribute_struct-0.2.7.gem
27
23
  - attribute_struct.gemspec
28
24
  - lib/attribute_struct.rb
29
25
  - lib/attribute_struct/attribute_hash.rb
@@ -31,11 +27,6 @@ files:
31
27
  - lib/attribute_struct/irb_compat.rb
32
28
  - lib/attribute_struct/monkey_camels.rb
33
29
  - lib/attribute_struct/version.rb
34
- - test/spec.rb
35
- - test/specs/basic.rb
36
- - test/specs/camel.rb
37
- - test/specs/collapse.rb
38
- - test/specs/merging.rb
39
30
  homepage: http://github.com/chrisroberts/attribute_struct
40
31
  licenses:
41
32
  - Apache 2.0
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'minitest'
4
-
5
- gemspec
data/Gemfile.lock DELETED
@@ -1,16 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- attribute_struct (0.2.7)
5
-
6
- GEM
7
- remote: https://rubygems.org/
8
- specs:
9
- minitest (5.0.6)
10
-
11
- PLATFORMS
12
- ruby
13
-
14
- DEPENDENCIES
15
- attribute_struct!
16
- minitest
Binary file
Binary file
data/test/spec.rb DELETED
@@ -1,3 +0,0 @@
1
- Dir.glob(File.join(File.expand_path(File.dirname(__FILE__)), 'specs/*.rb')).each do |path|
2
- require path
3
- end
data/test/specs/basic.rb DELETED
@@ -1,169 +0,0 @@
1
- require 'minitest/autorun'
2
-
3
- describe AttributeStruct do
4
- describe 'Basic usage' do
5
- describe 'instance based population' do
6
- before do
7
- @struct = AttributeStruct.new
8
- @struct.method.based.access true
9
- @struct.method('and', 'parameter', 'based').access true
10
- @struct.block do
11
- based.access true
12
- end
13
- @struct.block('and', 'parameter', 'based') do
14
- access true
15
- end
16
- @struct.block_only do
17
- access true
18
- end
19
- @struct._set('1') do
20
- value true
21
- end
22
- end
23
-
24
- it 'allows method based access' do
25
- @struct.method.based.access.must_equal true
26
- end
27
-
28
- it 'allows method and parameter based access' do
29
- @struct.method.and.parameter.based.access.must_equal true
30
- end
31
-
32
- it 'allows block based access' do
33
- @struct.block.based.access.must_equal true
34
- end
35
-
36
- it 'allows block and parameter based access' do
37
- @struct.block.and.parameters.based.access.must_equal true
38
- end
39
-
40
- it 'allows block only access' do
41
- @struct.block_only.access.must_equal true
42
- end
43
-
44
- it 'allows hash style access' do
45
- @struct['method'][:based].access.must_equal true
46
- end
47
-
48
- it 'allows _set for invalid method names' do
49
- @struct['1'].value.must_equal true
50
- end
51
- end
52
-
53
- describe 'block based creation' do
54
- before do
55
- @struct = AttributeStruct.new do
56
- enable true
57
- access.user true
58
- access do
59
- port 80
60
- transport :udp
61
- end
62
- end
63
- end
64
-
65
- it 'creates struct with block content' do
66
- @struct.enable.must_equal true
67
- @struct.access.user.must_equal true
68
- @struct.access.port.must_equal 80
69
- @struct.access.transport.must_equal :udp
70
- end
71
-
72
- end
73
-
74
- describe 'nil behavior' do
75
- before do
76
- @struct = AttributeStruct.new
77
- end
78
-
79
- it 'should return as nil' do
80
- @struct.must_be_nil
81
- end
82
- end
83
-
84
- describe 'array helper' do
85
- before do
86
- @struct = AttributeStruct.new do
87
- my_array _array(
88
- -> {
89
- working true
90
- },
91
- :item
92
- )
93
- end
94
- end
95
-
96
- it 'should contain an array at my_array' do
97
- @struct.my_array.must_be_kind_of Array
98
- end
99
-
100
- it 'should contain symbol in array' do
101
- @struct.my_array.must_include :item
102
- end
103
-
104
- it 'should contain an AttrubuteStruct instance in array' do
105
- assert @struct.my_array.detect{|i| i.is_a?(AttributeStruct)}
106
- end
107
-
108
- it 'should contain working attribute in array struct' do
109
- @struct.my_array.detect{|i| i.is_a?(AttributeStruct)}.working.must_equal true
110
- end
111
- end
112
-
113
- describe 'entry deletion' do
114
- before do
115
- @struct = AttributeStruct.new do
116
- value1 true
117
- value2 true
118
- end
119
- @struct._delete(:value2)
120
- end
121
-
122
- it 'should contain value1' do
123
- @struct.value1.must_equal true
124
- end
125
-
126
- it 'should not contain value2 in keys' do
127
- @struct._keys.wont_include 'value2'
128
- end
129
-
130
- it 'should report nil for value2' do
131
- @struct.value2.must_be_nil
132
- end
133
- end
134
-
135
- describe 'dumps' do
136
- before do
137
- @struct = AttributeStruct.new do
138
- value1 true
139
- value2 do
140
- nested true
141
- end
142
- end
143
- end
144
-
145
- it 'should dump to a hash type value' do
146
- @struct._dump.must_be_kind_of Hash
147
- end
148
-
149
- it 'should include all defined values' do
150
- dump = @struct._dump
151
- dump['value1'].must_equal true
152
- dump['value2'].must_be_kind_of Hash
153
- dump['value2']['nested'].must_equal true
154
- end
155
- end
156
-
157
- describe 'loads' do
158
- before do
159
- @hash = {'value1' => true, 'value2' => {'nested' => true}}
160
- @struct = AttributeStruct.new(@hash)
161
- end
162
-
163
- it 'should include all values defined in hash' do
164
- @struct.value1.must_equal true
165
- @struct.value2.nested.must_equal true
166
- end
167
- end
168
- end
169
- end
data/test/specs/camel.rb DELETED
@@ -1,80 +0,0 @@
1
- require 'minitest/autorun'
2
-
3
- describe AttributeStruct do
4
- describe 'Camel usage' do
5
- before do
6
- AttributeStruct.camel_keys = true
7
- @struct = AttributeStruct.new do
8
- value_one true
9
- value_two do
10
- nesting true
11
- end
12
- end
13
- end
14
- after do
15
- AttributeStruct.camel_keys = false
16
- end
17
-
18
- it 'should camel case keys when dumped' do
19
- @struct._dump.keys.must_include 'ValueOne'
20
- @struct._dump.keys.must_include 'ValueTwo'
21
- end
22
-
23
- it 'should allow explicit disable on keys' do
24
- @struct._set('not_camel'._no_hump, true)
25
- @struct._dump.keys.must_include 'not_camel'
26
- end
27
-
28
- it 'should allow implicit disable on nested structs' do
29
- @struct.disable_camel do |struct|
30
- struct._camel_keys_set(:auto_disable)
31
- not_camel true
32
- not_camel_nest do
33
- no_camel_here true
34
- end
35
- end
36
- dump = @struct._dump
37
- dump['DisableCamel'][:not_camel].must_equal true
38
- dump['DisableCamel'][:not_camel_nest][:no_camel_here].must_equal true
39
- dump['ValueOne'].must_equal true
40
- dump['ValueTwo']['Nesting'].must_equal true
41
- end
42
- end
43
- describe 'Camel enabled imports' do
44
- before do
45
- @struct = AttributeStruct.new
46
- @struct._camel_keys = true
47
- @struct._camel_keys_set(:auto_discovery)
48
- @struct._load(
49
- {
50
- 'Fubar' => {
51
- 'FooBar' => true,
52
- 'FeeBar' => {
53
- 'FauxBar' => 'done'
54
- },
55
- 'FooDar' => {
56
- 'snake_case' => {
57
- 'still_snake' => {
58
- 'NowCamel' => {
59
- 'CamelCamel' => 'yep, a camel'
60
- }
61
- }
62
- }
63
- }
64
- }
65
- }
66
- )
67
- @struct._camel_keys_set(nil)
68
- end
69
-
70
- it 'should properly export keys after discovery' do
71
- @struct.fubar.new_bar.halt 'new_value'
72
- @struct.fubar.foo_dar.snake_case.new_snake 'snake!'
73
- @struct.fubar.foo_dar.snake_case.still_snake.now_camel.new_camel 'a camel!'
74
- hash = @struct._dump
75
- hash['Fubar']['NewBar']['Halt'].must_equal 'new_value'
76
- hash['Fubar']['FooDar']['snake_case']['new_snake'].must_equal 'snake!'
77
- hash['Fubar']['FooDar']['snake_case']['still_snake']['NowCamel']['NewCamel'].must_equal 'a camel!'
78
- end
79
- end
80
- end
@@ -1,77 +0,0 @@
1
- require 'minitest/autorun'
2
-
3
- describe AttributeStruct do
4
- describe 'Collapse' do
5
- describe 'direct value set' do
6
-
7
- describe 'When values are not collapsed' do
8
- before do
9
- @struct = AttributeStruct.new
10
- @struct.direct.assignment 1
11
- @struct.direct.assignment 2
12
- @dump = @struct._dump
13
- end
14
-
15
- it 'should return last set value' do
16
- @dump['direct']['assignment'].must_equal 2
17
- end
18
- end
19
-
20
- describe 'When values are collapsed' do
21
- before do
22
- @struct = AttributeStruct.new
23
- @struct._set_state(:value_collapse => true)
24
- @struct.direct.assignment 1
25
- @struct.direct.assignment 2
26
- @dump = @struct._dump
27
- end
28
-
29
- it 'should return both assigned values as an array' do
30
- @dump['direct']['assignment'].must_equal [1,2]
31
- end
32
- end
33
-
34
- end
35
-
36
- describe 'block value set' do
37
-
38
- describe 'When values are not collapsed' do
39
- before do
40
- @struct = AttributeStruct.new
41
- @struct.direct do
42
- assignment true
43
- end
44
- @struct.direct do
45
- assignment false
46
- end
47
- @dump = @struct._dump
48
- end
49
-
50
- it 'should return last set value' do
51
- @dump['direct']['assignment'].must_equal false
52
- end
53
-
54
- end
55
-
56
- describe 'When values are collapsed' do
57
- before do
58
- @struct = AttributeStruct.new
59
- @struct._set_state(:value_collapse => true)
60
- @struct.direct do
61
- assignment true
62
- end
63
- @struct.direct do
64
- assignment false
65
- end
66
- @dump = @struct._dump
67
- end
68
-
69
- it 'should return both assigned values as an array' do
70
- @dump['direct']['assignment'].must_equal [true, false]
71
- end
72
-
73
- end
74
-
75
- end
76
- end
77
- end
@@ -1,55 +0,0 @@
1
- require 'minitest/autorun'
2
-
3
- describe AttributeStruct do
4
- describe 'Merging usage' do
5
- before do
6
- @struct1 = AttributeStruct.new do
7
- value1 true
8
- value2 do
9
- nesting true
10
- end
11
- end
12
- @struct2 = AttributeStruct.new do
13
- value2 do
14
- nesting false
15
- squashing true
16
- end
17
- end
18
- end
19
-
20
- describe 'new struct from merge' do
21
- before do
22
- @struct = @struct1._merge(@struct2)
23
- end
24
-
25
- it 'should have correct value for value1' do
26
- @struct.value1.must_equal true
27
- end
28
-
29
- it 'should have correct value for squashing' do
30
- @struct.value2.squashing.must_equal true
31
- end
32
-
33
- it 'should have correct value for nesting' do
34
- @struct.value2.nesting.must_equal false
35
- end
36
- end
37
-
38
- describe 'update struct from merge' do
39
- before do
40
- @struct = AttributeStruct.new do
41
- test_value true
42
- end
43
- @struct._merge!(@struct1)
44
- end
45
-
46
- it 'should contain test_value' do
47
- @struct.test_value.must_equal true
48
- end
49
-
50
- it 'should contain value1' do
51
- @struct.value1.must_equal true
52
- end
53
- end
54
- end
55
- end