hatch 0.0.5 → 0.0.6

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZmMxN2EyNTUzN2M2NWMyMmNiOWI3NzY0NDZkZTZmN2NmMGJiNWE0Mw==
4
+ NWM5Y2NiNzZiYjYzYWQ5MWVhOWJkMjYyYTZjMWYyOThkY2JkNzg4Yg==
5
5
  data.tar.gz: !binary |-
6
- YjEzZmZlMWRlNDkwNGZmMDg5MDc5NGU5ZjZjN2U4ZTU3NGI0MzlhZA==
6
+ YmVkMjEwZjRhZTEwMDY1MmRjMzNjZWUxZmJiYTdlOWZlMTgzNjFhMA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MzYxOTA2YzRlYjNiY2FhZTVkYTZkMTJmMWVlOTNiMjM3NWI3NWQ2MzlmNjVm
10
- YzFjNDhlYjZkZTc2Y2IyNTViY2VhOGQ4YmUwMGFiY2U4YWNjMTE0MzU1MzZi
11
- ZWFiODk3ZmY0MjQ4YjhkMDEwZTI0YmFhNGZkNmQwZTc2MDVkOGM=
9
+ ZDYxZTI3ODQ5MzZmNjBhNTczNjdkMzgwZWY4MGU0ZThkNzdmNzFmMDc1MmRm
10
+ NzNjNWEwYTU3YjZhNGY5ZjM0OGE1NDU4NjlmNzRmOTIyZTE4NWY4Mjc5ZTI1
11
+ Y2U3NDk5OTJlM2ZjYjQ3MjkzMzFjZmIxOWRmYzc2MTk3MTE5M2Q=
12
12
  data.tar.gz: !binary |-
13
- MWUwNjNjZDZlOWNmMjJiN2M0NDhhZDgzYzY0NjYzN2U4ZjE5MDZjOTI0Zjc1
14
- OWFjOTA0Y2FiNTMxOGU5Mjg3MjE0ZDU3OGJiYWY1MmE0NjAzNjUzY2YyZTEz
15
- YjUzYzM1YWE4YzQ4MTNkNzU1MTg5YWMwNmZiNjJjMjY2M2QwOWU=
13
+ MTI3ZjFmNWQwY2Q3MmU3ZDAwMjM4ZDNlMDZjNGIxZmQxZTRhZDMzYTY0N2Zm
14
+ N2FmNzM4ZjVmZjY1NmI1ZjI3OTM2MDI2NTY2MjU0ZDhhNTgwYWZjYzY3N2Uz
15
+ NTllYjk0OTBkYzhmMmYxZjA0MTE1OTRmZTQ2ZjI1OTM4MDNmOGQ=
data/hatch.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'hatch'
3
- s.version = '0.0.5'
3
+ s.version = '0.0.6'
4
4
  s.date = Time.now.strftime('%Y-%m-%d')
5
5
  s.summary = 'Keep valid objects only'
6
6
  s.description = "An address without a street? A person without a name? You don't need no invalid objects!"
data/lib/hatch.rb CHANGED
@@ -32,7 +32,11 @@ module Hatch
32
32
  end
33
33
 
34
34
  def certify(attribute, error, &block)
35
- @@validations[self.to_s.to_sym][attribute] = {error: error, validation: block}
35
+ @@validations[self.to_s.to_sym][attribute] = Validation.new(error, &block)
36
+ end
37
+
38
+ def certifies(attribute, validation, error = nil)
39
+ @@validations[self.to_s.to_sym][attribute] = Validation.send(validation, error)
36
40
  end
37
41
 
38
42
  def hatch(args = {})
@@ -42,8 +46,8 @@ module Hatch
42
46
  validation = @@validations[klass_symbol][attribute]
43
47
  validated_attributes << Validator.validate(attribute,
44
48
  args[attribute],
45
- validation[:error],
46
- &validation[:validation])
49
+ validation.error,
50
+ &validation.block)
47
51
  end
48
52
 
49
53
  build(validated_attributes)
@@ -130,5 +134,22 @@ module Hatch
130
134
  !@valid
131
135
  end
132
136
  end
137
+
138
+ class Validation
139
+ attr_reader :error, :block
140
+
141
+ def initialize(error, &block)
142
+ @error = error
143
+ @block = block
144
+ end
145
+
146
+ def self.presence(error)
147
+ new(error || "must be present") {|value| !value.nil? && !value.empty?}
148
+ end
149
+
150
+ def self.positive_number(error)
151
+ new(error || "must be a positive number") {|value| !value.nil? && value > 0}
152
+ end
153
+ end
133
154
  end
134
155
 
@@ -0,0 +1,25 @@
1
+ require_relative 'support/helper'
2
+ require_relative '../lib/hatch'
3
+
4
+ class CommonStuff
5
+ include Hatch
6
+
7
+ attributes :present, :positive
8
+
9
+ certifies :present, :presence
10
+ certifies :positive, :positive_number
11
+ end
12
+
13
+ class CommonValidationsTest < Test::Unit::TestCase
14
+ def test_presence
15
+ common_stuff = CommonStuff.hatch(present: nil, positive: 1)
16
+ assert common_stuff.is_a?(CommonStuff::InvalidCommonStuff)
17
+ assert common_stuff.errors.include?("must be present")
18
+ end
19
+
20
+ def test_positive_number
21
+ common_stuff = CommonStuff.hatch(present: "here", positive: -1)
22
+ assert common_stuff.is_a?(CommonStuff::InvalidCommonStuff)
23
+ assert common_stuff.errors.include?("must be a positive number")
24
+ end
25
+ end
@@ -1,4 +1,5 @@
1
- require_relative 'helper'
1
+ require_relative 'support/helper'
2
+ require_relative 'support/address'
2
3
 
3
4
  class PolymorphismTest < Test::Unit::TestCase
4
5
  def test_polymorphism
@@ -1,4 +1,5 @@
1
- require_relative 'helper'
1
+ require_relative 'support/helper'
2
+ require_relative 'support/address'
2
3
 
3
4
  class ValidTest < Test::Unit::TestCase
4
5
  def test_valid
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Tolchinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-04-20 00:00:00.000000000 Z
11
+ date: 2013-05-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: An address without a street? A person without a name? You don't need
14
14
  no invalid objects!
@@ -21,7 +21,7 @@ files:
21
21
  - README.md
22
22
  - hatch.gemspec
23
23
  - Rakefile
24
- - test/helper.rb
24
+ - test/common_validations_test.rb
25
25
  - test/polymorphism_test.rb
26
26
  - test/validation_test.rb
27
27
  - lib/hatch.rb
data/test/helper.rb DELETED
@@ -1,23 +0,0 @@
1
- require 'test/unit'
2
- require 'pry'
3
- require_relative '../lib/hatch'
4
-
5
- class Address
6
- attr_reader :city, :street, :number
7
-
8
- include Hatch
9
- attributes :city, :street, :number
10
-
11
- certify(:street, "Address must have a street") do |street|
12
- !street.nil? && !street.empty?
13
- end
14
-
15
- certify(:number, "Address must have a positive number") do |number|
16
- !number.nil? && number > 0
17
- end
18
-
19
- certify(:city, "Address must have a city") do |city|
20
- !city.nil? && !city.empty?
21
- end
22
- end
23
-