uncharted 0.0.6 → 0.0.7.beta1

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,23 @@
1
+ 0.0.7 (2011-08-31)
2
+ ------------------
3
+
4
+ New Featires:
5
+
6
+ - Country select helper
7
+ - Territory select helper
8
+
9
+ Other Changes:
10
+
11
+ - Refactoring
12
+
13
+ 0.0.6 (2011-08-31)
14
+ ------------------
15
+
16
+ Project Changes:
17
+
18
+ - Test Coverage added
19
+ - Project Maintenance
20
+
1
21
  0.0.5 (2011-08-31)
2
22
  ------------------
3
23
 
data/README.md CHANGED
@@ -20,6 +20,8 @@ Getting Started
20
20
 
21
21
  By default, Uncharted will define Country and Territory classes.
22
22
 
23
+ [API Documentation](http://rubydoc.info/github/cenize/uncharted/master/frames)
24
+
23
25
  ....
24
26
  ....
25
27
  ....
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/clean'
2
3
  require 'rake/testtask'
3
4
  require 'yard'
4
5
 
@@ -13,6 +14,9 @@ YARD::Rake::YardocTask.new do |t|
13
14
  t.options
14
15
  end
15
16
 
17
+ CLEAN.include %w(coverage doc pkg tmp .yardoc)
16
18
 
17
19
  desc "Run tests"
18
20
  task :default => :test
21
+
22
+
@@ -8,7 +8,7 @@ module Uncharted
8
8
  @alpha2 = alpha2
9
9
  @alpha3 = alpha3
10
10
  @name = name
11
- self.class.countries[alpha2] = self
11
+ self.class.data[alpha2] = self
12
12
  end
13
13
 
14
14
  def to_s
@@ -19,13 +19,21 @@ module Uncharted
19
19
  countries.count
20
20
  end
21
21
 
22
- def self.find(code)
23
- countries[code]
22
+ def self.find(codes)
23
+ if codes.is_a? Array
24
+ return codes.collect {|c| data[c]}
25
+ end
26
+ data[codes]
24
27
  end
25
28
 
26
29
  def self.countries
27
- @countries ||= {}
30
+ @data.values
28
31
  end
32
+
33
+ def self.data
34
+ @data ||= {}
35
+ end
36
+
29
37
 
30
38
  end
31
39
 
File without changes
@@ -0,0 +1,74 @@
1
+ # CountrySelect
2
+ module ActionView
3
+ module Helpers
4
+ module FormOptionsHelper
5
+
6
+ # Return select and option tags for the given object and method, using country_options_for_select to generate the list of option tags.
7
+ def country_select(object, method, priority_countries = nil, options = {}, html_options = {})
8
+ InstanceTag.new(object, method, self, options.delete(:object)).to_country_select_tag(priority_countries, options, html_options)
9
+ end
10
+
11
+ # Returns a string of option tags for pretty much any country in the world. Supply a country name as +selected+ to
12
+ # have it marked as the selected option tag. You can also supply an array of countries as +priority_countries+, so
13
+ # that they will be listed above the rest of the (long) list.
14
+ #
15
+ # NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag.
16
+ def country_options_for_select(selected = nil, priority_countries = nil)
17
+ country_options = ""
18
+
19
+ if priority_countries
20
+ country_options += options_from_collection_for_select(Country.find(priority_countries), :alpha2, :name, selected)
21
+ country_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
22
+ # prevents selected from being included twice in the HTML which causes
23
+ # some browsers to select the second selected option (not priority)
24
+ # which makes it harder to select an alternative priority country
25
+ selected = nil if priority_countries.include?(selected)
26
+ end
27
+ country_options + options_from_collection_for_select(Uncharted::Country.countries, :alpha2, :name, selected)
28
+ end
29
+
30
+ def territory_options_for_select(selected = nil, priority_territories = nil)
31
+ territory_options = ""
32
+
33
+ if priority_territories
34
+ territory_options += options_from_collection_for_select(Territory.find(priority_territories), :alpha2, :name, selected)
35
+ territory_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"
36
+ # prevents selected from being included twice in the HTML which causes
37
+ # some browsers to select the second selected option (not priority)
38
+ # which makes it harder to select an alternative priority country
39
+ selected = nil if priority_territories.include?(selected)
40
+ end
41
+ territory_options + options_from_collection_for_select(Uncharted::Country.territories, :alpha2, :name, selected)
42
+ end
43
+
44
+ end
45
+
46
+ class InstanceTag
47
+
48
+ def to_country_select_tag(priority_countries, options, html_options)
49
+ html_options = html_options.stringify_keys
50
+ add_default_name_and_id(html_options)
51
+ value = value(object)
52
+ content_tag("select", add_options(country_options_for_select(value, priority_countries), options, value), html_options)
53
+ end
54
+
55
+ def to_territory_select_tag(priority_territories, options, html_options)
56
+ html_options = html_options.stringify_keys
57
+ add_default_name_and_id(html_options)
58
+ value = value(object)
59
+ content_tag("select", add_options(territory_options_for_select(value, priority_territories), options, value), html_options)
60
+ end
61
+ end
62
+
63
+ class FormBuilder
64
+
65
+ def country_select(method, priority_countries = nil, options = {}, html_options = {})
66
+ @template.country_select(@object_name, method, priority_countries, options.merge(:object => @object), html_options)
67
+ end
68
+
69
+ def territory_select(method, priority_territories = nil, options = {}, html_options = {})
70
+ @template.territory_select(@object_name, method, priority_territories, options.merge(:object => @object), html_options)
71
+ end
72
+ end
73
+ end
74
+ end
@@ -5,40 +5,43 @@ module Uncharted
5
5
  class Country
6
6
 
7
7
  def subdivisions
8
- @subdivisions ||= {}
8
+ @subdivisions ||= []
9
9
  end
10
10
 
11
11
  def territories
12
- subdivisions[:territory] || []
12
+ @territories ||= find_by_type(:territory)
13
13
  end
14
14
 
15
15
  def states
16
- subdivisions[:state] || []
16
+ @states ||= find_by_type(:state)
17
17
  end
18
18
 
19
19
  def districts
20
- subdivisions[:district] || []
20
+ @districts ||= find_by_type(:district)
21
21
  end
22
22
 
23
23
  def self.subdivisions
24
- Territory.subdivisions
24
+ Territory.data
25
+ end
26
+
27
+ def find_by_type(type)
28
+ subdivisions.select {|t| t.type == type}
25
29
  end
26
30
 
27
31
  end
28
32
 
29
33
  class Territory
30
34
 
31
- attr_reader :abbr, :code, :country, :country_code, :name, :division
35
+ attr_reader :abbr, :code, :country, :country_code, :name, :type
32
36
 
33
- def initialize(code, division, name)
37
+ def initialize(code, type, name)
34
38
  @code = code
35
- @division = division
39
+ @type = type
36
40
  @name = name
37
41
  @country_code, @abbr = code.split('-')
38
42
  @country = Country.find(@country_code)
39
- Territory.subdivisions[code] = self
40
- @country.subdivisions[@division] ||= []
41
- @country.subdivisions[@division] << self
43
+ Territory.data[code] = self
44
+ @country.subdivisions << self if @country
42
45
  end
43
46
 
44
47
  def to_s
@@ -46,11 +49,11 @@ module Uncharted
46
49
  end
47
50
 
48
51
  def self.find(code)
49
- subdivisions[code]
52
+ data[code]
50
53
  end
51
54
 
52
- def self.subdivisions
53
- @subdivisions ||= {}
55
+ def self.data
56
+ @data ||= {}
54
57
  end
55
58
 
56
59
  end
@@ -1,4 +1,4 @@
1
1
 
2
2
  module Uncharted
3
- VERSION = '0.0.6'
3
+ VERSION = '0.0.7.beta1'
4
4
  end
data/lib/uncharted.rb CHANGED
@@ -6,7 +6,8 @@ require 'uncharted/territory'
6
6
  require 'uncharted/data/countries'
7
7
  require 'uncharted/data/br'
8
8
 
9
- require 'uncharted/adapters/mongoid'
9
+ require 'uncharted/extensions/mongoid'
10
+ require 'uncharted/extensions/rails'
10
11
 
11
12
  Country = Uncharted::Country
12
13
  Territory = Uncharted::Territory
data/test/country_test.rb CHANGED
@@ -15,6 +15,11 @@ class TestCountry < MiniTest::Unit::TestCase
15
15
  assert_equal 'BRA', @br.alpha3
16
16
  assert_equal 'Brazil', @br.name
17
17
  end
18
+
19
+ def test_country_find
20
+ @us = Country.find('US')
21
+ assert_equal [@br, @us], Country.find([@br.alpha2, @us.alpha2])
22
+ end
18
23
 
19
24
  def test_to_s
20
25
  assert_equal 'BR', @br.to_s
@@ -26,13 +31,15 @@ class TestCountry < MiniTest::Unit::TestCase
26
31
  end
27
32
 
28
33
  def test_territories
29
- assert_equal 1, @br.districts.count
34
+ df = Territory.find('BR-DF')
35
+ assert_equal [df], @br.districts
30
36
  assert_equal 26, @br.states.count
37
+ assert_equal 27, @br.subdivisions.count
31
38
  assert @br.territories.empty?
32
39
 
33
- assert_equal [:district, :state], @br.subdivisions.keys.sort
34
40
  assert_equal 'Paraná', Uncharted::Territory.find('BR-PR').name
35
41
  assert_equal 'PR', Uncharted::Territory.find('BR-PR').abbr
42
+ assert_equal 'PR', Uncharted::Territory.find('BR-PR').to_s
36
43
  end
37
44
 
38
45
  def test_classes
@@ -41,5 +48,9 @@ class TestCountry < MiniTest::Unit::TestCase
41
48
  assert_equal Country::Field, Uncharted::Country::Field
42
49
  assert_equal Territory::Field, Uncharted::Territory::Field
43
50
  end
51
+
52
+ def test_country_collection
53
+ assert_equal 247, Country.countries.count
54
+ end
44
55
 
45
56
  end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uncharted
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
5
- prerelease:
4
+ version: 0.0.7.beta1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Gilson Ferraz
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-08-31 00:00:00.000000000Z
12
+ date: 2011-09-05 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
16
- requirement: &2168615860 !ruby/object:Gem::Requirement
16
+ requirement: &2160168080 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *2168615860
24
+ version_requirements: *2160168080
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: purdytest
27
- requirement: &2168615260 !ruby/object:Gem::Requirement
27
+ requirement: &2160155840 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *2168615260
35
+ version_requirements: *2160155840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: yard
38
- requirement: &2168614640 !ruby/object:Gem::Requirement
38
+ requirement: &2160143640 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *2168614640
46
+ version_requirements: *2160143640
47
47
  description: Provide ISO 3166 codes and english name for countries and their political
48
48
  divisions
49
49
  email:
@@ -60,10 +60,11 @@ files:
60
60
  - README.md
61
61
  - Rakefile
62
62
  - lib/uncharted.rb
63
- - lib/uncharted/adapters/mongoid.rb
64
63
  - lib/uncharted/country.rb
65
64
  - lib/uncharted/data/br.rb
66
65
  - lib/uncharted/data/countries.rb
66
+ - lib/uncharted/extensions/mongoid.rb
67
+ - lib/uncharted/extensions/rails.rb
67
68
  - lib/uncharted/territory.rb
68
69
  - lib/uncharted/version.rb
69
70
  - test/country_test.rb
@@ -86,9 +87,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
86
87
  required_rubygems_version: !ruby/object:Gem::Requirement
87
88
  none: false
88
89
  requirements:
89
- - - ! '>='
90
+ - - ! '>'
90
91
  - !ruby/object:Gem::Version
91
- version: '0'
92
+ version: 1.3.1
92
93
  requirements: []
93
94
  rubyforge_project:
94
95
  rubygems_version: 1.8.10