powerpack 0.0.8 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 369199242dfe319d0e8afa477689f8d97cb0e647
4
- data.tar.gz: 42c792d527998796fdce340364c9664e2b666a54
2
+ SHA256:
3
+ metadata.gz: 466f04d01b789b666492e731d3e25590843994afdcb881537a38937d084d0d45
4
+ data.tar.gz: c926128481ab9eb8fde51b9e4d40346a3f2ea3f1b273e9d92b7de12cab730478
5
5
  SHA512:
6
- metadata.gz: 31cc13c64e5aec8afb3e2095d64c6047f484ec2390355c35fb36394c5f6818a61872cb582eba2d208485647a6e7e2137c7e2ea429cb0df953574f5ac14e728b3
7
- data.tar.gz: 35eb68213ac9c8354566772c5b75c6bdde2be58155b455cd00209703473065f7f1a71e0a809b031cfe39e45e4df52405181d9cb878cc8af86719fc1a546a0fd3
6
+ metadata.gz: 21383a2e29ce45233f4dadf33ce04452f27b9ed71770995a9796af9d142b251ba3aaab2749a8df921d60283630513dd77c929dcdb81ac1865f7435c941d9bf86
7
+ data.tar.gz: 6542479c6e1f8bb875aa4b1adf8e8cf18c7a7b76b1c5bd0e83659508a343f8baf0e337238141c24d8ad421ab05d4bc9048f4c4f3ae8b658de539a14329ef4cd6
@@ -1,7 +1,15 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  rvm:
3
- - 1.9.3
4
- - 2.0.0
5
- - jruby-19mode
6
- - rbx-19mode
4
+ - jruby-9.1.13.0
5
+ - 2.3
6
+ - 2.4
7
+ - 2.5
8
+ - 2.6
9
+ - 2.7
10
+ - ruby-head
11
+ - rbx-3
7
12
  script: bundle exec rspec
13
+ matrix:
14
+ allow_failures:
15
+ - rvm: rbx-3
@@ -2,7 +2,36 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
- ## 0.0.8 (13/09/2013)
5
+ ## 0.1.3 (2020-11-16)
6
+
7
+ * [#42](https://github.com/bbatsov/powerpack/pull/42): Fix a warning on Ruby 2.7.
8
+
9
+ ## 0.1.2 (2018-06-10)
10
+
11
+ * Changed `String#remove_prefix` to return the original string if the parameter is not a prefix.
12
+ * Changed `String#remove_prefix!`to return the original string if the parameter is not a prefix.
13
+ * Changed `String#remove_suffix` to return the original string if the parameter is not a suffix.
14
+ * Changed `String#remove_suffix!` to return the original string if the parameter is not a suffix.
15
+
16
+ ## 0.1.1 (2015-05-04)
17
+
18
+ No user-visible changes.
19
+
20
+ ## 0.1.0 (2015-01-25)
21
+
22
+ * Added `String#remove_prefix`
23
+ * Added `String#remove_prefix!`
24
+ * Added `String#remove_suffix`
25
+ * Added `String#remove_suffix!`
26
+
27
+ ## 0.0.9 (2013-10-22)
28
+
29
+ * Added `String#remove`
30
+ * Added `String#remove!`
31
+ * Added `String#ascii_only`
32
+ * Added `String#ascii_only!`
33
+
34
+ ## 0.0.8 (2013-09-13)
6
35
 
7
36
  ### New features
8
37
 
@@ -0,0 +1,62 @@
1
+ # Contributing
2
+
3
+ If you discover issues, have ideas for improvements or new features,
4
+ please report them to the [issue tracker][1] of the repository or
5
+ submit a pull request. Please, try to follow these guidelines when you
6
+ do so.
7
+
8
+ ## Issue reporting
9
+
10
+ * Check that the issue has not already been reported.
11
+ * Check that the issue has not already been fixed in the latest code
12
+ (a.k.a. `master`).
13
+ * Be clear, concise and precise in your description of the problem.
14
+ * Open an issue with a descriptive title and a summary in grammatically correct,
15
+ complete sentences.
16
+ * Include Powerpack's version number.
17
+ * Include any relevant code to the issue summary.
18
+
19
+ ## Pull requests
20
+
21
+ * Read [how to properly contribute to open source projects on Github][2].
22
+ * Fork the project.
23
+ * Use a topic/feature branch to easily amend a pull request later, if necessary.
24
+ * Write [good commit messages][3].
25
+ * Use the same coding conventions as the rest of the project.
26
+ * Commit and push until you are happy with your contribution.
27
+ * Make sure to add tests for it. This is important so I don't break it
28
+ in a future version unintentionally.
29
+ * Add an entry to the [Changelog](CHANGELOG.md) accordingly. See [changelog entry format](#changelog-entry-format).
30
+ * Please try not to mess with the Rakefile, version, or history. If
31
+ you want to have your own version, or is otherwise necessary, that
32
+ is fine, but please isolate to its own commit so I can cherry-pick
33
+ around it.
34
+ * Make sure the test suite is passing ([including rbx and jruby][7]) and the code you wrote doesn't produce
35
+ RuboCop offenses.
36
+ * [Squash related commits together][5].
37
+ * Open a [pull request][4] that relates to *only* one subject with a clear title
38
+ and description in grammatically correct, complete sentences.
39
+
40
+ ### Changelog entry format
41
+
42
+ Here are a few examples:
43
+
44
+ ```
45
+ * [#123](https://github.com/bbatsov/powerpack/issues/123): Fixed a bug in `Something#something`. ([@bbatsov][])
46
+ * Added new method `Something#something`. ([@bbatsov][])
47
+ ```
48
+
49
+ * Mark it up in [Markdown syntax][6].
50
+ * The entry line should start with `* ` (an asterisk and a space).
51
+ * If the change has a related GitHub issue (e.g. a bug fix for a reported issue), put a link to the issue as `[#123](https://github.com/bbatsov/powerpack/issues/123): `.
52
+ * Describe the brief of the change. The sentence should end with a punctuation.
53
+ * At the end of the entry, add an implicit link to your GitHub user page as `([@username][])`.
54
+ * If this is your first contribution to Powerpack project, add a link definition for the implicit link to the bottom of the changelog as `[@username]: https://github.com/username`.
55
+
56
+ [1]: https://github.com/bbatsov/powerpack/issues
57
+ [2]: http://gun.io/blog/how-to-github-fork-branch-and-pull-request
58
+ [3]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
59
+ [4]: https://help.github.com/articles/using-pull-requests
60
+ [5]: http://gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
61
+ [6]: http://daringfireball.net/projects/markdown/syntax
62
+ [7]: http://blog.stwrt.ca/2013/09/06/installing-rubinius-with-rbenv
data/README.md CHANGED
@@ -1,9 +1,17 @@
1
- [![Gem Version](https://badge.fury.io/rb/powerpack.png)](http://badge.fury.io/rb/powerpack)
2
- [![Build Status](https://travis-ci.org/bbatsov/powerpack.png?branch=master)](https://travis-ci.org/bbatsov/powerpack)
1
+ [![Gem Version](https://badge.fury.io/rb/powerpack.svg)](http://badge.fury.io/rb/powerpack)
2
+ [![Build Status](https://travis-ci.org/bbatsov/powerpack.svg?branch=master)](https://travis-ci.org/bbatsov/powerpack)
3
3
 
4
4
  # Powerpack
5
5
 
6
- Powerpack offers some useful extensions to the standard Ruby classes (kind of like `ActiveSupport`, but less ambitious and more modular).
6
+ Powerpack offers some useful extensions to the standard Ruby classes
7
+ (kind of like `ActiveSupport`, but less ambitious and more modular).
8
+
9
+ The project has several design goals:
10
+
11
+ * **minimalistic** - we don't add every possible extensions, we focus only
12
+ on the stuff that are commonly requested and would be often useful in practice
13
+ * **modular** - all extensions can be loaded individually (often they are just individual methods)
14
+ * **safe** - you can't end up accidentally overriding some existing method definition with Powerpack's extensions
7
15
 
8
16
  ## Installation
9
17
 
@@ -21,42 +29,50 @@ Or install it yourself as:
21
29
 
22
30
  ## Extensions
23
31
 
24
- * [Array](http://rdoc.info/github/bbatsov/powerpack/Array)
25
- * [#butfirst](http://rdoc.info/github/bbatsov/powerpack/Array#butfirst-instance_method)
26
- * [#butlast](http://rdoc.info/github/bbatsov/powerpack/Array#butlast-instance_method)
27
- * [Enumerable](http://rdoc.info/github/bbatsov/powerpack/Enumerable)
28
- * [#average](http://rdoc.info/github/bbatsov/powerpack/Enumerable#average-instance_method)
29
- * [#drop_last](http://rdoc.info/github/bbatsov/powerpack/Enumerable#drop_last-instance_method)
30
- * [#drop_last_while](http://rdoc.info/github/bbatsov/powerpack/Enumerable#drop_last_while-instance_method)
31
- * [#exactly?](http://rdoc.info/github/bbatsov/powerpack/Enumerable#exactly?-instance_method)
32
- * [#frequencies](http://rdoc.info/github/bbatsov/powerpack/Enumerable#frequencies-instance_method)
33
- * [#several?](http://rdoc.info/github/bbatsov/powerpack/Enumerable#several?-instance_method)
34
- * [#sum](http://rdoc.info/github/bbatsov/powerpack/Enumerable#sum-instance_method)
35
- * [#take_last](http://rdoc.info/github/bbatsov/powerpack/Enumerable#take_last-instance_method)
36
- * [#take_last_while](http://rdoc.info/github/bbatsov/powerpack/Enumerable#take_last_while-instance_method)
37
- * [Hash](http://rdoc.info/github/bbatsov/powerpack/Hash)
38
- * [#symbolize_keys](http://rdoc.info/github/bbatsov/powerpack/Hash#symbolize_keys-instance_method)
39
- * [Numeric](http://rdoc.info/github/bbatsov/powerpack/Numeric)
40
- * [#pos?](http://rdoc.info/github/bbatsov/powerpack/Numeric#pos?-instance_method)
41
- * [#neg?](http://rdoc.info/github/bbatsov/powerpack/Numeric#neg?-instance_method)
42
- * [#hundred](http://rdoc.info/github/bbatsov/powerpack/Numeric#hundred-instance_method)
43
- * [#thousand](http://rdoc.info/github/bbatsov/powerpack/Numeric#thousand-instance_method)
44
- * [#million](http://rdoc.info/github/bbatsov/powerpack/Numeric#million-instance_method)
45
- * [#billion](http://rdoc.info/github/bbatsov/powerpack/Numeric#billion-instance_method)
46
- * [#trillion](http://rdoc.info/github/bbatsov/powerpack/Numeric#trillion-instance_method)
47
- * [#quadrillion](http://rdoc.info/github/bbatsov/powerpack/Numeric#quadrillion-instance_method)
48
- * [String](http://rdoc.info/github/bbatsov/powerpack/String)
49
- * [#blank?](http://rdoc.info/github/bbatsov/powerpack/String#blank?-instance_method)
50
- * [#format](http://rdoc.info/github/bbatsov/powerpack/String#format-instance_method)
51
- * [#strip_indent](http://rdoc.info/github/bbatsov/powerpack/String#strip_indent-instance_method)
52
- * [#strip_margin](http://rdoc.info/github/bbatsov/powerpack/String#strip_margin-instance_method)
53
- * [#squish](http://rdoc.info/github/bbatsov/powerpack/String#squish-instance_method)
54
- * [#squish!](http://rdoc.info/github/bbatsov/powerpack/String#squish!-instance_method)
32
+ * [Array](http://rdoc.info/gems/powerpack/Array)
33
+ * [#butfirst](http://rdoc.info/gems/powerpack/Array#butfirst-instance_method)
34
+ * [#butlast](http://rdoc.info/gems/powerpack/Array#butlast-instance_method)
35
+ * [Enumerable](http://rdoc.info/gems/powerpack/Enumerable)
36
+ * [#average](http://rdoc.info/gems/powerpack/Enumerable#average-instance_method)
37
+ * [#drop_last](http://rdoc.info/gems/powerpack/Enumerable#drop_last-instance_method)
38
+ * [#drop_last_while](http://rdoc.info/gems/powerpack/Enumerable#drop_last_while-instance_method)
39
+ * [#exactly?](http://rdoc.info/gems/powerpack/Enumerable#exactly?-instance_method)
40
+ * [#frequencies](http://rdoc.info/gems/powerpack/Enumerable#frequencies-instance_method)
41
+ * [#several?](http://rdoc.info/gems/powerpack/Enumerable#several?-instance_method)
42
+ * [#sum](http://rdoc.info/gems/powerpack/Enumerable#sum-instance_method)
43
+ * [#take_last](http://rdoc.info/gems/powerpack/Enumerable#take_last-instance_method)
44
+ * [#take_last_while](http://rdoc.info/gems/powerpack/Enumerable#take_last_while-instance_method)
45
+ * [Hash](http://rdoc.info/gems/powerpack/Hash)
46
+ * [#symbolize_keys](http://rdoc.info/gems/powerpack/Hash#symbolize_keys-instance_method)
47
+ * [Numeric](http://rdoc.info/gems/powerpack/Numeric)
48
+ * [#pos?](http://rdoc.info/gems/powerpack/Numeric#pos?-instance_method)
49
+ * [#neg?](http://rdoc.info/gems/powerpack/Numeric#neg?-instance_method)
50
+ * [#hundred](http://rdoc.info/gems/powerpack/Numeric#hundred-instance_method)
51
+ * [#thousand](http://rdoc.info/gems/powerpack/Numeric#thousand-instance_method)
52
+ * [#million](http://rdoc.info/gems/powerpack/Numeric#million-instance_method)
53
+ * [#billion](http://rdoc.info/gems/powerpack/Numeric#billion-instance_method)
54
+ * [#trillion](http://rdoc.info/gems/powerpack/Numeric#trillion-instance_method)
55
+ * [#quadrillion](http://rdoc.info/gems/powerpack/Numeric#quadrillion-instance_method)
56
+ * [String](http://rdoc.info/gems/powerpack/String)
57
+ * [#ascii_only](http://rdoc.info/gems/powerpack/String#ascii_only-instance_method)
58
+ * [#ascii_only!](http://rdoc.info/gems/powerpack/String#ascii_only!-instance_method)
59
+ * [#blank?](http://rdoc.info/gems/powerpack/String#blank?-instance_method)
60
+ * [#format](http://rdoc.info/gems/powerpack/String#format-instance_method)
61
+ * [#remove](http://rdoc.info/gems/powerpack/String#remove-instance_method)
62
+ * [#remove!](http://rdoc.info/gems/powerpack/String#remove!-instance_method)
63
+ * [#remove_prefix](http://rdoc.info/gems/powerpack/String#remove_prefix-instance_method)
64
+ * [#remove_prefix!](http://rdoc.info/gems/powerpack/String#remove_prefix!-instance_method)
65
+ * [#remove_suffix](http://rdoc.info/gems/powerpack/String#remove_suffix-instance_method)
66
+ * [#remove_suffix!](http://rdoc.info/gems/powerpack/String#remove_suffix!-instance_method)
67
+ * [#strip_indent](http://rdoc.info/gems/powerpack/String#strip_indent-instance_method)
68
+ * [#strip_margin](http://rdoc.info/gems/powerpack/String#strip_margin-instance_method)
69
+ * [#squish](http://rdoc.info/gems/powerpack/String#squish-instance_method)
70
+ * [#squish!](http://rdoc.info/gems/powerpack/String#squish!-instance_method)
55
71
 
56
72
  ## Documentation
57
73
 
58
74
  A listing of the extensions provided by Powerpack is available
59
- [here](http://rdoc.info/github/bbatsov/powerpack).
75
+ [here](http://rdoc.info/gems/powerpack).
60
76
 
61
77
  ## Usage
62
78
 
@@ -25,12 +25,14 @@ unless Enumerable.method_defined? :exactly?
25
25
  each do |*o|
26
26
  if yield(*o)
27
27
  found_count += 1
28
+ return false if found_count > n
28
29
  end
29
30
  end
30
31
  else
31
32
  each do |o|
32
33
  if o
33
34
  found_count += 1
35
+ return false if found_count > n
34
36
  end
35
37
  end
36
38
  end
@@ -1,6 +1,6 @@
1
1
  unless Enumerable.method_defined? :frequencies
2
2
  module Enumerable
3
- # Counts the number of ocurrence of items in the enumberable.
3
+ # Counts the number of occurrence of items in the enumerable.
4
4
  #
5
5
  # @return [Hash] in the format value => count
6
6
  #
@@ -3,19 +3,23 @@ unless Enumerable.method_defined? :sum
3
3
  # Sums up elements of a collection by invoking their `+` method.
4
4
  # Most useful for summing up numbers.
5
5
  #
6
- # @param default [Object] an optional default return value if there are no elements.
7
- # It's nil by default.
8
- # @return The sum of the elements or the default value if there are no
9
- # elements.
6
+ # @param initial [Object] an optional initial value.
7
+ # It defaults to 0 for an empty collection.
8
+ # @return The sum of the elements, or the initial value if there
9
+ # are no elements.
10
10
  #
11
11
  # @example
12
12
  # [1, 2, 3].sum #=> 6
13
- # ["a", "b", "c"].sum #=> "abc"
14
13
  # [[1], [2], [3]].sum #=> [1, 2, 3]
15
- # [].sum #=> nil
16
- # [].sum(0) #=> 0
17
- def sum(default = nil)
18
- reduce(&:+) || default
14
+ # [].sum #=> 0
15
+ # ["a"].sum #=> "a"
16
+ # ["b", "c"].sum("a") #=> "abc"
17
+ def sum(initial = nil)
18
+ if initial
19
+ reduce(initial, &:+)
20
+ else
21
+ reduce(&:+) || 0
22
+ end
19
23
  end
20
24
  end
21
25
  end
@@ -1,5 +1,9 @@
1
+ require_relative 'string/ascii_only'
1
2
  require_relative 'string/blank'
2
3
  require_relative 'string/format'
4
+ require_relative 'string/remove'
5
+ require_relative 'string/remove_prefix'
6
+ require_relative 'string/remove_suffix'
3
7
  require_relative 'string/strip_indent'
4
8
  require_relative 'string/strip_margin'
5
9
  require_relative 'string/squish'
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ class String
4
+ # Return a copy of string with ASCII characters only
5
+ # Source: http://stackoverflow.com/questions/1268289/how-to-get-rid-of-non-ascii-characters-in-ruby
6
+ #
7
+ # @return [String] a copy of string with ASCII characters only
8
+ #
9
+ # @example
10
+ # 'abc'.ascii_only #=> 'abc'
11
+ #
12
+ # @example
13
+ # '中文123'.ascii_only #=> '123'
14
+ unless String.method_defined? :ascii_only
15
+ def ascii_only
16
+ dup.ascii_only!
17
+ end
18
+ end
19
+
20
+ # Modify self and keep ASCII characters only
21
+ # Returns the string even if no changes were made.
22
+ # Source: http://stackoverflow.com/questions/1268289/how-to-get-rid-of-non-ascii-characters-in-ruby
23
+ #
24
+ # @return [String] The result string
25
+ #
26
+ # @example
27
+ # 'abc'.ascii_only! #=> 'abc'
28
+ #
29
+ # @example
30
+ # '中文123'.ascii_only! #=> '123'
31
+ unless String.method_defined? :ascii_only!
32
+ def ascii_only!
33
+ encoding_options = {
34
+ :invalid => :replace, # Replace invalid byte sequences
35
+ :undef => :replace, # Replace anything not defined in ASCII
36
+ :replace => '', # Use a blank for those replacements
37
+ :UNIVERSAL_NEWLINE_DECORATOR => true # Always break lines with \n
38
+ }
39
+ self.encode! Encoding.find('ASCII'), **encoding_options
40
+ end
41
+ end
42
+ end
@@ -14,7 +14,7 @@ unless String.method_defined? :format
14
14
  # @example
15
15
  # '%d + %d'.format([1, 2]) #=> '1 + 2'
16
16
  def format(*args)
17
- super(self, *(args.flatten(1)))
17
+ super(self, *args.flatten(1))
18
18
  end
19
19
  end
20
20
  end
@@ -0,0 +1,17 @@
1
+ unless String.method_defined? :remove
2
+ class String
3
+ # Removes all occurrences of a pattern in a string.
4
+ #
5
+ # @return [String] a new string without any occurrences of the pattern.
6
+ def remove(pattern)
7
+ dup.remove!(pattern)
8
+ end
9
+
10
+ # Removes all occurrences of a pattern in a string.
11
+ #
12
+ # @return [String] the string without any occurrences of the pattern.
13
+ def remove!(pattern)
14
+ gsub!(pattern, '')
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ unless String.method_defined? :remove_prefix
2
+ class String
3
+ # Removes a prefix in a string.
4
+ #
5
+ # @return [String] a new string without the prefix.
6
+ #
7
+ # @example
8
+ # 'Ladies Night'.remove_prefix('Ladies ') #=> 'Night'
9
+ def remove_prefix(pattern)
10
+ dup.remove_prefix!(pattern)
11
+ end
12
+
13
+ # Removes a prefix in a string.
14
+ #
15
+ # @return [String] the string without the prefix.
16
+ #
17
+ # @example
18
+ # 'Ladies Night'.remove_prefix!('Ladies ') #=> 'Night'
19
+ def remove_prefix!(pattern)
20
+ gsub!(/\A#{pattern}/, '')
21
+ self
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ unless String.method_defined? :remove_suffix
2
+ class String
3
+ # Removes a suffix in a string.
4
+ #
5
+ # @return [String] a new string without the suffix.
6
+ #
7
+ # @example
8
+ # 'Ladies Night'.remove_suffix(' Night') #=> 'Ladies'
9
+ def remove_suffix(pattern)
10
+ dup.remove_suffix!(pattern)
11
+ end
12
+
13
+ # Removes a suffix in a string.
14
+ #
15
+ # @return [String] the string without the suffix.
16
+ #
17
+ # @example
18
+ # 'Ladies Night'.remove_suffix!(' Night') #=> 'Ladies'
19
+ def remove_suffix!(pattern)
20
+ gsub!(/#{pattern}\z/, '')
21
+ self
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module Powerpack
2
- VERSION = '0.0.8'
2
+ VERSION = '0.1.3'
3
3
  end
@@ -17,8 +17,8 @@ Gem::Specification.new do |spec|
17
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
18
  spec.require_paths = ['lib']
19
19
 
20
- spec.add_development_dependency 'bundler', '~> 1.3'
20
+ spec.add_development_dependency 'bundler', '>= 1.3', "< 3.0"
21
21
  spec.add_development_dependency 'rake'
22
- spec.add_development_dependency('rspec', '~> 2.13')
23
- spec.add_development_dependency('yard', '~> 0.8')
22
+ spec.add_development_dependency('rspec')
23
+ spec.add_development_dependency('yard', '~> 0.9')
24
24
  end
@@ -3,37 +3,37 @@ require 'spec_helper'
3
3
  describe 'Enumerable#exactly' do
4
4
  context 'with block' do
5
5
  it 'returns true for exact number of matches' do
6
- expect([1, 2, 3, 4].exactly?(2, &:even?)).to be_true
6
+ expect([1, 2, 3, 4].exactly?(2, &:even?)).to be_truthy
7
7
  end
8
8
 
9
9
  it 'returns false for less matches' do
10
- expect([1, 3, 4].exactly?(2, &:even?)).to be_false
10
+ expect([1, 3, 4].exactly?(2, &:even?)).to be_falsey
11
11
  end
12
12
 
13
13
  it 'returns false for more matches' do
14
- expect([1, 3, 4, 6, 8].exactly?(2, &:even?)).to be_false
14
+ expect([1, 3, 4, 6, 8].exactly?(2, &:even?)).to be_falsey
15
15
  end
16
16
  end
17
17
 
18
18
  context 'without block' do
19
19
  it 'returns true for exact number of non nil/false elements in absence of nil/false elements' do
20
- expect([1, 2, 3, 4].exactly?(4)).to be_true
20
+ expect([1, 2, 3, 4].exactly?(4)).to be_truthy
21
21
  end
22
22
 
23
23
  it 'returns true for exact number of non nil/false elements in presence of nil/false elements' do
24
- expect([1, 2, nil, false].exactly?(2)).to be_true
24
+ expect([1, 2, nil, false].exactly?(2)).to be_truthy
25
25
  end
26
26
 
27
27
  it 'returns true for exact number of nil/false elements' do
28
- expect([nil, false].exactly?(0)).to be_true
28
+ expect([nil, false].exactly?(0)).to be_truthy
29
29
  end
30
30
 
31
31
  it 'returns false if there are less non nil/false elements in absence of nil/false elements' do
32
- expect([1, 2, 3].exactly?(4)).to be_false
32
+ expect([1, 2, 3].exactly?(4)).to be_falsey
33
33
  end
34
34
 
35
35
  it 'returns false if there are less non nil/false elements in presence of nil/false elements' do
36
- expect([1, nil, false].exactly?(4)).to be_false
36
+ expect([1, nil, false].exactly?(4)).to be_falsey
37
37
  end
38
38
  end
39
39
  end
@@ -3,25 +3,25 @@ require 'spec_helper'
3
3
  describe 'Enumerable#several' do
4
4
  context 'with block' do
5
5
  it 'returns true if more than 1 element matches the predicate' do
6
- expect([1, 2, 3, 4].several?(&:even?)).to be_true
6
+ expect([1, 2, 3, 4].several?(&:even?)).to be_truthy
7
7
  end
8
8
 
9
9
  it 'returns false if just 1 element matches the predicate' do
10
- expect([1, 3, 4].several?(&:even?)).to be_false
10
+ expect([1, 3, 4].several?(&:even?)).to be_falsey
11
11
  end
12
12
 
13
13
  it 'returns false if no elements match the predicate' do
14
- expect([1, 3, 4].several?(&:even?)).to be_false
14
+ expect([1, 3, 4].several?(&:even?)).to be_falsey
15
15
  end
16
16
  end
17
17
 
18
18
  context 'without block' do
19
19
  it 'returns true if there are 2 or more non nil/false elements' do
20
- expect([1, 2, 3, 4].several?).to be_true
20
+ expect([1, 2, 3, 4].several?).to be_truthy
21
21
  end
22
22
 
23
23
  it 'returns false if there are less than 2 non nil/false elements' do
24
- expect([1, nil, false].several?).to be_false
24
+ expect([1, nil, false].several?).to be_falsey
25
25
  end
26
26
  end
27
27
  end
@@ -1,15 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Enumerable#sum' do
4
- it 'sums up the numbers of an enum' do
5
- expect((1..3).sum).to eq(6)
6
- end
3
+ unless Enumerable.method_defined? :sum
4
+ describe 'Enumerable#sum' do
5
+ it 'sums up the numbers of an enum' do
6
+ expect((1..3).sum).to eq(6)
7
+ end
7
8
 
8
- it 'returns nil when invoked on an empty collection' do
9
- expect([].sum).to be_nil
10
- end
9
+ it 'returns zero when invoked on an empty collection' do
10
+ expect([].sum).to be_zero
11
+ end
12
+
13
+ it 'returns the initial value when invoked on an empty collection' do
14
+ expect([].sum('')).to be_empty
15
+ end
16
+
17
+ it 'prepends the initial value to the sum' do
18
+ expect(['b', 'c'].sum('a')).to eq('abc')
19
+ end
20
+
21
+ it 'concatenates strings' do
22
+ expect(['a', 'b', 'c'].sum).to eq('abc')
23
+ end
11
24
 
12
- it 'returns default value when invoked on an empty collection' do
13
- expect([].sum(0)).to be_zero
25
+ it 'concatenates arrays' do
26
+ expect([[1], [2], [3]].sum).to eq([1, 2, 3])
27
+ end
14
28
  end
15
29
  end
@@ -2,23 +2,23 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Numeric#neg?' do
4
4
  it 'returns false for positive integer' do
5
- expect(1.neg?).to be_false
5
+ expect(1.neg?).to be_falsey
6
6
  end
7
7
 
8
8
  it 'returns false for positive float' do
9
- expect(0.1.neg?).to be_false
9
+ expect(0.1.neg?).to be_falsey
10
10
  end
11
11
 
12
12
  it 'returns true for negative integer' do
13
- expect(-1.neg?).to be_true
13
+ expect(-1.neg?).to be_truthy
14
14
  end
15
15
 
16
16
  it 'returns true for negative float' do
17
- expect(-0.01.neg?).to be_true
17
+ expect(-0.01.neg?).to be_truthy
18
18
  end
19
19
 
20
20
  it 'returns false for 0' do
21
- expect(0.neg?).to be_false
22
- expect(0.0.neg?).to be_false
21
+ expect(0.neg?).to be_falsey
22
+ expect(0.0.neg?).to be_falsey
23
23
  end
24
24
  end
@@ -2,23 +2,23 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Numeric#pos?' do
4
4
  it 'returns true for positive integer' do
5
- expect(1.pos?).to be_true
5
+ expect(1.pos?).to be_truthy
6
6
  end
7
7
 
8
8
  it 'returns true for positive float' do
9
- expect(0.1.pos?).to be_true
9
+ expect(0.1.pos?).to be_truthy
10
10
  end
11
11
 
12
12
  it 'returns false for negative integer' do
13
- expect(-1.pos?).to be_false
13
+ expect(-1.pos?).to be_falsey
14
14
  end
15
15
 
16
16
  it 'returns false for negative float' do
17
- expect(-0.01.pos?).to be_false
17
+ expect(-0.01.pos?).to be_falsey
18
18
  end
19
19
 
20
20
  it 'returns false for 0' do
21
- expect(0.pos?).to be_false
22
- expect(0.0.pos?).to be_false
21
+ expect(0.pos?).to be_falsey
22
+ expect(0.0.pos?).to be_falsey
23
23
  end
24
24
  end
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ unless defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
6
+ describe 'String#ascii_only' do
7
+ it 'returns same value for string with ASCII chars only' do
8
+ expect('abc'.ascii_only).to eq 'abc'
9
+ end
10
+
11
+ it 'returns string without non-ASCII chars' do
12
+ expect("abc\u{6666}".force_encoding("UTF-8").ascii_only).to eq 'abc'
13
+ end
14
+
15
+ it 'returns string without non-ASCII chars and with ASCII chars' do
16
+ expect("\u{6666}".force_encoding("UTF-8").ascii_only).to eq ''
17
+ end
18
+
19
+ it 'does not change the original string' do
20
+ string = "abc\u{6666}".force_encoding("UTF-8")
21
+ string.ascii_only
22
+ expect(string).to eq "abc\u{6666}".force_encoding("UTF-8")
23
+ end
24
+ end
25
+
26
+ describe 'String#ascii_only!' do
27
+ it 'returns same value for string with ASCII chars only' do
28
+ expect('abc'.ascii_only!).to eq 'abc'
29
+ end
30
+
31
+ it 'returns string without non-ASCII chars' do
32
+ expect("abc\u{6666}".force_encoding("UTF-8").ascii_only!).to eq 'abc'
33
+ end
34
+
35
+ it 'returns string without non-ASCII chars and with ASCII chars' do
36
+ expect("\u{6666}".force_encoding("UTF-8").ascii_only!).to eq ''
37
+ end
38
+
39
+ it 'changes the original string' do
40
+ string = "abc\u{6666}".force_encoding("UTF-8")
41
+ string.ascii_only!
42
+ expect(string).to eq 'abc'
43
+ end
44
+ end
45
+ end
@@ -2,14 +2,14 @@ require 'spec_helper'
2
2
 
3
3
  describe 'String#blank?' do
4
4
  it 'returns true for an empty string' do
5
- expect(''.blank?).to be_true
5
+ expect(''.blank?).to be_truthy
6
6
  end
7
7
 
8
8
  it 'returns true for a string with only whitespace in it' do
9
- expect(' '.blank?).to be_true
9
+ expect(' '.blank?).to be_truthy
10
10
  end
11
11
 
12
12
  it 'returns false for a string with non-whitespace chars in it' do
13
- expect(' test'.blank?).to be_false
13
+ expect(' test'.blank?).to be_falsey
14
14
  end
15
15
  end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'String#remove_prefix' do
4
+ it 'removes a prefix in a string' do
5
+ expect('Ladies Night'.remove_prefix('Ladies ')).to eq('Night')
6
+ end
7
+
8
+ it 'returns the original string if the parameter is not a prefix' do
9
+ expect('Ladies Night'.remove_prefix('Night')).to eq('Ladies Night')
10
+ end
11
+ end
12
+
13
+ describe 'String#remove_prefix!' do
14
+ it 'removes a prefix in a string' do
15
+ expect('Ladies Night'.remove_prefix!('Ladies ')).to eq('Night')
16
+ end
17
+
18
+ it 'returns the original string if the parameter is not a prefix' do
19
+ expect('Ladies Night'.remove_prefix!('Night')).to eq('Ladies Night')
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'String#remove' do
4
+ it 'removes all occurrences of a pattern' do
5
+ expect('Ladies Night'.remove(/Ladies /)).to eq('Night')
6
+ end
7
+ end
8
+
9
+ describe 'String#remove!' do
10
+ it 'removes all occurrences of a pattern' do
11
+ expect('Ladies Night'.remove(/Ladies /)).to eq('Night')
12
+ end
13
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'String#remove_suffix' do
4
+ it 'removes a suffix in a string' do
5
+ expect('Ladies Night'.remove_suffix(' Night')).to eq('Ladies')
6
+ end
7
+
8
+ it 'returns the original string if the parameter is not a suffix' do
9
+ expect('Ladies Night'.remove_suffix('Ladies')).to eq('Ladies Night')
10
+ end
11
+ end
12
+
13
+ describe 'String#remove_suffix!' do
14
+ it 'removes a suffix in a string' do
15
+ expect('Ladies Night'.remove_suffix!(' Night')).to eq('Ladies')
16
+ end
17
+
18
+ it 'returns the original string if the parameter is not a suffix' do
19
+ expect('Ladies Night'.remove_suffix!('Ladies')).to eq('Ladies Night')
20
+ end
21
+ end
@@ -5,8 +5,6 @@ require 'rspec'
5
5
  require 'powerpack'
6
6
 
7
7
  RSpec.configure do |config|
8
- config.treat_symbols_as_metadata_keys_with_true_values = true
9
-
10
8
  config.expect_with :rspec do |c|
11
9
  c.syntax = :expect # disables `should`
12
10
  end
metadata CHANGED
@@ -1,71 +1,77 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: powerpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-13 00:00:00.000000000 Z
11
+ date: 2020-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '3.0'
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ~>
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '1.3'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - '>='
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
39
  version: '0'
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - '>='
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
46
  version: '0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: rspec
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - ~>
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: '2.13'
53
+ version: '0'
48
54
  type: :development
49
55
  prerelease: false
50
56
  version_requirements: !ruby/object:Gem::Requirement
51
57
  requirements:
52
- - - ~>
58
+ - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '2.13'
60
+ version: '0'
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: yard
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
- - - ~>
65
+ - - "~>"
60
66
  - !ruby/object:Gem::Version
61
- version: '0.8'
67
+ version: '0.9'
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
- - - ~>
72
+ - - "~>"
67
73
  - !ruby/object:Gem::Version
68
- version: '0.8'
74
+ version: '0.9'
69
75
  description: A few useful extensions to core Ruby classes.
70
76
  email:
71
77
  - bozhidar@batsov.com
@@ -73,10 +79,11 @@ executables: []
73
79
  extensions: []
74
80
  extra_rdoc_files: []
75
81
  files:
76
- - .gitignore
77
- - .rspec
78
- - .travis.yml
82
+ - ".gitignore"
83
+ - ".rspec"
84
+ - ".travis.yml"
79
85
  - CHANGELOG.md
86
+ - CONTRIBUTING.md
80
87
  - Gemfile
81
88
  - LICENSE.txt
82
89
  - README.md
@@ -102,8 +109,12 @@ files:
102
109
  - lib/powerpack/numeric/pos.rb
103
110
  - lib/powerpack/numeric/scale.rb
104
111
  - lib/powerpack/string.rb
112
+ - lib/powerpack/string/ascii_only.rb
105
113
  - lib/powerpack/string/blank.rb
106
114
  - lib/powerpack/string/format.rb
115
+ - lib/powerpack/string/remove.rb
116
+ - lib/powerpack/string/remove_prefix.rb
117
+ - lib/powerpack/string/remove_suffix.rb
107
118
  - lib/powerpack/string/squish.rb
108
119
  - lib/powerpack/string/strip_indent.rb
109
120
  - lib/powerpack/string/strip_margin.rb
@@ -124,8 +135,12 @@ files:
124
135
  - spec/powerpack/numeric/neg_spec.rb
125
136
  - spec/powerpack/numeric/pos_spec.rb
126
137
  - spec/powerpack/numeric/scale_spec.rb
138
+ - spec/powerpack/string/ascii_only_spec.rb
127
139
  - spec/powerpack/string/blank_spec.rb
128
140
  - spec/powerpack/string/format_spec.rb
141
+ - spec/powerpack/string/remove_prefix_spec.rb
142
+ - spec/powerpack/string/remove_spec.rb
143
+ - spec/powerpack/string/remove_suffix_spec.rb
129
144
  - spec/powerpack/string/squish_spec.rb
130
145
  - spec/powerpack/string/strip_indent_spec.rb
131
146
  - spec/powerpack/string/strip_margin_spec.rb
@@ -140,17 +155,16 @@ require_paths:
140
155
  - lib
141
156
  required_ruby_version: !ruby/object:Gem::Requirement
142
157
  requirements:
143
- - - '>='
158
+ - - ">="
144
159
  - !ruby/object:Gem::Version
145
160
  version: '0'
146
161
  required_rubygems_version: !ruby/object:Gem::Requirement
147
162
  requirements:
148
- - - '>='
163
+ - - ">="
149
164
  - !ruby/object:Gem::Version
150
165
  version: '0'
151
166
  requirements: []
152
- rubyforge_project:
153
- rubygems_version: 2.0.3
167
+ rubygems_version: 3.1.2
154
168
  signing_key:
155
169
  specification_version: 4
156
170
  summary: A few useful extensions to core Ruby classes.
@@ -170,10 +184,13 @@ test_files:
170
184
  - spec/powerpack/numeric/neg_spec.rb
171
185
  - spec/powerpack/numeric/pos_spec.rb
172
186
  - spec/powerpack/numeric/scale_spec.rb
187
+ - spec/powerpack/string/ascii_only_spec.rb
173
188
  - spec/powerpack/string/blank_spec.rb
174
189
  - spec/powerpack/string/format_spec.rb
190
+ - spec/powerpack/string/remove_prefix_spec.rb
191
+ - spec/powerpack/string/remove_spec.rb
192
+ - spec/powerpack/string/remove_suffix_spec.rb
175
193
  - spec/powerpack/string/squish_spec.rb
176
194
  - spec/powerpack/string/strip_indent_spec.rb
177
195
  - spec/powerpack/string/strip_margin_spec.rb
178
196
  - spec/spec_helper.rb
179
- has_rdoc: