augmented 0.2.2 → 0.2.3

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
  SHA256:
3
- metadata.gz: d8cd8a8566eb16186e26909a2c32597cb2cf8d0e12e2f6785a55fa2cc43992ab
4
- data.tar.gz: b19a9fd510664c6dc52e99b98ebf0faa5bc70c8c061143b7c4e57addb84f261f
3
+ metadata.gz: '0681d93502d452cf0eea808e3bfbe7db964263697d45aa13b6a8b68056a7afaa'
4
+ data.tar.gz: 4111ebc7818e495cf1f194131baa467f97f68ad1ed48594b0eb8bf9fb000f3e0
5
5
  SHA512:
6
- metadata.gz: de5a4fde6a7325acd6d90008bd4f7895da85a87b71691d4c7cc5cbb81b798576f46b34621cbd9f0857c6ae087ab7e684855d839b97885ad7f127118a00e92f88
7
- data.tar.gz: f6185c773e2af7676f35e07d0732305bfc7c5882109a0248db835c77ebd41c361ee8946cc66dcdced3b3087fcfc14b8c6953299eea677e8b08019f70983323cd
6
+ metadata.gz: a0ed6ba9498d327dd0bde6fec29c529d6e8053972d17eafb7847967a8da2188ab4d62aa0d47b989b8511e88b50f3f8d9131216d68b1a2d14a613a947ea453036
7
+ data.tar.gz: e6baa7157e3a59441828c5fbb5a181ddb20a38ea61a15b0dcfd1b543546a47e9c47344ac8fcf452061dad2b5e70e3d9c7302021ee0050fc63b0397e7aebd54a8
data/README.md CHANGED
@@ -35,6 +35,7 @@ using Augmented::Hashes
35
35
  using Augmented::Modules
36
36
  using Augmented::Objects
37
37
  using Augmented::Procs
38
+ using Augmented::Strings
38
39
  using Augmented::Symbols
39
40
  # etc.
40
41
  ```
@@ -60,7 +61,7 @@ Weaves an object between the elements of an array. Like `join` but without flatt
60
61
  ```ruby
61
62
  using Augmented::Arrays::Tieable
62
63
 
63
- [1, 2, 3].tie :hello
64
+ [1, 2, 3].tie(:hello)
64
65
  # [1, :hello, 2, :hello, 3]
65
66
 
66
67
  [1, 5, 12].tie{ |a, b| a + b }
@@ -72,13 +73,13 @@ using Augmented::Arrays::Tieable
72
73
 
73
74
  ##### `Enumerator#index_by`
74
75
 
75
- Builds an index of all elements of an enumerator according to the given criterion.
76
+ Builds an index of all elements of an enumerator according to the given criterion. Last element wins.
76
77
 
77
78
  ```ruby
78
79
  using Augmented::Enumerators::Indexing
79
80
 
80
- ['a', 'bb', 'ccccc'].to_enum.index_by(&:length)
81
- # {1=>"a", 2=>"bb", 5=>"ccccc"}
81
+ ['a', 'bb', 'c', 'ddddd'].to_enum.index_by(&:length)
82
+ # {1=>"c", 2=>"bb", 5=>"ddddd"}
82
83
  ```
83
84
 
84
85
 
@@ -149,21 +150,16 @@ tree.transform({ lorem: :upcase, dolor: { sit: triple } })
149
150
  Makes it less verbose to create small refinements.
150
151
 
151
152
  ```ruby
152
- using Augmented::Hashes::Transformable
153
+ using Augmented::Modules::Refined
153
154
 
154
155
  class TextPage
155
156
  using refined String,
156
- as_phrase: -> { self.strip.capitalize.gsub /\.?\z/, '.' },
157
- fill: -> filler { (filler * self.length)[0..length] }
157
+ to_phrase: -> { self.strip.capitalize.gsub(/\.?\z/, '.') }
158
158
 
159
159
  # ...
160
160
 
161
161
  def text
162
- @strings.map(&:as_phrase).join ' '
163
- end
164
-
165
- def obscured_text
166
- text.fill '?'
162
+ @lines.map(&:to_phrase).join(' ')
167
163
  end
168
164
  end
169
165
  ```
@@ -178,11 +174,11 @@ Allows you to conditionally return an object, allowing you to be more concise in
178
174
  ```ruby
179
175
  using Augmented::Objects::Iffy
180
176
 
181
- Person.new.eat toast.if(toast.buttered?).else(muffin)
182
- Person.new.eat toast.if(&:buttered?).else(muffin)
177
+ Person.new.eat(toast.if(toast.buttered?).else(muffin))
178
+ Person.new.eat(toast.if(&:buttered?).else(muffin))
183
179
 
184
- Person.new.eat toast.unless(toast.soggy?).else(muffin)
185
- Person.new.eat toast.unless(&:soggy?).else(muffin)
180
+ Person.new.eat(toast.unless(toast.soggy?).else(muffin))
181
+ Person.new.eat(toast.unless(&:soggy?).else(muffin))
186
182
  ```
187
183
 
188
184
  ##### `Object#pick`
@@ -193,13 +189,13 @@ Calls a bunch of methods on an object and collects the results.
193
189
  using Augmented::Objects::Pickable
194
190
 
195
191
  class MyThing
196
- def lorem; 'hello'; end
197
- def ipsum; 'cruel'; end
198
- def dolor; 'world'; end
192
+ def foo; 'lorem'; end
193
+ def bar; 'ipsum'; end
194
+ def baz; 'dolor'; end
199
195
  end
200
196
 
201
- MyThing.new.pick :lorem, :dolor
202
- # {:lorem=>"hello", :dolor=>"world"}
197
+ MyThing.new.pick(:foo, :baz)
198
+ # {:foo=>"lorem", :baz=>"dolor"}
203
199
  ```
204
200
 
205
201
  ##### `Object#tack`
@@ -209,8 +205,8 @@ Appends a bunch of singleton methods to an object.
209
205
  ```ruby
210
206
  using Augmented::Objects::Tackable
211
207
 
212
- Object.new.tack(id: 11, greet: -> { puts "hello I'm #{id}" }).greet
213
- # hello I'm 11
208
+ Object.new.tack(name: 'Alice', greet: -> { puts "hello I'm #{name}" }).greet
209
+ # hello I'm Alice
214
210
  ```
215
211
 
216
212
  ##### `Object#tap_if`, `Object#tap_unless`
@@ -269,13 +265,45 @@ Wraps a `Proc` to rescue it from certain exceptions while returning a given valu
269
265
  ```ruby
270
266
  using Augmented::Procs::Rescuable
271
267
 
272
- integerify = proc{ |x| Integer(x) }.rescues ArgumentError, 42
268
+ integerify = proc{ |x| Integer(x) }.rescues(ArgumentError, 42)
273
269
 
274
- ['1', '2', 'abc', '4'].map &integerify
270
+ ['1', '2', 'oops!', '4'].map(&integerify)
275
271
  # [1, 2, 42, 4]
276
272
  ```
277
273
 
278
274
 
275
+ #### `Augmented::Strings`
276
+
277
+ ##### `String#blank?`
278
+
279
+ Tests if a string is empty or made of whitespace.
280
+
281
+ ```ruby
282
+ using Augmented::Strings::Blank
283
+
284
+ ''.blank?
285
+ # true
286
+ ' '.blank?
287
+ # true
288
+ ' hello '.blank?
289
+ # false
290
+ ```
291
+
292
+
293
+ ##### `String#truncate`, `String#truncate!`
294
+
295
+ Returns a prefix of a string up to a given number of characters.
296
+
297
+ ```ruby
298
+ using Augmented::Strings::Truncatable
299
+
300
+ 'hello world'.truncate(5)
301
+ # "hello"
302
+ [(string = 'hello world'), string.truncate!(5)]
303
+ # ["hello", "hello"]
304
+ ```
305
+
306
+
279
307
  #### `Augmented::Symbols`
280
308
 
281
309
  ##### `Symbol#with`
@@ -311,8 +339,8 @@ end
311
339
 
312
340
  users = [ User.new('Marianne'), User.new('Jeremy') ]
313
341
 
314
- users.find &(:name.eq 'Marianne')
315
- # <User:0x... name='Marianne'>
342
+ users.find(&:name.eq('Marianne'))
343
+ # <User:0x... @name='Marianne'>
316
344
  ```
317
345
 
318
346
 
data/augmented.gemspec CHANGED
@@ -6,18 +6,26 @@ require 'augmented/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "augmented"
8
8
  spec.version = Augmented::VERSION
9
- spec.authors = ["bruno"]
10
- spec.email = ["bruno@brunze.com"]
9
+ spec.authors = ["brunze"]
11
10
  spec.summary = %q{Useful extra methods for some Ruby core types.}
12
11
  spec.description = %q{Adds a few useful extra methods to some of Ruby's core types, available as refinements.}
13
12
  spec.homepage = "https://github.com/brunze/augmented"
14
13
  spec.license = "MIT"
15
14
 
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
- spec.require_paths = ["lib"]
15
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5.0')
20
16
 
21
- spec.add_development_dependency "bundler", "~> 2.1"
22
- spec.add_development_dependency "rake", ">= 12.3.3"
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = spec.homepage
19
+ spec.metadata['changelog_uri'] = spec.homepage + '/CHANGELOG.md'
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
24
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
25
+ end
26
+ spec.bindir = 'bin'
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_development_dependency "bundler", "~> 2"
30
+ spec.add_development_dependency "rake", ">= 13.0.3"
23
31
  end
data/lib/augmented.rb CHANGED
@@ -6,6 +6,7 @@ require 'augmented/hashes'
6
6
  require 'augmented/modules'
7
7
  require 'augmented/objects'
8
8
  require 'augmented/procs'
9
+ require 'augmented/strings'
9
10
  require 'augmented/symbols'
10
11
 
11
12
  module Augmented
@@ -15,5 +16,6 @@ module Augmented
15
16
  include Modules
16
17
  include Objects
17
18
  include Procs
19
+ include Strings
18
20
  include Symbols
19
21
  end
@@ -4,7 +4,9 @@ module Augmented
4
4
  refine Enumerator do
5
5
 
6
6
  def index_by &criterion
7
- Hash[ self.map(&criterion).zip(self) ]
7
+ self.each_with_object({}) do |element, index|
8
+ index[criterion.(element)] = element
9
+ end
8
10
  end
9
11
 
10
12
  end
@@ -0,0 +1,9 @@
1
+ require 'augmented/strings/blank'
2
+ require 'augmented/strings/truncatable'
3
+
4
+ module Augmented
5
+ module Strings
6
+ include Blank
7
+ include Truncatable
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ module Augmented
2
+ module Strings
3
+ module Blank
4
+ REGEXP = /\A[[:space:]]*\z/
5
+
6
+ refine String do
7
+
8
+ def blank?
9
+ empty? || REGEXP.match?(self)
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ module Augmented
2
+ module Strings
3
+ module Truncatable
4
+ refine String do
5
+
6
+ def truncate length
7
+ raise ArgumentError, 'length must be a non-negative integer' unless length && length.to_int >= 0
8
+
9
+ slice(0, length)
10
+ end
11
+
12
+ def truncate! length
13
+ replace(truncate(length))
14
+ self
15
+ end
16
+
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,3 @@
1
1
  module Augmented
2
- VERSION = "0.2.2"
2
+ VERSION = "0.2.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: augmented
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
- - bruno
8
- autorequire:
7
+ - brunze
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-10 00:00:00.000000000 Z
11
+ date: 2021-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,32 +16,31 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.1'
19
+ version: '2'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.1'
26
+ version: '2'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 12.3.3
33
+ version: 13.0.3
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 12.3.3
40
+ version: 13.0.3
41
41
  description: Adds a few useful extra methods to some of Ruby's core types, available
42
42
  as refinements.
43
43
  email:
44
- - bruno@brunze.com
45
44
  executables: []
46
45
  extensions: []
47
46
  extra_rdoc_files: []
@@ -72,30 +71,21 @@ files:
72
71
  - lib/augmented/procs.rb
73
72
  - lib/augmented/procs/chainable.rb
74
73
  - lib/augmented/procs/rescuable.rb
74
+ - lib/augmented/strings.rb
75
+ - lib/augmented/strings/blank.rb
76
+ - lib/augmented/strings/truncatable.rb
75
77
  - lib/augmented/symbols.rb
76
78
  - lib/augmented/symbols/arguable.rb
77
79
  - lib/augmented/symbols/comparing.rb
78
80
  - lib/augmented/version.rb
79
- - test/augmented/arrays/tieable_test.rb
80
- - test/augmented/enumerators/indexing_test.rb
81
- - test/augmented/hashes/mappable_test.rb
82
- - test/augmented/hashes/polymorphable_test.rb
83
- - test/augmented/hashes/transformable_test.rb
84
- - test/augmented/modules/refined_test.rb
85
- - test/augmented/objects/iffy_test.rb
86
- - test/augmented/objects/pickable_test.rb
87
- - test/augmented/objects/tackable_test.rb
88
- - test/augmented/objects/tappable_test.rb
89
- - test/augmented/objects/thru_test.rb
90
- - test/augmented/procs/chainable_test.rb
91
- - test/augmented/procs/rescuable_test.rb
92
- - test/augmented/symbols/arguable_test.rb
93
- - test/augmented/symbols/comparing_test.rb
94
81
  homepage: https://github.com/brunze/augmented
95
82
  licenses:
96
83
  - MIT
97
- metadata: {}
98
- post_install_message:
84
+ metadata:
85
+ homepage_uri: https://github.com/brunze/augmented
86
+ source_code_uri: https://github.com/brunze/augmented
87
+ changelog_uri: https://github.com/brunze/augmented/CHANGELOG.md
88
+ post_install_message:
99
89
  rdoc_options: []
100
90
  require_paths:
101
91
  - lib
@@ -103,30 +93,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
93
  requirements:
104
94
  - - ">="
105
95
  - !ruby/object:Gem::Version
106
- version: '0'
96
+ version: 2.5.0
107
97
  required_rubygems_version: !ruby/object:Gem::Requirement
108
98
  requirements:
109
99
  - - ">="
110
100
  - !ruby/object:Gem::Version
111
101
  version: '0'
112
102
  requirements: []
113
- rubygems_version: 3.1.4
114
- signing_key:
103
+ rubygems_version: 3.2.18
104
+ signing_key:
115
105
  specification_version: 4
116
106
  summary: Useful extra methods for some Ruby core types.
117
- test_files:
118
- - test/augmented/arrays/tieable_test.rb
119
- - test/augmented/enumerators/indexing_test.rb
120
- - test/augmented/hashes/mappable_test.rb
121
- - test/augmented/hashes/polymorphable_test.rb
122
- - test/augmented/hashes/transformable_test.rb
123
- - test/augmented/modules/refined_test.rb
124
- - test/augmented/objects/iffy_test.rb
125
- - test/augmented/objects/pickable_test.rb
126
- - test/augmented/objects/tackable_test.rb
127
- - test/augmented/objects/tappable_test.rb
128
- - test/augmented/objects/thru_test.rb
129
- - test/augmented/procs/chainable_test.rb
130
- - test/augmented/procs/rescuable_test.rb
131
- - test/augmented/symbols/arguable_test.rb
132
- - test/augmented/symbols/comparing_test.rb
107
+ test_files: []
@@ -1,66 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'augmented/arrays/tieable'
3
-
4
- describe Augmented::Arrays::Tieable do
5
- using Augmented::Arrays::Tieable
6
-
7
- describe '#tie' do
8
-
9
- describe 'when supplied with an object' do
10
-
11
- it 'returns an array interweaved with the specified object' do
12
- object = Object.new
13
- weaved = %w(a b c).tie object
14
-
15
- assert_equal weaved, ['a', object, 'b', object, 'c']
16
- end
17
-
18
- it 'returns an empty array if the original array is empty' do
19
- assert_equal [].tie(1), []
20
- end
21
-
22
- it 'returns the original array if it has only one element' do
23
- assert_equal [42].tie(1), [42]
24
- end
25
-
26
- end
27
-
28
- describe 'when supplied with a block' do
29
-
30
- it 'returns an array interweaved with the result of invoking the block' do
31
- values = [10 ,20].each
32
- weaved = %w(a b c).tie{ values.next }
33
-
34
- assert_equal weaved, ['a', 10, 'b', 20, 'c']
35
- end
36
-
37
- it 'passes both neighbour values as arguments to the supplied block' do
38
- weaved = [1, 5, 12].tie{ |a, b| a + b }
39
-
40
- assert_equal weaved, [1, 6, 5, 17, 12]
41
- end
42
-
43
- it 'will weave nils if the block does not return anything else' do
44
- weaved = [1, 2, 3].tie{}
45
-
46
- assert_equal weaved, [1, nil, 2, nil, 3]
47
- end
48
-
49
- it 'returns an empty array if the original arrays is empty' do
50
- assert_equal [].tie{ 1 }, []
51
- end
52
-
53
- it 'returns the original array if it has only one element' do
54
- assert_equal [42].tie{ 1 }, [42]
55
- end
56
-
57
- end
58
-
59
- it 'raises an ArgumentError if not passed a non-nil object or block' do
60
- assert_raises(ArgumentError){ [].tie }
61
- assert_raises(ArgumentError){ [].tie nil }
62
- end
63
-
64
- end
65
-
66
- end