eqq 0.0.5 → 0.0.6

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
  SHA256:
3
- metadata.gz: 3d6619f43d14ad7f0519f68caabc8cf3128ebc3898608aaad753adb81c929201
4
- data.tar.gz: ef9edac7cfd62cc0ba23f55e86ad9194a5396550ec9b9d1ec17614f36a0f21c4
3
+ metadata.gz: d0645f6178f68b0a105efa1bcf389bd3c0b1f056cd94a6c6684b0d18bc9284f8
4
+ data.tar.gz: a93f3a7df8098fbb1e7bdb61b5ad36c29a67e4471e563c63bb562b7896cfa60d
5
5
  SHA512:
6
- metadata.gz: a48164a2c1cea62810b4930fa92ca3ebb0b5a2a1b4877f743f1902de52b4ec429d590333437e54eae41ee917463ee5b3166f5c77394369bf2402ff6122cb4ee9
7
- data.tar.gz: 880f51dbce3e27f845b05a520decd8c9a17b7c400837d29cb1ad0597ae00279d888c708632dd64eb5457f7ed9d023c9e71951e5b5c4a28c04252727043852f0f
6
+ metadata.gz: a5d02720dfa28fc5aefed2907008e14e76dc00fd087eb83eb6c89bbf8c976b0258410d554592fc1368938bfcda8e96efc99ae2a811f285dfba33b210bf795ba5
7
+ data.tar.gz: e8077c6bd4ab3c5e363abeaa5154dca3bf8154140a73f75d238883cefe92855fb8da843ba46037c12ffb9bc710b9449b1d121a6e2119dc774520bd237f71d564
data/README.md CHANGED
@@ -12,7 +12,7 @@ Require Ruby 2.6 or later
12
12
  Add below code into your Gemfile
13
13
 
14
14
  ```ruby
15
- gem 'eqq', '>= 0.0.5', '< 0.1.0'
15
+ gem 'eqq', '>= 0.0.6', '< 0.1.0'
16
16
  ```
17
17
 
18
18
  ### Overview
@@ -113,14 +113,37 @@ Reuse as you wish!
113
113
  * NAND(*patterns) - Product is an inverted `AND`
114
114
  * NOR(*patterns) - Product is an inverted `OR`
115
115
 
116
- ### Additional information
116
+ ### Best fit for RSpec's `satisfy` matcher too
117
117
 
118
- When you feel annoy to write `Eqq` in many place, 2 ways exist.
118
+ All builders actually generate a `Proc (lambda)` instance.
119
+ The signature will fit for RSpec's built-in [`satisfy` matcher](https://relishapp.com/rspec/rspec-expectations/v/3-10/docs/built-in-matchers/satisfy-matcher) too.
120
+
121
+ ```ruby
122
+ RSpec.describe RSpec::Matchers::BuiltIn::Satisfy do
123
+ let(:product) { Eqq.AND(Integer, 24..42) }
124
+
125
+ it 'perfectly works' do
126
+ expect(23).not_to satisfy(&product)
127
+ expect(24).to satisfy(&product)
128
+ expect(24.0).not_to satisfy(&product)
129
+ expect(42).to satisfy(&product)
130
+ expect(42.0).not_to satisfy(&product)
131
+ expect(43).not_to satisfy(&product)
132
+ end
133
+ end
134
+ ```
135
+
136
+ ### Use builders without receiver specifying
137
+
138
+ When you felt annoy to write `Eqq` in many place, some ways exist.
119
139
 
120
140
  * `Eqq.define(&block)` - In the block scope, all builder methods can be used without receiver
121
- * `include Eqq::Buildable` - In the class/module, all builders can be used as own method
141
+ * `extend Eqq::Buildable` - In the class/module, all builders can be used as class methods
142
+ * `include Eqq::Buildable` - In the class/module, all builders can be used as instance methods
143
+
144
+ ### Signature
122
145
 
123
- This gem provides [ruby/rbs](https://github.com/ruby/rbs) signatures
146
+ * This gem provides [ruby/rbs](https://github.com/ruby/rbs) signature file
124
147
 
125
148
  ## Links
126
149
 
data/lib/eqq.rb CHANGED
@@ -15,7 +15,7 @@ module Eqq
15
15
  class InvalidProductError < Error; end
16
16
 
17
17
  class << self
18
- def valid?(object)
18
+ def pattern?(object)
19
19
  case object
20
20
  when Proc, Method
21
21
  object.arity == 1
@@ -28,11 +28,21 @@ module Eqq
28
28
  end
29
29
  end
30
30
 
31
+ # @deprecated Use {pattern?} instead. This will be dropped since `0.1.0`
32
+ def valid?(object)
33
+ pattern?(object)
34
+ end
35
+
36
+ # @api private
37
+ def satisfy?(object)
38
+ (Proc === object) && object.lambda? && (object.arity == 1)
39
+ end
40
+
31
41
  # @return [#===]
32
42
  # @raise [InvalidProductError] if the return value is invalid as a pattern object
33
43
  def define(&block)
34
44
  pattern = DSLScope.new.instance_exec(&block)
35
- raise InvalidProductError unless valid?(pattern)
45
+ raise InvalidProductError unless satisfy?(pattern)
36
46
 
37
47
  pattern
38
48
  end
data/lib/eqq/buildable.rb CHANGED
@@ -38,7 +38,7 @@ module Eqq
38
38
  # @api private
39
39
  # @return [void]
40
40
  def validate_patterns(*patterns)
41
- invalids = patterns.reject { |pattern| Eqq.valid?(pattern) }
41
+ invalids = patterns.reject { |pattern| Eqq.pattern?(pattern) }
42
42
  invalid_inspections = invalids.map { |invalid| safe_inspect_for(invalid) }.join(', ')
43
43
  raise ArgumentError, "given `#{invalid_inspections}` are invalid as pattern objects" unless invalids.empty?
44
44
  end
data/lib/eqq/version.rb CHANGED
@@ -3,5 +3,5 @@
3
3
 
4
4
  module Eqq
5
5
  # This will be same as latest published gem version
6
- VERSION = '0.0.5'
6
+ VERSION = '0.0.6'
7
7
  end
data/sig/eqq.rbs CHANGED
@@ -98,8 +98,15 @@ module Eqq
98
98
  VERSION: String
99
99
 
100
100
  # Returns `true` when given object has patternable signature
101
+ def self.pattern?: (untyped object) -> bool
102
+
103
+ # Alias of `pattern?`. But deperecated. Do not use in your code anymore.
101
104
  def self.valid?: (untyped object) -> bool
102
105
 
106
+ # Returns `true` when given object has correct signature as a product of builders
107
+ # Basically this is a private API. Should not be used in your code.
108
+ def self.satisfy?: (untyped object) -> bool
109
+
103
110
  # In the block scope, all builder methods can be used without receiver
104
111
  def self.define: { () -> _Patternable } -> _Patternable
105
112
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: eqq
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kenichi Kamiya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-03 00:00:00.000000000 Z
11
+ date: 2021-06-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |2
14
14
  Pattern objects builder.