duck_puncher 2.5.1 → 2.6.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
  SHA1:
3
- metadata.gz: d79a3c56a872b1cf8fae50ea0828bd3deefb8804
4
- data.tar.gz: 255d03afeb29676c3c1ed4bef631c5048848f143
3
+ metadata.gz: f9f681e5807943d40660685fd071fd2efd65d595
4
+ data.tar.gz: 24c64853a09c5f52516e8d2c5462919be3178e1a
5
5
  SHA512:
6
- metadata.gz: 9c68f506755fc0ecf2c622d3c3b78b62396abdab23bef915f5496206f7ef1cdc89ed939c9b53169c9bf6ee37e8978a229fd3eb3abf47fe34c794473ccdb5c0c6
7
- data.tar.gz: 9315f784c53760449790f9de0df096c77b11e5fc0ef24b751c8c7bdb36dd1539d23adb40a86fa70c1d9f315d66179af0387f52f553dab07b3e421d17501dab83
6
+ metadata.gz: c9e6c53ce21e6a8564e2b0e09b8b39a8fef2e1f5dcddf2225e9aeb807441fb9c85d22fc48dd012abbb493dd4736ce7cd8b7f3d52b7158d8368fa3ed54d8bd884
7
+ data.tar.gz: 34bb650e74c17f00b5bd4894653c42f29fe9c8a943e5035173dd345e160ba90fae5e0d5d07d118fbd2bf0314bbc85b52de7a733a02b9b9f21bf8683fe525a768
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-2.2.2
1
+ ruby-2.3.0
data/.travis.yml CHANGED
@@ -4,4 +4,5 @@ rvm:
4
4
  - 2.2.1
5
5
  - 2.2.2
6
6
  - 2.2.3
7
+ - 2.3.0
7
8
  before_install: gem install bundler -v 1.10.5
data/README.md CHANGED
@@ -8,7 +8,7 @@ These are the ducks I love the most:
8
8
  Array#m => `[].m(:to_s)` => `[].map(&:to_s)`
9
9
  Array#mm => `[].mm(:sub, /[aeiou]/, '*')` => `[].map { |x| x.sub(/[aeiou]/, '*') }`
10
10
  Array#get => `[].methods.get('ty?')` => [:empty?]
11
- Hash#seek => `{a: 1, b: {c: 2}}.seek(:b, :c)` => 2
11
+ Hash#dig => `{a: 1, b: {c: 2}}.dig(:b, :c)` => 2 (Now build into Ruby 2.3)
12
12
  Numeric#to_currency => `25.245.to_currency` => 25.25
13
13
  Numeric#to_duration => `10_000.to_duration` => '2 h 46 min'
14
14
  Numeric#to_time_ago => `10_000.to_time_ago` => '2 hours ago'
@@ -40,7 +40,7 @@ Fetching: pry-0.10.3.gem (100%)
40
40
  [1] pry(main)>
41
41
  ```
42
42
 
43
- Try it out if your feeling frisky! However, I noticed it doesn't work well with bigger gems and those with native extensions.
43
+ Pretty cool, right? Although, it doesn't work well with bigger gems or those with native extensions.
44
44
 
45
45
  ## Install
46
46
 
@@ -48,28 +48,39 @@ Try it out if your feeling frisky! However, I noticed it doesn't work well with
48
48
 
49
49
  ## Usage
50
50
 
51
- Ducks need to be _loaded_ before they can be punched! Maybe do this in an initializer?
51
+ Ducks need to be _loaded_ before they can be punched! Maybe put this in an initializer:
52
52
 
53
53
  ```ruby
54
+ # config/initializers/duck_puncher.rb
54
55
  DuckPuncher.punch_all! #=> punches all the ducks forever
55
56
  DuckPuncher.punch! :Hash, :Object #=> only punches the Hash and Object ducks
57
+ ```
58
+
59
+ Create a new class of your favorite duck pre-punched:
60
+
61
+ ```ruby
56
62
  DuckPuncher.punch :String #=> returns an anonymous punched duck that inherits from String
57
63
  DuckString = DuckPuncher.punch :String #=> give the anonymous duck a name, so that you can use it!
58
64
  DuckString.new.respond_to? :underscore #=> true
59
65
  ```
60
66
 
61
- DuckPuncher defines a global `punch` method. This method creates and caches a delegation class pre-punched with only the
62
- ducks you want!
67
+ That works, but it's pretty verbose and not real pactical to be managing potentially a bunch of custom classes. That's
68
+ +why DuckPuncher defines a global `punch` method. This makes it easy to decorate your ducks on demand:
69
+
70
+ ```ruby
71
+ punch(:String, "yes").to_boolean
72
+ ```
73
+
74
+ The new method isn't persisted on the String class. Instead it creates (and caches) a String delegation
75
+ class. This class is pre-punched with the available string extensions! :punch:
63
76
 
64
- Here's an example of how to use it:
77
+ Using a combination of `Array#mm` and `Hash#dig`:
65
78
 
66
79
  ```ruby
67
- >> a = punch :Array, [punch(:String, 'foo'), punch(:String, 'bar')]
68
- => ["foo", "bar"]
69
- >> a.m :upcase
70
- => ["FOO", "BAR"]
71
- >> a.mm :pluralize, 2
72
- => ["foos", "bars"]
80
+ params = { users: [{ id: 1, profile: { name: 'ryan' }}, { id: 2, profile: { name: 'kawika' }}, { id: 3 }] }
81
+ list = punch :Array, params[:users].map { |u| punch(:Hash, u) }
82
+ list.mm :dig, :profile, :name
83
+ #=> ["ryan", "kawika", nil]
73
84
  ```
74
85
 
75
86
  ## Contributing
data/duck_puncher.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ["lib"]
20
20
 
21
21
  spec.add_development_dependency "bundler", "~> 1.3"
22
- spec.add_development_dependency "rake", '~> 10.1', '>= 10.1.1'
22
+ spec.add_development_dependency "rake", '~> 10.1'
23
23
  spec.add_development_dependency "minitest", '~> 5.0'
24
- spec.add_development_dependency "minitest-reporters", '~> 1.1', '>= 1.1.0'
24
+ spec.add_development_dependency "minitest-reporters", '~> 1.1'
25
25
  end
@@ -2,7 +2,7 @@ module DuckPuncher
2
2
  module Ducks
3
3
  module Hash
4
4
  # http://coryodaniel.com/index.php/2009/12/30/ruby-getting-deeply-nested-values-from-a-hash-in-one-line-of-code/
5
- def seek(*_keys_)
5
+ def dig(*_keys_)
6
6
  last_level = self
7
7
  sought_value = nil
8
8
 
@@ -19,7 +19,7 @@ module DuckPuncher
19
19
  end
20
20
 
21
21
  sought_value
22
- end
22
+ end unless method_defined?(:dig)
23
23
  end
24
24
  end
25
25
  end
@@ -1,3 +1,3 @@
1
1
  module DuckPuncher
2
- VERSION = '2.5.1'.freeze
2
+ VERSION = '2.6.0'.freeze
3
3
  end
@@ -2,11 +2,11 @@ require_relative '../test_helper'
2
2
  DuckPuncher.punch! :Hash
3
3
 
4
4
  class HashTest < MiniTest::Test
5
- def test_seek
5
+ def test_dig
6
6
  my_hash = { a: 1, b: { c: 2 } }
7
- assert_equal my_hash.seek(:a), 1
8
- assert_equal my_hash.seek(:b, :a), nil
9
- assert_equal my_hash.seek(:b, :c), 2
10
- assert_equal my_hash.seek(:b), { c: 2 }
7
+ assert_equal my_hash.dig(:a), 1
8
+ assert_equal my_hash.dig(:b, :a), nil
9
+ assert_equal my_hash.dig(:b, :c), 2
10
+ assert_equal my_hash.dig(:b), { c: 2 }
11
11
  end
12
12
  end
@@ -11,14 +11,14 @@ class MethodTest < MiniTest::Test
11
11
  end
12
12
 
13
13
  def test_to_instruct
14
- assert_match /RubyVM::InstructionSequence:to_a/, @subject.method(:to_a).to_instruct
14
+ assert_match /:to_a/, @subject.method(:to_a).to_instruct
15
15
  assert_match /newarray/, @subject.method(:to_a).to_instruct
16
16
  assert_match /opt_plus/, @subject.method(:to_a).to_instruct
17
17
  assert_equal nil, [].method(:to_s).to_instruct
18
18
  end
19
19
 
20
20
  def test_to_instruct_single_line
21
- assert_match /RubyVM::InstructionSequence:to_f/, @subject.method(:to_f).to_instruct
21
+ assert_match /:to_f/, @subject.method(:to_f).to_instruct
22
22
  assert_match /getconstant\s*:INFINITY/, @subject.method(:to_f).to_instruct
23
23
  end
24
24
 
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.1
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley
@@ -31,9 +31,6 @@ dependencies:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.1'
34
- - - ">="
35
- - !ruby/object:Gem::Version
36
- version: 10.1.1
37
34
  type: :development
38
35
  prerelease: false
39
36
  version_requirements: !ruby/object:Gem::Requirement
@@ -41,9 +38,6 @@ dependencies:
41
38
  - - "~>"
42
39
  - !ruby/object:Gem::Version
43
40
  version: '10.1'
44
- - - ">="
45
- - !ruby/object:Gem::Version
46
- version: 10.1.1
47
41
  - !ruby/object:Gem::Dependency
48
42
  name: minitest
49
43
  requirement: !ruby/object:Gem::Requirement
@@ -65,9 +59,6 @@ dependencies:
65
59
  - - "~>"
66
60
  - !ruby/object:Gem::Version
67
61
  version: '1.1'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 1.1.0
71
62
  type: :development
72
63
  prerelease: false
73
64
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,9 +66,6 @@ dependencies:
75
66
  - - "~>"
76
67
  - !ruby/object:Gem::Version
77
68
  version: '1.1'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 1.1.0
81
69
  description: Duck punches Ruby with some of my favorite class extensions
82
70
  email:
83
71
  - arebuckley@gmail.com
@@ -138,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
126
  version: '0'
139
127
  requirements: []
140
128
  rubyforge_project:
141
- rubygems_version: 2.4.8
129
+ rubygems_version: 2.5.1
142
130
  signing_key:
143
131
  specification_version: 4
144
132
  summary: Duck punches Ruby