jm81-dm-address 0.4.0 → 0.5.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/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gem 'dm-core', '~> 1.0.2'
4
+ gem 'dm-migrations', '~> 1.0.2'
5
+ gem 'dm-timestamps', '~> 1.0.2'
6
+ gem 'dm-types', '~> 1.0.2'
7
+ gem 'dm-validations', '~> 1.0.2'
data/Gemfile.lock ADDED
@@ -0,0 +1,34 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.2.0)
5
+ dm-core (1.0.2)
6
+ addressable (~> 2.2)
7
+ extlib (~> 0.9.15)
8
+ dm-migrations (1.0.2)
9
+ dm-core (~> 1.0.2)
10
+ dm-timestamps (1.0.2)
11
+ dm-core (~> 1.0.2)
12
+ dm-types (1.0.2)
13
+ dm-core (~> 1.0.2)
14
+ fastercsv (~> 1.5.3)
15
+ json_pure (~> 1.4)
16
+ stringex (~> 1.1.0)
17
+ uuidtools (~> 2.1.1)
18
+ dm-validations (1.0.2)
19
+ dm-core (~> 1.0.2)
20
+ extlib (0.9.15)
21
+ fastercsv (1.5.3)
22
+ json_pure (1.4.6)
23
+ stringex (1.1.0)
24
+ uuidtools (2.1.1)
25
+
26
+ PLATFORMS
27
+ ruby
28
+
29
+ DEPENDENCIES
30
+ dm-core (~> 1.0.2)
31
+ dm-migrations (~> 1.0.2)
32
+ dm-timestamps (~> 1.0.2)
33
+ dm-types (~> 1.0.2)
34
+ dm-validations (~> 1.0.2)
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
+ require File.join(File.dirname(__FILE__), 'lib', 'dm-address', 'version')
3
4
 
4
5
  begin
5
6
  require 'jeweler'
6
7
  Jeweler::Tasks.new do |gem|
7
8
  gem.name = "jm81-dm-address"
9
+ gem.version = DataMapper::Address::VERSION.dup
8
10
  gem.summary = %Q{Add address related fields to a DataMapper model}
9
11
  gem.description = <<EOF
10
12
  Add address fields to a DataMapper model. This includes optional validations,
@@ -13,9 +15,11 @@ EOF
13
15
  gem.email = "jmorgan@morgancreative.net"
14
16
  gem.homepage = "http://github.com/jm81/dm-address"
15
17
  gem.authors = ["Jared Morgan"]
16
- gem.add_dependency('dm-core', '>= 0.10.0')
17
- gem.add_dependency('dm-types', '>= 0.10.0')
18
- gem.add_dependency('dm-validations', '>= 0.10.0')
18
+ gem.add_dependency('dm-core', '~> 1.0.0')
19
+ gem.add_dependency('dm-timestamps', '~> 1.0.0')
20
+ gem.add_dependency('dm-types', '~> 1.0.0')
21
+ gem.add_dependency('dm-validations', '~> 1.0.0')
22
+ gem.add_development_dependency('dm-migrations', '~> 1.0.0')
19
23
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
20
24
  end
21
25
  Jeweler::GemcutterTasks.new
data/TODO ADDED
@@ -0,0 +1,3 @@
1
+ Add :except option to address_properties
2
+ (Usually a property can be ignored, but if this model belongs_to a model named,
3
+ e.g. Company, problems ensue. See http://datamapper.lighthouseapp.com/projects/20609/tickets/1057)
@@ -5,32 +5,36 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{jm81-dm-address}
8
- s.version = "0.4.0"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jared Morgan"]
12
- s.date = %q{2009-11-29}
12
+ s.date = %q{2010-09-09}
13
13
  s.description = %q{Add address fields to a DataMapper model. This includes optional validations,
14
14
  and additional DM types for ZipCode and PhoneNumber.
15
15
  }
16
16
  s.email = %q{jmorgan@morgancreative.net}
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE",
19
- "README.rdoc"
19
+ "README.rdoc",
20
+ "TODO"
20
21
  ]
21
22
  s.files = [
22
23
  ".document",
23
24
  ".gitignore",
25
+ "Gemfile",
26
+ "Gemfile.lock",
24
27
  "LICENSE",
25
28
  "README.rdoc",
26
29
  "Rakefile",
27
- "VERSION",
30
+ "TODO",
28
31
  "jm81-dm-address.gemspec",
29
32
  "lib/dm-address.rb",
30
33
  "lib/dm-address/phone_number.rb",
31
34
  "lib/dm-address/polymorphic.rb",
32
35
  "lib/dm-address/preferred.rb",
33
36
  "lib/dm-address/us.rb",
37
+ "lib/dm-address/version.rb",
34
38
  "lib/dm-address/zip_code.rb",
35
39
  "lib/dm-types/phone_number.rb",
36
40
  "lib/dm-types/zip_code.rb",
@@ -45,18 +49,20 @@ and additional DM types for ZipCode and PhoneNumber.
45
49
  "spec/dm-address_spec.rb",
46
50
  "spec/dm-types/phone_number_spec.rb",
47
51
  "spec/dm-types/zip_code_spec.rb",
52
+ "spec/fixtures/types-fixture.rb",
48
53
  "spec/spec_helper.rb"
49
54
  ]
50
55
  s.homepage = %q{http://github.com/jm81/dm-address}
51
56
  s.rdoc_options = ["--charset=UTF-8"]
52
57
  s.require_paths = ["lib"]
53
- s.rubygems_version = %q{1.3.5}
58
+ s.rubygems_version = %q{1.3.7}
54
59
  s.summary = %q{Add address related fields to a DataMapper model}
55
60
  s.test_files = [
56
61
  "spec/spec_helper.rb",
57
62
  "spec/dm-address_spec.rb",
58
63
  "spec/dm-types/phone_number_spec.rb",
59
64
  "spec/dm-types/zip_code_spec.rb",
65
+ "spec/fixtures/types-fixture.rb",
60
66
  "spec/dm-address/us_spec.rb",
61
67
  "spec/dm-address/preferred_spec.rb",
62
68
  "spec/dm-address/polymorphic_spec.rb",
@@ -69,19 +75,25 @@ and additional DM types for ZipCode and PhoneNumber.
69
75
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
70
76
  s.specification_version = 3
71
77
 
72
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
73
- s.add_runtime_dependency(%q<dm-core>, [">= 0.10.0"])
74
- s.add_runtime_dependency(%q<dm-types>, [">= 0.10.0"])
75
- s.add_runtime_dependency(%q<dm-validations>, [">= 0.10.0"])
78
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
79
+ s.add_runtime_dependency(%q<dm-core>, ["~> 1.0.0"])
80
+ s.add_runtime_dependency(%q<dm-timestamps>, ["~> 1.0.0"])
81
+ s.add_runtime_dependency(%q<dm-types>, ["~> 1.0.0"])
82
+ s.add_runtime_dependency(%q<dm-validations>, ["~> 1.0.0"])
83
+ s.add_development_dependency(%q<dm-migrations>, ["~> 1.0.0"])
76
84
  else
77
- s.add_dependency(%q<dm-core>, [">= 0.10.0"])
78
- s.add_dependency(%q<dm-types>, [">= 0.10.0"])
79
- s.add_dependency(%q<dm-validations>, [">= 0.10.0"])
85
+ s.add_dependency(%q<dm-core>, ["~> 1.0.0"])
86
+ s.add_dependency(%q<dm-timestamps>, ["~> 1.0.0"])
87
+ s.add_dependency(%q<dm-types>, ["~> 1.0.0"])
88
+ s.add_dependency(%q<dm-validations>, ["~> 1.0.0"])
89
+ s.add_dependency(%q<dm-migrations>, ["~> 1.0.0"])
80
90
  end
81
91
  else
82
- s.add_dependency(%q<dm-core>, [">= 0.10.0"])
83
- s.add_dependency(%q<dm-types>, [">= 0.10.0"])
84
- s.add_dependency(%q<dm-validations>, [">= 0.10.0"])
92
+ s.add_dependency(%q<dm-core>, ["~> 1.0.0"])
93
+ s.add_dependency(%q<dm-timestamps>, ["~> 1.0.0"])
94
+ s.add_dependency(%q<dm-types>, ["~> 1.0.0"])
95
+ s.add_dependency(%q<dm-validations>, ["~> 1.0.0"])
96
+ s.add_dependency(%q<dm-migrations>, ["~> 1.0.0"])
85
97
  end
86
98
  end
87
99
 
data/lib/dm-address.rb CHANGED
@@ -1,16 +1,15 @@
1
1
  require 'dm-core'
2
+ require 'dm-timestamps'
2
3
  require 'dm-types'
3
4
  require 'dm-validations'
4
5
 
5
6
  # Require dm-address files
6
- %w{ phone_number zip_code polymorphic preferred us }.each do |file|
7
+ %w{ phone_number zip_code polymorphic preferred us version }.each do |file|
7
8
  require 'dm-address/' + file
8
9
  end
9
10
 
10
11
  module DataMapper
11
12
  module Address
12
- VERSION = '0.4.0'
13
-
14
13
  DEFAULTS = {
15
14
  :phone_format => PhoneNumber::DEFAULT_FORMAT.dup,
16
15
  :include_country => false,
@@ -5,21 +5,19 @@ module DataMapper
5
5
 
6
6
  # Remove all non-digits from given phone number
7
7
  def initialize(s)
8
- super((s || '').gsub(/\D+/, ''))
8
+ super((s || '').to_str.gsub(/\D+/, ''))
9
9
  end
10
10
 
11
- alias base to_s
12
-
13
11
  # %A is area code, %P is prefix, %S is last 4 digits (suffix)
14
12
  # Default is "(%A) %P-%S" -> (###) ###-####
15
13
  def to_s(format = nil)
16
14
  unless format
17
15
  format = DataMapper::Address.config[:phone_format] || DEFAULT_FORMAT
18
16
  end
19
- return '' if base.nil? || base.empty?
20
- format.gsub(/\%A/, base[0..2]).
21
- gsub(/\%P/, base[3..5]).
22
- gsub(/\%S/, base[6..9])
17
+ return '' if to_str.empty?
18
+ format.gsub(/\%A/, to_str[0..2]).
19
+ gsub(/\%P/, to_str[3..5]).
20
+ gsub(/\%S/, to_str[6..9])
23
21
  end
24
22
  end # class PhoneNumber
25
23
  end # module Address
data/lib/dm-address/us.rb CHANGED
@@ -25,23 +25,23 @@ module DataMapper
25
25
  DEFAULT_REQUIRED_FIELDS
26
26
 
27
27
  [
28
- [:id, DataMapper::Types::Serial],
28
+ [:id, DataMapper::Property::Serial],
29
29
  [:name, String, {:length => 100}],
30
30
  [:company, String, {:length => 100}],
31
31
  [:street, String, {:length => 100}],
32
32
  [:street_2, String],
33
33
  [:city, String, {:length => 100}],
34
34
  [:state, String, {:length => 2}],
35
- [:postal_code, DataMapper::Types::ZipCode, {:format => :zip_code}],
36
- [:country, String, {:nullable => false, :length => 50, :default => 'USA'}],
37
- [:phone, DataMapper::Types::PhoneNumber, {:format => :phone_number}],
35
+ [:postal_code, DataMapper::Property::ZipCode, {:format => :zip_code}],
36
+ [:country, String, {:required => false, :length => 50, :default => 'USA'}],
37
+ [:phone, DataMapper::Property::PhoneNumber, {:format => :phone_number}],
38
38
  [:created_at, DateTime],
39
39
  [:updated_at, DateTime]
40
40
  ].each do |args|
41
41
  unless self.properties.named?(args[0])
42
42
  args[0] = "#{options[:prefix]}#{args[0]}" if options[:prefix]
43
43
  args[2] ||= {}
44
- args[2][:nullable] = !reqs.include?(args[0])
44
+ args[2][:required] = reqs.include?(args[0])
45
45
  self.property(*args)
46
46
  end
47
47
  end
@@ -62,9 +62,9 @@ module DataMapper
62
62
  value = attribute_get(fld)
63
63
  fields << value unless value.blank?
64
64
  end
65
- fields << "#{self.city}, #{self.state} #{self.postal_code.to_s}"
65
+ fields << "#{self.city}, #{self.state} #{ZipCode.new(self.postal_code).to_s}"
66
66
  fields << self.country if include_country
67
- fields << self.phone.to_s if include_phone && !self.phone.blank?
67
+ fields << PhoneNumber.new(self.phone).to_s if include_phone && !self.phone.blank?
68
68
  fields.join(newline)
69
69
  end
70
70
 
@@ -0,0 +1,5 @@
1
+ module DataMapper
2
+ module Address
3
+ VERSION = '0.5.0'.freeze
4
+ end
5
+ end
@@ -1,18 +1,16 @@
1
1
  module DataMapper
2
2
  module Address
3
- class ZipCode < String
3
+ class ZipCode < String
4
4
  # Remove all non-digits from given zip code
5
5
  def initialize(s)
6
- super((s || '').gsub(/\D+/, ''))
6
+ super((s || '').to_str.gsub(/\D+/, ''))
7
7
  end
8
-
9
- alias base to_s
10
-
8
+
11
9
  # ZipCode formatted as #####-#### or #####
12
10
  def to_s(format = nil)
13
- return '' if base.nil? || base.empty?
14
- return base if base.length == 5
15
- "#{base[0..4]}-#{base[5..8]}"
11
+ return '' if to_str.empty?
12
+ return to_str if to_str.length == 5
13
+ "#{to_str[0..4]}-#{to_str[5..8]}"
16
14
  end
17
15
  end # class ZipCode
18
16
  end # module Address
@@ -1,28 +1,27 @@
1
1
  module DataMapper
2
- module Types
3
- class PhoneNumber < DataMapper::Type
4
- primitive String
5
-
6
- def self.load(value, property)
7
- if value.nil?
8
- nil
9
- elsif value.is_a?(String)
10
- DataMapper::Address::PhoneNumber.new(value)
11
- else
12
- raise ArgumentError.new("+value+ must be nil or a String")
13
- end
2
+ class Property
3
+ class PhoneNumber < String
4
+ def primitive?(value)
5
+ super || value.kind_of?(::DataMapper::Address::PhoneNumber)
14
6
  end
15
-
16
- def self.dump(value, property)
17
- return nil if value.nil?
18
- value.base
7
+
8
+ def load(value)
9
+ case value
10
+ when ::DataMapper::Address::PhoneNumber then value
11
+ when ::String then DataMapper::Address::PhoneNumber.new(value)
12
+ else
13
+ nil
14
+ end
19
15
  end
20
16
 
21
- def self.typecast(value, property)
22
- value.kind_of?(DataMapper::Address::PhoneNumber) ?
23
- value :
24
- load(value, property)
17
+ def dump(value)
18
+ case value
19
+ when ::DataMapper::Address::PhoneNumber then value.to_str
20
+ when ::String then value
21
+ else
22
+ nil
23
+ end
25
24
  end
26
25
  end # class PhoneNumber
27
- end # module Types
26
+ end # module Property
28
27
  end # module DataMapper
@@ -1,28 +1,27 @@
1
1
  module DataMapper
2
- module Types
3
- class ZipCode < DataMapper::Type
4
- primitive String
5
-
6
- def self.load(value, property)
7
- if value.nil?
8
- nil
9
- elsif value.is_a?(String)
10
- DataMapper::Address::ZipCode.new(value)
11
- else
12
- raise ArgumentError.new("+value+ must be nil or a String")
13
- end
2
+ class Property
3
+ class ZipCode < String
4
+ def primitive?(value)
5
+ super || value.kind_of?(::DataMapper::Address::ZipCode)
14
6
  end
15
-
16
- def self.dump(value, property)
17
- return nil if value.nil?
18
- value.base
7
+
8
+ def load(value)
9
+ case value
10
+ when ::DataMapper::Address::ZipCode then value
11
+ when ::String then DataMapper::Address::ZipCode.new(value)
12
+ else
13
+ nil
14
+ end
19
15
  end
20
-
21
- def self.typecast(value, property)
22
- value.kind_of?(DataMapper::Address::ZipCode) ?
23
- value :
24
- load(value, property)
16
+
17
+ def dump(value)
18
+ case value
19
+ when ::DataMapper::Address::ZipCode then value.to_str
20
+ when ::String then value
21
+ else
22
+ nil
23
+ end
25
24
  end
26
25
  end # class ZipCode
27
- end # module Types
26
+ end # module Property
28
27
  end # module DataMapper
@@ -6,7 +6,7 @@ module DataMapper
6
6
  def self.included(base)
7
7
  DataMapper::Validate::FormatValidator::FORMATS.merge!(
8
8
  :phone_number => [
9
- Proc.new { |ph| ph.blank? || ph.length == 10 },
9
+ Proc.new { |ph| ph.blank? || ph.gsub(/\D+/, '').length == 10 },
10
10
  lambda { |field, value| '%s should be 10 digits (include area code)'.t(value) }
11
11
  ]
12
12
  )
@@ -6,7 +6,7 @@ module DataMapper
6
6
  def self.included(base)
7
7
  DataMapper::Validate::FormatValidator::FORMATS.merge!(
8
8
  :zip_code => [
9
- Proc.new { |zc| zc.blank? || zc.length == 5 || zc.length == 9 },
9
+ Proc.new { |zc| zc.blank? || zc.gsub(/\D+/, '').length == 5 || zc.gsub(/\D+/, '').length == 9 },
10
10
  lambda { |field, value| '%s should be 5 digits or 9 digits (ZIP+4)'.t(value) }
11
11
  ]
12
12
  )
@@ -12,10 +12,10 @@ describe DataMapper::Address::PhoneNumber do
12
12
  end
13
13
  end
14
14
 
15
- describe '#base' do
15
+ describe '#to_str' do
16
16
  it 'should not be formatted (digits only)' do
17
- @klass.new('405-555-5555').base.should == '4055555555'
18
- @klass.new('(405) 555.5556').base.should == '4055555556'
17
+ @klass.new('405-555-5555').to_str.should == '4055555555'
18
+ @klass.new('(405) 555.5556').to_str.should == '4055555556'
19
19
  end
20
20
  end
21
21
 
@@ -1,5 +1,5 @@
1
1
  DataMapper.setup(:default, 'sqlite3::memory:')
2
- require 'dm-timestamps' # Only needed to make #created_at and #updated_at auto-update
2
+ require 'dm-migrations'
3
3
 
4
4
  module DataMapper::Address::Spec
5
5
  class US
@@ -75,27 +75,37 @@ describe DataMapper::Address::US do
75
75
  end
76
76
 
77
77
  describe '#postal_code=' do
78
+ before(:each) { @address.save }
79
+
78
80
  it 'should strip out non-digits' do
79
- @address.postal_code = '12345-6789'
81
+ @address.update(:postal_code => '12345-6789')
82
+ @address.reload
80
83
  @address.postal_code.should == '123456789'
81
- @address.postal_code = '(12345 -67s80z'
84
+
85
+ @address.update(:postal_code => '(12345 -67s80z')
86
+ @address.reload
82
87
  @address.postal_code.should == '123456780'
83
88
  end
84
89
  end
85
90
 
86
91
  describe '#postal_code.to_s' do
92
+ before(:each) { @address.save }
93
+
87
94
  it 'should return empty String if #postal_code is blank' do
88
- @address.postal_code = ''
95
+ @address.update!(:postal_code => '')
96
+ @address.reload
89
97
  @address.postal_code.to_s.should == ''
90
98
  end
91
99
 
92
100
  it 'should format 5-digit code as #####' do
93
- @address.postal_code = '12345'
101
+ @address.update(:postal_code => '12345')
102
+ @address.reload
94
103
  @address.postal_code.to_s.should == '12345'
95
104
  end
96
105
 
97
106
  it 'should format 9-digit code as #####-####' do
98
- @address.postal_code = '123456789'
107
+ @address.update(:postal_code => '123456789')
108
+ @address.reload
99
109
  @address.postal_code.to_s.should == '12345-6789'
100
110
  end
101
111
  end
@@ -123,22 +133,31 @@ describe DataMapper::Address::US do
123
133
  end
124
134
 
125
135
  describe '#phone=' do
136
+ before(:each) { @address.save }
137
+
126
138
  it 'should strip out non-digits' do
127
- @address.phone = '405-555-5555'
128
- @address.phone.should == '4055555555'
129
- @address.phone = '(405) 555.5556'
130
- @address.phone.should == '4055555556'
139
+ @address.update(:phone => '405-555-5555')
140
+ @address.reload
141
+ @address.phone.to_str.should == '4055555555'
142
+
143
+ @address.update(:phone => '(405) 555.5556')
144
+ @address.reload
145
+ @address.phone.to_str.should == '4055555556'
131
146
  end
132
147
  end
133
148
 
134
149
  describe '#phone.to_s' do
150
+ before(:each) { @address.save }
151
+
135
152
  it 'should return empty String if #phone is blank' do
136
- @address.phone = ''
153
+ @address.update(:phone => '')
154
+ @address.reload
137
155
  @address.phone.to_s.should == ''
138
156
  end
139
157
 
140
158
  it 'should format as (###) ###-####' do
141
- @address.phone = '1234567899'
159
+ @address.update(:phone => '1234567899')
160
+ @address.reload
142
161
  @address.phone.to_s.should == '(123) 456-7899'
143
162
  end
144
163
  end
@@ -12,10 +12,10 @@ describe DataMapper::Address::ZipCode do
12
12
  end
13
13
  end
14
14
 
15
- describe '#base' do
15
+ describe '#to_str' do
16
16
  it 'should not be formatted (digits only)' do
17
- @klass.new('12345-6789').base.should == '123456789'
18
- @klass.new('(12345 -67s80z').base.should == '123456780'
17
+ @klass.new('12345-6789').to_str.should == '123456789'
18
+ @klass.new('(12345 -67s80z').to_str.should == '123456780'
19
19
  end
20
20
  end
21
21
 
@@ -1,9 +1,10 @@
1
1
  require 'spec_helper'
2
+ require 'fixtures/types-fixture'
2
3
 
3
- describe DataMapper::Types::PhoneNumber do
4
-
4
+ describe DataMapper::Property::PhoneNumber do
5
+ subject { TypesFixture.properties[:phone] }
6
+
5
7
  before(:each) do
6
- @klass = DataMapper::Types::PhoneNumber
7
8
  @phone_str = "(405) 555-1234"
8
9
  @phone_dump = "4055551234"
9
10
  @phone = DataMapper::Address::PhoneNumber.new(@phone_str)
@@ -11,46 +12,33 @@ describe DataMapper::Types::PhoneNumber do
11
12
 
12
13
  describe ".dump" do
13
14
  it "should return the Phone Number as a digits-only string" do
14
- @klass.dump(@phone, :property).should == @phone_dump
15
+ subject.dump(@phone).should == @phone_dump
15
16
  end
16
17
 
17
18
  it "should return nil if the string is nil" do
18
- @klass.dump(nil, :property).should be_nil
19
+ subject.dump(nil).should be_nil
19
20
  end
20
21
 
21
22
  it "should return an empty String if the Phone Number is empty" do
22
- @klass.dump(DataMapper::Address::PhoneNumber.new(''), :property).should == ""
23
+ subject.dump(DataMapper::Address::PhoneNumber.new('')).should == ""
23
24
  end
24
25
  end
25
26
 
26
27
  describe ".load" do
27
28
  it "should return the string as PhoneNumber" do
28
- @klass.load(@phone_str, :property).should == @phone
29
+ subject.load(@phone_str).should == @phone
29
30
  end
30
31
 
31
32
  it "should return nil if given nil" do
32
- @klass.load(nil, :property).should be_nil
33
+ subject.load(nil).should be_nil
33
34
  end
34
35
 
35
36
  it "should return an empty Phone Number if given an empty string" do
36
- @klass.load("", :property).should == DataMapper::Address::PhoneNumber.new('')
37
- end
38
-
39
- it 'should raise an ArgumentError if given something else' do
40
- lambda {
41
- @klass.load([], :property)
42
- }.should raise_error(ArgumentError, '+value+ must be nil or a String')
43
- end
44
- end
45
-
46
- describe '.typecast' do
47
- it 'should do nothing if an PhoneNumber is provided' do
48
- @klass.typecast(@phone, :property).should == @phone
37
+ subject.load('').should == DataMapper::Address::PhoneNumber.new('')
49
38
  end
50
39
 
51
- it 'should defer to .load if a string is provided' do
52
- @klass.should_receive(:load).with(@phone_str, :property)
53
- @klass.typecast(@phone_str, :property)
40
+ it 'should return nil if given something else' do
41
+ subject.load([]).should be(nil)
54
42
  end
55
43
  end
56
44
  end
@@ -1,56 +1,44 @@
1
1
  require 'spec_helper'
2
+ require 'fixtures/types-fixture'
2
3
 
3
- describe DataMapper::Types::ZipCode do
4
+ describe DataMapper::Property::ZipCode do
5
+ subject { TypesFixture.properties[:zip] }
4
6
 
5
7
  before(:each) do
6
- @klass = DataMapper::Types::ZipCode
7
8
  @zip_str = "12345-6789"
8
9
  @zip_dump = "123456789"
9
10
  @zip = DataMapper::Address::ZipCode.new(@zip_str)
10
11
  end
11
-
12
+
12
13
  describe ".dump" do
13
14
  it "should return the Zip Number as a digits-only string" do
14
- @klass.dump(@zip, :property).should == @zip_dump
15
+ subject.dump(@zip).should == @zip_dump
15
16
  end
16
-
17
+
17
18
  it "should return nil if the string is nil" do
18
- @klass.dump(nil, :property).should be_nil
19
+ subject.dump(nil).should be_nil
19
20
  end
20
-
21
+
21
22
  it "should return an empty String if the Zip Number is empty" do
22
- @klass.dump(DataMapper::Address::ZipCode.new(''), :property).should == ""
23
+ subject.dump(DataMapper::Address::ZipCode.new('')).should == ""
23
24
  end
24
25
  end
25
-
26
+
26
27
  describe ".load" do
27
28
  it "should return the string as ZipCode" do
28
- @klass.load(@zip_str, :property).should == @zip
29
+ subject.load(@zip_str).should == @zip
29
30
  end
30
-
31
+
31
32
  it "should return nil if given nil" do
32
- @klass.load(nil, :property).should be_nil
33
+ subject.load(nil).should be_nil
33
34
  end
34
-
35
+
35
36
  it "should return an empty Zip Code if given an empty string" do
36
- @klass.load("", :property).should == DataMapper::Address::ZipCode.new('')
37
- end
38
-
39
- it 'should raise an ArgumentError if given something else' do
40
- lambda {
41
- @klass.load([], :property)
42
- }.should raise_error(ArgumentError, '+value+ must be nil or a String')
37
+ subject.load("").should == DataMapper::Address::ZipCode.new('')
43
38
  end
44
- end
45
-
46
- describe '.typecast' do
47
- it 'should do nothing if an ZipCode is provided' do
48
- @klass.typecast(@zip, :property).should == @zip
49
- end
50
-
51
- it 'should defer to .load if a string is provided' do
52
- @klass.should_receive(:load).with(@zip_str, :property)
53
- @klass.typecast(@zip_str, :property)
39
+
40
+ it 'should return nil if given something else' do
41
+ subject.load([]).should be(nil)
54
42
  end
55
43
  end
56
44
  end
@@ -0,0 +1,7 @@
1
+ class TypesFixture
2
+ include DataMapper::Resource
3
+
4
+ property :id, Serial
5
+ property :phone, PhoneNumber
6
+ property :zip, ZipCode
7
+ end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jm81-dm-address
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ hash: 11
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 0
10
+ version: 0.5.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Jared Morgan
@@ -9,39 +15,89 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2009-11-29 00:00:00 -06:00
18
+ date: 2010-09-09 00:00:00 -05:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: dm-core
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 1
32
+ - 0
33
+ - 0
34
+ version: 1.0.0
17
35
  type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: dm-timestamps
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
20
42
  requirements:
21
- - - ">="
43
+ - - ~>
22
44
  - !ruby/object:Gem::Version
23
- version: 0.10.0
24
- version:
45
+ hash: 23
46
+ segments:
47
+ - 1
48
+ - 0
49
+ - 0
50
+ version: 1.0.0
51
+ type: :runtime
52
+ version_requirements: *id002
25
53
  - !ruby/object:Gem::Dependency
26
54
  name: dm-types
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
30
58
  requirements:
31
- - - ">="
59
+ - - ~>
32
60
  - !ruby/object:Gem::Version
33
- version: 0.10.0
34
- version:
61
+ hash: 23
62
+ segments:
63
+ - 1
64
+ - 0
65
+ - 0
66
+ version: 1.0.0
67
+ type: :runtime
68
+ version_requirements: *id003
35
69
  - !ruby/object:Gem::Dependency
36
70
  name: dm-validations
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 23
78
+ segments:
79
+ - 1
80
+ - 0
81
+ - 0
82
+ version: 1.0.0
37
83
  type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
84
+ version_requirements: *id004
85
+ - !ruby/object:Gem::Dependency
86
+ name: dm-migrations
87
+ prerelease: false
88
+ requirement: &id005 !ruby/object:Gem::Requirement
89
+ none: false
40
90
  requirements:
41
- - - ">="
91
+ - - ~>
42
92
  - !ruby/object:Gem::Version
43
- version: 0.10.0
44
- version:
93
+ hash: 23
94
+ segments:
95
+ - 1
96
+ - 0
97
+ - 0
98
+ version: 1.0.0
99
+ type: :development
100
+ version_requirements: *id005
45
101
  description: |
46
102
  Add address fields to a DataMapper model. This includes optional validations,
47
103
  and additional DM types for ZipCode and PhoneNumber.
@@ -54,19 +110,23 @@ extensions: []
54
110
  extra_rdoc_files:
55
111
  - LICENSE
56
112
  - README.rdoc
113
+ - TODO
57
114
  files:
58
115
  - .document
59
116
  - .gitignore
117
+ - Gemfile
118
+ - Gemfile.lock
60
119
  - LICENSE
61
120
  - README.rdoc
62
121
  - Rakefile
63
- - VERSION
122
+ - TODO
64
123
  - jm81-dm-address.gemspec
65
124
  - lib/dm-address.rb
66
125
  - lib/dm-address/phone_number.rb
67
126
  - lib/dm-address/polymorphic.rb
68
127
  - lib/dm-address/preferred.rb
69
128
  - lib/dm-address/us.rb
129
+ - lib/dm-address/version.rb
70
130
  - lib/dm-address/zip_code.rb
71
131
  - lib/dm-types/phone_number.rb
72
132
  - lib/dm-types/zip_code.rb
@@ -81,6 +141,7 @@ files:
81
141
  - spec/dm-address_spec.rb
82
142
  - spec/dm-types/phone_number_spec.rb
83
143
  - spec/dm-types/zip_code_spec.rb
144
+ - spec/fixtures/types-fixture.rb
84
145
  - spec/spec_helper.rb
85
146
  has_rdoc: true
86
147
  homepage: http://github.com/jm81/dm-address
@@ -92,21 +153,27 @@ rdoc_options:
92
153
  require_paths:
93
154
  - lib
94
155
  required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
95
157
  requirements:
96
158
  - - ">="
97
159
  - !ruby/object:Gem::Version
160
+ hash: 3
161
+ segments:
162
+ - 0
98
163
  version: "0"
99
- version:
100
164
  required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
101
166
  requirements:
102
167
  - - ">="
103
168
  - !ruby/object:Gem::Version
169
+ hash: 3
170
+ segments:
171
+ - 0
104
172
  version: "0"
105
- version:
106
173
  requirements: []
107
174
 
108
175
  rubyforge_project:
109
- rubygems_version: 1.3.5
176
+ rubygems_version: 1.3.7
110
177
  signing_key:
111
178
  specification_version: 3
112
179
  summary: Add address related fields to a DataMapper model
@@ -115,6 +182,7 @@ test_files:
115
182
  - spec/dm-address_spec.rb
116
183
  - spec/dm-types/phone_number_spec.rb
117
184
  - spec/dm-types/zip_code_spec.rb
185
+ - spec/fixtures/types-fixture.rb
118
186
  - spec/dm-address/us_spec.rb
119
187
  - spec/dm-address/preferred_spec.rb
120
188
  - spec/dm-address/polymorphic_spec.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 0.4.0