has_addresses 0.0.2 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,101 +1,144 @@
1
1
  require "#{File.dirname(__FILE__)}/../test_helper"
2
2
 
3
- unless ENV['LIVE']
4
- Region::ISO_3166_2_URL = "#{RAILS_ROOT}/../files/iso_3166_2.xml"
5
- end
6
-
7
- class RegionTest < Test::Unit::TestCase
8
- fixtures :countries, :regions, :addresses
9
-
10
- def test_should_download_and_parse_regions_from_iso_standard
11
- regions = Region.download_all
12
- assert_instance_of Array, regions
13
- assert !regions.empty?
3
+ class RegionByDefaultTest < ActiveRecord::TestCase
4
+ def setup
5
+ @region = Region.new
14
6
  end
15
7
 
16
- def test_bootstrap_should_remove_existing_records
17
- region = Region.create(:name => 'Test', :country_id => 840, :abbreviation => 'TE')
18
- assert !region.new_record?
19
- Region.bootstrap
20
- assert_nil Region.find_by_name('Test')
8
+ def test_should_not_have_a_country
9
+ assert_nil @region.country_id
21
10
  end
22
11
 
23
- def test_bootstrap_should_insert_downloaded_regions
24
- Region.bootstrap
25
- assert Region.count > 1
12
+ def test_should_not_have_a_group
13
+ assert_nil @region.group
26
14
  end
27
15
 
28
- def test_bootstrap_should_return_true_if_successful
29
- assert Region.bootstrap
16
+ def test_should_not_have_a_name
17
+ assert_nil @region.name
30
18
  end
31
19
 
32
- def test_should_use_default_path_for_created_fixture
33
- Region.create_fixtures
34
- assert File.exists?("#{RAILS_ROOT}/db/bootstrap/regions.yml")
20
+ def test_should_not_have_an_abbreviation
21
+ assert_nil @region.abbreviation
35
22
  end
36
23
 
37
- def test_should_allow_custom_path_for_created_fixture
38
- Region.create_fixtures('db/bootstrap/the_regions.yml')
39
- assert File.exists?("#{RAILS_ROOT}/db/bootstrap/the_regions.yml")
24
+ def test_should_use_id_for_abbreviation_if_not_specified
25
+ region = Region.new(:id => 1005)
26
+ assert_equal '005', region.abbreviation
27
+
28
+ region = Region.new(:id => 1052)
29
+ assert_equal '052', region.abbreviation
30
+
31
+ region = Region.new(:id => 1523)
32
+ assert_equal '523', region.abbreviation
33
+
34
+ region = Region.new(:id => 15234)
35
+ assert_equal '234', region.abbreviation
40
36
  end
41
37
 
42
- def test_created_fixture_should_load_into_table
43
- Region.create_fixtures
44
- Fixtures.create_fixtures("#{RAILS_ROOT}/db/bootstrap", 'regions')
45
- assert Region.count > 1
38
+ def test_should_not_use_id_for_abbreviation_if_specified
39
+ region = Region.new(:id => 1005, :abbreviation => 'CA')
40
+ assert_equal 'CA', region.abbreviation
46
41
  end
47
42
 
48
- def test_should_be_valid
49
- assert_valid regions(:california)
43
+ def test_should_use_country_and_abbreviation_for_code_if_not_specified
44
+ region = Region.new(:country => create_country(:alpha_2_code => 'US'), :abbreviation => 'CA')
45
+ assert_equal 'US-CA', region.code
50
46
  end
51
47
 
52
- def test_should_require_name
53
- assert_invalid regions(:california), :name, nil
48
+ def test_should_use_country_and_abbreviation_for_code_if_specified
49
+ region = Region.new(:country => create_country(:alpha_2_code => 'US'), :abbreviation => 'CA', :code => 'US--CA')
50
+ assert_equal 'US-CA', region.code
51
+ end
52
+ end
53
+
54
+ class RegionTest < ActiveRecord::TestCase
55
+ def test_should_be_valid_with_a_set_of_valid_attributes
56
+ region = new_region
57
+ assert region.valid?
54
58
  end
55
59
 
56
- def test_should_restrict_name_length
57
- assert_invalid regions(:california), :name, 'C', 'C' * 81
58
- assert_valid regions(:california), :name, 'Ca', 'C' * 80
60
+ def test_should_require_a_code
61
+ region = new_region
62
+ region.code = nil
63
+ assert !region.valid?
64
+ assert region.errors.invalid?(:code)
59
65
  end
60
66
 
61
- def test_should_require_unique_name_per_country
62
- region = regions(:california).clone
63
- assert_invalid region, :name
67
+ def test_should_require_a_unique_code
68
+ country = create_country
69
+
70
+ region = new_region(:country => country)
71
+ region.code = 'US-CA'
72
+ region.save!
64
73
 
65
- region.country = countries(:canada)
66
- assert_valid region, :name
74
+ region = new_region(:country => country)
75
+ region.code = 'US-CA'
76
+ assert !region.valid?
77
+ assert region.errors.invalid?(:code)
67
78
  end
68
79
 
69
- def test_should_require_abbreviation
70
- assert_invalid regions(:california), :abbreviation, nil
80
+ def test_should_require_a_name
81
+ region = new_region(:name => nil)
82
+ assert !region.valid?
83
+ assert region.errors.invalid?(:name)
71
84
  end
72
85
 
73
- def test_should_restrict_abbreviation_length
74
- assert_invalid regions(:california), :abbreviation, '', 'C' * 6
75
- assert_valid regions(:california), :abbreviation, 'CA', 'C' * 5
86
+ def test_should_require_a_country
87
+ region = new_region(:country => nil)
88
+ assert !region.valid?
89
+ assert region.errors.invalid?(:country_id)
76
90
  end
77
91
 
78
- def test_should_require_unique_abbreviation_per_country
79
- region = regions(:california).clone
80
- assert_invalid region, :abbreviation
92
+ def test_should_require_an_abbreviation
93
+ region = new_region(:abbreviation => nil)
94
+ assert !region.valid?
95
+ assert region.errors.invalid?(:abbreviation)
96
+ end
97
+
98
+ def test_should_not_allow_abbrevations_shorter_than_1_or_longer_than_5_characters
99
+ region = new_region(:abbreviation => '')
100
+ assert !region.valid?
101
+ assert region.errors.invalid?(:abbreviation)
102
+
103
+ region.abbreviation += 'a'
104
+ assert region.valid?
81
105
 
82
- region.country = countries(:canada)
83
- assert_valid region, :abbreviation
106
+ region.abbreviation += 'aaaa'
107
+ assert region.valid?
108
+
109
+ region.abbreviation += 'a'
110
+ assert !region.valid?
111
+ assert region.errors.invalid?(:abbreviation)
84
112
  end
85
113
 
86
- def test_should_belong_to_a_country
87
- assert_equal countries(:united_states), regions(:california).country
114
+ def test_should_not_require_a_group
115
+ region = new_region(:group => nil)
116
+ assert region.valid?
88
117
  end
89
118
 
90
- def test_should_have_many_addresses
91
- assert_equal [addresses(:in_known_region), addresses(:google_headquarters), addresses(:google_sales)], regions(:california).addresses
119
+ def test_should_use_code_for_stringification
120
+ region = new_region(:country => create_country(:alpha_2_code => 'US'), :abbreviation => 'CA')
121
+ assert_equal 'US-CA', region.to_s
122
+ end
123
+ end
124
+
125
+ class RegionAfterBeingCreatedTest < ActiveRecord::TestCase
126
+ def setup
127
+ @region = create_region
92
128
  end
93
129
 
94
- def test_should_use_name_for_stringification
95
- assert_equal 'California', regions(:california).to_s
130
+ def test_should_not_have_any_addresses
131
+ assert_equal 0, @region.addresses.size
132
+ end
133
+ end
134
+
135
+ class RegionWithAddressesTest < ActiveRecord::TestCase
136
+ def setup
137
+ @region = create_region
138
+ @address = create_address(:region => @region)
96
139
  end
97
140
 
98
- def teardown
99
- FileUtils.rmtree("#{RAILS_ROOT}/db/bootstrap")
141
+ def test_should_have_addresses
142
+ assert_equal [@address], @region.addresses
100
143
  end
101
144
  end
metadata CHANGED
@@ -1,33 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.4
3
- specification_version: 1
4
2
  name: has_addresses
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.0.2
7
- date: 2007-09-26 00:00:00 -04:00
8
- summary: Adds a base skeleton for handling countries, regions, and addresses.
9
- require_paths:
10
- - lib
11
- email: info@pluginaweek.org
12
- homepage: http://www.pluginaweek.org
13
- rubyforge_project:
14
- description:
15
- autorequire: has_addresses
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.5.0
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
- - Aaron Pfeifer, Neil Abraham
7
+ - Aaron Pfeifer
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-30 00:00:00 -04:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: enumerate_by
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.4.0
24
+ version:
25
+ description:
26
+ email: aaron@pluginaweek.org
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files: []
32
+
31
33
  files:
32
34
  - app/models
33
35
  - app/models/country.rb
@@ -35,53 +37,60 @@ files:
35
37
  - app/models/address.rb
36
38
  - db/migrate
37
39
  - db/migrate/001_create_countries.rb
38
- - db/migrate/003_create_addresses.rb
39
40
  - db/migrate/002_create_regions.rb
41
+ - db/migrate/003_create_addresses.rb
40
42
  - lib/has_addresses.rb
41
- - tasks/has_addresses_tasks.rake
43
+ - test/factory.rb
42
44
  - test/test_helper.rb
43
- - test/fixtures
44
- - test/app_root
45
+ - test/functional
46
+ - test/functional/has_addresses_test.rb
45
47
  - test/unit
46
- - test/files
47
- - test/fixtures/regions.yml
48
- - test/fixtures/companies.yml
49
- - test/fixtures/addresses.yml
50
- - test/fixtures/countries.yml
51
- - test/app_root/config
52
- - test/app_root/app
48
+ - test/unit/address_test.rb
49
+ - test/unit/region_test.rb
50
+ - test/unit/country_test.rb
51
+ - test/app_root
53
52
  - test/app_root/db
53
+ - test/app_root/db/migrate
54
+ - test/app_root/db/migrate/002_migrate_has_addresses_to_version_3.rb
55
+ - test/app_root/db/migrate/001_create_companies.rb
56
+ - test/app_root/config
54
57
  - test/app_root/config/environment.rb
58
+ - test/app_root/app
55
59
  - test/app_root/app/models
56
60
  - test/app_root/app/models/company.rb
57
- - test/app_root/db/migrate
58
- - test/app_root/db/migrate/001_create_companies.rb
59
- - test/app_root/db/migrate/002_add_address_kinds.rb
60
- - test/unit/country_test.rb
61
- - test/unit/region_test.rb
62
- - test/unit/has_addresses_test.rb
63
- - test/unit/address_test.rb
64
- - test/files/iso_3166.xml
65
- - test/files/iso_3166_2.xml
66
- - CHANGELOG
61
+ - CHANGELOG.rdoc
67
62
  - init.rb
68
- - MIT-LICENSE
63
+ - LICENSE
69
64
  - Rakefile
70
- - README
71
- test_files:
72
- - test/unit/country_test.rb
73
- - test/unit/region_test.rb
74
- - test/unit/has_addresses_test.rb
75
- - test/unit/address_test.rb
65
+ - README.rdoc
66
+ has_rdoc: true
67
+ homepage: http://www.pluginaweek.org
68
+ post_install_message:
76
69
  rdoc_options: []
77
70
 
78
- extra_rdoc_files: []
79
-
80
- executables: []
81
-
82
- extensions: []
83
-
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: "0"
78
+ version:
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: "0"
84
+ version:
84
85
  requirements: []
85
86
 
86
- dependencies: []
87
-
87
+ rubyforge_project: pluginaweek
88
+ rubygems_version: 1.3.1
89
+ signing_key:
90
+ specification_version: 2
91
+ summary: Demonstrates a reference implementation for handling countries, regions, and addresses.
92
+ test_files:
93
+ - test/functional/has_addresses_test.rb
94
+ - test/unit/address_test.rb
95
+ - test/unit/region_test.rb
96
+ - test/unit/country_test.rb
data/CHANGELOG DELETED
@@ -1,23 +0,0 @@
1
- *SVN*
2
-
3
- *0.0.2* (September 26th, 2007)
4
-
5
- * Move test fixtures out of the test application root directory
6
-
7
- *0.0.1* (August 21st, 2007)
8
-
9
- * Add documentation
10
-
11
- * Add descriptive output for rake tasks
12
-
13
- * Remove dependency on has_association_helper
14
-
15
- * Remove default bootstrap files in favor of creating new ones through the bootstrap tasks
16
-
17
- * Add tests for rake tests
18
-
19
- * Fix not allowing single character abbreviations for regions
20
-
21
- * Add countries:create_fixtures, countries:bootstrap, regions:create_fixtures, and regions:bootstrap files
22
-
23
- * Refactor Rake code into Country/Region classes
data/README DELETED
@@ -1,122 +0,0 @@
1
- = has_addresses
2
-
3
- +has_addresses+ adds a base skeleton for handling countries, regions, and
4
- addresses.
5
-
6
- == Resources
7
-
8
- API
9
-
10
- * http://api.pluginaweek.org/has_addresses
11
-
12
- Wiki
13
-
14
- * http://wiki.pluginaweek.org/Has_addresses
15
-
16
- Announcement
17
-
18
- * http://www.pluginaweek.org
19
-
20
- Source
21
-
22
- * http://svn.pluginaweek.org/trunk/plugins/active_record/has/has_addresses
23
-
24
- Development
25
-
26
- * http://dev.pluginaweek.org/browser/trunk/plugins/active_record/has/has_addresses
27
-
28
- == Description
29
-
30
- Countries, regions, and addresses are all simple models whose data and
31
- functionality should be able to be standardized across multiple applications.
32
- has_addresses adds support for countries and regions based on the ISO 3166 and
33
- ISO 3166-2 standard. The data for these standards is obtained through the
34
- open-source Debian package, iso-codes.
35
-
36
- Along with the simple Country and Region models, addresses can be defined and
37
- integrated based on the data in these models. Addresses are minimalistic in
38
- terms of the type of data required and follows the standard U.S. format.
39
-
40
- == Usage
41
-
42
- === Running migrations
43
-
44
- To migrate the tables required for this plugin, you can either run the
45
- migration from the command line like so:
46
-
47
- rake db:migrate:plugins PLUGIN=has_addresses
48
-
49
- or (more ideally) generate a migration file that will integrate into your main
50
- application's migration path:
51
-
52
- ruby script/generate plugin_migration has_addresses
53
-
54
- === Bootstrapping the database
55
-
56
- +has_addresses+ comes bundled with tasks for bootstrapping the countries and
57
- regions table based on the ISO 3166 and ISO 3166-2 standard. You can bootstrap
58
- the database using built-in rake tasks or by creating fixtures which contain the
59
- bootstrap data.
60
-
61
- To bootstrap country/region data into the current database schema:
62
-
63
- $ rake countries:bootstrap
64
- (in /my/project)
65
- Downloading ISO 3166 data...
66
- Parsing countries...
67
- Loading countries into database...
68
- Done!
69
-
70
- $ rake regions:bootstrap
71
- Downloading ISO 3166 data...
72
- Parsing countries...
73
- Downloading ISO 3166-2 data...
74
- Parsing regions...
75
- Loading regions into database...
76
- Done!
77
-
78
- To create fixtures for the country/region bootstrap data:
79
-
80
- $ rake countries:create_fixtures
81
- (in /my/project)
82
- Downloading ISO 3166 data...
83
- Parsing countries...
84
- Saving countries to /my/project/config/../db/bootstrap/countries.yml...
85
- Done!
86
-
87
- $ rake regions:create_fixtures
88
- (in /my/project)
89
- Downloading ISO 3166 data...
90
- Parsing countries...
91
- Downloading ISO 3166-2 data...
92
- Parsing regions...
93
- Saving regions to /my/project/config/../db/bootstrap/regions.yml...
94
- Done!
95
-
96
- == Testing
97
-
98
- Before you can run any tests, the following gems must be installed:
99
- * plugin_test_helper[http://wiki.pluginaweek.org/Plugin_test_helper]
100
- * dry_validity_assertions[http://wiki.pluginaweek.org/Dry_validity_assertions]
101
-
102
- Since the rake tasks for installing TinyMCE and updating the configuration
103
- options are part of the unit tests, already-downloaded files are included with
104
- the plugin. If you want to perform a "live" test which actually downloads the
105
- files off the Internet (rather than using the local versions), you must set
106
- the LIVE environment variable to true. For example,
107
-
108
- rake test LIVE=true
109
-
110
- == Dependencies
111
-
112
- This plugin is a plugin+. That means that it contains a slice of an
113
- application, such as models and migrations. To test or use a plugin+, you
114
- must have the following plugins/gems installed:
115
- * plugin_dependencies[http://wiki.pluginaweek.org/Plugin_dependencies]
116
- * loaded_plugins[http://wiki.pluginaweek.org/Loaded_plugins]
117
- * appable_plugins[http://wiki.pluginaweek.org/Appable_plugins]
118
- * plugin_migrations[http://wiki.pluginaweek.org/Plugin_migrations]
119
-
120
- Instead of installing each individual plugin+ feature, you can install them all
121
- at once using the plugins+[http://wiki.pluginaweek.org/Plugins_plus] meta package,
122
- which contains all additional features.
@@ -1,23 +0,0 @@
1
- namespace :countries do
2
- desc 'Generates a new fixtures file for the countries table'
3
- task :create_fixtures => :environment do
4
- Country.create_fixtures(ENV['OUTPUT'])
5
- end
6
-
7
- desc 'Bootstraps the countries table with the latest ISO 3166 standard'
8
- task :bootstrap => :environment do
9
- Country.bootstrap
10
- end
11
- end
12
-
13
- namespace :regions do
14
- desc 'Generates a new fixtures file for the regions table'
15
- task :create_fixtures => :environment do
16
- Region.create_fixtures(ENV['OUTPUT'])
17
- end
18
-
19
- desc 'Bootstraps the regions table with the latest ISO 3166-2 standard'
20
- task :bootstrap => :environment do
21
- Region.bootstrap
22
- end
23
- end
@@ -1,9 +0,0 @@
1
- class AddAddressKinds < ActiveRecord::Migration
2
- def self.up
3
- add_column :addresses, :kind, :string
4
- end
5
-
6
- def self.down
7
- remove_column :addresses, :kind
8
- end
9
- end