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 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