dry-initializer 0.8.1 → 0.9.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
  SHA1:
3
- metadata.gz: 6b5d5685f90f815d5bc7b45fcc0e342bb5d4545a
4
- data.tar.gz: d6d8c4c59b72d4f7a9933dfb10e9b15350c16ecc
3
+ metadata.gz: 6c217f0fe5f51a14d0577ab5b43f9b4b976cd7c9
4
+ data.tar.gz: a1b2e181c5868340ec17aedce3804687b7b42e23
5
5
  SHA512:
6
- metadata.gz: 0e40ba0777d78ec4fcb44ced947679cf4b0e5db97e28d774b6c4e1d9edf27c971dee92387f35a2e4501ce5eaf516b4e4e8586268fc8bdcf2dca8cb7132a052ea
7
- data.tar.gz: 1dfdc453fbff8f8050c18bd5f13ecf4ec5c3586386ece9198067d793629e08bb0c433e3aaaa1a4f7a080e9edc19f9e14b9034bc8bf9128dd3556eace65329e87
6
+ metadata.gz: 729f4ba632a30bc9c4b9451e0c9cf1e985aff199ba4e1ddba95d07ee1beb467bb55bc5c374e0a3c0aecb21d9f9eae82e7c39f75a3c1d7aa7db82bef212e68ea6
7
+ data.tar.gz: 847c31acf6c91f7f28de176396803e2372df7d45482fc4d0df9928f7420af42ce101778f72fac55f17eeb6af518fd9aa0c6b09a2ec2da78a4468054ec0bd5282
data/CHANGELOG.md CHANGED
@@ -1,3 +1,25 @@
1
+ ## v0.9.0 2016-11-06
2
+
3
+ ### Added
4
+
5
+ * The method `#initialize` is defined when a class extended the module (@nepalez)
6
+
7
+ In previous versions the method was defined only by `param` and `option` calls.
8
+
9
+ ### Breaking Changes
10
+
11
+ * The initializer accepts any option (but skips unknown) from the very beginning (@nepalez)
12
+
13
+ ### Deleted
14
+
15
+ * Deprecated methods `tolerant_to_unknown_options` and `intolerant_to_unknown_options` (@nepalez)
16
+
17
+ ### Internal
18
+
19
+ * Refactor scope (`using`) to support methods renaming and aliasing (@nepalez)
20
+
21
+ [Compare 0.8.1...v0.9.0](https://github.com/dry-rb/dry-initializer/compare/0.8.1...v0.9.0)
22
+
1
23
  ## v0.8.1 2016-11-05
2
24
 
3
25
  ### Added
@@ -6,7 +28,7 @@
6
28
 
7
29
  option :name, Dry::Types['strict.string']
8
30
 
9
- [Compare v0.8.0...v0.8.1](https://github.com/dry-rb/dry-initializer/compare/v0.8.0..v0.8.1)
31
+ [Compare v0.8.0...0.8.1](https://github.com/dry-rb/dry-initializer/compare/v0.8.0..0.8.1)
10
32
 
11
33
  ## v0.8.0 2016-11-05
12
34
 
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = "dry-initializer"
3
- gem.version = "0.8.1"
3
+ gem.version = "0.9.0"
4
4
  gem.author = ["Vladimir Kochnev (marshall-lee)", "Andrew Kozin (nepalez)"]
5
5
  gem.email = ["hashtable@yandex.ru", "andrew.kozin@gmail.com"]
6
6
  gem.homepage = "https://github.com/dryrb/dry-initializer"
@@ -76,13 +76,9 @@ module Dry::Initializer
76
76
  end
77
77
 
78
78
  def reload_initializer(mixin)
79
- strings = @parts.select { |part| String === part }
80
- signature = [@signature.call, @tolerant].map(&:to_s)
81
- .reject(&:empty?)
82
- .join(", ")
83
79
  mixin.class_eval <<-RUBY
84
- def initialize(#{signature})
85
- #{strings.join("\n")}
80
+ def initialize(#{@signature.call})
81
+ #{@parts.select { |part| String === part }.join("\n")}
86
82
  __after_initialize__
87
83
  end
88
84
  RUBY
@@ -14,9 +14,9 @@ module Dry::Initializer
14
14
  # @return [self] itself
15
15
  #
16
16
  def param(name, type = nil, **options)
17
- options[:type] = type if type
18
- @initializer_builder = \
19
- initializer_builder.define(name, option: false, **options)
17
+ options[:type] = type if type
18
+ options[:option] = false
19
+ @initializer_builder = initializer_builder.define(name, **options)
20
20
  initializer_builder.call(self)
21
21
  end
22
22
 
@@ -27,9 +27,9 @@ module Dry::Initializer
27
27
  # @return (see #param)
28
28
  #
29
29
  def option(name, type = nil, **options)
30
- options[:type] = type if type
31
- @initializer_builder = \
32
- initializer_builder.define(name, option: true, **options)
30
+ options[:type] = type if type
31
+ options[:option] = true
32
+ @initializer_builder = initializer_builder.define(name, **options)
33
33
  initializer_builder.call(self)
34
34
  end
35
35
 
@@ -54,34 +54,6 @@ module Dry::Initializer
54
54
  initializer_builder.call(self)
55
55
  end
56
56
 
57
- # Makes initializer tolerant to unknown options
58
- #
59
- # @return [self] itself
60
- #
61
- def tolerant_to_unknown_options
62
- warn <<-MESSAGE.gsub(/ +\|/, "")
63
- |[DEPRECATION] Helper method `tolerant_to_unknown_options` was deprecated,
64
- |and will be removed in v0.9.0.
65
- |If any `option` was defined, the initializer becomes tolerant to all the others.
66
- |This is necessary to support "special" names in options like `option :end`.
67
- |It forbids options only when no one was declared explicitly.
68
- MESSAGE
69
- end
70
-
71
- # Makes initializer intolerant to unknown options
72
- #
73
- # @return [self] itself
74
- #
75
- def intolerant_to_unknown_options
76
- warn <<-MESSAGE.gsub(/ +\|/, "")
77
- |[DEPRECATION] Helper method `intolerant_to_unknown_options` was deprecated.
78
- |and will be removed in v0.9.0.
79
- |If any `option` was defined, the initializer becomes tolerant to all the others.
80
- |This is necessary to support "special" names in options like `option :end`.
81
- |It forbids options only when no one was declared explicitly.
82
- MESSAGE
83
- end
84
-
85
57
  private
86
58
 
87
59
  def initializer_builder
@@ -91,5 +63,9 @@ module Dry::Initializer
91
63
  def inherited(klass)
92
64
  klass.instance_variable_set :@initializer_builder, initializer_builder.dup
93
65
  end
66
+
67
+ def self.extended(klass)
68
+ klass.send(:initializer_builder).call(klass)
69
+ end
94
70
  end
95
71
  end
@@ -9,7 +9,7 @@ module Dry::Initializer::Plugins
9
9
  # # => "user = Dry::Initializer::UNDEFINED"
10
10
  #
11
11
  # Signature.call(:user, option: true)
12
- # # => "**__options__"
12
+ # # => nil
13
13
  #
14
14
  class Signature < Base
15
15
  def param?
@@ -21,9 +21,8 @@ module Dry::Initializer::Plugins
21
21
  end
22
22
 
23
23
  def call
24
- return "**__options__" unless param?
25
- return name.to_s if required?
26
- "#{name} = Dry::Initializer::UNDEFINED"
24
+ return unless param?
25
+ required? ? name.to_s : "#{name} = Dry::Initializer::UNDEFINED"
27
26
  end
28
27
  end
29
28
  end
@@ -1,31 +1,20 @@
1
1
  module Dry::Initializer
2
2
  # Shared scope for several params and options
3
3
  class Scope
4
- # Defines param with shared settings
5
- #
6
- # @param (see Dry::Initializer::Mixin#param)
7
- # @option (see Dry::Initializer::Mixin#param)
8
- # @return (see Dry::Initializer::Mixin#param)
9
- #
10
- def param(name, **options)
11
- @klass.param name, @options.merge(options)
12
- end
13
-
14
- # Defines option with shared settings
15
- #
16
- # @param (see Dry::Initializer::Mixin#option)
17
- # @option (see Dry::Initializer::Mixin#option)
18
- # @return (see Dry::Initializer::Mixin#option)
19
- #
20
- def option(name, **options)
21
- @klass.option name, @options.merge(options)
22
- end
23
-
24
4
  private
25
5
 
26
6
  def initialize(klass, **options)
27
7
  @klass = klass
28
8
  @options = options
29
9
  end
10
+
11
+ def method_missing(name, *args, **options)
12
+ return super unless respond_to? name
13
+ @klass.send(name, *args, **@options.merge(options))
14
+ end
15
+
16
+ def respond_to_missing?(name, *)
17
+ @klass.respond_to? name
18
+ end
30
19
  end
31
20
  end
@@ -5,8 +5,8 @@ module Dry::Initializer
5
5
  include Enumerable
6
6
  include Errors
7
7
 
8
- def initialize
9
- @list = []
8
+ def initialize(*list)
9
+ @list = list
10
10
  end
11
11
 
12
12
  def add(*args)
@@ -15,27 +15,19 @@ module Dry::Initializer
15
15
  validates_uniqueness_of signature
16
16
  validates_order_of signature
17
17
 
18
- copy { @list += [signature] }
18
+ self.class.new(*@list, signature)
19
19
  end
20
20
 
21
21
  def each
22
- (@list.select(&:param?) + @list.reject(&:param?)).each do |item|
23
- yield item
24
- end
22
+ @list.each { |item| yield item }
25
23
  end
26
24
 
27
25
  def call
28
- map(&:call).compact.uniq.join(", ")
26
+ (select(&:param?).map(&:call) + %w(**__options__)).compact.join(", ")
29
27
  end
30
28
 
31
29
  private
32
30
 
33
- def copy(&block)
34
- dup.tap do |instance|
35
- instance.instance_eval(&block)
36
- end
37
- end
38
-
39
31
  def validates_uniqueness_of(signature)
40
32
  return unless include? signature
41
33
 
@@ -43,8 +35,8 @@ module Dry::Initializer
43
35
  end
44
36
 
45
37
  def validates_order_of(signature)
46
- return unless signature.param? && signature.required?
47
- return unless any? { |item| item.param? && !item.required? }
38
+ return unless signature.required? && signature.param?
39
+ return unless reject(&:required?).any?(&:param?)
48
40
 
49
41
  fail OrderError.new(signature.name)
50
42
  end
@@ -2,19 +2,10 @@ describe "options tolerance" do
2
2
  before do
3
3
  class Test::Foo
4
4
  extend Dry::Initializer::Mixin
5
- option :foo
6
5
  end
7
-
8
- class Test::Bar
9
- extend Dry::Initializer::Mixin
10
- end
11
- end
12
-
13
- it "allows unknown options when someone defined" do
14
- expect { Test::Foo.new foo: :bar, bar: :baz }.not_to raise_error
15
6
  end
16
7
 
17
- it "forbids options when no one defined" do
18
- expect { Test::Bar.new bar: :baz }.to raise_error(ArgumentError)
8
+ it "allows options before any definition" do
9
+ expect { Test::Foo.new bar: :baz }.not_to raise_error
19
10
  end
20
11
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-initializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Kochnev (marshall-lee)
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-11-05 00:00:00.000000000 Z
12
+ date: 2016-11-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec