method_object 1.0.0 → 1.1.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: 3b6cfbf7d4687cd268dadbd876eb81148740f126d2f30d1ecc925df05572e263
4
- data.tar.gz: 003b2f8abf57ee1aa073e5715b318016e1597053b31a6d540b41627838e813d6
3
+ metadata.gz: 6f253b26368bed785b3953ec65e8deca17d637232b67607c042eea7a93cf1238
4
+ data.tar.gz: 25c6c4c527708a4a7f1cd614fa89c1d0769358abf639ff2fb90d2667cc08e84e
5
5
  SHA512:
6
- metadata.gz: 42177284d72db7f0f4888c3a4d42af7f96d7d6ddc0e6a85c7b9926c07b7c34fe511f194ab775da2145fed1a3dd50420e20499554181d42e08a13d73ca43c6ab1
7
- data.tar.gz: b56eabe3a2f69cfd845ea74e2ea8b7304f494ad3bdf8d4408d0f31228fa27abd57bab72f0e9581c0fe0644ec0a6fe8f71c39768df2cfe57d218f9025908112b8
6
+ metadata.gz: f1fcc4865de7c9c99e9d9b836e32d6b9d6a983bb0266ef46878021351982a1a03a0d2ac8e92c0f7000918493830d6a8e7eec7040186fde37603341d1b61571d6
7
+ data.tar.gz: 3f0ffd9158b17a45fcae5aa46c55fc6d4d2ffc2086cb43615bcc11b1a8b02d8cf265ce759cd01bbbced1546a043955bf1389b94dc9eccdc4c898209f2f5ea9b1
data/lib/method_object.rb CHANGED
@@ -8,33 +8,34 @@ module MethodObject
8
8
  end
9
9
 
10
10
  module ClassMethods
11
- def call(*args, &block)
12
- __check_for_unknown_options(*args)
13
- new(*args).call(&block)
11
+ def call(*args, **kwargs, &block)
12
+ __check_for_unknown_options(*args, **kwargs)
13
+
14
+ if kwargs.empty?
15
+ # Preventing `Passing the keyword argument as the last hash parameter is deprecated`
16
+ new(*args).call(&block)
17
+ else
18
+ new(*args, **kwargs).call(&block)
19
+ end
14
20
  end
15
21
 
16
- # Because of the positioning of multiple params, params can never be omitted.
22
+ # Overriding the implementation of `#param` in the `dry-initializer` gem.
23
+ # Because of the positioning of multiple params, params can never be omitted in a method object.
17
24
  def param(name, type = nil, **opts, &block)
18
25
  raise ArgumentError, "Default value for param not allowed - #{name}" if opts.key? :default
19
26
  raise ArgumentError, "Optional params not supported - #{name}" if opts.fetch(:optional, false)
20
27
 
21
- dry_initializer.param(name, type, **opts, &block)
22
- self
28
+ super
23
29
  end
24
30
 
25
- # DEPRECATED
26
- def assign(variable, to:)
27
- warn 'MethodObject.assign is deprecated. ' \
28
- "Please use this instead: `option #{variable.inspect}, default: ...`"
29
- option variable, default: to
30
- end
31
-
32
- def __check_for_unknown_options(*args)
31
+ def __check_for_unknown_options(*args, **kwargs)
33
32
  return if __defined_options.empty?
34
33
 
35
- opts = args.drop(__defined_params.length).first || {}
34
+ # Checking params
35
+ opts = args.drop(__defined_params.length).first || kwargs
36
36
  raise ArgumentError, "Unexpected argument #{opts}" unless opts.is_a? Hash
37
37
 
38
+ # Checking options
38
39
  unknown_options = opts.keys - __defined_options
39
40
  message = "Key(s) #{unknown_options} not found in #{__defined_options}"
40
41
  raise KeyError, message if unknown_options.any?
@@ -26,6 +26,16 @@ class ExampleMethodObject
26
26
  end
27
27
  end
28
28
 
29
+ class InspectionMethodObject
30
+ include MethodObject
31
+
32
+ param :something
33
+
34
+ def call
35
+ something
36
+ end
37
+ end
38
+
29
39
  RSpec.describe MethodObject do
30
40
  describe '.param' do
31
41
  context 'when defining a default value' do
@@ -93,5 +103,14 @@ RSpec.describe MethodObject do
93
103
  end.to raise_error ArgumentError, 'Unexpected argument boom!'
94
104
  end
95
105
  end
106
+
107
+ context 'with one param' do
108
+ it 'has the argument that was passed in' do
109
+ object = Object.new
110
+ result = InspectionMethodObject.call object
111
+
112
+ expect(result).to be object
113
+ end
114
+ end
96
115
  end
97
116
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'bundler/setup'
2
2
  require 'method_object'
3
3
 
4
+ require 'warning'
5
+ Warning.process { raise "This gem should not cause deprecation warnings, but it did: #{_1}" }
6
+
4
7
  RSpec.configure do |config|
5
8
  # Enable flags like --only-failures and --next-failure
6
9
  config.example_status_persistence_file_path = '.rspec_status'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: method_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bukowskis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-09-06 00:00:00.000000000 Z
11
+ date: 2023-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-initializer
@@ -102,14 +102,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
102
  requirements:
103
103
  - - ">="
104
104
  - !ruby/object:Gem::Version
105
- version: '0'
105
+ version: 2.7.0
106
106
  required_rubygems_version: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  requirements: []
112
- rubygems_version: 3.0.6
112
+ rubygems_version: 3.0.3.1
113
113
  signing_key:
114
114
  specification_version: 4
115
115
  summary: Combining the method object pattern with DRY initialization