configurations 1.3.0 → 1.3.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.
@@ -12,5 +12,5 @@ module Configurations
12
12
 
13
13
  # Version number of Configurations
14
14
  #
15
- VERSION = '1.3.0'
15
+ VERSION = '1.3.1'
16
16
  end
@@ -54,7 +54,7 @@ module Configurations
54
54
  def configurable(*properties, &block)
55
55
  type = properties.shift if properties.first.is_a?(Class)
56
56
  @configurable ||= {}
57
- @configurable.merge!(to_configurable_hash(properties, type, &block))
57
+ @configurable.merge! to_configurable_hash(properties, type, &block)
58
58
  end
59
59
 
60
60
  # returns whether a property is set to be configurable
@@ -65,8 +65,10 @@ module Configurations
65
65
  _assign!(property, value)
66
66
  elsif !_is_writer?(method) && @_writeable || _configured?(method)
67
67
  @configuration[method]
68
- else
68
+ elsif ::Kernel.respond_to?(method, true)
69
69
  ::Kernel.send(method, *args, &block)
70
+ else
71
+ super
70
72
  end
71
73
  end
72
74
 
@@ -112,6 +114,11 @@ module Configurations
112
114
  @configurable.nil? or @configurable.empty?
113
115
  end
114
116
 
117
+ # @return [Hash] the configurations configurable hash
118
+ def _configurable
119
+ @configurable
120
+ end
121
+
115
122
  private
116
123
 
117
124
  # @param [Symbol] property The property to test for
@@ -137,19 +144,23 @@ module Configurations
137
144
  @configurable.each do |k, assertion|
138
145
  if k.is_a?(::Hash)
139
146
  k.each do |property, nested|
140
- @configuration[property] = Configuration.new(nil, _to_configurable_hash(nested, assertion))
147
+ @configuration[property] = Configuration.new(nil, _configurable_hash(property, nested, assertion))
141
148
  end
142
149
  end
143
150
  end
144
151
  end
145
152
 
153
+ # @param [Symbol, Hash, Array] property configurable properties, either single or nested
146
154
  # @param [Symbol, Hash, Array] value configurable properties, either single or nested
147
- # @param [Class] type the type to assert, if any
155
+ # @param [Hash] assertions if any
148
156
  # @return a hash with configurable values pointing to their types
149
157
  #
150
- def _to_configurable_hash(value, assertion)
158
+ def _configurable_hash(property, value, assertion)
151
159
  value = [value] unless value.is_a?(::Array)
152
- ::Hash[value.zip([assertion].flatten*value.size)]
160
+ hash = ::Hash[value.zip([assertion].flatten*value.size)]
161
+ hash = @configuration[property]._configurable.merge(hash) if @configuration.has_key?(property)
162
+
163
+ hash
153
164
  end
154
165
 
155
166
  # Assigns a value after running the assertions
@@ -172,7 +183,7 @@ module Configurations
172
183
  return unless _evaluable?(property, :type)
173
184
 
174
185
  assertion = @configurable[property][:type]
175
- ::Kernel.raise ConfigurationError, "Expected #{property} to be configured with #{expected_type}, but got #{value.class.inspect}", caller unless value.is_a?(assertion)
186
+ ::Kernel.raise ConfigurationError, "Expected #{property} to be configured with #{assertion}, but got #{value.class.inspect}", caller unless value.is_a?(assertion)
176
187
  end
177
188
 
178
189
  # Block assertion for configurable properties
@@ -7,7 +7,10 @@ class TestStricterConfiguration < Minitest::Test
7
7
  configurable :property1, :property2
8
8
  configurable String, :property3
9
9
  configurable Symbol, property4: :property5, property6: [:property7, :property8]
10
- configurable Array, property9: { property10: :property11 }
10
+ configurable Fixnum, property6: :property14
11
+ configurable Fixnum, property4: :property12
12
+ configurable Array, property9: { property10: { property11: :property12 } }
13
+ configurable Hash, property9: { property10: { property11: :property13 } }
11
14
  end
12
15
 
13
16
  def setup
@@ -16,9 +19,12 @@ class TestStricterConfiguration < Minitest::Test
16
19
  c.property2 = 'BASIC2'
17
20
  c.property3 = 'STRING'
18
21
  c.property4.property5 = :something
22
+ c.property4.property12 = 12
19
23
  c.property6.property7 = :anything
20
24
  c.property6.property8 = :everything
21
- c.property9.property10.property11 = %w(here I am)
25
+ c.property6.property14 = 555
26
+ c.property9.property10.property11.property12 = %w(here I am)
27
+ c.property9.property10.property11.property13 = { hi: :bye }
22
28
  end
23
29
 
24
30
  @configuration = StrictConfigurationTestModule.configuration
@@ -33,13 +39,41 @@ class TestStricterConfiguration < Minitest::Test
33
39
  assert_equal :something, @configuration.property4.property5
34
40
  end
35
41
 
42
+ def test_configurable_with_nested_calls_and_deeply_nested_property
43
+ assert_equal 12, @configuration.property4.property12
44
+ end
45
+
46
+ def test_configurable_with_nested_calls_and_added_property
47
+ assert_equal 555, @configuration.property6.property14
48
+ end
49
+
50
+ def test_configurable_type_assertion_with_nested_calls_and_added_property
51
+ assert_raises Configurations::ConfigurationError do
52
+ StrictConfigurationTestModule.configure do |c|
53
+ c.property6.property14 = ''
54
+ end
55
+ end
56
+ end
57
+
36
58
  def test_configurable_with_same_key_when_set_nested_configurable
37
59
  assert_equal :anything, @configuration.property6.property7
38
60
  assert_equal :everything, @configuration.property6.property8
39
61
  end
40
62
 
41
63
  def test_configurable_with_deeply_nested_property
42
- assert_equal %w(here I am), @configuration.property9.property10.property11
64
+ assert_equal %w(here I am), @configuration.property9.property10.property11.property12
65
+ end
66
+
67
+ def test_configurable_with_nested_calls_and_deeply_nested_property
68
+ assert_equal({ hi: :bye }, @configuration.property9.property10.property11.property13)
69
+ end
70
+
71
+ def test_configurable_type_restricted_with_nested_calls_and_deeply_nested_property
72
+ assert_raises Configurations::ConfigurationError do
73
+ StrictConfigurationTestModule.configure do |c|
74
+ c.property9.property10.property11.property13 = ''
75
+ end
76
+ end
43
77
  end
44
78
 
45
79
  def test_not_configurable_with_wrong_type
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configurations
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.3.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-08-17 00:00:00.000000000 Z
12
+ date: 2014-08-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest