biggs 0.5.1 → 0.7.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b305ad58e72593f21215121377ae70f2d17bd29a2d61f3265230f44c9e0c3092
4
- data.tar.gz: 34566de6851e95ebc713110a6822498fa9da24c5fed7e158a7f53676ce11ce51
3
+ metadata.gz: 7aa8d5152785fa038f6bffa57fce153cbf2c2a9f11b7c65723bf8fbb75d9688e
4
+ data.tar.gz: c0010a02600e417e3a90d9799a1bec898fe015ef8aa10b0d6f1c6471e9b288a4
5
5
  SHA512:
6
- metadata.gz: 34c29129d47a847e79e81793724f57a06ad89955004f240f154c491cb5bb7a35c68d49d7af52e9c66c609fae7335c5b2d7733f515287d7f7f68145e86665c845
7
- data.tar.gz: 577f6f7d55229a2f5c3e6a9b0b4d5dd5badb488551da4ec6eadf8189ac6dd1ab4ab9ef56e176c2308fd9dd7eff29db9a8698157279a1cb4976e814bb7053e4f8
6
+ metadata.gz: b74223bcdb43f5c8133c8bdeaa94332f0919569be4204e0d635781759e6c26027f2a2f365b389deb2a9b384c6c4f3b1c619551e1aa116918fef823905b3656fe
7
+ data.tar.gz: 1a9c63cca3fa960dfa0205065e4bf541c934b03b42e516a04b1724600ce3f6bf72231477994c21a690cee727fcba05458c4c99f7e5f666847bef207f314338e0
@@ -0,0 +1,23 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+
8
+ runs-on: ubuntu-latest
9
+
10
+ strategy:
11
+ fail-fast: false
12
+ matrix:
13
+ ruby: ["2.7", "3.0", "3.1", "3.2", ruby-head]
14
+
15
+ steps:
16
+ - uses: actions/checkout@v3
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ bundler-cache: true # 'bundle install' and cache gems
21
+ ruby-version: ${{ matrix.ruby }}
22
+ - name: Run tests
23
+ run: bundle exec rake
data/CHANGES.md CHANGED
@@ -1,5 +1,14 @@
1
1
  ### dev
2
2
 
3
+ ### 0.7.0 / 2023-12-01
4
+
5
+ * Added formatter option: remove_empty_lines
6
+
7
+ ### 0.6.0 / 2022-04-08
8
+
9
+ * Remove not only trailing but also leading newline from formatted address
10
+ * Biggs::Concern Allow passing false as field to add blank string
11
+
3
12
  ### 0.5.1 / 2022-04-08
4
13
 
5
14
  * Biggs::Extractor: small refactorings + don't delete options
data/README.md CHANGED
@@ -8,15 +8,17 @@ As a ruby gem:
8
8
 
9
9
  ### Standalone usage
10
10
 
11
- f = Biggs::Formatter.new
12
-
13
- f.format("de", # <= ISO alpha 2 code
14
- :recipient => "Yolk Sebastian Munz & Julia Soergel GbR",
15
- :street => "Musterallee 12", # <= street + house number
16
- :city => "Ausgedacht",
17
- :zip => 12345,
18
- :state => "Nowhere" # <= state/province/region
19
- )
11
+ ```ruby
12
+ f = Biggs::Formatter.new
13
+
14
+ f.format("de", # <= ISO alpha 2 code
15
+ :recipient => "Yolk Sebastian Munz & Julia Soergel GbR",
16
+ :street => "Musterallee 12", # <= street + house number
17
+ :city => "Ausgedacht",
18
+ :zip => 12345,
19
+ :state => "Nowhere" # <= state/province/region
20
+ )
21
+ ```
20
22
 
21
23
  returns
22
24
 
@@ -29,7 +31,9 @@ At the moment Biggs::Formatter.new accepts only one option:
29
31
 
30
32
  *blank_country_on* ISO alpha 2 code (single string or array) of countries the formatter should skip the line "country" (for national shipping).
31
33
 
32
- Biggs::Formatter.new(blank_country_on: "de")
34
+ ```ruby
35
+ Biggs::Formatter.new(blank_country_on: "de")
36
+ ```
33
37
 
34
38
  With the data from the above example this would return:
35
39
 
@@ -37,43 +41,51 @@ With the data from the above example this would return:
37
41
  Musterallee 12
38
42
  12345 Ausgedacht"
39
43
 
40
- ### Usage with Rails and ActiveRecord
44
+ ### Usage with Class
41
45
 
42
- Address < ActiveRecord::Base
43
- include Biggs
46
+ ```ruby
47
+ class Address
48
+ include Biggs
44
49
 
45
- biggs :postal_address
46
- end
50
+ biggs :postal_address
51
+ end
52
+ ```
47
53
 
48
54
  This adds the method postal_address to your Address-model, and assumes the presence of the methods/columns recipient, street, city, zip, state, and country to get the address data. Country should return the ISO-code (e.g. 'us', 'fr', 'de').
49
55
 
50
56
  You can customize the method-names biggs will use by passing in a hash of options:
51
57
 
52
- Address < ActiveRecord::Base
53
- include Biggs
58
+ ```ruby
59
+ class Address
60
+ include Biggs
54
61
 
55
- biggs :postal_address,
56
- :zip => :postal_code,
57
- :country => :country_code,
58
- :street => Proc.new {|address| "#{address.street} #{address.house_number}" }
59
- end
62
+ biggs :postal_address,
63
+ :zip => :postal_code,
64
+ :country => :country_code,
65
+ :street => Proc.new {|address| "#{address.street} #{address.house_number}" }
66
+ end
67
+ ```
60
68
 
61
69
  You can pass in a symbol to let biggs call a different method on your Address-model, or a Proc-object to create your data on the fly.
62
70
 
63
71
  You can even pass in a array of symbols:
64
72
 
65
- Address < ActiveRecord::Base
66
- include Biggs
73
+ ```ruby
74
+ class Address
75
+ include Biggs
67
76
 
68
- biggs :postal_address,
69
- :recipient => [:company_name, :person_name]
70
- end
77
+ biggs :postal_address,
78
+ :recipient => [:company_name, :person_name]
79
+ end
80
+ ```
71
81
 
72
82
  This will call the methods company_name and person_name on your address-instance, remove any blank returned values and join the rest by a line break.
73
83
 
74
84
  To access the formatted address string, simply call the provided method on an address instance:
75
85
 
76
- Address.find(1).postal_address
86
+ ```ruby
87
+ Address.new.postal_address
88
+ ```
77
89
 
78
90
  If you pass in a ISO alpha 2 code as :country that is not supported by biggs, it will choose the US-format for addresses with an state specified, and the french/german format for addresses without an state.
79
91
 
@@ -149,4 +161,4 @@ biggs knows how to format addresses of over 60 different countries. If you are m
149
161
 
150
162
  biggs is tested to behave well with ActiveSupport 3 to 7
151
163
 
152
- Copyright (c) 2009-2022 Yolk Sebastian Munz & Julia Soergel GbR
164
+ Copyright (c) 2009-2023 mite GmbH
data/country_names.yml CHANGED
@@ -50,6 +50,7 @@ co: Colombia
50
50
  cr: Costa Rica
51
51
  cu: Cuba
52
52
  cv: Cape Verde
53
+ cw: Curaçao
53
54
  cx: Christmas Island
54
55
  cy: Cyprus
55
56
  cz: Czech Republic
@@ -239,6 +240,7 @@ vn: Vietnam
239
240
  vu: Vanuatu
240
241
  wf: Wallis and Futuna
241
242
  ws: Samoa
243
+ xk: Kosovo
242
244
  ye: Yemen
243
245
  yt: Mayotte
244
246
  za: South Africa
data/formats.yml CHANGED
@@ -68,6 +68,11 @@ cn: |-
68
68
  {{street}}
69
69
  {{zip}} {{city}} {{state}}
70
70
  {{country}}
71
+ cw: |-
72
+ {{recipient}}
73
+ {{street}}
74
+ {{zip}} {{city}}
75
+ {{country}}
71
76
  cz: |-
72
77
  {{recipient}}
73
78
  {{street}}
@@ -343,6 +348,11 @@ us: |-
343
348
  {{street}}
344
349
  {{city}} {{state}} {{zip}}
345
350
  {{country}}
351
+ xk: |-
352
+ {{recipient}}
353
+ {{street}}
354
+ {{zip}} {{city}}
355
+ {{country}}
346
356
  ye: |-
347
357
  {{recipient}}
348
358
  {{street}}
@@ -2,7 +2,7 @@ module Biggs
2
2
  class Extractor
3
3
  def initialize(options)
4
4
  @value_methods = Biggs::Formatter::FIELDS.reduce({}) do |methods, field|
5
- methods[field] = options[field] if options[field]
5
+ methods[field] = options[field] if options[field] || options[field] == false
6
6
  methods
7
7
  end
8
8
  end
@@ -15,6 +15,8 @@ module Biggs
15
15
  end
16
16
 
17
17
  def get_value(instance, field)
18
+ return if @value_methods[field] == false
19
+
18
20
  key = @value_methods[field] || field
19
21
 
20
22
  case key
@@ -6,6 +6,7 @@ module Biggs
6
6
 
7
7
  def initialize(options={})
8
8
  @blank_country_on = [options[:blank_country_on]].compact.flatten.map{|s| s.to_s.downcase}
9
+ @remove_empty_lines = !!options[:remove_empty_lines]
9
10
  end
10
11
 
11
12
  def format(iso_code, values={})
@@ -19,7 +20,8 @@ module Biggs
19
20
  format_string.gsub!(/\{\{#{key}\}\}/, (values[key] || "").to_s)
20
21
  end
21
22
  format_string.gsub!(/\{\{country\}\}/, country_name)
22
- format_string.gsub(/\n$/, "")
23
+ format_string.gsub!(/\n(\s+)?\n/, "\n") if @remove_empty_lines
24
+ format_string.strip
23
25
  end
24
26
 
25
27
  attr_accessor :blank_country_on, :default_country_without_state, :default_country_with_state
data/lib/biggs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Biggs
2
- VERSION = "0.5.1"
2
+ VERSION = "0.7.0"
3
3
  end
data/lib/biggs.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'active_support'
2
+ require 'active_support/core_ext'
2
3
  require 'biggs/format'
3
4
  require 'biggs/formatter'
4
5
  require 'biggs/concern'
@@ -4,33 +4,33 @@ FAKE_ATTR_WITH_STATE = {:state => "STATE", :city => "CITY", :zip => 12345, :stre
4
4
  FAKE_ATTR_WO_STATE = {:city => "CITY", :zip => 12345, :street => "STREET", :recipient => "MR. X"}
5
5
 
6
6
  describe Biggs::Formatter, "with defaults" do
7
-
7
+
8
8
  before { @biggs = Biggs::Formatter.new }
9
-
9
+
10
10
  it "should format to us format" do
11
11
  @biggs.format('us', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\nCITY STATE 12345\nUnited States of America")
12
12
  end
13
-
13
+
14
14
  it "should format to de format" do
15
15
  @biggs.format('de', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\n12345 CITY\nGermany")
16
16
  end
17
-
17
+
18
18
  it "should format to british format" do
19
19
  @biggs.format('gb', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\nCITY\nSTATE\n12345\nUnited Kingdom")
20
20
  end
21
-
21
+
22
22
  it "should format to fr format" do
23
23
  @biggs.format('fr', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\n12345 CITY\nFrance")
24
24
  end
25
-
25
+
26
26
  it "should format to fr format if country_code unknown and there is no STATE given" do
27
27
  @biggs.format('unknown', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\n12345 CITY\nunknown")
28
28
  end
29
-
29
+
30
30
  it "should format to us format if country_code unknown and there is no STATE given" do
31
31
  @biggs.format('unknown', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\nCITY STATE 12345\nunknown")
32
32
  end
33
-
33
+
34
34
  it "should format to no(rwegian) format" do
35
35
  @biggs.format('no', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\n12345 CITY\nNorway")
36
36
  end
@@ -38,43 +38,56 @@ describe Biggs::Formatter, "with defaults" do
38
38
  it "should format to NC format" do
39
39
  @biggs.format('nc', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\n12345 CITY\nNew Caledonia")
40
40
  end
41
-
41
+
42
42
  it "should use country name if Country is known but format not" do
43
43
  @biggs.format('af', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\n12345 CITY\nAfghanistan")
44
44
  end
45
-
45
+
46
46
  it "should use ISO Code if Country is unknown" do
47
47
  @biggs.format('xx', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\n12345 CITY\nxx")
48
48
  end
49
-
49
+
50
50
  end
51
51
 
52
52
  describe Biggs, "with options" do
53
-
53
+
54
54
  describe "blank_country_on de" do
55
55
  before { @biggs = Biggs::Formatter.new(:blank_country_on => 'de') }
56
-
56
+
57
57
  it "should have blank country in 'de' address" do
58
58
  @biggs.format('de', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\n12345 CITY")
59
59
  end
60
-
60
+
61
61
  it "should have country in 'fr' address" do
62
62
  @biggs.format('fr', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\n12345 CITY\nFrance")
63
63
  end
64
-
64
+
65
65
  end
66
-
66
+
67
67
  describe "blank_country_on multiple (US,de)" do
68
68
  before { @biggs = Biggs::Formatter.new(:blank_country_on => ['US', "de"]) }
69
-
69
+
70
70
  it "should have blank country in 'us' address" do
71
71
  @biggs.format('us', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\nCITY STATE 12345")
72
72
  end
73
-
73
+
74
74
  it "should have country in 'fr' address" do
75
75
  @biggs.format('fr', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\n12345 CITY\nFrance")
76
76
  end
77
-
77
+
78
+ end
79
+
80
+ describe "remove_empty_lines" do
81
+ before { @biggs = Biggs::Formatter.new(:remove_empty_lines => true) }
82
+
83
+
84
+ it "should remove empty lines" do
85
+ @biggs.format('gb', FAKE_ATTR_WO_STATE).should eql("MR. X\nSTREET\nCITY\n12345\nUnited Kingdom")
86
+ end
87
+
88
+ it "should format normally without empty lines" do
89
+ @biggs.format('gb', FAKE_ATTR_WITH_STATE).should eql("MR. X\nSTREET\nCITY\nSTATE\n12345\nUnited Kingdom")
90
+ end
91
+
78
92
  end
79
-
80
- end
93
+ end
@@ -75,14 +75,11 @@ end
75
75
  class FooBarMultiple < BaseClass
76
76
  biggs :postal_address_one
77
77
  biggs :postal_address_two,
78
- country: :alt_country
79
-
80
- def alt_country
81
- "Alt country"
82
- end
78
+ country: false,
79
+ recipient: false
83
80
  end
84
81
 
85
- describe "ActiveRecord Class" do
82
+ describe "Extended Class" do
86
83
 
87
84
  it "should include Biggs::Concern" do
88
85
  FooBar.included_modules.should be_include(Biggs::Concern)
@@ -97,7 +94,7 @@ describe "ActiveRecord Class" do
97
94
  end
98
95
  end
99
96
 
100
- describe "ActiveRecord Instance" do
97
+ describe "Extended Class Instance" do
101
98
 
102
99
  describe "Empty" do
103
100
  it "should not have postal_address method" do
@@ -156,7 +153,7 @@ describe "ActiveRecord Instance" do
156
153
  end
157
154
 
158
155
  it "should return postal_address with alt country on postal_address_two" do
159
- FooBarMultiple.new.postal_address_two.should eql("RECIPIENT\nSTREET\nCITY STATE ZIP\nalt country")
156
+ FooBarMultiple.new.postal_address_two.should eql("STREET\nCITY STATE ZIP")
160
157
  end
161
158
  end
162
159
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biggs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Munz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-08 00:00:00.000000000 Z
11
+ date: 2023-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -88,6 +88,7 @@ executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
+ - ".github/workflows/ci.yml"
91
92
  - ".gitignore"
92
93
  - ".rvmrc"
93
94
  - CHANGES.md
@@ -127,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
128
  - !ruby/object:Gem::Version
128
129
  version: '0'
129
130
  requirements: []
130
- rubygems_version: 3.1.6
131
+ rubygems_version: 3.3.7
131
132
  signing_key:
132
133
  specification_version: 4
133
134
  summary: biggs is a small ruby gem/rails plugin for formatting postal addresses from