ensure_it 0.1.3 → 0.1.4

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
  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'