directive 0.23.5 → 0.25.0

Sign up to get free protection for your applications and to get access to all the features.
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