directive 0.23.5 → 0.25.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad9f8a2ff875fd6ab466dd7b1c4dafc467ecdfc537cff5c4af7eb665ec6a729f
4
- data.tar.gz: 0e721be64bb205f9c92ca8885865fc9b7aa104101bdc68a7bd8c40df56942da9
3
+ metadata.gz: 8fb1887845733661d84f08fcd89db5b492093088d1a276cf52f6ed0fb6e9230d
4
+ data.tar.gz: dd235b4279ae0ef12c1509dde772002f1f481470a0e7d3cae9eebb996818f2c6
5
5
  SHA512:
6
- metadata.gz: 0bf703b9367297acca316a288dd9152c14af6673111beff75f8944f1715f0351c6e20d38ee934e45e0050ef54f1623bf1a2e93da96d96d3ff15dd219dbfac962
7
- data.tar.gz: ce7696b67ab2f8b2b82abd0e32dcae8772c034bc43f94dd1c0512a66a5aa32c651d6c9e7d232d70ce59e951250e9f98887d8ccfbf0ac716d046e042ea621c14c
6
+ metadata.gz: e6c67adc0e092d71c3e29ea0c00c444b7836317dc076df36f6eef8d01cf59e728c80e8f6a3a98efa036795c725b72a3ad08ac561a145ffbd9e3001e5853d8fd8
7
+ data.tar.gz: 6eed2dd660a688ce1bd97629d87caffb3d0a7d4c4f9ebc4f49ce0be9660946df5924800436aa3e29866022fb0473a439d6199f61b9e46ec592694a95325c7da1
@@ -27,12 +27,12 @@ module Directive
27
27
  end
28
28
 
29
29
  # NOTE: options must be set up before {#configure} is called
30
- def option(*args, &block)
31
- config_class.__send__(:option, *args, &block)
30
+ def option(*args, **kwargs, &block)
31
+ config_class.__send__(:option, *args, **kwargs, &block)
32
32
  end
33
33
 
34
- def nested(*args, &block)
35
- config_class.__send__(:nested, *args, &block)
34
+ def nested(namespace, &block)
35
+ config_class.__send__(:nested, namespace, &block)
36
36
  end
37
37
 
38
38
  private
@@ -17,19 +17,23 @@ module Directive
17
17
  class << self
18
18
  private
19
19
 
20
- def option(name, *)
20
+ def option(name, *args, **kwargs)
21
+ name = name.to_sym
22
+
21
23
  _ensure_safe_option_name(name)
22
24
 
23
- super
25
+ super(name, *args, **kwargs)
24
26
  end
25
27
 
26
28
  def nested(namespace, &block)
29
+ namespace = namespace.to_sym
30
+
27
31
  _ensure_safe_option_name(namespace)
28
32
 
29
33
  nested_config_builder_for(namespace).tap do |builder|
30
34
  builder.instance_exec(&block)
31
35
 
32
- _nested_options << namespace.to_sym
36
+ _nested_options << namespace
33
37
  define_method(namespace) do |&nested_configure_block|
34
38
  builder.__send__(:configuration).tap do |nested_config|
35
39
  nested_configure_block.call(nested_config) if nested_configure_block.respond_to?(:call)
@@ -43,10 +47,10 @@ module Directive
43
47
  end
44
48
 
45
49
  def _ensure_safe_option_name(name)
46
- raise ArgumentError, "#{name.inspect} is reserved and cannot be used at a config option" if name.to_sym.in? RESERVED_WORDS
47
- raise ArgumentError, "#{name.inspect} is already in use" if _nested_options.include?(name.to_sym)
50
+ raise ArgumentError, "#{name.inspect} is reserved and cannot be used at a config option" if name.in? RESERVED_WORDS
51
+ raise ArgumentError, "#{name.inspect} is defined twice" if _nested_options.include?(name)
48
52
 
49
- puts "Warning: the config option #{name} is already defined" if _options.include?(name.to_sym) # rubocop:disable Rails/Output
53
+ puts "Warning: the config option #{name} is already defined" if _options.include?(name) # rubocop:disable Rails/Output
50
54
  end
51
55
 
52
56
  def inherited(base)
@@ -17,19 +17,15 @@ module Directive
17
17
  attr_reader :config
18
18
 
19
19
  def method_missing(method_name, *)
20
- name = method_name.to_sym
21
-
22
- return mutex.synchronize { config.public_send(name) } if config._options.map(&:to_sym).include?(name)
23
- return config._nested_builders[name].reader if config._nested_builders.key?(name)
20
+ return mutex.synchronize { config.public_send(method_name) } if config._options.include?(method_name)
21
+ return config._nested_builders[method_name].reader if config._nested_builders.key?(method_name)
24
22
 
25
23
  super
26
24
  end
27
25
 
28
26
  def respond_to_missing?(method_name, *)
29
- name = method_name.to_sym
30
-
31
- config._options.map(&:to_sym).include?(name) ||
32
- config._nested_builders.key?(name) ||
27
+ config._options.include?(method_name) ||
28
+ config._nested_builders.key?(method_name) ||
33
29
  super
34
30
  end
35
31
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "spicerack/rspec/custom_matchers/define_option"
4
+
3
5
  module Directive
4
6
  module SpecHelper
5
7
  module Matchers
@@ -19,21 +21,35 @@ module Directive
19
21
  # it { is_expected.to define_config_option :foo }
20
22
  # it { is_expected.to define_config_option :bar, default: :baz }
21
23
  # end
22
- define :define_config_option do |option, default: nil|
23
- description { "define config option #{option.inspect}" }
24
- failure_message { "expected #{@obj} to define config option #{option.inspect} with default #{default.inspect}" }
24
+ define :define_config_option do |option, **config_options|
25
+ attr_reader :obj, :option, :default, :default_expected
26
+
27
+ description { "define config option #{option.inspect}#{with_default_message}" }
28
+ failure_message { "expected #{obj} to define config option #{option.inspect}#{with_default_message}" }
25
29
 
26
30
  match do |obj|
31
+ config_options.assert_valid_keys(:default)
32
+
27
33
  @obj = obj
34
+ @options = option
35
+
36
+ @default_expected = config_options.key?(:default)
37
+ @default = config_options[:default]
28
38
 
29
39
  if obj.is_a? Directive::ConfigObject
30
- expect(obj).to define_option option, default: default
40
+ expect(obj).to define_option option.to_sym, default: default
31
41
  else
32
42
  expect(obj).to respond_to :config
33
43
  expect(obj.config.instance_variable_get(:@config)).to be_present
34
- expect(obj.config.instance_variable_get(:@config)).to define_option option, default: default
44
+ expect(obj.config.instance_variable_get(:@config)).to define_option option.to_sym, default: default
35
45
  end
36
46
  end
47
+
48
+ def with_default_message
49
+ return unless default_expected
50
+
51
+ " with default #{default.inspect}"
52
+ end
37
53
  end
38
54
  end
39
55
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Directive
4
4
  # This constant is managed by spicerack
5
- VERSION = "0.23.5"
5
+ VERSION = "0.25.0"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: directive
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.5
4
+ version: 0.25.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Allen Rettberg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-05 00:00:00.000000000 Z
11
+ date: 2020-10-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 0.23.5
33
+ version: 0.25.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 0.23.5
40
+ version: 0.25.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -104,16 +104,16 @@ dependencies:
104
104
  name: rake
105
105
  requirement: !ruby/object:Gem::Requirement
106
106
  requirements:
107
- - - "~>"
107
+ - - ">="
108
108
  - !ruby/object:Gem::Version
109
- version: '10.0'
109
+ version: 12.3.3
110
110
  type: :development
111
111
  prerelease: false
112
112
  version_requirements: !ruby/object:Gem::Requirement
113
113
  requirements:
114
- - - "~>"
114
+ - - ">="
115
115
  - !ruby/object:Gem::Version
116
- version: '10.0'
116
+ version: 12.3.3
117
117
  - !ruby/object:Gem::Dependency
118
118
  name: rspec
119
119
  requirement: !ruby/object:Gem::Requirement
@@ -186,8 +186,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
186
  - !ruby/object:Gem::Version
187
187
  version: '0'
188
188
  requirements: []
189
- rubyforge_project:
190
- rubygems_version: 2.7.6
189
+ rubygems_version: 3.1.4
191
190
  signing_key:
192
191
  specification_version: 4
193
192
  summary: Gem configuration made simple