check_please 0.4.1 → 0.5.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 +4 -4
- data/.gitignore +3 -1
- data/Gemfile.lock +1 -1
- data/README.md +284 -24
- data/Rakefile +50 -3
- data/bin/gh-md-toc +350 -0
- data/lib/check_please.rb +85 -34
- data/lib/check_please/comparison.rb +145 -17
- data/lib/check_please/diffs.rb +9 -0
- data/lib/check_please/error.rb +24 -0
- data/lib/check_please/flag.rb +13 -3
- data/lib/check_please/path.rb +123 -14
- data/lib/check_please/path_segment.rb +74 -0
- data/lib/check_please/path_segment_matcher.rb +44 -0
- data/lib/check_please/reification.rb +50 -0
- data/lib/check_please/version.rb +1 -1
- data/usage_examples.rb +8 -2
- metadata +6 -2
@@ -0,0 +1,74 @@
|
|
1
|
+
module CheckPlease
|
2
|
+
|
3
|
+
class PathSegment
|
4
|
+
include CheckPlease::Reification
|
5
|
+
can_reify String, Symbol, Numeric, nil
|
6
|
+
|
7
|
+
KEY_EXPR = %r{
|
8
|
+
^
|
9
|
+
\: # a literal colon
|
10
|
+
( # capture key
|
11
|
+
[^\:]+ # followed by one or more things that aren't colons
|
12
|
+
) # end capture key
|
13
|
+
$
|
14
|
+
}x
|
15
|
+
|
16
|
+
KEY_VAL_EXPR = %r{
|
17
|
+
^
|
18
|
+
( # capture key
|
19
|
+
[^=]+ # stuff (just not an equal sign)
|
20
|
+
) # end capture key
|
21
|
+
\= # an equal sign
|
22
|
+
( # capture key value
|
23
|
+
[^=]+ # stuff (just not an equal sign)
|
24
|
+
) # end capture key value
|
25
|
+
$
|
26
|
+
}x
|
27
|
+
|
28
|
+
attr_reader :name, :key, :key_value
|
29
|
+
alias_method :to_s, :name
|
30
|
+
|
31
|
+
def initialize(name = nil)
|
32
|
+
@name = name.to_s.strip
|
33
|
+
|
34
|
+
case @name
|
35
|
+
when "", /\s/ # blank or has any whitespace
|
36
|
+
raise InvalidPathSegment, "#{name.inspect} is not a valid #{self.class} name"
|
37
|
+
end
|
38
|
+
|
39
|
+
parse_key_and_value
|
40
|
+
freeze
|
41
|
+
end
|
42
|
+
|
43
|
+
def key_expr?
|
44
|
+
name.match?(KEY_EXPR)
|
45
|
+
end
|
46
|
+
|
47
|
+
def key_val_expr?
|
48
|
+
name.match?(KEY_VAL_EXPR)
|
49
|
+
end
|
50
|
+
|
51
|
+
def match?(other_segment_or_string)
|
52
|
+
other = reify(other_segment_or_string)
|
53
|
+
PathSegmentMatcher.call(self, other)
|
54
|
+
end
|
55
|
+
|
56
|
+
def splat?
|
57
|
+
name == '*'
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def parse_key_and_value
|
63
|
+
case name
|
64
|
+
when KEY_EXPR
|
65
|
+
@key = $1
|
66
|
+
when KEY_VAL_EXPR
|
67
|
+
@key, @key_value = $1, $2
|
68
|
+
else
|
69
|
+
# :nothingtodohere:
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module CheckPlease
|
2
|
+
|
3
|
+
class PathSegmentMatcher
|
4
|
+
def self.call(a,b)
|
5
|
+
new(a,b).call
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :a, :b, :types
|
9
|
+
def initialize(a, b)
|
10
|
+
@a, @b = a, b
|
11
|
+
@types = [ _type(a), _type(b) ].sort
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
return true if either?(:splat)
|
16
|
+
return a.name == b.name if both?(:plain)
|
17
|
+
return a.key == b.key if key_and_key_value?
|
18
|
+
|
19
|
+
false
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def _type(x)
|
25
|
+
return :splat if x.splat?
|
26
|
+
return :key if x.key_expr?
|
27
|
+
return :key_value if x.key_val_expr?
|
28
|
+
:plain
|
29
|
+
end
|
30
|
+
|
31
|
+
def both?(type)
|
32
|
+
types.uniq == [type]
|
33
|
+
end
|
34
|
+
|
35
|
+
def either?(type)
|
36
|
+
types.include?(type)
|
37
|
+
end
|
38
|
+
|
39
|
+
def key_and_key_value?
|
40
|
+
types == [ :key, :key_value ]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module CheckPlease
|
2
|
+
|
3
|
+
module Reification
|
4
|
+
def self.included(receiver)
|
5
|
+
receiver.extend ClassMethods
|
6
|
+
receiver.send :include, InstanceMethods
|
7
|
+
end
|
8
|
+
|
9
|
+
module ClassMethods
|
10
|
+
def reifiable
|
11
|
+
@_reifiable ||= []
|
12
|
+
end
|
13
|
+
|
14
|
+
def can_reify(*klasses)
|
15
|
+
klasses.flatten!
|
16
|
+
|
17
|
+
unless ( klasses - [nil] ).all? { |e| e.is_a?(Class) }
|
18
|
+
raise ArgumentError, "classes (or nil) only, please"
|
19
|
+
end
|
20
|
+
|
21
|
+
reifiable.concat klasses
|
22
|
+
reifiable.uniq!
|
23
|
+
nil
|
24
|
+
end
|
25
|
+
|
26
|
+
def reify(primitive_or_object)
|
27
|
+
case primitive_or_object
|
28
|
+
when self ; return primitive_or_object
|
29
|
+
when Array ; return primitive_or_object.map { |e| reify(e) }
|
30
|
+
when *reifiable ; return new(primitive_or_object)
|
31
|
+
end
|
32
|
+
# note early return ^^^
|
33
|
+
|
34
|
+
# that didn't work? complain!
|
35
|
+
acceptable = reifiable.map { |e| Class === e ? e.name : e.inspect }
|
36
|
+
raise ArgumentError, <<~EOF
|
37
|
+
#{self}.reify was given: #{primitive_or_object.inspect}
|
38
|
+
but only accepts: #{acceptable.join(", ")}
|
39
|
+
EOF
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module InstanceMethods
|
44
|
+
def reify(x)
|
45
|
+
self.class.reify(x)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
data/lib/check_please/version.rb
CHANGED
data/usage_examples.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'check_please'
|
2
2
|
|
3
|
-
reference = { foo
|
4
|
-
candidate = { bar
|
3
|
+
reference = { "foo" => "wibble" }
|
4
|
+
candidate = { "bar" => "wibble" }
|
5
5
|
|
6
6
|
|
7
7
|
|
@@ -28,3 +28,9 @@ diffs = CheckPlease.diff(reference, candidate)
|
|
28
28
|
#
|
29
29
|
# If you come up with a useful way to present these, feel free to submit a PR
|
30
30
|
# with a new class in `lib/check_please/printers` !
|
31
|
+
|
32
|
+
# To print these in the console, you can just do:
|
33
|
+
puts diffs
|
34
|
+
|
35
|
+
# If for some reason you want to print the JSON version, it gets a little more verbose:
|
36
|
+
puts diffs.to_s(format: :json)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: check_please
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Livingston-Gray
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: table_print
|
@@ -71,6 +71,7 @@ files:
|
|
71
71
|
- README.md
|
72
72
|
- Rakefile
|
73
73
|
- bin/console
|
74
|
+
- bin/gh-md-toc
|
74
75
|
- bin/setup
|
75
76
|
- check_please.gemspec
|
76
77
|
- exe/check_please
|
@@ -85,11 +86,14 @@ files:
|
|
85
86
|
- lib/check_please/flag.rb
|
86
87
|
- lib/check_please/flags.rb
|
87
88
|
- lib/check_please/path.rb
|
89
|
+
- lib/check_please/path_segment.rb
|
90
|
+
- lib/check_please/path_segment_matcher.rb
|
88
91
|
- lib/check_please/printers.rb
|
89
92
|
- lib/check_please/printers/base.rb
|
90
93
|
- lib/check_please/printers/json.rb
|
91
94
|
- lib/check_please/printers/table_print.rb
|
92
95
|
- lib/check_please/refinements.rb
|
96
|
+
- lib/check_please/reification.rb
|
93
97
|
- lib/check_please/version.rb
|
94
98
|
- usage_examples.rb
|
95
99
|
homepage: https://github.com/RealGeeks/check_please
|