valcro 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - jruby-19mode
6
+ - rbx-19mode
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (C) 2012 Harold Giménez
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -0,0 +1,82 @@
1
+ # Valcro
2
+
3
+ [![Build Status](https://secure.travis-ci.org/hgimenez/valcro.png?branch=master)](http://travis-ci.org/hgimenez/valcro)
4
+
5
+ Valcro is the simple validation library for Ruby. It provides
6
+
7
+ * A declarative way to describe what makes an object valid
8
+ * A way to declare validator classes encapsulating validations to be shared
9
+ across objects
10
+ * A method for running validations against an instance of your class
11
+ * A method for checking whether an object is valid
12
+ * Visibility into what validations failed
13
+
14
+ It is similar in spirit to ActiveModel's or Sequel's validations, but far
15
+ simpler and with a slightly different API. It does not provide validation
16
+ helpers such as `validates_presence_of` or similar.
17
+
18
+ ## Example
19
+
20
+ ```ruby
21
+ require 'valcro'
22
+
23
+ class Dog
24
+ include Valcro
25
+
26
+ attr_accessor :name
27
+
28
+ def validate
29
+ super
30
+ errors.add(:name, 'must be great') unless name =~ /super|great|cool/
31
+ end
32
+ end
33
+
34
+ dog = Dog.new
35
+ dog.name = 'spike'
36
+ dog.validate
37
+ dog.valid?
38
+ => false
39
+ dog.errors[:name]
40
+ => ["must be great"]
41
+ dog.error_messages
42
+ => "name must be great"
43
+ ```
44
+
45
+ Unlike other ruby validation libraries, you must call validate explicitely to
46
+ check for validity of objects.
47
+
48
+ ### Sharing validators
49
+
50
+ You may also have Cats in your system, which share the same validation. Valcro lets you encapsulate validations in an object with the following contract:
51
+
52
+ * It is constructed with the object being validated
53
+ * It responds to `call`, which receives a `Valcro::ErrorList`. Add validation errors to this object.
54
+
55
+ ```ruby
56
+ class GreatNameValidator
57
+ def initialize(thing_with_name)
58
+ @thing_with_name = thing_with_name
59
+ end
60
+
61
+ def call(errors)
62
+ errors.add(:name, 'must be great') unless @thing_with_name.name =~ /super|great|cool/
63
+ end
64
+ end
65
+
66
+ class Dog
67
+ include Valcro
68
+ attr_accessor :name
69
+ validates_with GreatNameValidator
70
+ end
71
+
72
+ class Cat
73
+ include Valcro
74
+ attr_accessor :name
75
+ validates_with GreatNameValidator
76
+ end
77
+ ```
78
+
79
+ ## License
80
+
81
+ Valcro is copyright (c) Harold Giménez and is released under the terms of the
82
+ MIT License found in the LICENSE file.
data/Rakefile CHANGED
@@ -1 +1,20 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+ task default: :spec
6
+
7
+ namespace :gem do
8
+ desc "Release to rubygems"
9
+ task :release do
10
+ require File.expand_path('lib/valcro/version', File.dirname(__FILE__))
11
+ version = Valcro::VERSION
12
+ message = "Bump to version #{version}"
13
+ system "git tag -a -m '#{message}' v#{version}"
14
+ system "git push origin master"
15
+ system "git push origin $(git tag | tail -1)"
16
+ system "gem build valcro.gemspec"
17
+ system "gem push valcro-#{version}.gem"
18
+ system "rm valcro-#{version}.gem"
19
+ end
20
+ end
@@ -20,6 +20,7 @@ module Valcro
20
20
  end
21
21
 
22
22
  def validate
23
+ errors.clear!
23
24
  self.class.validators.each do |validator_class|
24
25
  validation_runner.add_validator validator_class.new(self)
25
26
  end
@@ -17,6 +17,10 @@ module Valcro
17
17
  @errors.select { |error| error.property == prop }.map(&:message) || []
18
18
  end
19
19
 
20
+ def clear!
21
+ @errors = []
22
+ end
23
+
20
24
  def full_messages
21
25
  @errors.map(&:to_s)
22
26
  end
@@ -1,3 +1,3 @@
1
1
  module Valcro
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -57,3 +57,14 @@ describe Valcro::ErrorList, '#any?' do
57
57
  list.any?.should be_true
58
58
  end
59
59
  end
60
+
61
+ describe Valcro::ErrorList, '#clear!' do
62
+ it 'removes all errors' do
63
+ list = Valcro::ErrorList.new
64
+ list.add :prop, 'some error'
65
+ list.any?.should be_true
66
+
67
+ list.clear!
68
+ list.any?.should be_false
69
+ end
70
+ end
@@ -4,12 +4,12 @@ describe Valcro::Runner do
4
4
  it 'can store validators' do
5
5
  runner = Valcro::Runner.new
6
6
  runner.add_validator :some_validator
7
- runner.validators.should have(1).proc
7
+ runner.validators.should have(1).validator
8
8
  end
9
9
 
10
10
  it 'runs validators' do
11
11
  error_list = Valcro::ErrorList.new
12
- runner = Valcro::Runner.new(error_list)
12
+ runner = Valcro::Runner.new(error_list)
13
13
  runner.add_validator lambda { |errors| errors.add :foo, 'Huge mistake' }
14
14
 
15
15
  runner.validate
@@ -38,8 +38,9 @@ describe Valcro, 'validators' do
38
38
 
39
39
  class TestClass
40
40
  include Valcro
41
+ attr_accessor :status
41
42
  def status
42
- "fail"
43
+ @status ||= "fail"
43
44
  end
44
45
  validates_with StatusFail
45
46
  end
@@ -50,6 +51,17 @@ describe Valcro, 'validators' do
50
51
  test_instance.validate
51
52
  test_instance.should_not be_valid
52
53
  end
54
+
55
+ it 'clears validations on subsequent runs' do
56
+ test_instance = TestClass.new
57
+
58
+ test_instance.validate
59
+ test_instance.should_not be_valid
60
+
61
+ test_instance.status = 'win'
62
+ test_instance.validate
63
+ test_instance.should be_valid
64
+ end
53
65
  end
54
66
 
55
67
  describe Valcro, '#error_messages' do
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Harold Giménez"]
9
9
  s.email = ["harold.gimenez@gmail.com"]
10
10
  s.homepage = ""
11
- s.summary = %q{Validation so simple you probably don't need this}
12
- s.description = %q{Validation so simple you probably don't need this}
11
+ s.summary = %q{The simplest possible validation library for ruby}
12
+ s.description = %q{The simplest possible validation library for ruby}
13
13
 
14
14
  s.rubyforge_project = "valcro"
15
15
 
@@ -19,4 +19,5 @@ Gem::Specification.new do |s|
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_development_dependency "rspec"
22
+ s.add_development_dependency "rake"
22
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valcro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-08 00:00:00.000000000Z
12
+ date: 2012-02-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70333795201320 !ruby/object:Gem::Requirement
16
+ requirement: &70251622748220 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,8 +21,19 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70333795201320
25
- description: Validation so simple you probably don't need this
24
+ version_requirements: *70251622748220
25
+ - !ruby/object:Gem::Dependency
26
+ name: rake
27
+ requirement: &70251622747460 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70251622747460
36
+ description: The simplest possible validation library for ruby
26
37
  email:
27
38
  - harold.gimenez@gmail.com
28
39
  executables: []
@@ -30,7 +41,10 @@ extensions: []
30
41
  extra_rdoc_files: []
31
42
  files:
32
43
  - .gitignore
44
+ - .travis.yml
33
45
  - Gemfile
46
+ - LICENSE
47
+ - README.md
34
48
  - Rakefile
35
49
  - lib/valcro.rb
36
50
  - lib/valcro/error.rb
@@ -55,18 +69,24 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
69
  - - ! '>='
56
70
  - !ruby/object:Gem::Version
57
71
  version: '0'
72
+ segments:
73
+ - 0
74
+ hash: -250877099063039284
58
75
  required_rubygems_version: !ruby/object:Gem::Requirement
59
76
  none: false
60
77
  requirements:
61
78
  - - ! '>='
62
79
  - !ruby/object:Gem::Version
63
80
  version: '0'
81
+ segments:
82
+ - 0
83
+ hash: -250877099063039284
64
84
  requirements: []
65
85
  rubyforge_project: valcro
66
86
  rubygems_version: 1.8.10
67
87
  signing_key:
68
88
  specification_version: 3
69
- summary: Validation so simple you probably don't need this
89
+ summary: The simplest possible validation library for ruby
70
90
  test_files:
71
91
  - spec/error_list_spec.rb
72
92
  - spec/error_spec.rb