constrain 0.3.3 → 0.4.0

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
  SHA256:
3
- metadata.gz: 04e9db24a4fdaf9e637bbebb861344d3e63b9a4f2e6923f05cf69387459470de
4
- data.tar.gz: fd26404b3458bb5fd8fb63b5cb73e83bce681a9920f6aee70ed7b2f86ea9275d
3
+ metadata.gz: c76b91e6d73a1c5d2f7c44fc98f372f5b911c08e6a6d4203a3be646019aaa1a3
4
+ data.tar.gz: da85fb71b85da4e54913cb227a162c901ef3fe88c61d091e3489a63a3a97a9e5
5
5
  SHA512:
6
- metadata.gz: cfda3b10415cb633b4c6aecb9819984d4ead39490e3acf2bb6e727b6f87e44c9b4f16fbcd48c6538c9167366b6b0eccf900a9bca4eeb399c07759a73e706b223
7
- data.tar.gz: f297b0b6c61ea48c94c314c204a4d9904e0b744fb6fb00fbe9523af93a2c61a31b985ac0b408d3b02c13c9c382c6afb5fb9353bdd03d3a9d4875ee0368c383d4
6
+ metadata.gz: 3db8dbbb8a0b2eb8d0c8de705b85533a630748f9e02c4e82f324c8f705d9f01d251b4d9b9866d977b71aaef4beb29f1834f1ff058728055ef545d77ece25a506
7
+ data.tar.gz: 52a2ec74e4709506d7be7813b48d5a7ece977dc7314d591db5830033f2e477cab39d2dc26129e7d0d27727f57966b0c0957faf5ba701ef9f6754ca16123f342a
@@ -1,3 +1,3 @@
1
1
  module Constrain
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/constrain.rb CHANGED
@@ -1,11 +1,8 @@
1
1
  require "constrain/version"
2
2
 
3
3
  module Constrain
4
- # Raised on any error
5
- class Error < StandardError; end
6
-
7
4
  # Raised if types doesn't match a class expression
8
- class MatchError < Error
5
+ class MatchError < StandardError
9
6
  def initialize(value, exprs, msg = nil, unwind: 0)
10
7
  super msg || "Expected #{value.inspect} to match #{Constrain.fmt_exprs(exprs)}"
11
8
  end
@@ -31,7 +28,7 @@ module Constrain
31
28
  # constrain(value, *values, unwind: 0)
32
29
  #
33
30
  # Check that value matches one of the class expressions. Raises a
34
- # Constrain::Error if the expression is invalid and a Constrain::MatchError if
31
+ # Constrain::ArgumentError if the expression is invalid and a Constrain::MatchError if
35
32
  # the value doesn't match. The exception's backtrace skips :unwind number of
36
33
  # entries
37
34
  def self.constrain(value, *exprs)
@@ -39,7 +36,7 @@ module Constrain
39
36
  end
40
37
 
41
38
  # Return true if the value matches the class expression. Raises a
42
- # Constrain::Error if the expression is invalid
39
+ # Constrain::ArgumentError if the expression is invalid
43
40
  def self.constrain?(value, *exprs)
44
41
  do_constrain?(value, *exprs)
45
42
  end
@@ -65,10 +62,10 @@ module Constrain
65
62
  msg = exprs.pop if exprs.last.is_a?(String)
66
63
 
67
64
  begin
68
- !exprs.empty? or raise Error, "Empty constraint"
65
+ !exprs.empty? or raise ArgumentError, "Empty constraint"
69
66
  exprs.any? { |expr| Constrain.do_constrain_value?(value, expr) } or
70
67
  raise MatchError.new(value, exprs, msg, unwind: unwind)
71
- rescue Error => ex
68
+ rescue ArgumentError, Constrain::MatchError => ex
72
69
  ex.set_backtrace(caller[1 + unwind..-1])
73
70
  raise
74
71
  end
@@ -77,7 +74,7 @@ module Constrain
77
74
 
78
75
  def self.do_constrain?(value, *exprs)
79
76
  begin
80
- !exprs.empty? or raise Error, "Empty constraint"
77
+ !exprs.empty? or raise ArgumentError, "Empty constraint"
81
78
  exprs.any? { |expr| Constrain.do_constrain_value?(value, expr) }
82
79
  end
83
80
  end
@@ -87,7 +84,7 @@ module Constrain
87
84
  when Class, Module
88
85
  value.is_a?(expr)
89
86
  when Array
90
- !expr.empty? or raise Error, "Empty array in constraint"
87
+ !expr.empty? or raise ArgumentError, "Empty array in constraint"
91
88
  value.is_a?(Array) && value.all? { |elem| expr.any? { |e| Constrain.constrain?(elem, e) } }
92
89
  when Hash
93
90
  value.is_a?(Hash) && value.all? { |key, value|
@@ -117,7 +114,6 @@ module Constrain
117
114
 
118
115
  # Render a class expression as a String. Same as +expr.inspect+ except that
119
116
  # Proc objects are rendered as "Proc@<sourcefile>>:<linenumber>"
120
- #
121
117
  def self.fmt_expr(expr)
122
118
  case expr
123
119
  when Class, Module; expr.to_s
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: constrain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Claus Rasmussen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-21 00:00:00.000000000 Z
11
+ date: 2022-03-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: simplecov