duck_puncher 2.5.0 → 2.5.1

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: 2afbd4dd98468db97339d8094564c7830a8f6aa8
4
- data.tar.gz: 2cabadf15f55e7b38b5028d0c702fb71ac809a4b
3
+ metadata.gz: d79a3c56a872b1cf8fae50ea0828bd3deefb8804
4
+ data.tar.gz: 255d03afeb29676c3c1ed4bef631c5048848f143
5
5
  SHA512:
6
- metadata.gz: f3016a12e3e5ba11571b05ad62a58163a25db0fc4866d0c82c39cfeeaeada1c7ff44999bfabcb81021b3f4c810973e2b8b0a79e9c522426597b17e5f9f6d4d9e
7
- data.tar.gz: c35a7d1dd77ac403f42884935f56963354e4aa5e75dcc36442b7a125ae000f3417a991da536aa8bcdb6b30ddb95f6619ced25004a6c44ce4efddfce85b6f0745
6
+ metadata.gz: 9c68f506755fc0ecf2c622d3c3b78b62396abdab23bef915f5496206f7ef1cdc89ed939c9b53169c9bf6ee37e8978a229fd3eb3abf47fe34c794473ccdb5c0c6
7
+ data.tar.gz: 9315f784c53760449790f9de0df096c77b11e5fc0ef24b751c8c7bdb36dd1539d23adb40a86fa70c1d9f315d66179af0387f52f553dab07b3e421d17501dab83
@@ -21,16 +21,7 @@ module DuckPuncher
21
21
  # @description Extends functionality to a copy of the specified class
22
22
  def punch(*names)
23
23
  singular = names.size == 1
24
- punched_ducks = names.map do |name|
25
- duck = Ducks[name]
26
- duck_class = Class.new(duck.klass)
27
- if duck.punch duck_class
28
- duck_class
29
- else
30
- log.error %Q(Failed to punch #{name}!)
31
- end
32
- end
33
- punched_ducks.compact!
24
+ punched_ducks = names.map { |name| Ducks[name].dup.classify }.compact
34
25
  punched_ducks = punched_ducks.first if singular
35
26
  punched_ducks
36
27
  end
@@ -11,15 +11,18 @@ module DuckPuncher
11
11
  # @note Assumes the String duck is loaded first
12
12
  def load_path
13
13
  path_name = if name == :String
14
- name.to_s.downcase
15
- else
16
- Object.send(:punch, :String, name.to_s).underscore
17
- end
14
+ name.to_s.downcase
15
+ else
16
+ Object.send(:punch, :String, name.to_s).underscore
17
+ end
18
18
  "duck_puncher/ducks/#{path_name}"
19
19
  end
20
20
 
21
21
  def punch(target = nil)
22
- return false if options[:if] && !options[:if].call
22
+ if options[:if] && !options[:if].call
23
+ DuckPuncher.log.warn %Q(Failed to punch #{name}!)
24
+ return nil
25
+ end
23
26
  options[:before].call if options[:before]
24
27
  (target || klass).send :include, DuckPuncher::Ducks.const_get(name)
25
28
  options[:after].call if options[:after]
@@ -35,7 +38,11 @@ module DuckPuncher
35
38
  end
36
39
 
37
40
  def delegated
38
- DelegateClass(klass).tap { |k| punch k }
41
+ DelegateClass(klass).tap &method(:punch)
42
+ end
43
+
44
+ def classify
45
+ Class.new(klass).tap &method(:punch)
39
46
  end
40
47
  end
41
48
  end
@@ -8,6 +8,14 @@ module DuckPuncher
8
8
  def underscore
9
9
  gsub(/\B([A-Z])([a-z_0-9])/, '_\1\2').gsub('::', '/').downcase
10
10
  end unless method_defined?(:underscore)
11
+
12
+ def to_boolean(strict = false)
13
+ @boolean_map ||= begin
14
+ truths, falsities = %w(true 1 yes y on), ['false', '0', 'no', 'n', 'off', '']
15
+ Hash[truths.product([true]) + falsities.product([false])]
16
+ end
17
+ strict ? !downcase.in?(falsities) : @boolean_map[downcase]
18
+ end
11
19
  end
12
20
  end
13
21
  end
@@ -1,3 +1,3 @@
1
1
  module DuckPuncher
2
- VERSION = '2.5.0'.freeze
2
+ VERSION = '2.5.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duck_puncher
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley