mutations 0.8.0 → 0.8.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/.travis.yml +9 -5
- data/CHANGELOG.md +4 -0
- data/README.md +2 -2
- data/lib/mutations/array_filter.rb +1 -1
- data/lib/mutations/boolean_filter.rb +2 -2
- data/lib/mutations/file_filter.rb +1 -1
- data/lib/mutations/float_filter.rb +1 -1
- data/lib/mutations/hash_filter.rb +3 -3
- data/lib/mutations/input_filter.rb +1 -3
- data/lib/mutations/integer_filter.rb +2 -2
- data/lib/mutations/string_filter.rb +1 -1
- data/lib/mutations/version.rb +1 -1
- data/mutations.gemspec +1 -0
- data/spec/additional_filter_spec.rb +1 -1
- data/spec/array_filter_spec.rb +8 -8
- data/spec/boolean_filter_spec.rb +2 -2
- data/spec/command_spec.rb +10 -10
- data/spec/file_filter_spec.rb +1 -1
- data/spec/float_filter_spec.rb +3 -3
- data/spec/hash_filter_spec.rb +5 -5
- data/spec/integer_filter_spec.rb +4 -4
- data/spec/string_filter_spec.rb +2 -2
- metadata +5 -26
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bff02ac61eeda799b03898f3e376a661b96396d
|
4
|
+
data.tar.gz: 79b7261aa23b98f03130c7a102643659045bf75e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 602de12b62d392455d81710757f7461c40239e0a625dd3908a8f1e9ab16c13d94153c5e60f10cbef833b0c88ee5d103771352e147e33949d70a260a856a1326a
|
7
|
+
data.tar.gz: e379aafc135a683190577f75644f283958092e670bfac3522e1ed4cdfe718cd207183d657b7f95de4600a4e4c6eed6d58834b3835bedb6b9615601d7231b5329
|
data/.travis.yml
CHANGED
@@ -1,11 +1,15 @@
|
|
1
1
|
language: ruby
|
2
|
+
dist: trusty
|
3
|
+
sudo: required
|
2
4
|
before_install:
|
3
5
|
- gem install bundler # the default bundler version on travis is very old and causes 1.9.3 build issues
|
4
6
|
rvm:
|
5
7
|
- 1.9.3
|
6
|
-
- jruby-
|
7
|
-
- rbx
|
8
|
+
- jruby-1.7.26
|
8
9
|
- 2.0.0
|
9
|
-
- 2.1.
|
10
|
-
- 2.2.
|
11
|
-
- 2.3.
|
10
|
+
- 2.1.10
|
11
|
+
- 2.2.6
|
12
|
+
- 2.3.3
|
13
|
+
- 2.4.0
|
14
|
+
- jruby-9.1.7.0
|
15
|
+
- rbx-3
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Mutations
|
2
2
|
|
3
|
-
[](https://travis-ci.org/cypriss/mutations)
|
4
|
+
[](https://codeclimate.com/github/cypriss/mutations)
|
5
5
|
|
6
6
|
Compose your business logic into commands that sanitize and validate input. Write safe, reusable, and maintainable code for Ruby and Rails apps.
|
7
7
|
|
@@ -20,8 +20,8 @@ module Mutations
|
|
20
20
|
# If data is true or false, we win.
|
21
21
|
return [data, nil] if data == true || data == false
|
22
22
|
|
23
|
-
# If data is
|
24
|
-
data = data.to_s if data.is_a?(
|
23
|
+
# If data is an Integer, like 1, let's convert it to a string first
|
24
|
+
data = data.to_s if data.is_a?(Integer)
|
25
25
|
|
26
26
|
# If data's a string, try to convert it to a boolean. If we can't, it's invalid.
|
27
27
|
if data.is_a?(String)
|
@@ -24,7 +24,7 @@ module Mutations
|
|
24
24
|
@current_inputs = @required_inputs
|
25
25
|
|
26
26
|
if block_given?
|
27
|
-
instance_eval
|
27
|
+
instance_eval(&block)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -41,12 +41,12 @@ module Mutations
|
|
41
41
|
|
42
42
|
def required(&block)
|
43
43
|
@current_inputs = @required_inputs
|
44
|
-
instance_eval
|
44
|
+
instance_eval(&block)
|
45
45
|
end
|
46
46
|
|
47
47
|
def optional(&block)
|
48
48
|
@current_inputs = @optional_inputs
|
49
|
-
instance_eval
|
49
|
+
instance_eval(&block)
|
50
50
|
end
|
51
51
|
|
52
52
|
def required_keys
|
@@ -23,8 +23,8 @@ module Mutations
|
|
23
23
|
# Now check if it's empty:
|
24
24
|
return [data, :empty] if data == ""
|
25
25
|
|
26
|
-
# Ensure it's the correct data type (
|
27
|
-
if !data.is_a?(
|
26
|
+
# Ensure it's the correct data type (Integer)
|
27
|
+
if !data.is_a?(Integer)
|
28
28
|
if data.is_a?(String) && data =~ /^-?\d/
|
29
29
|
data = data.to_i
|
30
30
|
else
|
@@ -22,7 +22,7 @@ module Mutations
|
|
22
22
|
end
|
23
23
|
|
24
24
|
# At this point, data is not nil. If it's not a string, convert it to a string for some standard classes
|
25
|
-
data = data.to_s if !options[:strict] && [TrueClass, FalseClass,
|
25
|
+
data = data.to_s if !options[:strict] && [TrueClass, FalseClass, Integer, Float, BigDecimal, Symbol].any? { |klass| data.is_a?(klass) }
|
26
26
|
|
27
27
|
# Now ensure it's a string:
|
28
28
|
return [data, :string] unless data.is_a?(String)
|
data/lib/mutations/version.rb
CHANGED
data/mutations.gemspec
CHANGED
@@ -7,6 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.email = 'jnovak@gmail.com'
|
8
8
|
s.homepage = 'http://github.com/cypriss/mutations'
|
9
9
|
s.summary = s.description = 'Compose your business logic into commands that sanitize and validate input.'
|
10
|
+
s.licenses = %w[MIT]
|
10
11
|
|
11
12
|
s.files = `git ls-files`.split("\n")
|
12
13
|
s.test_files = `git ls-files test`.split("\n")
|
data/spec/array_filter_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe "Mutations::ArrayFilter" do
|
|
13
13
|
it "considers non-arrays to be invalid" do
|
14
14
|
f = Mutations::ArrayFilter.new(:arr)
|
15
15
|
['hi', true, 1, {:a => "1"}, Object.new].each do |thing|
|
16
|
-
|
16
|
+
_filtered, errors = f.filter(thing)
|
17
17
|
assert_equal :array, errors
|
18
18
|
end
|
19
19
|
end
|
@@ -27,27 +27,27 @@ describe "Mutations::ArrayFilter" do
|
|
27
27
|
|
28
28
|
it "considers nil to be valid" do
|
29
29
|
f = Mutations::ArrayFilter.new(:arr, :nils => true)
|
30
|
-
|
31
|
-
|
30
|
+
_filtered, errors = f.filter(nil)
|
31
|
+
_filtered, errors = f.filter(nil)
|
32
32
|
assert_equal nil, errors
|
33
33
|
end
|
34
34
|
|
35
35
|
it "lets you specify a class, and has valid elements" do
|
36
|
-
f = Mutations::ArrayFilter.new(:arr, :class =>
|
36
|
+
f = Mutations::ArrayFilter.new(:arr, :class => Integer)
|
37
37
|
filtered, errors = f.filter([1,2,3])
|
38
38
|
assert_equal nil, errors
|
39
39
|
assert_equal [1,2,3], filtered
|
40
40
|
end
|
41
41
|
|
42
42
|
it "lets you specify a class as a string, and has valid elements" do
|
43
|
-
f = Mutations::ArrayFilter.new(:arr, :class => '
|
43
|
+
f = Mutations::ArrayFilter.new(:arr, :class => 'Integer')
|
44
44
|
filtered, errors = f.filter([1,2,3])
|
45
45
|
assert_equal nil, errors
|
46
46
|
assert_equal [1,2,3], filtered
|
47
47
|
end
|
48
48
|
|
49
49
|
it "lets you specify a class, and has invalid elements" do
|
50
|
-
f = Mutations::ArrayFilter.new(:arr, :class =>
|
50
|
+
f = Mutations::ArrayFilter.new(:arr, :class => Integer)
|
51
51
|
filtered, errors = f.filter([1, "bob"])
|
52
52
|
assert_equal [nil, :class], errors.symbolic
|
53
53
|
assert_equal [1,"bob"], filtered
|
@@ -56,7 +56,7 @@ describe "Mutations::ArrayFilter" do
|
|
56
56
|
it "lets you use a block to supply an element filter" do
|
57
57
|
f = Mutations::ArrayFilter.new(:arr) { string }
|
58
58
|
|
59
|
-
|
59
|
+
_filtered, errors = f.filter(["hi", {:stuff => "ok"}])
|
60
60
|
assert_nil errors[0]
|
61
61
|
assert_equal :string, errors[1].symbolic
|
62
62
|
end
|
@@ -175,7 +175,7 @@ describe "Mutations::ArrayFilter" do
|
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
178
|
-
|
178
|
+
_filtered, errors = f.filter([["h", "e", {}], ["l"], [], [""]])
|
179
179
|
assert_equal [[nil, nil, :string], nil, nil, [:empty]], errors.symbolic
|
180
180
|
assert_equal [[nil, nil, "Array[2] isn't a string"], nil, nil, ["Array[0] can't be blank"]], errors.message
|
181
181
|
assert_equal ["Array[2] isn't a string", "Array[0] can't be blank"], errors.message_list
|
data/spec/boolean_filter_spec.rb
CHANGED
@@ -16,7 +16,7 @@ describe "Mutations::BooleanFilter" do
|
|
16
16
|
it "considers non-booleans to be invalid" do
|
17
17
|
f = Mutations::BooleanFilter.new
|
18
18
|
[[true], {:a => "1"}, Object.new].each do |thing|
|
19
|
-
|
19
|
+
_filtered, errors = f.filter(thing)
|
20
20
|
assert_equal :boolean, errors
|
21
21
|
end
|
22
22
|
end
|
@@ -46,7 +46,7 @@ describe "Mutations::BooleanFilter" do
|
|
46
46
|
|
47
47
|
it "considers empty strings to be empty" do
|
48
48
|
f = Mutations::BooleanFilter.new
|
49
|
-
|
49
|
+
_filtered, errors = f.filter("")
|
50
50
|
assert_equal :empty, errors
|
51
51
|
end
|
52
52
|
|
data/spec/command_spec.rb
CHANGED
@@ -34,7 +34,7 @@ describe "Command" do
|
|
34
34
|
|
35
35
|
it "should throw an exception with run!" do
|
36
36
|
assert_raises Mutations::ValidationException do
|
37
|
-
|
37
|
+
SimpleCommand.run!(:name => "John", :email => "john@gmail.com", :amount => "bob")
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -89,15 +89,15 @@ describe "Command" do
|
|
89
89
|
|
90
90
|
it "shouldn't accept non-hashes" do
|
91
91
|
assert_raises ArgumentError do
|
92
|
-
|
92
|
+
SimpleCommand.run(nil)
|
93
93
|
end
|
94
94
|
|
95
95
|
assert_raises ArgumentError do
|
96
|
-
|
96
|
+
SimpleCommand.run(1)
|
97
97
|
end
|
98
98
|
|
99
99
|
assert_raises ArgumentError do
|
100
|
-
|
100
|
+
SimpleCommand.run({:name => "John"}, 1)
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -164,7 +164,7 @@ describe "Command" do
|
|
164
164
|
|
165
165
|
assert !outcome.success?
|
166
166
|
assert_nil outcome.result
|
167
|
-
|
167
|
+
assert_equal :is_a_bob, outcome.errors.symbolic[:bob]
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
@@ -186,12 +186,12 @@ describe "Command" do
|
|
186
186
|
|
187
187
|
assert !outcome.success?
|
188
188
|
assert_nil outcome.result
|
189
|
-
|
189
|
+
assert_equal :is_a_bob, outcome.errors[:people].symbolic[:bob]
|
190
190
|
end
|
191
191
|
end
|
192
192
|
|
193
193
|
describe "MultiErrorCommand" do
|
194
|
-
class
|
194
|
+
class MultiErrorCommand < Mutations::Command
|
195
195
|
|
196
196
|
required { string :name }
|
197
197
|
optional { string :email }
|
@@ -208,12 +208,12 @@ describe "Command" do
|
|
208
208
|
end
|
209
209
|
|
210
210
|
it "should let you merge errors" do
|
211
|
-
outcome =
|
211
|
+
outcome = MultiErrorCommand.run(:name => "John", :email => "john@gmail.com")
|
212
212
|
|
213
213
|
assert !outcome.success?
|
214
214
|
assert_nil outcome.result
|
215
|
-
|
216
|
-
|
215
|
+
assert_equal :is_short, outcome.errors.symbolic[:bob]
|
216
|
+
assert_equal :is_fat, outcome.errors.symbolic[:sally]
|
217
217
|
end
|
218
218
|
end
|
219
219
|
|
data/spec/file_filter_spec.rb
CHANGED
data/spec/float_filter_spec.rb
CHANGED
@@ -33,7 +33,7 @@ describe "Mutations::FloatFilter" do
|
|
33
33
|
it "allows negative strings" do
|
34
34
|
f = Mutations::FloatFilter.new
|
35
35
|
filtered, errors = f.filter("-.14")
|
36
|
-
assert_equal
|
36
|
+
assert_equal(-0.14, filtered)
|
37
37
|
assert_equal nil, errors
|
38
38
|
end
|
39
39
|
|
@@ -47,7 +47,7 @@ describe "Mutations::FloatFilter" do
|
|
47
47
|
it "doesnt't allow other strings, nor does it allow random objects or symbols" do
|
48
48
|
f = Mutations::FloatFilter.new
|
49
49
|
["zero","a1", {}, [], Object.new, :d].each do |thing|
|
50
|
-
|
50
|
+
_filtered, errors = f.filter(thing)
|
51
51
|
assert_equal :float, errors
|
52
52
|
end
|
53
53
|
end
|
@@ -68,7 +68,7 @@ describe "Mutations::FloatFilter" do
|
|
68
68
|
|
69
69
|
it "considers empty strings to be empty" do
|
70
70
|
f = Mutations::FloatFilter.new
|
71
|
-
|
71
|
+
_filtered, errors = f.filter("")
|
72
72
|
assert_equal :empty, errors
|
73
73
|
end
|
74
74
|
|
data/spec/hash_filter_spec.rb
CHANGED
@@ -16,7 +16,7 @@ describe "Mutations::HashFilter" do
|
|
16
16
|
hf = Mutations::HashFilter.new do
|
17
17
|
string :foo
|
18
18
|
end
|
19
|
-
|
19
|
+
_filtered, errors = hf.filter("bar")
|
20
20
|
assert_equal :hash, errors
|
21
21
|
end
|
22
22
|
|
@@ -70,7 +70,7 @@ describe "Mutations::HashFilter" do
|
|
70
70
|
hf = Mutations::HashFilter.new do
|
71
71
|
string :*
|
72
72
|
end
|
73
|
-
|
73
|
+
_filtered, errors = hf.filter(:foo => [])
|
74
74
|
assert_equal ({"foo" => :string}), errors.symbolic
|
75
75
|
end
|
76
76
|
|
@@ -89,7 +89,7 @@ describe "Mutations::HashFilter" do
|
|
89
89
|
string :foo
|
90
90
|
integer :*
|
91
91
|
end
|
92
|
-
|
92
|
+
_filtered, errors = hf.filter(:foo => "bar", :baz => "poopin")
|
93
93
|
assert_equal ({"baz" => :integer}), errors.symbolic
|
94
94
|
end
|
95
95
|
|
@@ -196,7 +196,7 @@ describe "Mutations::HashFilter" do
|
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
199
|
-
|
199
|
+
_filtered, errors = hf.filter(:foo => "bar", :bar => "")
|
200
200
|
assert_equal ({"bar" => :empty}), errors.symbolic
|
201
201
|
end
|
202
202
|
|
@@ -255,7 +255,7 @@ describe "Mutations::HashFilter" do
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
-
|
258
|
+
_filtered, errors = hf.filter(:foo => "bar")
|
259
259
|
assert_equal ({"foo" => :integer}), errors.symbolic
|
260
260
|
end
|
261
261
|
end
|
data/spec/integer_filter_spec.rb
CHANGED
@@ -19,14 +19,14 @@ describe "Mutations::IntegerFilter" do
|
|
19
19
|
it "allows negative strings" do
|
20
20
|
f = Mutations::IntegerFilter.new
|
21
21
|
filtered, errors = f.filter("-3")
|
22
|
-
assert_equal
|
22
|
+
assert_equal(-3, filtered)
|
23
23
|
assert_equal nil, errors
|
24
24
|
end
|
25
25
|
|
26
26
|
it "doesnt't allow other strings, nor does it allow random objects or symbols" do
|
27
27
|
f = Mutations::IntegerFilter.new
|
28
28
|
["zero","a1", {}, [], Object.new, :d].each do |thing|
|
29
|
-
|
29
|
+
_filtered, errors = f.filter(thing)
|
30
30
|
assert_equal :integer, errors
|
31
31
|
end
|
32
32
|
end
|
@@ -47,13 +47,13 @@ describe "Mutations::IntegerFilter" do
|
|
47
47
|
|
48
48
|
it "considers empty strings to be empty" do
|
49
49
|
f = Mutations::IntegerFilter.new
|
50
|
-
|
50
|
+
_filtered, errors = f.filter("")
|
51
51
|
assert_equal :empty, errors
|
52
52
|
end
|
53
53
|
|
54
54
|
it "considers empty strings to be nil if empty_is_nil option is used" do
|
55
55
|
f = Mutations::IntegerFilter.new(:empty_is_nil => true)
|
56
|
-
|
56
|
+
_filtered, errors = f.filter("")
|
57
57
|
assert_equal :nils, errors
|
58
58
|
end
|
59
59
|
|
data/spec/string_filter_spec.rb
CHANGED
@@ -26,7 +26,7 @@ describe "Mutations::StringFilter" do
|
|
26
26
|
it "disallows non-string" do
|
27
27
|
sf = Mutations::StringFilter.new
|
28
28
|
[["foo"], {:a => "1"}, Object.new].each do |thing|
|
29
|
-
|
29
|
+
_filtered, errors = sf.filter(thing)
|
30
30
|
assert_equal :string, errors
|
31
31
|
end
|
32
32
|
end
|
@@ -160,7 +160,7 @@ describe "Mutations::StringFilter" do
|
|
160
160
|
it "converts bigdecimals to strings" do
|
161
161
|
sf = Mutations::StringFilter.new(:strict => false)
|
162
162
|
filtered, errors = sf.filter(BigDecimal.new("0.0001"))
|
163
|
-
assert_equal
|
163
|
+
assert_equal("0.1E-3", filtered.upcase)
|
164
164
|
assert_equal nil, errors
|
165
165
|
end
|
166
166
|
|
metadata
CHANGED
@@ -1,35 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mutations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Novak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIDXDCCAkSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA6MQowCAYDVQQDDAFwMRcw
|
14
|
-
FQYKCZImiZPyLGQBGRYHdHJpY2tvZDETMBEGCgmSJomT8ixkARkWA2NvbTAeFw0x
|
15
|
-
NjA0MjUyMTQ4NDBaFw0xNzA0MjUyMTQ4NDBaMDoxCjAIBgNVBAMMAXAxFzAVBgoJ
|
16
|
-
kiaJk/IsZAEZFgd0cmlja29kMRMwEQYKCZImiZPyLGQBGRYDY29tMIIBIjANBgkq
|
17
|
-
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3o2utXZQGfUe4DVqUPWirBGMOZFbmdHL
|
18
|
-
yK0/BcSaS4KT9yHZ3HmdarZth2OY9cceG1IqHBQBm4+aW5e8yT2bGAOkGbnalSAG
|
19
|
-
hgy376xolLXc2OSw9guTutZ/lO/0B9sicS+92VtwKu/+VR2wousPIJSIXQMYBbz/
|
20
|
-
I4266npP7/gHuejxxXhrDQ4cnDZY/OmcQpYxaKX2Nb8/PkoBIlIC2dbM8/f4pML0
|
21
|
-
8YEtD19QPs5AU00doh2HENo0QInKyjvWkmGxVQTaynGVMfSAhmLr0i+DSg6Rck2D
|
22
|
-
O3mi2aBWAfZS/yiGL0E6ZvAKMaiW9tZPbP+x72iT9DuH5MZiAqlbOQIDAQABo20w
|
23
|
-
azAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUONNcTs7C+A6N5EMj
|
24
|
-
HGkH+mQhqtUwGAYDVR0RBBEwD4ENcEB0cmlja29kLmNvbTAYBgNVHRIEETAPgQ1w
|
25
|
-
QHRyaWNrb2QuY29tMA0GCSqGSIb3DQEBBQUAA4IBAQCbTR4U4G1YNcU5R/6kZUIw
|
26
|
-
XaKBAu4CHUIAHj9A1m/wp8siGeoaE1PzkxfSotM7VYG/kItWxlocEFpJLe3ouiy+
|
27
|
-
ZFgUNUigTPfdzrtpWOfLThDGyBpKo8lwpndbUb9KG+IflJ7dJhpw32rXu1rZojl6
|
28
|
-
D3FU30VBrEA8nIM/flPiGgmmhL/eOE9exRTYF9ePsmV2OzsR1CxHx8856/JEzov5
|
29
|
-
Kgw8az4smHcDSM3d9ZORqx+gg1A9wQpTrrA68mWf1i0QK+r+C9cys7m+6UWkLKSa
|
30
|
-
ZVUPzKU88XkDLtlpM6AQpL+fslquuq8VF3Fp68YYg1uppU2wexcbTcjS/cgoml6b
|
31
|
-
-----END CERTIFICATE-----
|
32
|
-
date: 2016-06-05 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-24 00:00:00.000000000 Z
|
33
12
|
dependencies:
|
34
13
|
- !ruby/object:Gem::Dependency
|
35
14
|
name: activesupport
|
@@ -128,7 +107,8 @@ files:
|
|
128
107
|
- spec/string_filter_spec.rb
|
129
108
|
- spec/time_filter_spec.rb
|
130
109
|
homepage: http://github.com/cypriss/mutations
|
131
|
-
licenses:
|
110
|
+
licenses:
|
111
|
+
- MIT
|
132
112
|
metadata: {}
|
133
113
|
post_install_message:
|
134
114
|
rdoc_options: []
|
@@ -151,4 +131,3 @@ signing_key:
|
|
151
131
|
specification_version: 4
|
152
132
|
summary: Compose your business logic into commands that sanitize and validate input.
|
153
133
|
test_files: []
|
154
|
-
has_rdoc:
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
��j�>��g��Ibӟ3��exֶ���ێ0��:�.��jdsH瞰�'��ojv�����П���?�Q���UQ�Iז!�����ìV�;�G���ӵ�O�q���[��τ��8,�Fp��3�8���N Q&N5y�$�D)�?�\��9t������o ���3��~D�-oV�+K�Ke�'XFf[[&m7<T(r�q��ևҎWL�Ǘ����z�@#
|
metadata.gz.sig
DELETED
Binary file
|