lotus-utils 0.3.2 → 0.3.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/lotus/utils/hash.rb +9 -5
- data/lib/lotus/utils/kernel.rb +27 -3
- data/lib/lotus/utils/string.rb +15 -7
- data/lib/lotus/utils/version.rb +4 -1
- data/lotus-utils.gemspec +2 -2
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 629a22895276c357e5ee478c10eb6fd0c2c4ef4a
|
4
|
+
data.tar.gz: 185f59a1c22e690428f1675aa0ebb2a1553ad4ad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3e7907833d632771a62ccd573d72238ca7f454f28c84f440eb85b6cf6b49bb635214bc22d05431861ff163246ef82fea184c30b52132c54c8323e7d4eac157c
|
7
|
+
data.tar.gz: 589fd11dc42724192687b86d4848b378d90c7a14516fb69117667a7b021df56facd67f91ebbba7fb53fe492a2e010ee22bf6622910fa0a6bed61f83fb19befb7
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
# Lotus::Utils
|
2
2
|
Ruby core extentions and class utilities for Lotus
|
3
3
|
|
4
|
+
## v0.3.3 - 2015-01-08
|
5
|
+
### Fixed
|
6
|
+
- [Luca Guidi] Ensure to return the right offending object if a missing method is called with Utils::String and Hash (eg. `Utils::Hash.new(a: 1).all? {|_, v| v.foo }` blame `v` instead of `Hash`)
|
7
|
+
- [Luca Guidi] Raise an error if try to coerce non numeric strings into Integer, Float & BigDecimal (eg. `Utils::Kernel.Integer("hello") # => raise TypeError`)
|
8
|
+
|
4
9
|
## v0.3.2 - 2014-12-23
|
5
10
|
### Added
|
6
11
|
- [Luca Guidi] Official support for Ruby 2.2
|
data/lib/lotus/utils/hash.rb
CHANGED
@@ -259,12 +259,16 @@ module Lotus
|
|
259
259
|
#
|
260
260
|
# @api private
|
261
261
|
# @since 0.3.0
|
262
|
+
#
|
263
|
+
# @raise [NoMethodError] If doesn't respond to the given method
|
262
264
|
def method_missing(m, *args, &blk)
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
265
|
+
if respond_to?(m)
|
266
|
+
h = @hash.__send__(m, *args, &blk)
|
267
|
+
h = self.class.new(h) if h.is_a?(::Hash)
|
268
|
+
h
|
269
|
+
else
|
270
|
+
raise NoMethodError.new(%(undefined method `#{ m }' for #{ @hash }:#{ self.class }))
|
271
|
+
end
|
268
272
|
end
|
269
273
|
|
270
274
|
# Override Ruby's respond_to_missing? in order to support ::Hash interface
|
data/lib/lotus/utils/kernel.rb
CHANGED
@@ -17,6 +17,14 @@ module Lotus
|
|
17
17
|
# Kernel utilities
|
18
18
|
# @since 0.1.1
|
19
19
|
module Kernel
|
20
|
+
# Matcher for numeric values
|
21
|
+
#
|
22
|
+
# @since 0.3.3
|
23
|
+
# @api private
|
24
|
+
#
|
25
|
+
# @see Lotus::Utils::Kernel.Integer
|
26
|
+
NUMERIC_MATCHER = /\A([\d\/\.\+iE]+|NaN|Infinity)\z/.freeze
|
27
|
+
|
20
28
|
# Coerces the argument to be an Array.
|
21
29
|
#
|
22
30
|
# It's similar to Ruby's Kernel.Array, but it applies further
|
@@ -285,6 +293,10 @@ module Lotus
|
|
285
293
|
# input = OpenStruct.new(color: 'purple')
|
286
294
|
# Lotus::Utils::Kernel.Integer(input) # => TypeError
|
287
295
|
#
|
296
|
+
# # String that doesn't represent an integer
|
297
|
+
# input = 'hello'
|
298
|
+
# Lotus::Utils::Kernel.Integer(input) # => TypeError
|
299
|
+
#
|
288
300
|
# # When true
|
289
301
|
# input = true
|
290
302
|
# Lotus::Utils::Kernel.Integer(input) # => TypeError
|
@@ -320,7 +332,8 @@ module Lotus
|
|
320
332
|
super(arg)
|
321
333
|
rescue ArgumentError, TypeError, NoMethodError
|
322
334
|
begin
|
323
|
-
|
335
|
+
case arg
|
336
|
+
when NilClass, ->(a) { a.respond_to?(:to_i) && a.to_s.match(NUMERIC_MATCHER) }
|
324
337
|
arg.to_i
|
325
338
|
else
|
326
339
|
raise TypeError.new "can't convert into Integer"
|
@@ -398,6 +411,10 @@ module Lotus
|
|
398
411
|
# input = Time.now
|
399
412
|
# Lotus::Utils::Kernel.BigDecimal(input) # => TypeError
|
400
413
|
#
|
414
|
+
# # String that doesn't represent a big decimal
|
415
|
+
# input = 'hello'
|
416
|
+
# Lotus::Utils::Kernel.BigDecimal(input) # => TypeError
|
417
|
+
#
|
401
418
|
# # Missing #respond_to?
|
402
419
|
# input = BasicObject.new
|
403
420
|
# Lotus::Utils::Kernel.BigDecimal(input) # => TypeError
|
@@ -406,8 +423,10 @@ module Lotus
|
|
406
423
|
when ->(a) { a.respond_to?(:to_d) } then arg.to_d
|
407
424
|
when Float, Complex, Rational
|
408
425
|
BigDecimal(arg.to_s)
|
409
|
-
|
426
|
+
when ->(a) { a.to_s.match(NUMERIC_MATCHER) }
|
410
427
|
BigDecimal.new(arg)
|
428
|
+
else
|
429
|
+
raise TypeError.new "can't convert into BigDecimal"
|
411
430
|
end
|
412
431
|
rescue NoMethodError
|
413
432
|
raise TypeError.new "can't convert into BigDecimal"
|
@@ -514,6 +533,10 @@ module Lotus
|
|
514
533
|
# input = BasicObject.new
|
515
534
|
# Lotus::Utils::Kernel.Float(input) # => TypeError
|
516
535
|
#
|
536
|
+
# # String that doesn't represent a float
|
537
|
+
# input = 'hello'
|
538
|
+
# Lotus::Utils::Kernel.Float(input) # => TypeError
|
539
|
+
#
|
517
540
|
# # big rational
|
518
541
|
# input = Rational(-8) ** Rational(1, 3)
|
519
542
|
# Lotus::Utils::Kernel.Float(input) # => TypeError
|
@@ -525,7 +548,8 @@ module Lotus
|
|
525
548
|
super(arg)
|
526
549
|
rescue ArgumentError, TypeError
|
527
550
|
begin
|
528
|
-
|
551
|
+
case arg
|
552
|
+
when NilClass, ->(a) { a.respond_to?(:to_f) && a.to_s.match(NUMERIC_MATCHER) }
|
529
553
|
arg.to_f
|
530
554
|
else
|
531
555
|
raise TypeError.new "can't convert into Float"
|
data/lib/lotus/utils/string.rb
CHANGED
@@ -207,20 +207,28 @@ module Lotus
|
|
207
207
|
# @see http://www.ruby-doc.org/core/String.html#method-i-gsub
|
208
208
|
#
|
209
209
|
# @since 0.3.0
|
210
|
-
def gsub(pattern, replacement, &blk)
|
211
|
-
|
210
|
+
def gsub(pattern, replacement = nil, &blk)
|
211
|
+
if block_given?
|
212
|
+
@string.gsub(pattern, &blk)
|
213
|
+
else
|
214
|
+
@string.gsub(pattern, replacement)
|
215
|
+
end
|
212
216
|
end
|
213
217
|
|
214
218
|
# Override Ruby's method_missing in order to provide ::String interface
|
215
219
|
#
|
216
220
|
# @api private
|
217
221
|
# @since 0.3.0
|
222
|
+
#
|
223
|
+
# @raise [NoMethodError] If doesn't respond to the given method
|
218
224
|
def method_missing(m, *args, &blk)
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
225
|
+
if respond_to?(m)
|
226
|
+
s = @string.__send__(m, *args, &blk)
|
227
|
+
s = self.class.new(s) if s.is_a?(::String)
|
228
|
+
s
|
229
|
+
else
|
230
|
+
raise NoMethodError.new(%(undefined method `#{ m }' for "#{ @string }":#{ self.class }))
|
231
|
+
end
|
224
232
|
end
|
225
233
|
|
226
234
|
# Override Ruby's respond_to_missing? in order to support ::String interface
|
data/lib/lotus/utils/version.rb
CHANGED
data/lotus-utils.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'lotus/utils/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = 'lotus-utils'
|
8
8
|
spec.version = Lotus::Utils::VERSION
|
9
|
-
spec.authors = ['Luca Guidi']
|
10
|
-
spec.email = ['me@lucaguidi.com']
|
9
|
+
spec.authors = ['Luca Guidi', 'Trung Lê']
|
10
|
+
spec.email = ['me@lucaguidi.com', 'trung.le@ruby-journal.com']
|
11
11
|
spec.description = %q{Lotus utilities}
|
12
12
|
spec.summary = %q{Ruby core extentions and Louts utilities}
|
13
13
|
spec.homepage = 'http://lotusrb.org'
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lotus-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luca Guidi
|
8
|
+
- Trung Lê
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date:
|
12
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: bundler
|
@@ -55,6 +56,7 @@ dependencies:
|
|
55
56
|
description: Lotus utilities
|
56
57
|
email:
|
57
58
|
- me@lucaguidi.com
|
59
|
+
- trung.le@ruby-journal.com
|
58
60
|
executables: []
|
59
61
|
extensions: []
|
60
62
|
extra_rdoc_files: []
|
@@ -96,7 +98,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
98
|
version: '0'
|
97
99
|
requirements: []
|
98
100
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.
|
101
|
+
rubygems_version: 2.4.5
|
100
102
|
signing_key:
|
101
103
|
specification_version: 4
|
102
104
|
summary: Ruby core extentions and Louts utilities
|