augmented 0.2.2 → 0.2.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
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