around_the_world 0.22.3.1 → 0.22.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/around_the_world.rb +8 -4
- data/lib/around_the_world/method_wrapper.rb +6 -2
- data/lib/around_the_world/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d57efe8236b3276024f645121baabaaae3ab8bd5cf6c44a66e3581d4cc165b3d
|
4
|
+
data.tar.gz: 1666143f74d1fa5b4b71ba11cde97a560c21c7105cdfa99dde608383b567f420
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a67f26e3d3e62a88b3d2618e2ed1caf44c244b474b0a13a4efa1012a0577d29777f7b6585d1b67ea54368b7d5882d6d74e4311038dbe29ee6754667bf27f7552
|
7
|
+
data.tar.gz: 6da324801843a15e4e7de05bcc3b114577e75d84c09c178f404a7ed2f70a012f30362d9870c1de9a3b587943661aae8eff4335b12378148abb4193fcabbd90b3
|
data/lib/around_the_world.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require "active_support/concern"
|
4
|
+
require "active_support/core_ext/object/blank"
|
5
|
+
require "active_support/descendants_tracker"
|
6
|
+
|
3
7
|
require_relative "around_the_world/errors"
|
4
8
|
require_relative "around_the_world/method_wrapper"
|
5
9
|
require_relative "around_the_world/proxy_module"
|
6
10
|
require_relative "around_the_world/version"
|
7
|
-
require "active_support/concern"
|
8
|
-
require "active_support/core_ext/object/blank"
|
9
|
-
require "active_support/descendants_tracker"
|
10
11
|
|
11
12
|
module AroundTheWorld
|
12
13
|
extend ActiveSupport::Concern
|
@@ -78,11 +79,14 @@ module AroundTheWorld
|
|
78
79
|
# @param method_name [Symbol]
|
79
80
|
# @param :prevent_double_wrapping_for [Object]
|
80
81
|
# If defined, this prevents wrapping the method twice for a given purpose. Accepts any argument.
|
81
|
-
|
82
|
+
# @param :allow_undefined_method [Boolean] When false, an error is raised if the wrapped method is not
|
83
|
+
# explicitly defined by the target module or class. Default: false
|
84
|
+
def around_method(method_name, prevent_double_wrapping_for: nil, allow_undefined_method: false, &block)
|
82
85
|
MethodWrapper.wrap(
|
83
86
|
method_name: method_name,
|
84
87
|
target: self,
|
85
88
|
prevent_double_wrapping_for: prevent_double_wrapping_for,
|
89
|
+
allow_undefined_method: allow_undefined_method,
|
86
90
|
&block
|
87
91
|
)
|
88
92
|
end
|
@@ -23,14 +23,17 @@ module AroundTheWorld
|
|
23
23
|
# An identifier to define the proxy module's purpose in the ancestor tree.
|
24
24
|
# A method can only be wrapped once for a given purpose, though it can be wrapped
|
25
25
|
# again for other purposes, or for no given purpose.
|
26
|
+
# @param :allow_undefined_method [Boolean] When false, an error is raised if the wrapped method is not
|
27
|
+
# explicitly defined by the target. Default: false
|
26
28
|
# @block The block that will be executed when the method is invoked.
|
27
29
|
# Should always call super, at least conditionally.
|
28
|
-
def initialize(method_name:, target:, prevent_double_wrapping_for: nil, &block)
|
30
|
+
def initialize(method_name:, target:, prevent_double_wrapping_for: nil, allow_undefined_method: false, &block)
|
29
31
|
raise TypeError, "target must be a module or a class" unless target.is_a?(Module)
|
30
32
|
|
31
33
|
@method_name = method_name.to_sym
|
32
34
|
@target = target
|
33
35
|
@prevent_double_wrapping_for = prevent_double_wrapping_for || nil
|
36
|
+
@allow_undefined_method = allow_undefined_method
|
34
37
|
@block = block
|
35
38
|
end
|
36
39
|
|
@@ -45,13 +48,14 @@ module AroundTheWorld
|
|
45
48
|
|
46
49
|
private
|
47
50
|
|
48
|
-
attr_reader :prevent_double_wrapping_for, :block
|
51
|
+
attr_reader :prevent_double_wrapping_for, :allow_undefined_method, :block
|
49
52
|
|
50
53
|
def prevent_double_wrapping?
|
51
54
|
prevent_double_wrapping_for.present?
|
52
55
|
end
|
53
56
|
|
54
57
|
def ensure_method_defined!
|
58
|
+
return if allow_undefined_method
|
55
59
|
return if target.instance_methods(true).include?(method_name) || target.private_method_defined?(method_name)
|
56
60
|
|
57
61
|
raise MethodNotDefinedError, "#{target} does not define :#{method_name}"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: around_the_world
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.22.
|
4
|
+
version: 0.22.4
|
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-02-
|
11
|
+
date: 2020-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -47,7 +47,7 @@ metadata:
|
|
47
47
|
homepage_uri: https://github.com/Freshly/spicerack/tree/master/around_the_world
|
48
48
|
source_code_uri: https://github.com/Freshly/spicerack/tree/master/around_the_world
|
49
49
|
changelog_uri: https://github.com/Freshly/spicerack/blob/master/around_the_world/CHANGELOG.md
|
50
|
-
documentation_uri: https://www.rubydoc.info/gems/around_the_world/0.22.
|
50
|
+
documentation_uri: https://www.rubydoc.info/gems/around_the_world/0.22.4
|
51
51
|
post_install_message:
|
52
52
|
rdoc_options: []
|
53
53
|
require_paths:
|