duck_puncher 1.0.0 → 2.0.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: 82d81798a5571df6798f22fb5992e6661bfaed33
4
- data.tar.gz: 4149ee3e005d014077302a4cdb58e66919a5dace
3
+ metadata.gz: 881eb46f208799b4640b03c9dd8b6ec09b32e397
4
+ data.tar.gz: 4a3e0390df363326e27979649d4b2f2a7b453961
5
5
  SHA512:
6
- metadata.gz: be39db7e9786c8e26ffb380da1d104692699b2d15521acb3ff149284ee13aabdb6b3e4de55a98528a681ee6d67cedd828de148da6f4932f3e192e7252301d65b
7
- data.tar.gz: abd91da05a36d4679d99d0710e0749b122159613dbb110366f3a26f3e83d9155fcfc03f7e78bfe27d8a4c3d7f73801fcc4aa4280dc2c9147d0ff1f7411465fb0
6
+ metadata.gz: 7beff91aaeb70e101ca4a3a6deb6b5199166e2094a23122c14af5c8542d5727a9faab40109aefec1ee5cdacb269b67c62b10772611b76c36d009507deefd82d9
7
+ data.tar.gz: de386fce999554eb93dc9b82d6720090162072f110169a33000254e56820dcd49b351482a0fddd389fc868239980c0fbbbbc6490749cf3a8d0fd305cb2bd7823
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ duck_puncher
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ ruby-2.2.2
data/README.md CHANGED
@@ -1,38 +1,27 @@
1
1
  # DuckPuncher
2
2
 
3
- Currently have the following punches in our repertoire:
3
+ These are the ducks I can punch:
4
4
 
5
- * Array#m - alias for `map(&:)`, usage: `[1].m(:succ)`
6
- * Array#get - usage: `[].methods.get('ty?') #=> [:empty?]`
7
- * Hash#seek - usage: `{a: 1, b: {c: 2}}.seek(:b, :c) #=> 2`
8
- * Numeric#to_currency - usage: `25.245.to_currency #=> '25.25'`
9
- * Numeric#to_duration - usage `10_000.to_duration #=> '2 h 46 min'`
10
- * Numeric#to_time_ago - usage `10_000.to_time_ago #=> '2 hours ago'`
11
- * Numeric#to_rad - usage `10.15.to_rad #=> 0.17715091907742445`
12
- * String#pluralize - usage `'hour'.pluralize(2) #=> 'hours'`
5
+ Array#m => `[].m(:to_s)` alias for `[].map(&:to_s)`
6
+ => `[].m(:sub, /[aeiou]/, '*')` alias for `[].map { |x| x.sub(/[aeiou]/, '*') }`
7
+ Array#get => `[].methods.get('ty?')` searches the array for a string matching the 'ty?' (e.g. [:empty?])
8
+ Hash#seek => `{a: 1, b: {c: 2}}.seek(:b, :c)` returns the value of nested hash keys (e.g. 2)
9
+ Numeric#to_currency => `25.245.to_currency` formats a number in currency (e.g. '25.25' or '1.00')
10
+ Numeric#to_duration => `10_000.to_duration` turns a number into duration (e.g. '2 h 46 min')
11
+ Numeric#to_time_ago => `10_000.to_time_ago` turns a number into time ago (e.g. '2 hours ago')
12
+ Numeric#to_rad => `10.15.to_rad` returns 0.17715091907742445
13
+ String#pluralize => `'hour'.pluralize(2)` turns "hour" into "hours"
14
+ Object#clone! => `Object.new.clone!` makes a deep clone of the object (using Marshal)
13
15
 
14
- ## Installation
15
-
16
- Add this line to your application's Gemfile:
16
+ ## Install
17
17
 
18
18
  gem 'duck_puncher'
19
19
 
20
- And then execute:
21
-
22
- $ bundle
23
-
24
- Or install it yourself as:
25
-
26
- $ gem install duck_puncher
27
-
28
20
  ## Usage
29
21
 
30
- TODO: Write usage instructions here
31
-
32
- ## Contributing
22
+ Ducks need to be _loaded_ before they can be punched! Maybe do this in an initializer?
33
23
 
34
- 1. Fork it
35
- 2. Create your feature branch (`git checkout -b my-new-feature`)
36
- 3. Commit your changes (`git commit -am 'Add some feature'`)
37
- 4. Push to the branch (`git push origin my-new-feature`)
38
- 5. Create new Pull Request
24
+ ```ruby
25
+ DuckPuncher.punch! :Hash, :Object #=> only punches the specified ducks
26
+ DuckPuncher.punch_all! #=> punches all the ducks
27
+ ```
data/duck_puncher.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["arebuckley@gmail.com"]
11
11
  spec.description = %q{Duck punches Ruby with some of my favorite class extensions}
12
12
  spec.summary = %q{Duck punches Ruby}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/ridiculous/duck_puncher"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -19,5 +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"
22
+ spec.add_development_dependency "rake", '~> 10.1', '>= 10.1.1'
23
+ spec.add_development_dependency "minitest", '~> 5.0'
24
+ spec.add_development_dependency "minitest-reporters", '~> 1.1', '>= 1.1.0'
23
25
  end
data/lib/duck_puncher.rb CHANGED
@@ -11,11 +11,11 @@ module DuckPuncher
11
11
  autoload :ActiveRecordExtensions, 'duck_puncher/active_record_extensions'
12
12
  end
13
13
 
14
- def self.load!(*names)
14
+ def self.punch!(*names)
15
15
  names.each &method(:const_get)
16
16
  end
17
17
 
18
- def self.load_all!
18
+ def self.punch_all!
19
19
  constants.each &method(:const_get)
20
20
  end
21
21
  end
@@ -1,14 +1,18 @@
1
1
  module DuckPuncher
2
- module Array
3
- def m(method_name)
4
- map(&method_name)
5
- end
2
+ module Array
3
+ def m(method_name, *args)
4
+ if args.any?
5
+ map { |x| x.public_send(method_name, *args) }
6
+ else
7
+ map(&method_name)
8
+ end
9
+ end
6
10
 
7
- def get(regex_or_str)
8
- regex = regex_or_str.is_a?(Regexp) ? regex_or_str : Regexp.new(Regexp.escape(regex_or_str))
9
- select { |x| x.to_s =~ regex }
10
- end
11
- end
11
+ def get(regex_or_str)
12
+ regex = regex_or_str.is_a?(Regexp) ? regex_or_str : Regexp.new(Regexp.escape(regex_or_str))
13
+ select { |x| x.to_s =~ regex }
14
+ end
15
+ end
12
16
  end
13
17
 
14
- Array.send(:include, DuckPuncher::Array)
18
+ Array.send(:include, DuckPuncher::Array)
@@ -1,3 +1,3 @@
1
1
  module DuckPuncher
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '2.0.0'.freeze
3
3
  end
@@ -1,9 +1,22 @@
1
1
  require_relative '../test_helper'
2
2
 
3
3
  class ArrayTest < MiniTest::Test
4
+ attr_reader :subject
5
+
6
+ def setup
7
+ @subject = ('a'..'m').to_a
8
+ end
9
+
4
10
  def test_m
5
- samples = ('a'..'m').to_a
6
- assert_equal samples.map(&:upcase), samples.m(:upcase)
11
+ assert_equal subject.map(&:upcase), subject.m(:upcase)
12
+ end
13
+
14
+ def test_m_with_two_args
15
+ assert_equal subject.map { |x| x.prepend('btn-') }, subject.m(:prepend, 'btn-')
16
+ end
17
+
18
+ def test_m_with_many_args
19
+ assert_equal subject.map { |x| x.sub(/[aeiou]/, '*') }, subject.m(:sub, /[aeiou]/, '*')
7
20
  end
8
21
 
9
22
  def test_get
data/test/test_helper.rb CHANGED
@@ -1,4 +1,7 @@
1
+ require 'minitest'
1
2
  require 'minitest/autorun'
3
+ require 'minitest/reporters'
2
4
  require 'duck_puncher'
3
5
 
4
- DuckPuncher.load_all!
6
+ Minitest::Reporters.use!
7
+ DuckPuncher.punch_all!
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duck_puncher
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-18 00:00:00.000000000 Z
11
+ date: 2015-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -28,16 +28,56 @@ dependencies:
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.1'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 10.1.1
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - "~>"
42
+ - !ruby/object:Gem::Version
43
+ version: '10.1'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 10.1.1
47
+ - !ruby/object:Gem::Dependency
48
+ name: minitest
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '5.0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '5.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: minitest-reporters
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.1'
31
68
  - - ">="
32
69
  - !ruby/object:Gem::Version
33
- version: '0'
70
+ version: 1.1.0
34
71
  type: :development
35
72
  prerelease: false
36
73
  version_requirements: !ruby/object:Gem::Requirement
37
74
  requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '1.1'
38
78
  - - ">="
39
79
  - !ruby/object:Gem::Version
40
- version: '0'
80
+ version: 1.1.0
41
81
  description: Duck punches Ruby with some of my favorite class extensions
42
82
  email:
43
83
  - arebuckley@gmail.com
@@ -46,6 +86,8 @@ extensions: []
46
86
  extra_rdoc_files: []
47
87
  files:
48
88
  - ".gitignore"
89
+ - ".ruby-gemset"
90
+ - ".ruby-version"
49
91
  - Gemfile
50
92
  - LICENSE.txt
51
93
  - README.md
@@ -65,7 +107,7 @@ files:
65
107
  - test/duck_puncher/object_test.rb
66
108
  - test/duck_puncher/string_test.rb
67
109
  - test/test_helper.rb
68
- homepage: ''
110
+ homepage: https://github.com/ridiculous/duck_puncher
69
111
  licenses:
70
112
  - MIT
71
113
  metadata: {}
@@ -85,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
127
  version: '0'
86
128
  requirements: []
87
129
  rubyforge_project:
88
- rubygems_version: 2.4.6
130
+ rubygems_version: 2.4.8
89
131
  signing_key:
90
132
  specification_version: 4
91
133
  summary: Duck punches Ruby