method_pattern 0.1.0 → 0.1.1
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/README.md +13 -8
- data/lib/method_pattern.rb +14 -10
- data/lib/method_pattern/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad178a56d4c759b0776f91601fde1f40eff08221
|
4
|
+
data.tar.gz: 9d6117c475302d52b9047edcd87efa69db7b27e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3ce4ef3f75239681c4939961a8c6d0102a8f20d7a3579a1a88fbbe0be9951092981a1997b4d0b9f7b4ac6b7f7fe651ca6d2e90cde6afcff2ccfb8a3827fbeca
|
7
|
+
data.tar.gz: b151bc6df67519d9e88af1dc24726e825d5243a2ed1b097895613e662501b6d2d26262b40488820aa55fe07f311f221667075e2991009018663b09c65cebf135
|
data/README.md
CHANGED
@@ -57,14 +57,19 @@ This example will handle 0 and 1 as special cases and all other integers are fun
|
|
57
57
|
|
58
58
|
Notice that we could pass in a class or even a range for our pattern. There are several things we can use:
|
59
59
|
|
60
|
-
- Strings: `with('hello') { ... }`
|
61
|
-
- Numbers: `with(15) { ... }`
|
62
|
-
- Symbol: `with(:foo) { ... }`
|
63
|
-
- Class: `with(Integer) { ... }`
|
64
|
-
- Regex: `with(/foo/) { ... }`
|
65
|
-
- Range: `with(0...10) { ... }`
|
66
|
-
|
67
|
-
|
60
|
+
- Strings: `with('hello') { |str| ... }` matches an exact string
|
61
|
+
- Numbers: `with(15) { |num| ... }` matches an exact number
|
62
|
+
- Symbol: `with(:foo) { |sym| ... }` matches a particular symbol
|
63
|
+
- Class: `with(Integer) { |num| ... }` matches any instance of the given class
|
64
|
+
- Regex: `with(/foo/) { |str| ... }` matches any string that matches the regex
|
65
|
+
- Range: `with(0...10) { |num| ... }` matches any value covered by the range
|
66
|
+
- Proc/lambda: `with(-> n { n > 3 }) { |n| ... }` matches if the proc returns a truthy value
|
67
|
+
|
68
|
+
Note that the method arguments are passed to the block. This lets the block become the method body.
|
69
|
+
|
70
|
+
### It's not just for single arguments
|
71
|
+
|
72
|
+
You can pass multiple patterns to `with` and it will match them in order:
|
68
73
|
|
69
74
|
```ruby
|
70
75
|
defn :baz do
|
data/lib/method_pattern.rb
CHANGED
@@ -6,7 +6,7 @@ module MethodPattern
|
|
6
6
|
fn.instance_exec(&definition)
|
7
7
|
|
8
8
|
define_method name do |*args, &block|
|
9
|
-
instance_exec(*args, &fn.match(
|
9
|
+
instance_exec(*args, &fn.match(args))
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -21,12 +21,12 @@ module MethodPattern
|
|
21
21
|
end
|
22
22
|
|
23
23
|
def with *patterns, &block
|
24
|
-
@patterns << Pattern.new(
|
24
|
+
@patterns << Pattern.new(patterns, block)
|
25
25
|
end
|
26
26
|
|
27
|
-
def match
|
27
|
+
def match args
|
28
28
|
@patterns.each do |pattern|
|
29
|
-
if pattern.match?
|
29
|
+
if pattern.match? args
|
30
30
|
return pattern.block
|
31
31
|
end
|
32
32
|
end
|
@@ -37,15 +37,17 @@ module MethodPattern
|
|
37
37
|
class Pattern
|
38
38
|
attr_reader :accepted, :block
|
39
39
|
|
40
|
-
def initialize
|
40
|
+
def initialize accepted, block
|
41
41
|
@accepted = accepted
|
42
42
|
@block = block
|
43
43
|
end
|
44
44
|
|
45
|
-
def match?
|
46
|
-
@accepted.each_with_index
|
47
|
-
|
45
|
+
def match? args
|
46
|
+
@accepted.each_with_index do |pattern, index|
|
47
|
+
return false unless match_arg?(pattern, args[index])
|
48
48
|
end
|
49
|
+
|
50
|
+
true
|
49
51
|
end
|
50
52
|
|
51
53
|
def match_arg? pattern, arg
|
@@ -53,9 +55,11 @@ module MethodPattern
|
|
53
55
|
when Hash
|
54
56
|
return false unless arg.is_a? Hash
|
55
57
|
|
56
|
-
pattern.
|
57
|
-
|
58
|
+
pattern.each do |key, value|
|
59
|
+
return false unless arg.key?(key) && match_arg?(value, arg[key])
|
58
60
|
end
|
61
|
+
|
62
|
+
true
|
59
63
|
else
|
60
64
|
pattern === arg
|
61
65
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: method_pattern
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Gaskins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|