around_the_world 0.22.3.1 → 0.22.4
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 +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:
|