ensure_it 0.1.3 → 0.1.4
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 +4 -4
- data/.yardopts +3 -0
- data/README.md +17 -10
- data/lib/ensure_it.rb +7 -0
- data/lib/ensure_it/config.rb +9 -0
- data/lib/ensure_it/ensure_array.rb +49 -36
- data/lib/ensure_it/ensure_class.rb +52 -15
- data/lib/ensure_it/ensure_float.rb +43 -60
- data/lib/ensure_it/ensure_hash.rb +2 -2
- data/lib/ensure_it/ensure_instance_of.rb +1 -1
- data/lib/ensure_it/ensure_integer.rb +80 -100
- data/lib/ensure_it/ensure_string.rb +114 -48
- data/lib/ensure_it/ensure_symbol.rb +47 -40
- data/lib/ensure_it/errors.rb +2 -2
- data/lib/ensure_it/string_utils.rb +61 -0
- data/lib/ensure_it/version.rb +1 -1
- data/spec/lib/config_spec.rb +33 -4
- data/spec/lib/ensure_array_spec.rb +18 -14
- data/spec/lib/ensure_class_spec.rb +4 -0
- data/spec/lib/ensure_string_spec.rb +8 -1
- data/spec/lib/ensure_symbol_spec.rb +7 -0
- data/spec/lib/errors_spec.rb +10 -0
- data/spec/lib/string_utils_spec.rb +164 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b5f9d6674b5751ec725332d84f6a9527d1824efa
|
4
|
+
data.tar.gz: b5b0fbe8eec8d2ddd7e35b8a79c5560e7541868f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77f9808d8d5ede9eea61208535bec4e3b8609b3a9a254cba63203b29fb8fe34ab8f970fca2b341ce9cc3512e4f10d0e0ac7538ac80e2d6189d343d01cf59dd52
|
7
|
+
data.tar.gz: 34765d4a0fd5e73c2e9bd2b33b2d931ad55983004bd126a083704402a34478f0cf38dfc207adb47dbcf0a9af3814c80af326ba439d81806eaff27509e9047e64
|
data/.yardopts
ADDED
data/README.md
CHANGED
@@ -11,7 +11,7 @@ The main goal of EnsureIt is to provide as fast executed code as it possible wit
|
|
11
11
|
|
12
12
|
> **Note:** this library doesn't support ruby older than `2.0.0`
|
13
13
|
|
14
|
-
|
14
|
+
Simple example (you can find it at `examples/symbol.rb`):
|
15
15
|
|
16
16
|
```ruby
|
17
17
|
require 'rubygems'
|
@@ -69,7 +69,7 @@ $ gem install ensure_it
|
|
69
69
|
|
70
70
|
## Configuration
|
71
71
|
|
72
|
-
For this moment only
|
72
|
+
For this moment only two configuration options available - global setting of smart errors (see [Usage section](#usage)) and default errors class (that will be used if it doesn't specified in methods calls):
|
73
73
|
|
74
74
|
```ruby
|
75
75
|
require 'ensure_it'
|
@@ -77,6 +77,7 @@ require 'ensure_it'
|
|
77
77
|
EnsureIt.configuration do |config|
|
78
78
|
# config.errors = :standard
|
79
79
|
config.errors = :smart
|
80
|
+
config.error_class = ArgumentError
|
80
81
|
end
|
81
82
|
```
|
82
83
|
|
@@ -185,20 +186,19 @@ true.ensure_float # => nil
|
|
185
186
|
|
186
187
|
### ensure_array, ensure_array!
|
187
188
|
|
188
|
-
By default, returns Array only for Array itself and **empty** array (not nil) for others.
|
189
|
+
By default, returns Array only for Array itself and **empty** array (not nil) for others. You can specify any number of arguments. Each argument can be a Proc or a symbol. If Proc given, it will be used as argument for `map` method of array, if symbol specified and it is one of `compact`, `flatten`, `reverse`, `rotate`, `shuffle`, `sort`, `sort_desc`, `uniq` then respective method wiill be called for array (for `sort_desc`, `sort` and then `reverse` will be called). In other cases specified method will be called for each array element inside `map` function. All arguments are processed in specified order. Examples:
|
189
190
|
|
190
191
|
```ruby
|
191
192
|
[1, nil, 2].ensure_array # => [1, nil, 2]
|
192
193
|
true.ensure_array # => []
|
193
194
|
true.ensure_array(default: nil) # => nil
|
194
|
-
[1, nil, 2].ensure_array(compact
|
195
|
-
[1, [2, 3], 4].ensure_array(flatten
|
196
|
-
[1, [5, 6], 4].ensure_array(flatten
|
197
|
-
[1, [5, 6], 4].ensure_array(flatten
|
198
|
-
[1, [5, 6], 4].ensure_array(flatten: true, ordered: true) # => alias to sorted
|
195
|
+
[1, nil, 2].ensure_array(:compact) # => [1, 2]
|
196
|
+
[1, [2, 3], 4].ensure_array(:flatten) # => [1, 2, 3, 4]
|
197
|
+
[1, [5, 6], 4].ensure_array(:flatten, :sort) # => [1, 4, 5, 6]
|
198
|
+
[1, [5, 6], 4].ensure_array(:flatten, :sort_desc) # => [6, 5, 4, 1]
|
199
199
|
arr = ['some', nil, :value]
|
200
|
-
arr.ensure_array(:ensure_symbol, compact
|
201
|
-
arr.ensure_array(:ensure_symbol!, compact
|
200
|
+
arr.ensure_array(:ensure_symbol, :compact) # => [:some, :value]
|
201
|
+
arr.ensure_array(:ensure_symbol!, :compact) # => raise on second element
|
202
202
|
arr = ['some', :value]
|
203
203
|
arr.ensure_array(:to_s) # => ['some', 'value'] standard methods can be used
|
204
204
|
arr.ensure_array(:ensure_string, :to_sym) # => [:some, :value] you can chain methods
|
@@ -372,6 +372,13 @@ thor ensure_it:benchmark:all -n 1000 -s
|
|
372
372
|
|
373
373
|
## Changelog
|
374
374
|
|
375
|
+
`0.1.4`
|
376
|
+
* name_of option added to `ensure_symbol` and `ensure_string`
|
377
|
+
* string options added to `ensure_class`
|
378
|
+
* code optimization
|
379
|
+
* config_error configuration option added
|
380
|
+
* `ensure_array` interface changed
|
381
|
+
|
375
382
|
`0.1.3`
|
376
383
|
* downcase option added to `ensure_symbol` and `ensure_string`
|
377
384
|
|
data/lib/ensure_it.rb
CHANGED
@@ -4,6 +4,12 @@ end
|
|
4
4
|
|
5
5
|
defined?(ENSURE_IT_REFINED) || ENSURE_IT_REFINED = false
|
6
6
|
|
7
|
+
module EnsureIt
|
8
|
+
module StringUtils
|
9
|
+
def self.ensure_name(*args); end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
require File.join %w(ensure_it version)
|
8
14
|
require File.join %w(ensure_it config)
|
9
15
|
require File.join %w(ensure_it errors)
|
@@ -16,3 +22,4 @@ require File.join %w(ensure_it ensure_array)
|
|
16
22
|
require File.join %w(ensure_it ensure_hash)
|
17
23
|
require File.join %w(ensure_it ensure_instance_of)
|
18
24
|
require File.join %w(ensure_it ensure_class)
|
25
|
+
require File.join %w(ensure_it string_utils)
|
data/lib/ensure_it/config.rb
CHANGED
@@ -10,6 +10,15 @@ module EnsureIt
|
|
10
10
|
value = value.to_sym if value.is_a?(String)
|
11
11
|
@errors = ERRORS.include?(value) ? value : ERRORS.first
|
12
12
|
end
|
13
|
+
|
14
|
+
def self.error_class(value = nil)
|
15
|
+
value.nil? ? @error_class ||= EnsureIt::Error : self.error_class = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.error_class=(value)
|
19
|
+
return unless value.is_a?(Class) && value <= Exception
|
20
|
+
@error_class = value
|
21
|
+
end
|
13
22
|
end
|
14
23
|
|
15
24
|
def self.config
|
@@ -4,7 +4,7 @@ module EnsureIt
|
|
4
4
|
default
|
5
5
|
end
|
6
6
|
|
7
|
-
def ensure_array!(*args,
|
7
|
+
def ensure_array!(*args, **opts)
|
8
8
|
opts[:message] ||= '#{subject} should be an Array'
|
9
9
|
EnsureIt.raise_error(:ensure_array!, **opts)
|
10
10
|
end
|
@@ -13,55 +13,68 @@ module EnsureIt
|
|
13
13
|
patch Array do
|
14
14
|
using EnsureIt if ENSURE_IT_REFINED
|
15
15
|
|
16
|
+
ENSURES = %i(ensure_symbol ensure_symbol! ensure_string ensure_string!
|
17
|
+
ensure_integer ensure_integer! ensure_float ensure_float!
|
18
|
+
ensure_array ensure_array! ensure_class ensure_class!)
|
19
|
+
|
20
|
+
OPERATIONS = %i(compact flatten reverse rotate shuffle sort sort_desc uniq)
|
21
|
+
|
22
|
+
|
16
23
|
if ENSURE_IT_REFINED
|
17
24
|
def ensure_array(*args, values: nil, **opts)
|
18
25
|
arr = self
|
19
26
|
args.each do |arg|
|
27
|
+
if arg.is_a?(Proc)
|
28
|
+
arr = arr.map(arg)
|
29
|
+
next
|
30
|
+
end
|
20
31
|
arg = arg.ensure_symbol || next
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
arr.map(&arg)
|
32
|
+
case arg
|
33
|
+
when *ENSURES
|
34
|
+
arr = case arg
|
35
|
+
when :ensure_symbol then map { |x| x.ensure_symbol }
|
36
|
+
when :ensure_symbol! then map { |x| x.ensure_symbol! }
|
37
|
+
when :ensure_string then map { |x| x.ensure_string }
|
38
|
+
when :ensure_string! then map { |x| x.ensure_string! }
|
39
|
+
when :ensure_integer then map { |x| x.ensure_integer }
|
40
|
+
when :ensure_integer! then map { |x| x.ensure_integer! }
|
41
|
+
when :ensure_float then map { |x| x.ensure_float }
|
42
|
+
when :ensure_float! then map { |x| x.ensure_float! }
|
43
|
+
when :ensure_array then map { |x| x.ensure_array }
|
44
|
+
when :ensure_array! then map { |x| x.ensure_array! }
|
45
|
+
when :ensure_class then map { |x| x.ensure_class }
|
46
|
+
when :ensure_class! then map { |x| x.ensure_class! }
|
37
47
|
end
|
48
|
+
when *OPERATIONS
|
49
|
+
op = arg == :sort_desc ? :sort : arg
|
50
|
+
arr = arr.send(op)
|
51
|
+
arr = arr.reverse if arg == :sort_desc
|
52
|
+
else
|
53
|
+
arr = arr.map { |x| x.respond_to?(arg) ? x.send(arg) : nil }
|
54
|
+
end
|
38
55
|
end
|
39
|
-
|
40
|
-
arr = arr.map { |x| x } if arr == self
|
41
|
-
arr.flatten! if opts[:flatten] == true
|
42
|
-
arr.select! { |x| values.include?(x) } if values.is_a?(Array)
|
43
|
-
opts[:sorted] ||= opts.delete(:ordered) if opts.key?(:ordered)
|
44
|
-
arr.sort! if opts.key?(:sorted)
|
45
|
-
arr.reverse! if opts[:sorted].ensure_symbol == :desc
|
46
|
-
arr.compact! if opts[:compact] == true
|
47
|
-
arr
|
56
|
+
values.is_a?(Array) ? arr & values : arr
|
48
57
|
end
|
49
58
|
else
|
50
59
|
def ensure_array(*args, values: nil, **opts)
|
51
60
|
arr = self
|
52
61
|
args.each do |arg|
|
62
|
+
if arg.is_a?(Proc)
|
63
|
+
arr = arr.map(arg)
|
64
|
+
next
|
65
|
+
end
|
53
66
|
arg = arg.ensure_symbol || next
|
54
|
-
|
67
|
+
case arg
|
68
|
+
when *ENSURES then arr = arr.map(&arg)
|
69
|
+
when *OPERATIONS
|
70
|
+
op = arg == :sort_desc ? :sort : arg
|
71
|
+
arr = arr.send(op)
|
72
|
+
arr = arr.reverse if arg == :sort_desc
|
73
|
+
else
|
74
|
+
arr = arr.map { |x| x.respond_to?(arg) ? x.send(arg) : nil }
|
75
|
+
end
|
55
76
|
end
|
56
|
-
|
57
|
-
arr = arr.map { |x| x } if arr == self
|
58
|
-
arr.flatten! if opts[:flatten] == true
|
59
|
-
arr.select! { |x| values.include?(x) } if values.is_a?(Array)
|
60
|
-
opts[:sorted] ||= opts.delete(:ordered) if opts.key?(:ordered)
|
61
|
-
arr.sort! if opts.key?(:sorted)
|
62
|
-
arr.reverse! if opts[:sorted].ensure_symbol == :desc
|
63
|
-
arr.compact! if opts[:compact] == true
|
64
|
-
arr
|
77
|
+
values.is_a?(Array) ? arr & values : arr
|
65
78
|
end
|
66
79
|
end
|
67
80
|
alias_method :ensure_array!, :ensure_array
|
@@ -4,33 +4,70 @@ module EnsureIt
|
|
4
4
|
default
|
5
5
|
end
|
6
6
|
|
7
|
-
def ensure_class!(*args,
|
7
|
+
def ensure_class!(*args, **opts)
|
8
8
|
opts[:message] ||= '#{subject} should be a class'
|
9
9
|
EnsureIt.raise_error(:ensure_class!, **opts)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
13
13
|
patch Class do
|
14
|
-
def ensure_class(*args, default: nil,
|
15
|
-
args.
|
16
|
-
|
17
|
-
|
18
|
-
self
|
19
|
-
else
|
20
|
-
default
|
21
|
-
end
|
14
|
+
def ensure_class(*args, default: nil, **opts)
|
15
|
+
return self if args.empty? && opts.empty?
|
16
|
+
catch(:wrong) { return EnsureIt.ensure_class(self, *args, **opts) }
|
17
|
+
default
|
22
18
|
end
|
23
19
|
|
24
|
-
def ensure_class!(*args,
|
25
|
-
args.
|
26
|
-
|
27
|
-
(values.nil? || values.is_a?(Array) && values.include?(self))
|
28
|
-
return self
|
29
|
-
end
|
20
|
+
def ensure_class!(*args, **opts)
|
21
|
+
return self if args.empty? && opts.empty?
|
22
|
+
catch(:wrong) { return EnsureIt.ensure_class(self, *args, **opts) }
|
30
23
|
args = args.map!(&:name).join(', ')
|
31
24
|
opts[:message] ||=
|
32
25
|
"\#{subject} should subclass or extend all of ['#{args}']"
|
33
26
|
EnsureIt.raise_error(:ensure_class!, **opts)
|
34
27
|
end
|
35
28
|
end
|
29
|
+
|
30
|
+
patch String do
|
31
|
+
using EnsureIt if ENSURE_IT_REFINED
|
32
|
+
|
33
|
+
def ensure_class(*args, default: nil, string: nil, **opts)
|
34
|
+
return default if string != true
|
35
|
+
catch :wrong do
|
36
|
+
return EnsureIt.ensure_class_string(self, *args, **opts)
|
37
|
+
end
|
38
|
+
default
|
39
|
+
end
|
40
|
+
|
41
|
+
def ensure_class!(*args, string: nil, **opts)
|
42
|
+
if string == true
|
43
|
+
catch :wrong do
|
44
|
+
return EnsureIt.ensure_class_string(self, *args, **opts)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
args = args.map!(&:name).join(', ')
|
48
|
+
unless opts.key?(:message)
|
49
|
+
opts[:message] = '#{subject} should'
|
50
|
+
opts[:message] << ' be a class or a name of class,' if string == true
|
51
|
+
opts[:message] << " that subclass or extend all of ['#{args}']"
|
52
|
+
end
|
53
|
+
EnsureIt.raise_error(:ensure_class!, **opts)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.ensure_class_string(str, *args, **opts)
|
58
|
+
opts.delete(:name_of)
|
59
|
+
opts.delete(:exist)
|
60
|
+
name = EnsureIt::StringUtils.ensure_name(
|
61
|
+
str, name_of: :class, exist: true, **opts
|
62
|
+
)
|
63
|
+
throw :wrong if name.nil?
|
64
|
+
EnsureIt.ensure_class(Object.const_get(name), *args, **opts)
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.ensure_class(klass, *args, values: nil, **opts)
|
68
|
+
args.select! { |x| x.is_a?(Module) }
|
69
|
+
throw :wrong unless args.all? { |x| klass <= x }
|
70
|
+
throw :wrong if values.is_a?(Array) && !values.include?(klass)
|
71
|
+
klass
|
72
|
+
end
|
36
73
|
end
|
@@ -6,96 +6,79 @@ module EnsureIt
|
|
6
6
|
default
|
7
7
|
end
|
8
8
|
|
9
|
-
def ensure_float!(
|
10
|
-
EnsureIt.raise_error(
|
11
|
-
|
12
|
-
**EnsureIt::ensure_float_error_options(**opts)
|
13
|
-
)
|
9
|
+
def ensure_float!(**opts)
|
10
|
+
EnsureIt.raise_error(:ensure_float!,
|
11
|
+
**EnsureIt::ensure_float_error(**opts))
|
14
12
|
end
|
15
13
|
end
|
16
14
|
|
17
15
|
patch String do
|
18
|
-
def ensure_float(default: nil,
|
16
|
+
def ensure_float(default: nil, **opts)
|
19
17
|
return default unless self =~ FLOAT_REGEXP
|
20
|
-
|
21
|
-
|
22
|
-
value
|
23
|
-
else
|
24
|
-
default
|
25
|
-
end
|
18
|
+
catch(:wrong) { return EnsureIt.ensure_float(to_f, **opts) }
|
19
|
+
default
|
26
20
|
end
|
27
21
|
|
28
|
-
def ensure_float!(
|
22
|
+
def ensure_float!(**opts)
|
29
23
|
if self =~ FLOAT_REGEXP
|
30
|
-
|
31
|
-
if values.nil? || values.is_a?(Array) && values.include?(value)
|
32
|
-
return value
|
33
|
-
end
|
24
|
+
catch(:wrong) { return EnsureIt.ensure_float(to_f, **opts) }
|
34
25
|
end
|
35
|
-
EnsureIt.raise_error(
|
36
|
-
|
37
|
-
**EnsureIt::ensure_float_error_options(**opts)
|
38
|
-
)
|
26
|
+
EnsureIt.raise_error(:ensure_float!,
|
27
|
+
**EnsureIt::ensure_float_error(**opts))
|
39
28
|
end
|
40
29
|
end
|
41
30
|
|
42
31
|
patch Integer do
|
43
|
-
def ensure_float(default: nil,
|
44
|
-
return to_f if
|
45
|
-
|
46
|
-
|
32
|
+
def ensure_float(default: nil, **opts)
|
33
|
+
return to_f if opts.nil?
|
34
|
+
catch(:wrong) { return EnsureIt.ensure_float(to_f, **opts) }
|
35
|
+
default
|
47
36
|
end
|
48
37
|
|
49
|
-
def ensure_float!(
|
50
|
-
return to_f if
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
:ensure_float!,
|
55
|
-
**EnsureIt::ensure_float_error_options(**opts)
|
56
|
-
)
|
38
|
+
def ensure_float!(**opts)
|
39
|
+
return to_f if opts.nil?
|
40
|
+
catch(:wrong) { return EnsureIt.ensure_float(to_f, **opts) }
|
41
|
+
EnsureIt.raise_error(:ensure_float!,
|
42
|
+
**EnsureIt::ensure_float_error(**opts))
|
57
43
|
end
|
58
44
|
end
|
59
45
|
|
60
46
|
patch Float do
|
61
|
-
def ensure_float(default: nil,
|
62
|
-
if
|
63
|
-
|
64
|
-
|
65
|
-
default
|
66
|
-
end
|
47
|
+
def ensure_float(default: nil, **opts)
|
48
|
+
return self if opts.nil?
|
49
|
+
catch(:wrong) { return EnsureIt.ensure_float(self, **opts) }
|
50
|
+
default
|
67
51
|
end
|
68
52
|
|
69
|
-
def ensure_float!(
|
70
|
-
if
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
:ensure_float!,
|
75
|
-
**EnsureIt::ensure_float_error_options(**opts)
|
76
|
-
)
|
53
|
+
def ensure_float!(**opts)
|
54
|
+
return self if opts.nil?
|
55
|
+
catch(:wrong) { return EnsureIt.ensure_float(self, **opts) }
|
56
|
+
EnsureIt.raise_error(:ensure_float!,
|
57
|
+
**EnsureIt::ensure_float_error(**opts))
|
77
58
|
end
|
78
59
|
end
|
79
60
|
|
80
61
|
patch Rational do
|
81
|
-
def ensure_float(default: nil,
|
82
|
-
return to_f if
|
83
|
-
|
84
|
-
|
62
|
+
def ensure_float(default: nil, **opts)
|
63
|
+
return to_f if opts.nil?
|
64
|
+
catch(:wrong) { return EnsureIt.ensure_float(to_f, **opts) }
|
65
|
+
default
|
85
66
|
end
|
86
67
|
|
87
|
-
def ensure_float!(
|
88
|
-
return to_f if
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
:ensure_float!,
|
93
|
-
**EnsureIt::ensure_float_error_options(**opts)
|
94
|
-
)
|
68
|
+
def ensure_float!(**opts)
|
69
|
+
return to_f if opts.nil?
|
70
|
+
catch(:wrong) { return EnsureIt.ensure_float(to_f, **opts) }
|
71
|
+
EnsureIt.raise_error(:ensure_float!,
|
72
|
+
**EnsureIt::ensure_float_error(**opts))
|
95
73
|
end
|
96
74
|
end
|
97
75
|
|
98
|
-
def self.
|
76
|
+
def self.ensure_float(float, values: nil, **opts)
|
77
|
+
throw :wrong if values.is_a?(Array) && !values.include?(float)
|
78
|
+
float
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.ensure_float_error(**opts)
|
99
82
|
unless opts.key?(:message)
|
100
83
|
opts[:message] = '#{subject} should be a float or be able' \
|
101
84
|
' to convert to it'
|