roovo-dm-form_friendly_integer 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ v1.0.0. Initial Version
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+ (The MIT License)
2
+
3
+ Copyright (c) 2009 roovo
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ 'Software'), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
21
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
22
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23
+
@@ -0,0 +1,12 @@
1
+ autotest/discover.rb
2
+ CHANGELOG
3
+ lib/dm-form_friendly_integer.rb
4
+ lib/dm-types/form_friendly_integer.rb
5
+ LICENSE
6
+ Manifest
7
+ Rakefile
8
+ README.rdoc
9
+ spec/integration/form_friendly_integer_spec.rb
10
+ spec/spec.opts
11
+ spec/spec_helper.rb
12
+ tasks/spec.rake
@@ -0,0 +1,63 @@
1
+ = DataMapper::Types::FormFriendlyInteger
2
+
3
+ An adaptation of the DataMapper Integer type designed to work well with web forms.
4
+ It behaves in the same way as the standard DataMapper Integer type when writing
5
+ the property to the database but it doesn't immediately typecast the property unless
6
+ it is an integer string. The example below illustrates this.
7
+
8
+ The reason for wanting this behaviour is to ensure that if an invalid entry is
9
+ fed into a web form then when the form is re-displayed with it's errors, the
10
+ value in the form input will be as it was when it was entered.
11
+
12
+ == EXAMPLE:
13
+
14
+ model MyModel
15
+ include DataMapper::Resource
16
+
17
+ property :id, Serial
18
+ property :a_number, Integer
19
+ property :ff_number, FormFriendlyInteger
20
+ end
21
+
22
+ The +a_number+ property will behave as follows:
23
+
24
+ my_model = MyModel.new
25
+ my_model.a_number = 7
26
+ my_model.ff_number = 7
27
+ my_model.a_number # => 7
28
+ my_model.ff_number # => 7
29
+ my_model.save
30
+ Model.get(my_model.id).a_number # => 7
31
+ Model.get(my_model.id).ff_number # => 7
32
+
33
+ my_model = MyModel.new
34
+ my_model.a_number = -7
35
+ my_model.ff_number = -7
36
+ my_model.a_number # => -7
37
+ my_model.ff_number # => -7
38
+ my_model.save
39
+ Model.get(my_model.id).a_number # => -7
40
+ Model.get(my_model.id).ff_number # => -7
41
+
42
+ my_model = MyModel.new
43
+ my_model.a_number = "7.45"
44
+ my_model.ff_number = "7.45"
45
+ my_model.a_number # => 7
46
+ my_model.ff_number # => "7.45"
47
+ my_model.save
48
+ Model.get(my_model.id).a_number # => 7
49
+ Model.get(my_model.id).ff_number # => 7
50
+
51
+ my_model = MyModel.new
52
+ my_model.a_number = "not a number"
53
+ my_model.ff_number = "not a number"
54
+ my_model.a_number # => nil
55
+ my_model.ff_number # => "not a number"
56
+ my_model.save
57
+ Model.get(my_model.id).a_number # => 0
58
+ Model.get(my_model.id).ff_number # => 0
59
+
60
+ my_model = MyModel.new
61
+ my_model.a_number = [] # => nothing raised
62
+ my_model.ff_number = [] # => raise(ArgumentError, '+value+ must be nil or a String')
63
+
@@ -0,0 +1,18 @@
1
+ require 'pathname'
2
+ require 'rubygems'
3
+ require 'rake'
4
+ require 'echoe'
5
+
6
+ ROOT = Pathname(__FILE__).dirname.expand_path
7
+
8
+ Echoe.new('dm-form_friendly_integer') do |p|
9
+ p.description = "A DataMapper Integer type which behaves well on forms"
10
+ p.url = "http://github.com/roovo/dm-form_friendly_integer"
11
+ p.author = "roovo"
12
+ p.email = "roovo@roovoweb.com"
13
+ p.ignore_pattern = ["tmp/*", "script/*"]
14
+ p.development_dependencies = []
15
+ p.runtime_dependencies = ['dm-core']
16
+ end
17
+
18
+ Pathname.glob(ROOT.join('tasks/**/*.rb').to_s).each { |f| require f }
@@ -0,0 +1,4 @@
1
+ Autotest.add_discovery do
2
+ "rspec"
3
+ end
4
+
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{dm-form_friendly_integer}
5
+ s.version = "1.0.0"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["roovo"]
9
+ s.date = %q{2009-04-19}
10
+ s.description = %q{A DataMapper Integer type which behaves well on forms}
11
+ s.email = %q{roovo@roovoweb.com}
12
+ s.extra_rdoc_files = ["CHANGELOG", "lib/dm-form_friendly_integer.rb", "lib/dm-types/form_friendly_integer.rb", "LICENSE", "README.rdoc", "tasks/spec.rake"]
13
+ s.files = ["autotest/discover.rb", "CHANGELOG", "lib/dm-form_friendly_integer.rb", "lib/dm-types/form_friendly_integer.rb", "LICENSE", "Manifest", "Rakefile", "README.rdoc", "spec/integration/form_friendly_integer_spec.rb", "spec/spec.opts", "spec/spec_helper.rb", "tasks/spec.rake", "dm-form_friendly_integer.gemspec"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://github.com/roovo/dm-form_friendly_integer}
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Dm-form_friendly_integer", "--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{dm-form_friendly_integer}
19
+ s.rubygems_version = %q{1.3.2}
20
+ s.summary = %q{A DataMapper Integer type which behaves well on forms}
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
+ s.add_runtime_dependency(%q<dm-core>, [">= 0"])
28
+ else
29
+ s.add_dependency(%q<dm-core>, [">= 0"])
30
+ end
31
+ else
32
+ s.add_dependency(%q<dm-core>, [">= 0"])
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'pathname'
3
+
4
+ gem 'dm-core', '>=0.9.11'
5
+ require 'dm-core'
6
+
7
+ require Pathname(__FILE__).dirname.expand_path / 'dm-types' / 'form_friendly_integer'
@@ -0,0 +1,29 @@
1
+ module DataMapper
2
+ module Types
3
+ # An adaption of the Integer DataMapper type designed to work well on web forms
4
+ #
5
+ # See the README for details
6
+ class FormFriendlyInteger < DataMapper::Type
7
+ primitive Integer
8
+
9
+ def self.load(value, property) #:nodoc:
10
+ if value.is_a?(Integer) || value.nil?
11
+ value
12
+ else
13
+ raise ArgumentError.new("+value+ must be nil or a String")
14
+ end
15
+ end
16
+
17
+ def self.typecast(value, property) #:nodoc:
18
+ if value.kind_of?(String) && value =~ /\A[+-]?\d+\z/
19
+ value.to_i
20
+ elsif value.kind_of?(String)
21
+ value
22
+ else
23
+ load(value, property)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ describe DataMapper::Types::FormFriendlyInteger do
4
+ before(:all) do
5
+ class ::FormFriendlyIntegerTest
6
+ include DataMapper::Resource
7
+
8
+ property :id, Serial
9
+ property :some_number, FormFriendlyInteger
10
+ end
11
+ FormFriendlyIntegerTest.auto_migrate!
12
+ end
13
+
14
+ before(:each) do
15
+ FormFriendlyIntegerTest.all.destroy!
16
+ end
17
+
18
+ it 'should immediately typecast positive integer string values' do
19
+ FormFriendlyIntegerTest.new(:some_number => '345').some_number.should == 345
20
+ end
21
+
22
+ it 'should immediately typecast negative integer string values' do
23
+ FormFriendlyIntegerTest.new(:some_number => '-345').some_number.should == -345
24
+ end
25
+
26
+ it 'should NOT typecast decimal string values' do
27
+ FormFriendlyIntegerTest.new(:some_number => '345.1').some_number.should == '345.1'
28
+ end
29
+
30
+ it 'should NOT typecast non-numeric string values' do
31
+ FormFriendlyIntegerTest.new(:some_number => 'not a number').some_number.should == 'not a number'
32
+ end
33
+
34
+ it 'should raise an error for a non-string value' do
35
+ lambda { FormFriendlyIntegerTest.new(:some_number => []) }.should raise_error(ArgumentError, '+value+ must be nil or a String')
36
+ end
37
+
38
+ it "should save the number to the db with a positive integer string value" do
39
+ repository(:default) do
40
+ FormFriendlyIntegerTest.create(:some_number => '345')
41
+ end
42
+
43
+ FormFriendlyIntegerTest.first.some_number.should == 345
44
+ end
45
+
46
+ it "should save the number to the db with a negative integer string value" do
47
+ repository(:default) do
48
+ FormFriendlyIntegerTest.create(:some_number => '-345')
49
+ end
50
+
51
+ FormFriendlyIntegerTest.first.some_number.should == -345
52
+ end
53
+
54
+ it "should save the integer part of the string to the db with a decimal input string value" do
55
+ repository(:default) do
56
+ FormFriendlyIntegerTest.create(:some_number => '345.9')
57
+ end
58
+
59
+ FormFriendlyIntegerTest.first.some_number.should == 345
60
+ end
61
+
62
+ it "should save 0 to the db with a non-numeric input string value" do
63
+ repository(:default) do
64
+ FormFriendlyIntegerTest.create(:some_number => 'not a number')
65
+ end
66
+ FormFriendlyIntegerTest.first.some_number.should be_zero
67
+ end
68
+ end
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,18 @@
1
+ require 'pathname'
2
+ require 'rubygems'
3
+
4
+ gem 'rspec', '>=1.1.12'
5
+ require 'spec'
6
+
7
+ gem 'dm-core', '0.9.11'
8
+ require 'dm-core'
9
+
10
+ require Pathname(__FILE__).dirname.parent.expand_path + 'lib/dm-form_friendly_integer'
11
+
12
+ begin
13
+ DataMapper.setup(:default,'sqlite3::memory:')
14
+ Object.const_set('ADAPTER', :sqlite)
15
+ rescue Exception => e
16
+ Object.const_set('ADAPTER', nil)
17
+ warn "Could not load do_sqlite: #{e}"
18
+ end
File without changes
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: roovo-dm-form_friendly_integer
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - roovo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-19 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: dm-core
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: A DataMapper Integer type which behaves well on forms
26
+ email: roovo@roovoweb.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - CHANGELOG
33
+ - lib/dm-form_friendly_integer.rb
34
+ - lib/dm-types/form_friendly_integer.rb
35
+ - LICENSE
36
+ - README.rdoc
37
+ - tasks/spec.rake
38
+ files:
39
+ - autotest/discover.rb
40
+ - CHANGELOG
41
+ - lib/dm-form_friendly_integer.rb
42
+ - lib/dm-types/form_friendly_integer.rb
43
+ - LICENSE
44
+ - Manifest
45
+ - Rakefile
46
+ - README.rdoc
47
+ - spec/integration/form_friendly_integer_spec.rb
48
+ - spec/spec.opts
49
+ - spec/spec_helper.rb
50
+ - tasks/spec.rake
51
+ - dm-form_friendly_integer.gemspec
52
+ has_rdoc: true
53
+ homepage: http://github.com/roovo/dm-form_friendly_integer
54
+ post_install_message:
55
+ rdoc_options:
56
+ - --line-numbers
57
+ - --inline-source
58
+ - --title
59
+ - Dm-form_friendly_integer
60
+ - --main
61
+ - README.rdoc
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "1.2"
75
+ version:
76
+ requirements: []
77
+
78
+ rubyforge_project: dm-form_friendly_integer
79
+ rubygems_version: 1.2.0
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: A DataMapper Integer type which behaves well on forms
83
+ test_files: []
84
+