valle 0.0.2 → 0.0.3

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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.0.3 / 2012-12-13
2
+
3
+ * added primary_key type [Anton Kalyaev]
4
+ * added missing argument to respond_to? [Anton Kalyaev]
5
+ * config is now working [Anton Kalyaev]
6
+
1
7
  ## 0.0.2 / 2012-12-11
2
8
 
3
9
  * fixed inherited behavior; switched to valid? method (Fixes #3) [Anton Kalyaev]
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
1
  # Valle [![Build Status](https://secure.travis-ci.org/kaize/valle.png "Build Status")](http://travis-ci.org/kaize/valle) [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/kaize/valle)
2
2
 
3
- Valle adds validators to all the fields of your ActiveRecord models,
4
- so you should not think that string length or ID value exceeds the permissible limits.
3
+ Valle automatically sets minimum and maximum values for the fields of your
4
+ ActiveRecord model(s), so you shouldn't worry, that string length or ID
5
+ value will exceed the permissible DB limit for this type of field.
5
6
 
6
7
  For example, maximum length of the string in PostgreSQL is 255. We will
7
8
  setup the following validator for you, so you don't need to write it by
@@ -16,8 +17,12 @@ Example:
16
17
  PG::Error: ERROR: value "2147483648" is out of range for type integer
17
18
  : SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1
18
19
 
19
- There is a similar gem, called [validates_lengths_from_database](http://github.com/rubiety/validates_lengths_from_database). It solves only one part -
20
- applicable to strings. This gem is designed to work with all possible field types.
20
+ ### Supported ActiveRecord field types
21
+
22
+ - `:primary_key`
23
+ - `:integer`
24
+ - `:string`
25
+ - `:text`
21
26
 
22
27
  ## Installation
23
28
 
@@ -50,6 +55,11 @@ Also, you should be able to turn it off temporary by setting `enabled` option to
50
55
  config.enabled = false
51
56
  end
52
57
 
58
+ ## Alternatives
59
+
60
+ There is a similar gem, called [validates_lengths_from_database](http://github.com/rubiety/validates_lengths_from_database). It solves only one part -
61
+ applicable to strings. This gem is designed to work with all possible field types.
62
+
53
63
  ## Contributing
54
64
 
55
65
  1. Fork it
@@ -0,0 +1,79 @@
1
+ @disable-bundler
2
+ Feature:
3
+ In order to temporary disable Valle or apply it only to a subset of models,
4
+ as a user of Rails, I would like to use valle initializer options.
5
+
6
+ Background:
7
+ Given I successfully run `bundle exec rails new testapp --skip-bundle --skip-sprockets --skip-javascript`
8
+ And I cd to "testapp"
9
+ And I add "factory_girl_rails" as a dependency
10
+ And I add "valle" from this project as a dependency
11
+ And I successfully run `bundle install`
12
+ And I successfully run `bundle exec rails g model User name:string`
13
+ And I successfully run `bundle exec rake db:migrate --trace`
14
+
15
+ Scenario: Setting enabled option to false disable Valle
16
+ When I write to "config/initializers/valle.rb" with:
17
+ """
18
+ Valle.configure do |config|
19
+ config.enabled = false
20
+ end
21
+ """
22
+ And I write to "test/unit/user_test.rb" with:
23
+ """
24
+ require 'test_helper'
25
+
26
+ class UserTest < ActiveSupport::TestCase
27
+ test "should raise ActiveRecord::StatementInvalid error when name is too long" do
28
+ user = FactoryGirl.create(:user)
29
+ user.name = 'a' * 256
30
+
31
+ # SQLLite3 do not throw an ActiveRecord::StatementInvalid error
32
+ # so just check that record gets saved
33
+ assert user.save
34
+ end
35
+ end
36
+ """
37
+ When I successfully run `bundle exec rake test --trace`
38
+ Then the output should contain "1 tests, 1 assertions, 0 failures, 0 errors"
39
+
40
+ Scenario: Using the models option should limit the effect of the Valle to the models specified in the list
41
+ When I successfully run `bundle exec rails g model Post title:string`
42
+ And I successfully run `bundle exec rake db:migrate --trace`
43
+ And I write to "config/initializers/valle.rb" with:
44
+ """
45
+ Valle.configure do |config|
46
+ config.models = %w(Post)
47
+ end
48
+ """
49
+ And I write to "test/unit/user_test.rb" with:
50
+ """
51
+ require 'test_helper'
52
+
53
+ class UserTest < ActiveSupport::TestCase
54
+ test "should raise ActiveRecord::StatementInvalid error when name is too long" do
55
+ user = FactoryGirl.create(:user)
56
+ user.name = 'a' * 256
57
+
58
+ # SQLLite3 do not throw an ActiveRecord::StatementInvalid error
59
+ # so just check that record gets saved
60
+ assert user.save
61
+ end
62
+ end
63
+ """
64
+ And I write to "test/unit/post_test.rb" with:
65
+ """
66
+ require 'test_helper'
67
+
68
+ class PostTest < ActiveSupport::TestCase
69
+ test "should not save post when title is too long" do
70
+ post = FactoryGirl.create(:post)
71
+ post.title = 'a' * 256
72
+
73
+ assert !post.save
74
+ assert_equal 1, post.errors.count
75
+ end
76
+ end
77
+ """
78
+ When I successfully run `bundle exec rake test --trace`
79
+ Then the output should contain "2 tests, 3 assertions, 0 failures, 0 errors"
@@ -0,0 +1,28 @@
1
+ Feature: sets validations
2
+ Background:
3
+ Given I successfully run `bundle exec rails new testapp --skip-bundle --skip-sprockets --skip-javascript`
4
+ And I cd to "testapp"
5
+ And I add "factory_girl_rails" as a dependency
6
+ And I add "valle" from this project as a dependency
7
+ And I successfully run `bundle install`
8
+ And I successfully run `bundle exec rails g model User name:string`
9
+ And I successfully run `bundle exec rake db:migrate --trace`
10
+
11
+ @disable-bundler
12
+ Scenario: Using Valle automatically sets validations
13
+ When I write to "test/unit/user_test.rb" with:
14
+ """
15
+ require 'test_helper'
16
+
17
+ class UserTest < ActiveSupport::TestCase
18
+ test "should not save user when name is too long" do
19
+ user = FactoryGirl.create(:user)
20
+ user.name = 'a' * 256
21
+
22
+ assert !user.save
23
+ assert_equal 1, user.errors.count
24
+ end
25
+ end
26
+ """
27
+ When I successfully run `bundle exec rake test --trace`
28
+ Then the output should contain "1 tests, 2 assertions, 0 failures, 0 errors"
data/lib/valle.rb CHANGED
@@ -4,7 +4,7 @@ module Valle
4
4
  extend Configuration
5
5
 
6
6
  # core
7
- autoload :BoundsManager, 'valle/bounds_manager'
7
+ autoload :Manager, 'valle/manager'
8
8
  autoload :ValidationSetter, 'valle/validation_setter'
9
9
 
10
10
  # extensions
@@ -18,6 +18,32 @@ module Valle
18
18
 
19
19
  # hooks
20
20
  autoload :Hooks, 'valle/hooks'
21
+
22
+ class << self
23
+
24
+ ##
25
+ # Is gem enabled (true by default)
26
+ #
27
+ # @see Valle::Configuration
28
+ #
29
+ def enabled?
30
+ options[:enabled]
31
+ end
32
+
33
+ ##
34
+ # Can we process this model
35
+ #
36
+ # If the user turned gem on only for certain models,
37
+ # we need to check whether the model is in the list.
38
+ #
39
+ # @param [String] model_name the model name
40
+ # @see Valle::Configuration
41
+ #
42
+ def can_process_model?(model_name)
43
+ options[:models].nil? ||
44
+ options[:models].is_a?(Array) && options[:models].include?(model_name)
45
+ end
46
+ end
21
47
  end
22
48
 
23
49
  ## if not using Railtie, call `Valle::Hooks.init` directly
@@ -19,15 +19,12 @@ module Valle
19
19
  @original_column = original_column
20
20
  end
21
21
 
22
- ##
23
- # Proxy all methods missing to original column
24
- #
25
- def method_missing(method_name, *arguments, &block)
22
+ def method_missing(method_name, *arguments, &block) # :nodoc:
26
23
  @original_column.send(method_name, *arguments, &block)
27
24
  end
28
25
 
29
- def respond_to_method_missing?(method_name, include_private = false)
30
- @original_column.respond_to?(method_name)
26
+ def respond_to_method_missing?(method_name, include_private = false) # :nodoc:
27
+ @original_column.respond_to?(method_name, include_private)
31
28
  end
32
29
 
33
30
  ##
@@ -30,6 +30,7 @@ module Valle
30
30
  #
31
31
  def limit_in_bytes?(column)
32
32
  case column.type
33
+ when :primary_key; true
33
34
  # when :binary; true
34
35
  when :integer; true
35
36
  else false
data/lib/valle/hooks.rb CHANGED
@@ -8,7 +8,7 @@ module Valle
8
8
  #
9
9
  def init
10
10
  ActiveSupport.on_load(:active_record) do
11
- Valle::Hooks.extend_inherited_method
11
+ Valle::Hooks.extend_inherited_method if Valle.enabled?
12
12
  end
13
13
  end
14
14
 
@@ -20,7 +20,9 @@ module Valle
20
20
  class << self
21
21
  def inherited_with_valle_validators(subclass)
22
22
  inherited_without_valle_validators(subclass)
23
- Valle::Hooks.extend_ar_validations_valid_method(subclass)
23
+ if Valle.can_process_model?(subclass.model_name)
24
+ Valle::Hooks.extend_ar_validations_valid_method(subclass)
25
+ end
24
26
  end
25
27
 
26
28
  alias_method_chain :inherited, :valle_validators
@@ -41,7 +43,7 @@ module Valle
41
43
 
42
44
  subclass.class_eval do
43
45
  def valid_with_valle_validators?(context = nil)
44
- self.class.valle_validators ||= Valle::BoundsManager.add_validators(self.class)
46
+ self.class.valle_validators ||= Valle::Manager.add_validators(self.class)
45
47
  valid_without_valle_validators?(context)
46
48
  end
47
49
 
@@ -1,5 +1,5 @@
1
1
  module Valle
2
- class BoundsManager
2
+ class Manager
3
3
 
4
4
  class << self
5
5
 
data/lib/valle/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Valle
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
data/valle.gemspec CHANGED
@@ -4,8 +4,8 @@ require File.expand_path('../lib/valle/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ["Anton Kalyaev"]
6
6
  gem.email = ["anton.kalyaev@gmail.com"]
7
- gem.description = %q{Valle adds validators to all the fields of your ActiveRecord models, so you should not think that string length or ID value exceeds the permissible limits}
8
- gem.summary = %q{Set automatically the minimum and maximum values for your ActiveRecord model fields}
7
+ gem.description = %q{Valle automatically sets minimum and maximum values for the fields of your ActiveRecord model(s), so you shouldn't worry, that string length or ID value will exceed the permissible limit.}
8
+ gem.summary = %q{Built-in limit validations for your ActiveRecord model.}
9
9
  gem.homepage = "http://github.com/kaize/valle"
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: valle
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-11 00:00:00.000000000 Z
12
+ date: 2012-12-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -43,8 +43,9 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- description: Valle adds validators to all the fields of your ActiveRecord models,
47
- so you should not think that string length or ID value exceeds the permissible limits
46
+ description: Valle automatically sets minimum and maximum values for the fields of
47
+ your ActiveRecord model(s), so you shouldn't worry, that string length or ID value
48
+ will exceed the permissible limit.
48
49
  email:
49
50
  - anton.kalyaev@gmail.com
50
51
  executables: []
@@ -59,7 +60,8 @@ files:
59
60
  - LICENSE
60
61
  - README.md
61
62
  - Rakefile
62
- - features/adds_validators.feature
63
+ - features/configuration.feature
64
+ - features/sets_validations.feature
63
65
  - features/step_definitions/rails_steps.rb
64
66
  - features/support/env.rb
65
67
  - lib/valle.rb
@@ -68,9 +70,9 @@ files:
68
70
  - lib/valle/abstract_adapter/character_limited_column.rb
69
71
  - lib/valle/abstract_adapter/column_wrapper.rb
70
72
  - lib/valle/abstract_adapter/unlimited_column.rb
71
- - lib/valle/bounds_manager.rb
72
73
  - lib/valle/configuration.rb
73
74
  - lib/valle/hooks.rb
75
+ - lib/valle/manager.rb
74
76
  - lib/valle/railtie.rb
75
77
  - lib/valle/validation_setter.rb
76
78
  - lib/valle/version.rb
@@ -92,7 +94,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
94
  version: '0'
93
95
  segments:
94
96
  - 0
95
- hash: 1761133230881238709
97
+ hash: 1309560054681721189
96
98
  required_rubygems_version: !ruby/object:Gem::Requirement
97
99
  none: false
98
100
  requirements:
@@ -101,16 +103,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
103
  version: '0'
102
104
  segments:
103
105
  - 0
104
- hash: 1761133230881238709
106
+ hash: 1309560054681721189
105
107
  requirements: []
106
108
  rubyforge_project:
107
109
  rubygems_version: 1.8.24
108
110
  signing_key:
109
111
  specification_version: 3
110
- summary: Set automatically the minimum and maximum values for your ActiveRecord model
111
- fields
112
+ summary: Built-in limit validations for your ActiveRecord model.
112
113
  test_files:
113
- - features/adds_validators.feature
114
+ - features/configuration.feature
115
+ - features/sets_validations.feature
114
116
  - features/step_definitions/rails_steps.rb
115
117
  - features/support/env.rb
116
118
  - test/lib/abstract_adapter/character_limited_column_test.rb
@@ -1,52 +0,0 @@
1
- Feature: adds validators
2
- Background:
3
- When I successfully run `bundle exec rails new testapp`
4
- And I cd to "testapp"
5
- And I add "factory_girl_rails" as a dependency
6
- And I add "valle" from this project as a dependency
7
- When I successfully run `bundle install`
8
- And I write to "db/migrate/1_create_users.rb" with:
9
- """
10
- class CreateUsers < ActiveRecord::Migration
11
- def self.up
12
- create_table :users do |t|
13
- t.string :name
14
- t.text :bio
15
- t.integer :age
16
- end
17
- end
18
- end
19
- """
20
- When I successfully run `bundle exec rake db:migrate --trace`
21
- And I write to "app/models/user.rb" with:
22
- """
23
- class User < ActiveRecord::Base
24
- end
25
- """
26
-
27
- @disable-bundler
28
- Scenario: generate a rails 3 application and try out automatically injected validations
29
- When I write to "test/factories.rb" with:
30
- """
31
- FactoryGirl.define do
32
- factory :user do
33
- name "John"
34
- bio "A nice write up about this guy"
35
- age 22
36
- end
37
- end
38
- """
39
- When I write to "test/unit/user_test.rb" with:
40
- """
41
- require 'test_helper'
42
-
43
- class UserTest < ActiveSupport::TestCase
44
- test "should not save user when name is too long" do
45
- user = FactoryGirl.create(:user)
46
- user.name = 'a' * 256
47
- assert !user.save
48
- end
49
- end
50
- """
51
- When I successfully run `bundle exec rake test --trace`
52
- Then the output should contain "1 tests, 1 assertions, 0 failures, 0 errors"