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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5d381a0a403aaacdf696b7c0a266bce2fa39ae74
4
- data.tar.gz: 25c551cabb907a4c8319a5e1b21745033eba16ec
3
+ metadata.gz: b5f9d6674b5751ec725332d84f6a9527d1824efa
4
+ data.tar.gz: b5b0fbe8eec8d2ddd7e35b8a79c5560e7541868f
5
5
  SHA512:
6
- metadata.gz: ee79f33c6d6029d32b4b6bb363a9247c22580805d3665bb1ec7f7895ee44faac4dec601d6f1b506c17b5a583f931ee6e9e23e8b05759bd21fa90235a6dc305c1
7
- data.tar.gz: c65f42a800eff72dc0a663d0f92ad9e4a9a3eabbcbfb7a8126b8384f43115d9b3ff613c86e6f569996524f1fa5154f3a8d1607a00ca84b72d9a5b52397daa33a
6
+ metadata.gz: 77f9808d8d5ede9eea61208535bec4e3b8609b3a9a254cba63203b29fb8fe34ab8f970fca2b341ce9cc3512e4f10d0e0ac7538ac80e2d6189d343d01cf59dd52
7
+ data.tar.gz: 34765d4a0fd5e73c2e9bd2b33b2d931ad55983004bd126a083704402a34478f0cf38dfc207adb47dbcf0a9af3814c80af326ba439d81806eaff27509e9047e64
data/.yardopts ADDED
@@ -0,0 +1,3 @@
1
+ --no-private
2
+ --markup markdown
3
+ --embed-mixins
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
- Simplest example (you can find at `examples/symbol.rb`):
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 one configuration option available - global setting of smart errors (see [Usage section](#usage)):
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. This method have many usefull optioins. Just list it in example:
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: true) # => [1, 2]
195
- [1, [2, 3], 4].ensure_array(flatten: true) # => [1, 2, 3, 4]
196
- [1, [5, 6], 4].ensure_array(flatten: true, sorted: true) # => [1, 4, 5, 6]
197
- [1, [5, 6], 4].ensure_array(flatten: true, sorted: :desc) # => [6, 5, 4, 1]
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: true) # => [:some, :value]
201
- arr.ensure_array(:ensure_symbol!, compact: true) # => raise on second element
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)
@@ -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, default: nil, **opts)
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
- arr =
22
- if arg.to_s.index('ensure_') == 0
23
- case arg
24
- when :ensure_symbol then map { |x| x.ensure_symbol }
25
- when :ensure_symbol! then map { |x| x.ensure_symbol! }
26
- when :ensure_string then map { |x| x.ensure_string }
27
- when :ensure_string! then map { |x| x.ensure_string! }
28
- when :ensure_integer then map { |x| x.ensure_integer }
29
- when :ensure_integer! then map { |x| x.ensure_integer! }
30
- when :ensure_float then map { |x| x.ensure_float }
31
- when :ensure_float! then map { |x| x.ensure_float! }
32
- when :ensure_array then map { |x| x.ensure_array }
33
- when :ensure_array! then map { |x| x.ensure_array! }
34
- end
35
- else
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
- return arr if opts.empty?
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
- arr = arr.map(&arg)
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
- return arr if opts.empty?
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, default: nil, **opts)
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, values: nil, **opts)
15
- args.select! { |x| x.is_a?(Module) }
16
- return default unless args.all? { |x| self <= x }
17
- if values.nil? || values.is_a?(Array) && values.include?(self)
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, default: nil, values: nil, **opts)
25
- args.select! { |x| x.is_a?(Module) }
26
- if args.all? { |x| self <= x } &&
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!(default: nil, **opts)
10
- EnsureIt.raise_error(
11
- :ensure_float!,
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, values: nil, **opts)
16
+ def ensure_float(default: nil, **opts)
19
17
  return default unless self =~ FLOAT_REGEXP
20
- value = to_f
21
- if values.nil? || values.is_a?(Array) && values.include?(value)
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!(default: nil, values: nil, **opts)
22
+ def ensure_float!(**opts)
29
23
  if self =~ FLOAT_REGEXP
30
- value = to_f
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
- :ensure_float!,
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, values: nil, **opts)
44
- return to_f if values.nil?
45
- value = to_f
46
- values.is_a?(Array) && values.include?(value) ? value : default
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!(default: nil, values: nil, **opts)
50
- return to_f if values.nil?
51
- value = to_f
52
- return values if values.is_a?(Array) && values.include?(value)
53
- EnsureIt.raise_error(
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, values: nil, **opts)
62
- if values.nil? || values.is_a?(Array) && values.include?(self)
63
- self
64
- else
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!(default: nil, values: nil, **opts)
70
- if values.nil? || values.is_a?(Array) && values.include?(self)
71
- return self
72
- end
73
- EnsureIt.raise_error(
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, values: nil, **opts)
82
- return to_f if values.nil?
83
- value = to_f
84
- values.is_a?(Array) && values.include?(value) ? value : default
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!(default: nil, values: nil, **opts)
88
- return to_f if values.nil?
89
- value = to_f
90
- return values if values.is_a?(Array) && values.include?(value)
91
- EnsureIt.raise_error(
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.ensure_float_error_options(**opts)
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'