around_the_world 0.2.5 → 0.3.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 +4 -4
- data/lib/around_the_world.rb +62 -2
- data/lib/around_the_world/errors.rb +5 -0
- data/lib/around_the_world/version.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae037956a90fb7dd64586ff7f8b8bb1f02da897011c265881dbe071dc6f42c14
|
4
|
+
data.tar.gz: 1457f469d63242d427188b15506f6161260c02398519184d33b246051d5b669b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8e978961b7b9012e53bf9eeeda5f8efbb65bb6b4595c1585f8b89f98d0ef4a128fdfff849f3ed22bc8d5290f65a7134f85e35e4c22873e9ea5421b64c8db9349
|
7
|
+
data.tar.gz: 805e10ccc80702bb5dc8861c8eb7f659e7e7320159c852f4b58054389a27bb179d7b89212f27679186599211bb04a5e0aa9b1b8118e410b8da3216f0659f17eb
|
data/lib/around_the_world.rb
CHANGED
@@ -1,7 +1,67 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative "around_the_world/version"
|
4
|
+
require_relative "around_the_world/errors"
|
5
|
+
require "active_support/concern"
|
4
6
|
|
5
7
|
module AroundTheWorld
|
6
|
-
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
class_methods do
|
11
|
+
protected
|
12
|
+
|
13
|
+
# Defines a method that gets called +around+ the given instance method.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# class SomeClass
|
17
|
+
# around_method :dont_look_in_here, "DoesAThing" do
|
18
|
+
# things_happened = super
|
19
|
+
#
|
20
|
+
# if things_happened
|
21
|
+
# puts "Something happened!"
|
22
|
+
# else
|
23
|
+
# puts "Nothing to see here..."
|
24
|
+
# end
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# def dont_look_in_here
|
28
|
+
# do_some_things
|
29
|
+
# end
|
30
|
+
# end
|
31
|
+
#
|
32
|
+
# SomeClass.new.dont_look_in_here
|
33
|
+
# => "Something happened!"
|
34
|
+
#
|
35
|
+
# @param method_name [Symbol]
|
36
|
+
# @param proxy_module_name [String] The camelized name of a custom module to place the wrapper method in.
|
37
|
+
# This is necessary to enable wrapping a single method more than once
|
38
|
+
# since a module cannot super to itself.
|
39
|
+
# It's recommended to name the module after what the method wrapper will do,
|
40
|
+
# for example LogsAnEvent for a wrapper method that logs something.
|
41
|
+
# Because of the potential for overriding previously wrapped methods, this
|
42
|
+
# parameter is required.
|
43
|
+
def around_method(method_name, proxy_module_name, &block)
|
44
|
+
proxy_module = around_method_proxy_module(proxy_module_name)
|
45
|
+
ensure_around_method_uniqueness!(method_name, proxy_module)
|
46
|
+
|
47
|
+
proxy_module.define_method(method_name, &block)
|
48
|
+
prepend proxy_module unless ancestors.include?(proxy_module)
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def around_method_proxy_module(proxy_module_name)
|
54
|
+
namespaced_proxy_module_name = "#{self}::#{proxy_module_name}"
|
55
|
+
|
56
|
+
const_set(proxy_module_name, Module.new) unless const_defined?(namespaced_proxy_module_name)
|
57
|
+
|
58
|
+
const_get(namespaced_proxy_module_name)
|
59
|
+
end
|
60
|
+
|
61
|
+
def ensure_around_method_uniqueness!(method_name, proxy_module)
|
62
|
+
return unless proxy_module.instance_methods.include?(method_name.to_sym)
|
63
|
+
|
64
|
+
raise DoubleWrapError, "Module #{proxy_module} already defines the method :#{method_name}"
|
65
|
+
end
|
66
|
+
end
|
7
67
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: around_the_world
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Allen Rettberg
|
@@ -9,7 +9,21 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2018-10-03 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.1.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.1.6
|
13
27
|
description: Why metaprogram like a chump when you can do it like a champ!
|
14
28
|
email:
|
15
29
|
- allen.rettberg@freshly.com
|
@@ -20,6 +34,7 @@ files:
|
|
20
34
|
- LICENSE.txt
|
21
35
|
- README.md
|
22
36
|
- lib/around_the_world.rb
|
37
|
+
- lib/around_the_world/errors.rb
|
23
38
|
- lib/around_the_world/version.rb
|
24
39
|
homepage: https://www.freshly.com
|
25
40
|
licenses:
|