localized_each_validator 1.0.0

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.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
data/.gitignore ADDED
@@ -0,0 +1,25 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ .bundle
21
+ .rvmrc
22
+
23
+ ## PROJECT::DOCUMENTATION
24
+ .yardoc
25
+ doc
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ -cfs
data/Gemfile ADDED
@@ -0,0 +1,13 @@
1
+ source :rubygems
2
+
3
+ # DEPENDENCIES
4
+ gem 'activerecord', require: 'active_record'
5
+ gem 'activesupport', require: 'active_record'
6
+
7
+ # DEVELOPMENT
8
+ gem 'jeweler'
9
+ gem 'yard'
10
+ gem 'RedCloth', require: 'redcloth'
11
+
12
+ # TEST
13
+ gem 'rspec'
data/Gemfile.lock ADDED
@@ -0,0 +1,51 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ RedCloth (4.2.3)
5
+ activemodel (3.0.1)
6
+ activesupport (= 3.0.1)
7
+ builder (~> 2.1.2)
8
+ i18n (~> 0.4.1)
9
+ activerecord (3.0.1)
10
+ activemodel (= 3.0.1)
11
+ activesupport (= 3.0.1)
12
+ arel (~> 1.0.0)
13
+ tzinfo (~> 0.3.23)
14
+ activesupport (3.0.1)
15
+ arel (1.0.1)
16
+ activesupport (~> 3.0.0)
17
+ builder (2.1.2)
18
+ diff-lcs (1.1.2)
19
+ gemcutter (0.6.1)
20
+ git (1.2.5)
21
+ i18n (0.4.2)
22
+ jeweler (1.4.0)
23
+ gemcutter (>= 0.1.0)
24
+ git (>= 1.2.5)
25
+ rubyforge (>= 2.0.0)
26
+ json_pure (1.4.6)
27
+ rspec (2.0.1)
28
+ rspec-core (~> 2.0.1)
29
+ rspec-expectations (~> 2.0.1)
30
+ rspec-mocks (~> 2.0.1)
31
+ rspec-core (2.0.1)
32
+ rspec-expectations (2.0.1)
33
+ diff-lcs (>= 1.1.2)
34
+ rspec-mocks (2.0.1)
35
+ rspec-core (~> 2.0.1)
36
+ rspec-expectations (~> 2.0.1)
37
+ rubyforge (2.0.4)
38
+ json_pure (>= 1.1.7)
39
+ tzinfo (0.3.23)
40
+ yard (0.6.1)
41
+
42
+ PLATFORMS
43
+ ruby
44
+
45
+ DEPENDENCIES
46
+ RedCloth
47
+ activerecord
48
+ activesupport
49
+ jeweler
50
+ rspec
51
+ yard
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Tim Morgan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile ADDED
@@ -0,0 +1,35 @@
1
+ h1. Localized @EachValidator@
2
+
3
+ | *Author* | Tim Morgan |
4
+ | *Version* | 1.0 (Oct 31, 2010) |
5
+ | *License* | Released under the MIT license. |
6
+
7
+ h2. About
8
+
9
+ Localized @EachValidator@ is a subclass of ActiveRecord's @EachValidator@ that makes it easier to write a localized validator with Rails 3's localization. It's small and simple.
10
+
11
+ h2. Usage
12
+
13
+ Add this gem to your project's @Gemfile@, or to your own validator gem's dependencies. Then, sublass @LocalizedEachValidator@ and provide the @error_key@ and override the @valid?@ method, like so:
14
+
15
+ <pre><code>
16
+ class FourValidator < ActiveRecord::EachValidator
17
+ error_key :must_be_four
18
+
19
+ def valid?(record, field, value)
20
+ value == 4
21
+ end
22
+ </code></pre>
23
+
24
+ Now, users of your validator can create a localization YAML file like so:
25
+
26
+ <pre><code>
27
+ en:
28
+ activerecord:
29
+ errors:
30
+ messages:
31
+ must_be_four: This number must be four.
32
+ </code></pre>
33
+
34
+
35
+ See the {LocalizedEachValidator} class documentation for more information.
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ require 'rake'
2
+ begin
3
+ require 'bundler'
4
+ rescue LoadError
5
+ puts "Bundler is not installed; install with `gem install bundler`."
6
+ exit 1
7
+ end
8
+
9
+ Bundler.require :default
10
+
11
+ Jeweler::Tasks.new do |gem|
12
+ gem.name = "localized_each_validator"
13
+ gem.summary = %Q{Simple EachValidator with localization support}
14
+ gem.description = %Q{Adds an abstract EachValidator superclass that you can use to create localizable validations.}
15
+ gem.email = "git@timothymorgan.info"
16
+ gem.homepage = "http://github.com/riscfuture/localized_each_validator"
17
+ gem.authors = [ "Tim Morgan" ]
18
+ gem.add_dependency 'activerecord', '>= 3.0'
19
+ gem.add_dependency 'activesupport', '>= 3.0'
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+
23
+ require 'rspec/core/rake_task'
24
+ RSpec::Core::RakeTask.new
25
+
26
+ YARD::Rake::YardocTask.new('doc') do |doc|
27
+ doc.options << "-m" << "textile"
28
+ doc.options << "--protected"
29
+ doc.options << "-r" << "README.textile"
30
+ doc.options << "-o" << "doc"
31
+ doc.options << "--title" << "Localized EachValidator Documentation".inspect
32
+
33
+ doc.files = [ 'lib/**/*', 'README.textile' ]
34
+ end
35
+
36
+ task(default: :spec)
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
@@ -0,0 +1,56 @@
1
+ require 'active_support/core_ext/hash/except'
2
+
3
+ # An @EachValidator@ that uses the translation table to build its error
4
+ # messages. Override the {#valid?} method to describe your validation
5
+ # conditions of your subclasses.
6
+ #
7
+ # The error message translation lookups conform to the standard hierarchy of
8
+ # internationalization keys as described by the
9
+ # @ActiveRecord::Errors#generate_message@ method. (See its documentation for
10
+ # more information.) The last portion of the translation key path is the error
11
+ # message key, and by default it is the name of the validator class (excepting
12
+ # "Validator"), underscored and demodulized. For example, an
13
+ # @EmailAddressValidator@ subclass would use the @email_address@ key within the
14
+ # normal ActiveRecord error key structure.
15
+ #
16
+ # @abstract Subclass this validator to perform your specific validations.
17
+
18
+ class LocalizedEachValidator < ActiveModel::EachValidator
19
+ extend ActiveSupport::Memoizable
20
+
21
+ # @private
22
+ def validate_each(record, attribute, value)
23
+ return if options[:allow_nil] and value.nil?
24
+ return if options[:allow_blank] and value.blank?
25
+ record.errors.add(attribute, options[:message] || self.class.error_key) unless valid?(record, attribute, value)
26
+ end
27
+
28
+ protected
29
+
30
+ # @abstract Override this method to return true or false depending on whether
31
+ # @value@ is a valid value for @record@'s @attribute@.
32
+ # @param [ActiveRecord::Base] record The record being validated.
33
+ # @param [Symbol] attribute The attribute with the given value.
34
+ # @param value The value of the attribute to be validated.
35
+ # @return [true, false] Whether the value is valid.
36
+
37
+ def valid?(record, attribute, value)
38
+ raise NotImplementedError, "Implement this method in your subclasses"
39
+ end
40
+
41
+ # @overload error_key
42
+ # Returns the error message key this class uses.
43
+ # @return [Symbol] The error message key.
44
+ #
45
+ # @overload error_key(value)
46
+ # Sets the error message key this class uses.
47
+ # @param [Symbol] value The new error message key.
48
+
49
+ def self.error_key(value=nil)
50
+ if value then
51
+ @error_key = value
52
+ else
53
+ return @error_key || to_s.demodulize.sub(/Validator$/, '').underscore.to_sym
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,60 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{localized_each_validator}
8
+ s.version = "1.0.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Tim Morgan"]
12
+ s.date = %q{2010-10-31}
13
+ s.description = %q{Adds an abstract EachValidator superclass that you can use to create localizable validations.}
14
+ s.email = %q{git@timothymorgan.info}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.textile"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".gitignore",
22
+ ".rspec",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE",
26
+ "README.textile",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/localized_each_validator.rb",
30
+ "localized_each_validator.gemspec",
31
+ "spec/localized_each_validator_spec.rb",
32
+ "spec/spec_helper.rb"
33
+ ]
34
+ s.homepage = %q{http://github.com/riscfuture/localized_each_validator}
35
+ s.rdoc_options = ["--charset=UTF-8"]
36
+ s.require_paths = ["lib"]
37
+ s.rubygems_version = %q{1.3.7}
38
+ s.summary = %q{Simple EachValidator with localization support}
39
+ s.test_files = [
40
+ "spec/localized_each_validator_spec.rb",
41
+ "spec/spec_helper.rb"
42
+ ]
43
+
44
+ if s.respond_to? :specification_version then
45
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
+ s.specification_version = 3
47
+
48
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
49
+ s.add_runtime_dependency(%q<activerecord>, [">= 3.0"])
50
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
51
+ else
52
+ s.add_dependency(%q<activerecord>, [">= 3.0"])
53
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
54
+ end
55
+ else
56
+ s.add_dependency(%q<activerecord>, [">= 3.0"])
57
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
58
+ end
59
+ end
60
+
@@ -0,0 +1,54 @@
1
+ require 'spec_helper'
2
+
3
+ module SpecSupport
4
+ class TestLocalizedEachValidator < LocalizedEachValidator
5
+ def valid?(_,_, v) v == 'foo' end
6
+ end
7
+ class FakeModel
8
+ extend ActiveModel::Translation
9
+ def errors() @errors ||= ActiveModel::Errors.new(self) end
10
+ def self.lookup_ancestors() [ self ] end
11
+ def read_attribute_for_validation(_) "mock" end
12
+ end
13
+ end
14
+
15
+ describe LocalizedEachValidator do
16
+ before :each do
17
+ @model = SpecSupport::FakeModel.new
18
+ end
19
+
20
+ describe ".error_key_prefix" do
21
+ it "should be the downcased name of the validator by default" do
22
+ SpecSupport::TestLocalizedEachValidator.error_key.should eql(:test_localized_each)
23
+ end
24
+
25
+ it "should be able to be set" do
26
+ SpecSupport::TestLocalizedEachValidator.error_key(:foo)
27
+ SpecSupport::TestLocalizedEachValidator.error_key.should eql(:foo)
28
+ SpecSupport::TestLocalizedEachValidator.instance_variable_set :@error_key, nil
29
+ end
30
+ end
31
+
32
+ describe ".validate_each" do
33
+ it "should do nothing if given nil and :allow_nil is set" do
34
+ SpecSupport::TestLocalizedEachValidator.new(attributes: :field, allow_nil: true).validate_each(@model, :field, nil)
35
+ @model.errors.should be_empty
36
+ end
37
+
38
+ it "should do nothing if given a blank value and :allow_blank is set" do
39
+ SpecSupport::TestLocalizedEachValidator.new(attributes: :field, allow_blank: true).validate_each(@model, :field, "")
40
+ @model.errors.should be_empty
41
+ end
42
+
43
+ it "should validate according to the #valid? method" do
44
+ SpecSupport::TestLocalizedEachValidator.new(attributes: :field).validate_each(@model, :field, "foo")
45
+ @model.errors.should be_empty
46
+ end
47
+
48
+ it "should add an error if the validation fails" do
49
+ SpecSupport::TestLocalizedEachValidator.new(attributes: :field).validate_each(@model, :field, "bar")
50
+ @model.errors[:field].should_not be_empty
51
+ @model.errors[:field].first.should include('test_localized_each')
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,10 @@
1
+ Bundler.require :default, :test
2
+
3
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+
6
+ require 'localized_each_validator'
7
+
8
+ RSpec.configure do |config|
9
+
10
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: localized_each_validator
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 0
9
+ version: 1.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Tim Morgan
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-10-31 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: activerecord
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 3
29
+ - 0
30
+ version: "3.0"
31
+ type: :runtime
32
+ prerelease: false
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activesupport
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 3
43
+ - 0
44
+ version: "3.0"
45
+ type: :runtime
46
+ prerelease: false
47
+ version_requirements: *id002
48
+ description: Adds an abstract EachValidator superclass that you can use to create localizable validations.
49
+ email: git@timothymorgan.info
50
+ executables: []
51
+
52
+ extensions: []
53
+
54
+ extra_rdoc_files:
55
+ - LICENSE
56
+ - README.textile
57
+ files:
58
+ - .document
59
+ - .gitignore
60
+ - .rspec
61
+ - Gemfile
62
+ - Gemfile.lock
63
+ - LICENSE
64
+ - README.textile
65
+ - Rakefile
66
+ - VERSION
67
+ - lib/localized_each_validator.rb
68
+ - localized_each_validator.gemspec
69
+ - spec/localized_each_validator_spec.rb
70
+ - spec/spec_helper.rb
71
+ has_rdoc: true
72
+ homepage: http://github.com/riscfuture/localized_each_validator
73
+ licenses: []
74
+
75
+ post_install_message:
76
+ rdoc_options:
77
+ - --charset=UTF-8
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 4590308378211320386
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ requirements: []
98
+
99
+ rubyforge_project:
100
+ rubygems_version: 1.3.7
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: Simple EachValidator with localization support
104
+ test_files:
105
+ - spec/localized_each_validator_spec.rb
106
+ - spec/spec_helper.rb