snail 2.2.2 → 2.3.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.
@@ -1,13 +1,10 @@
1
1
  class Snail
2
2
  module Initializable
3
- def initialize(attrs = {}, &block)
3
+ def initialize(attrs = {})
4
4
  attrs.each do |k, v|
5
5
  m = "#{k}="
6
- if respond_to? m
7
- self.send(m, v)
8
- else
9
- raise UnknownAttribute.new(k)
10
- end
6
+ raise UnknownAttribute, k unless respond_to? m
7
+ send(m, v)
11
8
  end
12
9
  yield self if block_given?
13
10
  end
data/lib/snail/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Snail
2
- VERSION = '2.2.2'
2
+ VERSION = '2.3.0'.freeze
3
3
  end
data/lib/snail.rb CHANGED
@@ -14,51 +14,17 @@ class Snail
14
14
  # this will be raised whenever initialization doesn't recognize a key
15
15
  class UnknownAttribute < ArgumentError; end
16
16
 
17
- # My made-up standard fields.
18
- attr_accessor :name
19
- attr_accessor :line_1
20
- attr_accessor :line_2
21
- attr_accessor :city
22
- attr_accessor :region
23
- attr_accessor :postal_code
24
- attr_reader :country
25
-
26
- # Store country as ISO-3166 Alpha 2
27
- def country=(val)
28
- @country = Snail.lookup_country_iso(val)
29
- end
30
-
31
- # Aliases for easier assignment compatibility
32
- {
33
- :full_name => :name,
34
- :street => :line_1,
35
- :street_1 => :line_1,
36
- :street1 => :line_1,
37
- :street_2 => :line_2,
38
- :street2 => :line_2,
39
- :town => :city,
40
- :locality => :city,
41
- :state => :region,
42
- :province => :region,
43
- :zip => :postal_code,
44
- :zip_code => :postal_code,
45
- :postcode => :postal_code
46
- }.each do |new, existing|
47
- alias_method "#{new}=", "#{existing}="
48
- end
49
-
50
17
  # Load the SnailHelpers module into ActionView::Base. Previously this was done
51
18
  # automatically, but going forward it must be included explicitly by calling
52
19
  # Snail.load_helpers.
53
20
  def self.load_helpers
54
- if defined? ActionView
55
- warn '[DEPRECATION] Snail::Helpers will be removed in a future release.'
56
- ActionView::Base.class_eval { include Snail::Helpers }
57
- end
21
+ return unless defined? ActionView
22
+ warn '[DEPRECATION] Snail::Helpers will be removed in a future release.'
23
+ ActionView::Base.class_eval { include Snail::Helpers }
58
24
  end
59
25
 
60
26
  def self.home_country
61
- @home_country ||= "US"
27
+ @home_country ||= 'US'
62
28
  end
63
29
 
64
30
  def self.home_country=(val)
@@ -66,19 +32,46 @@ class Snail
66
32
  end
67
33
 
68
34
  def self.lookup_country_iso(val)
69
- return nil if val.nil? || val.empty?
35
+ return if val.nil? || val.empty?
70
36
  val = val.upcase
71
37
  if ::Snail::Iso3166::ALPHA2[val]
72
38
  val
73
- elsif iso = ::Snail::Iso3166::ALPHA2_EXCEPTIONS[val]
74
- iso
75
- elsif iso = ::Snail::Iso3166::ALPHA3_TO_ALPHA2[val]
76
- iso
77
39
  else
78
- nil
40
+ ::Snail::Iso3166::ALPHA2_EXCEPTIONS[val] || ::Snail::Iso3166::ALPHA3_TO_ALPHA2[val]
79
41
  end
80
42
  end
81
43
 
44
+ # Snail's canonical fields
45
+ attr_accessor :name
46
+ alias full_name= name=
47
+
48
+ attr_accessor :line_1
49
+ alias street= line_1=
50
+ alias street_1= line_1=
51
+ alias street1= line_1=
52
+
53
+ attr_accessor :line_2
54
+ alias street_2= line_2=
55
+ alias street2= line_2=
56
+
57
+ attr_accessor :city
58
+ alias town= city=
59
+ alias locality= city=
60
+
61
+ attr_accessor :region
62
+ alias state= region=
63
+ alias province= region=
64
+
65
+ attr_accessor :postal_code
66
+ alias zip= postal_code=
67
+ alias zip_code= postal_code=
68
+ alias postcode= postal_code=
69
+
70
+ attr_reader :country
71
+ def country=(val)
72
+ @country = Snail.lookup_country_iso(val)
73
+ end
74
+
82
75
  # Where the mail is coming from.
83
76
  def origin=(val)
84
77
  @origin = Snail.lookup_country_iso(val)
@@ -90,7 +83,7 @@ class Snail
90
83
  end
91
84
 
92
85
  def international?
93
- country && self.origin != country
86
+ country && origin != country
94
87
  end
95
88
 
96
89
  def to_s(with_country: nil)
@@ -102,7 +95,9 @@ class Snail
102
95
  line_2,
103
96
  city_line,
104
97
  (country_line if with_country)
105
- ].select{|line| !(line.nil? or line.empty?)}.join("\n")
98
+ ]
99
+ .reject { |line| line.nil? || line.empty? }
100
+ .join("\n")
106
101
  end
107
102
 
108
103
  def to_html(with_country: nil)
@@ -123,7 +118,7 @@ class Snail
123
118
  "#{postal_code} #{city} #{region}"
124
119
  when 'BY'
125
120
  "#{postal_code} #{city}-#{region}"
126
- when 'US', 'CA', 'AU', nil, ""
121
+ when 'US', 'CA', 'AU', nil, ''
127
122
  "#{city} #{region} #{postal_code}"
128
123
  when 'IL', 'DK', 'FI', 'FR', 'DE', 'GR', 'NO', 'ES', 'SE', 'TR', 'CY', 'PT', 'MK', 'BA'
129
124
  "#{postal_code} #{city}"
@@ -137,7 +132,7 @@ class Snail
137
132
  "#{city} #{postal_code}" # Locally these may be on separate lines. The USPS prefers the city line above the country line, though.
138
133
  when 'EC'
139
134
  "#{postal_code} #{city}"
140
- when 'HK', 'IQ', 'YE', 'QA', 'AL'
135
+ when 'HK', 'IQ', 'YE', 'QA', 'AL', 'BS'
141
136
  "#{city}"
142
137
  when 'AE'
143
138
  "#{postal_code}\n#{city}"
@@ -153,8 +148,10 @@ class Snail
153
148
  "SI-#{postal_code} #{city}"
154
149
  when 'CZ'
155
150
  "#{postal_code} #{region}\n#{city}"
151
+ when 'SG'
152
+ "#{country_line.titleize} #{postal_code}"
156
153
  else
157
- if Kernel.const_defined?("Rails")
154
+ if Kernel.const_defined?('Rails')
158
155
  Rails.logger.error "[Snail] Unknown Country: #{country}"
159
156
  end
160
157
  "#{city} #{region} #{postal_code}"
@@ -162,7 +159,7 @@ class Snail
162
159
  end
163
160
 
164
161
  def country_line
165
- (translated_country(self.origin, @country) || translated_country("US", @country))
162
+ (translated_country(origin, @country) || translated_country('US', @country))
166
163
  end
167
164
 
168
165
  def translated_country(origin, country)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snail
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.2.2
4
+ version: 2.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lance Ivy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-29 00:00:00.000000000 Z
11
+ date: 2024-01-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -310,8 +310,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
310
310
  - !ruby/object:Gem::Version
311
311
  version: '0'
312
312
  requirements: []
313
- rubyforge_project:
314
- rubygems_version: 2.5.1
313
+ rubygems_version: 3.0.3.1
315
314
  signing_key:
316
315
  specification_version: 4
317
316
  summary: Easily format snail mail addresses for international delivery