mutations 0.8.0 → 0.8.1

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
  SHA1:
3
- metadata.gz: 67b3c3f2b9a7980e259b2d220f0677988b83694b
4
- data.tar.gz: eb4d1d4f79f74dfe470878984773729807ae167a
3
+ metadata.gz: 8bff02ac61eeda799b03898f3e376a661b96396d
4
+ data.tar.gz: 79b7261aa23b98f03130c7a102643659045bf75e
5
5
  SHA512:
6
- metadata.gz: 80a6dabcd0a2e745faba5dbb053a1aec47844c88ade1500850b2006216782f115c7c1272aa9ee39f18e358ee1d49b005679820b32f03b34fb69cf0954a67763a
7
- data.tar.gz: 559db59b1b5cd6281e32e9f39fd03b5d281b18d56b44afcc3c2ad8636e5fcdfe2064a47a3db73fb5008a54395fa4c54a0a5856c1db1ff5deb310c270019a5e8a
6
+ metadata.gz: 602de12b62d392455d81710757f7461c40239e0a625dd3908a8f1e9ab16c13d94153c5e60f10cbef833b0c88ee5d103771352e147e33949d70a260a856a1326a
7
+ data.tar.gz: e379aafc135a683190577f75644f283958092e670bfac3522e1ed4cdfe718cd207183d657b7f95de4600a4e4c6eed6d58834b3835bedb6b9615601d7231b5329
@@ -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-19mode
7
- - rbx
8
+ - jruby-1.7.26
8
9
  - 2.0.0
9
- - 2.1.0
10
- - 2.2.0
11
- - 2.3.0
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
@@ -1,3 +1,7 @@
1
+ 0.8.1
2
+ -----------
3
+ - Ruby 2.4 support added
4
+
1
5
  0.8.0
2
6
  -----------
3
7
  - Add Time filter: ```time :start_time```
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Mutations
2
2
 
3
- [![Build Status](https://travis-ci.org/cypriss/mutations.png)](https://travis-ci.org/cypriss/mutations)
4
- [![Code Climate](https://codeclimate.com/github/cypriss/mutations.png)](https://codeclimate.com/github/cypriss/mutations)
3
+ [![Build Status](https://travis-ci.org/cypriss/mutations.svg)](https://travis-ci.org/cypriss/mutations)
4
+ [![Code Climate](https://codeclimate.com/github/cypriss/mutations.svg)](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,7 +20,7 @@ module Mutations
20
20
  @element_filter = nil
21
21
 
22
22
  if block_given?
23
- instance_eval &block
23
+ instance_eval(&block)
24
24
  end
25
25
 
26
26
  raise ArgumentError.new("Can't supply both a class and a filter") if @element_filter && self.options[:class]
@@ -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 a Fixnum, like 1, let's convert it to a string first
24
- data = data.to_s if data.is_a?(Fixnum)
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
  return [data, :file] unless data.respond_to?(method)
25
25
  end
26
26
 
27
- if options[:size].is_a?(Fixnum)
27
+ if options[:size].is_a?(Integer)
28
28
  return [data, :size] if data.size > options[:size]
29
29
  end
30
30
 
@@ -21,7 +21,7 @@ module Mutations
21
21
  if !data.is_a?(Float)
22
22
  if data.is_a?(String) && data =~ /^[-+]?\d*\.?\d+/
23
23
  data = data.to_f
24
- elsif data.is_a?(Fixnum)
24
+ elsif data.is_a?(Integer)
25
25
  data = data.to_f
26
26
  else
27
27
  return [data, :float]
@@ -24,7 +24,7 @@ module Mutations
24
24
  @current_inputs = @required_inputs
25
25
 
26
26
  if block_given?
27
- instance_eval &block
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 &block
44
+ instance_eval(&block)
45
45
  end
46
46
 
47
47
  def optional(&block)
48
48
  @current_inputs = @optional_inputs
49
- instance_eval &block
49
+ instance_eval(&block)
50
50
  end
51
51
 
52
52
  def required_keys
@@ -1,9 +1,7 @@
1
1
  module Mutations
2
2
  class InputFilter
3
- @default_options = {}
4
-
5
3
  def self.default_options
6
- @default_options
4
+ @default_options ||= {}
7
5
  end
8
6
 
9
7
  attr_accessor :options
@@ -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 (Fixnum)
27
- if !data.is_a?(Fixnum)
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, Fixnum, Float, BigDecimal, Symbol].include?(data.class)
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)
@@ -1,3 +1,3 @@
1
1
  module Mutations
2
- VERSION = "0.8.0"
2
+ VERSION = "0.8.1"
3
3
  end
@@ -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")
@@ -91,7 +91,7 @@ describe "Mutations::AdditionalFilter" do
91
91
  super(opts)
92
92
 
93
93
  if block_given?
94
- instance_eval &block
94
+ instance_eval(&block)
95
95
  end
96
96
  end
97
97
 
@@ -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
- filtered, errors = f.filter(thing)
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
- filtered, errors = f.filter(nil)
31
- filtered, errors = f.filter(nil)
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 => Fixnum)
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 => 'Fixnum')
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 => Fixnum)
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
- filtered, errors = f.filter(["hi", {:stuff => "ok"}])
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
- filtered, errors = f.filter([["h", "e", {}], ["l"], [], [""]])
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
@@ -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
- filtered, errors = f.filter(thing)
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
- filtered, errors = f.filter("")
49
+ _filtered, errors = f.filter("")
50
50
  assert_equal :empty, errors
51
51
  end
52
52
 
@@ -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
- result = SimpleCommand.run!(:name => "John", :email => "john@gmail.com", :amount => "bob")
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
- outcome = SimpleCommand.run(nil)
92
+ SimpleCommand.run(nil)
93
93
  end
94
94
 
95
95
  assert_raises ArgumentError do
96
- outcome = SimpleCommand.run(1)
96
+ SimpleCommand.run(1)
97
97
  end
98
98
 
99
99
  assert_raises ArgumentError do
100
- outcome = SimpleCommand.run({:name => "John"}, 1)
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
- assert :is_a_bob, outcome.errors.symbolic[:bob]
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
- assert :is_a_bob, outcome.errors[:people].symbolic[:bob]
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 ErrorfulCommand < Mutations::Command
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 = ErrorfulCommand.run(:name => "John", :email => "john@gmail.com")
211
+ outcome = MultiErrorCommand.run(:name => "John", :email => "john@gmail.com")
212
212
 
213
213
  assert !outcome.success?
214
214
  assert_nil outcome.result
215
- assert :is_short, outcome.errors.symbolic[:bob]
216
- assert :is_fat, outcome.errors.symbolic[:sally]
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
 
@@ -63,7 +63,7 @@ describe "Mutations::FileFilter" do
63
63
 
64
64
  it "considers empty strings to be empty" do
65
65
  f = Mutations::FileFilter.new
66
- filtered, errors = f.filter("")
66
+ _filtered, errors = f.filter("")
67
67
  assert_equal :empty, errors
68
68
  end
69
69
 
@@ -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 -0.14, filtered
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
- filtered, errors = f.filter(thing)
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
- filtered, errors = f.filter("")
71
+ _filtered, errors = f.filter("")
72
72
  assert_equal :empty, errors
73
73
  end
74
74
 
@@ -16,7 +16,7 @@ describe "Mutations::HashFilter" do
16
16
  hf = Mutations::HashFilter.new do
17
17
  string :foo
18
18
  end
19
- filtered, errors = hf.filter("bar")
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
- filtered, errors = hf.filter(:foo => [])
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
- filtered, errors = hf.filter(:foo => "bar", :baz => "poopin")
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
- filtered, errors = hf.filter(:foo => "bar", :bar => "")
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
- filtered, errors = hf.filter(:foo => "bar")
258
+ _filtered, errors = hf.filter(:foo => "bar")
259
259
  assert_equal ({"foo" => :integer}), errors.symbolic
260
260
  end
261
261
  end
@@ -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 -3, filtered
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
- filtered, errors = f.filter(thing)
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
- filtered, errors = f.filter("")
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
- filtered, errors = f.filter("")
56
+ _filtered, errors = f.filter("")
57
57
  assert_equal :nils, errors
58
58
  end
59
59
 
@@ -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
- filtered, errors = sf.filter(thing)
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 "0.1E-3", filtered
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.0
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:
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