biggs 0.3.3 → 0.5.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b305ad58e72593f21215121377ae70f2d17bd29a2d61f3265230f44c9e0c3092
4
+ data.tar.gz: 34566de6851e95ebc713110a6822498fa9da24c5fed7e158a7f53676ce11ce51
5
+ SHA512:
6
+ metadata.gz: 34c29129d47a847e79e81793724f57a06ad89955004f240f154c491cb5bb7a35c68d49d7af52e9c66c609fae7335c5b2d7733f515287d7f7f68145e86665c845
7
+ data.tar.gz: 577f6f7d55229a2f5c3e6a9b0b4d5dd5badb488551da4ec6eadf8189ac6dd1ab4ab9ef56e176c2308fd9dd7eff29db9a8698157279a1cb4976e814bb7053e4f8
data/CHANGES.md CHANGED
@@ -1,5 +1,22 @@
1
1
  ### dev
2
2
 
3
+ ### 0.5.1 / 2022-04-08
4
+
5
+ * Biggs::Extractor: small refactorings + don't delete options
6
+
7
+ ### 0.5.0 / 2022-04-08
8
+
9
+ * Refactored Biggs::Concern to use Biggs::Extractor
10
+ * Removed activerecord dependency and use only activesupport instead
11
+ * Renamed Biggs::ActiveRecordAdapter to Biggs::Concern, include with 'include Biggs'
12
+ * Optimization: Added Biggs::Formatter::FIELDS_WO_COUNTRY
13
+ * Moved Biggs.formats and Biggs.country_names to Constants Biggs::FORMATS & Biggs::COUNTRY_NAMES
14
+
15
+ ### 0.4.0 / 2022-04-08
16
+
17
+ * [BREAKING]: Do not include to ActiveRecord::Base per default, use 'include Biggs::ActiveRecordAdapter' in your classes
18
+ * Allow multiple biggs methods per class
19
+
3
20
  ### 0.3.3 / 2013-05-06
4
21
 
5
22
  * Added support for Rails 4 (by [mdemare](https://github.com/mdemare))
data/README.md CHANGED
@@ -4,11 +4,7 @@ biggs is a small ruby gem/rails plugin for formatting postal addresses from over
4
4
 
5
5
  As a ruby gem:
6
6
 
7
- sudo gem install biggs
8
-
9
- If your rather prefer to install it as a plugin for rails, from your application directory simply run:
10
-
11
- script/plugin install git://github.com/yolk/biggs.git
7
+ gem install biggs
12
8
 
13
9
  ### Standalone usage
14
10
 
@@ -16,34 +12,36 @@ If your rather prefer to install it as a plugin for rails, from your application
16
12
 
17
13
  f.format("de", # <= ISO alpha 2 code
18
14
  :recipient => "Yolk Sebastian Munz & Julia Soergel GbR",
19
- :street => "Adalbertstr. 11", # <= street + house number
20
- :city => "Berlin",
21
- :zip => 10999,
22
- :state => "Berlin" # <= state/province/region
15
+ :street => "Musterallee 12", # <= street + house number
16
+ :city => "Ausgedacht",
17
+ :zip => 12345,
18
+ :state => "Nowhere" # <= state/province/region
23
19
  )
24
20
 
25
21
  returns
26
22
 
27
23
  "Yolk Sebastian Munz & Julia Soergel GbR
28
- Adalbertstr. 11
29
- 10999 Berlin
24
+ Musterallee 12
25
+ 12345 Ausgedacht
30
26
  Germany"
31
27
 
32
28
  At the moment Biggs::Formatter.new accepts only one option:
33
29
 
34
- *blank_county_on* ISO alpha 2 code (single string or array) of countries the formatter should skip the line "country" (for national shipping).
30
+ *blank_country_on* ISO alpha 2 code (single string or array) of countries the formatter should skip the line "country" (for national shipping).
35
31
 
36
- Biggs::Formatter.new(:blank_county_on => "de")
32
+ Biggs::Formatter.new(blank_country_on: "de")
37
33
 
38
34
  With the data from the above example this would return:
39
35
 
40
36
  "Yolk Sebastian Munz & Julia Soergel GbR
41
- Adalbertstr. 11
42
- 10999 Berlin"
37
+ Musterallee 12
38
+ 12345 Ausgedacht"
43
39
 
44
40
  ### Usage with Rails and ActiveRecord
45
41
 
46
42
  Address < ActiveRecord::Base
43
+ include Biggs
44
+
47
45
  biggs :postal_address
48
46
  end
49
47
 
@@ -52,6 +50,8 @@ This adds the method postal_address to your Address-model, and assumes the prese
52
50
  You can customize the method-names biggs will use by passing in a hash of options:
53
51
 
54
52
  Address < ActiveRecord::Base
53
+ include Biggs
54
+
55
55
  biggs :postal_address,
56
56
  :zip => :postal_code,
57
57
  :country => :country_code,
@@ -63,6 +63,8 @@ You can pass in a symbol to let biggs call a different method on your Address-mo
63
63
  You can even pass in a array of symbols:
64
64
 
65
65
  Address < ActiveRecord::Base
66
+ include Biggs
67
+
66
68
  biggs :postal_address,
67
69
  :recipient => [:company_name, :person_name]
68
70
  end
@@ -145,6 +147,6 @@ biggs knows how to format addresses of over 60 different countries. If you are m
145
147
  * United States of America
146
148
  * Yemen
147
149
 
148
- biggs is tested to behave well with Rails 3.0, 3.1, 3.2 and 4.0
150
+ biggs is tested to behave well with ActiveSupport 3 to 7
149
151
 
150
- Copyright (c) 2009-2013 Yolk Sebastian Munz & Julia Soergel GbR
152
+ Copyright (c) 2009-2022 Yolk Sebastian Munz & Julia Soergel GbR
data/biggs.gemspec CHANGED
@@ -19,9 +19,10 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency 'activerecord', '>= 3.0'
22
+ s.add_dependency 'activesupport', '>= 3.0'
23
23
  s.add_development_dependency 'rake'
24
- s.add_development_dependency 'rspec', '>= 2.4.0'
24
+ s.add_development_dependency 'rspec', '>= 3.0'
25
+ s.add_development_dependency 'rspec-its'
25
26
  s.add_development_dependency 'sqlite3', '>= 1.3.5'
26
27
  end
27
28
 
@@ -0,0 +1,34 @@
1
+ require 'active_support'
2
+ require 'active_support/core_ext/class/attribute'
3
+ require 'biggs/extractor'
4
+ require 'biggs/formatter'
5
+
6
+ module Biggs
7
+ module Concern
8
+ extend ActiveSupport::Concern
9
+
10
+ included do
11
+ class_attribute :biggs_config, default: {}
12
+ end
13
+
14
+ class_methods do
15
+ def biggs(method_name=:postal_address, options={})
16
+ self.define_method(method_name) do
17
+ formatter = self.biggs_config[method_name][:formatter]
18
+ extractor = self.biggs_config[method_name][:extractor]
19
+ formatter.format(
20
+ extractor.get_value(self, :country),
21
+ extractor.get_values(self)
22
+ )
23
+ end
24
+
25
+ self.biggs_config = self.biggs_config.dup
26
+
27
+ self.biggs_config[method_name] = {
28
+ formatter: Biggs::Formatter.new(options),
29
+ extractor: Biggs::Extractor.new(options)
30
+ }
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ module Biggs
2
+ class Extractor
3
+ def initialize(options)
4
+ @value_methods = Biggs::Formatter::FIELDS.reduce({}) do |methods, field|
5
+ methods[field] = options[field] if options[field]
6
+ methods
7
+ end
8
+ end
9
+
10
+ def get_values(instance)
11
+ Biggs::Formatter::FIELDS_WO_COUNTRY.inject({}) do |values, field|
12
+ values[field] = get_value(instance, field)
13
+ values
14
+ end
15
+ end
16
+
17
+ def get_value(instance, field)
18
+ key = @value_methods[field] || field
19
+
20
+ case key
21
+ when Symbol
22
+ instance.send(key.to_sym)
23
+ when Proc
24
+ key.call(instance).to_s
25
+ when Array
26
+ if key.all?{|it| it.is_a?(Symbol) }
27
+ key.map{|method| instance.send(method) }.reject(&:blank?).join("\n")
28
+ else
29
+ raise "Biggs: Can't handle #{field} type Array with non-symbolic entries"
30
+ end
31
+ else
32
+ raise "Biggs: Can't handle #{field} type #{key.class}"
33
+ end
34
+ end
35
+ end
36
+ end
data/lib/biggs/format.rb CHANGED
@@ -4,8 +4,8 @@ module Biggs
4
4
 
5
5
  def initialize(iso_code)
6
6
  @iso_code = iso_code.to_s.downcase
7
- @country_name = Biggs.country_names[@iso_code]
8
- @format_string = Biggs.formats[@iso_code]
7
+ @country_name = Biggs::COUNTRY_NAMES[@iso_code]
8
+ @format_string = Biggs::FORMATS[@iso_code]
9
9
  end
10
10
 
11
11
  class << self
@@ -20,4 +20,4 @@ module Biggs
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -1,12 +1,13 @@
1
1
  module Biggs
2
2
  class Formatter
3
-
4
- FIELDS = [:recipient, :street, :city, :state, :zip, :country]
5
-
3
+
4
+ FIELDS_WO_COUNTRY = [:recipient, :street, :city, :state, :zip].freeze
5
+ FIELDS = (FIELDS_WO_COUNTRY + [:country]).freeze
6
+
6
7
  def initialize(options={})
7
8
  @blank_country_on = [options[:blank_country_on]].compact.flatten.map{|s| s.to_s.downcase}
8
9
  end
9
-
10
+
10
11
  def format(iso_code, values={})
11
12
  values.symbolize_keys! if values.respond_to?(:symbolize_keys!)
12
13
 
@@ -14,22 +15,22 @@ module Biggs
14
15
  format_string = (format.format_string || default_format_string(values[:state])).dup.to_s
15
16
  country_name = blank_country_on.include?(format.iso_code) ? "" : format.country_name || format.iso_code
16
17
 
17
- (FIELDS - [:country]).each do |key|
18
+ FIELDS_WO_COUNTRY.each do |key|
18
19
  format_string.gsub!(/\{\{#{key}\}\}/, (values[key] || "").to_s)
19
20
  end
20
21
  format_string.gsub!(/\{\{country\}\}/, country_name)
21
22
  format_string.gsub(/\n$/, "")
22
23
  end
23
-
24
+
24
25
  attr_accessor :blank_country_on, :default_country_without_state, :default_country_with_state
25
-
26
+
26
27
  private
27
-
28
+
28
29
  def default_format_string(state)
29
30
  state && state != "" ?
30
- Biggs.formats[default_country_with_state || "us"] :
31
- Biggs.formats[default_country_without_state || "fr"]
31
+ Biggs::FORMATS[default_country_with_state || "us"] :
32
+ Biggs::FORMATS[default_country_without_state || "fr"]
32
33
  end
33
34
  end
34
-
35
- end
35
+
36
+ end
data/lib/biggs/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Biggs
2
- VERSION = "0.3.3"
3
- end
2
+ VERSION = "0.5.1"
3
+ end
data/lib/biggs.rb CHANGED
@@ -1,20 +1,16 @@
1
+ require 'active_support'
1
2
  require 'biggs/format'
2
3
  require 'biggs/formatter'
4
+ require 'biggs/concern'
3
5
  require 'yaml'
4
6
 
5
7
  module Biggs
6
- class << self
7
- def formats
8
- @@formats ||= YAML.load_file(File.join(File.dirname(__FILE__), '..', 'formats.yml')) || {}
9
- end
10
-
11
- def country_names
12
- @@country_names ||= YAML.load_file(File.join(File.dirname(__FILE__), '..', 'country_names.yml')) || {}
13
- end
8
+ FORMATS = (YAML.load_file(File.join(File.dirname(__FILE__), '..', 'formats.yml')) || {}).freeze
9
+ COUNTRY_NAMES = (YAML.load_file(File.join(File.dirname(__FILE__), '..', 'country_names.yml')) || {}).freeze
10
+
11
+ extend ActiveSupport::Concern
12
+
13
+ included do
14
+ include Biggs::Concern
14
15
  end
15
16
  end
16
-
17
- if defined?(ActiveRecord) and defined?(ActiveRecord::Base) and !ActiveRecord::Base.respond_to?(:biggs_formatter)
18
- require 'biggs/activerecord'
19
- ActiveRecord::Base.send :include, Biggs::ActiveRecordAdapter
20
- end
data/spec/spec_helper.rb CHANGED
@@ -1,15 +1,10 @@
1
1
  $: << File.join(File.dirname(__FILE__), '..', 'lib')
2
2
  require 'rubygems'
3
3
  require 'rspec'
4
+ require 'rspec/its'
4
5
  require File.join(File.dirname(__FILE__), '..', 'lib', 'biggs')
5
6
  require 'logger'
6
7
 
7
- ActiveRecord::Base.logger = Logger.new('/tmp/biggs.log')
8
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => '/tmp/biggs.sqlite')
9
- ActiveRecord::Migration.verbose = false
10
-
11
- ActiveRecord::Schema.define do
12
- create_table :base_tables, :force => true do |table|
13
- table.string :name
14
- end
15
- end
8
+ RSpec.configure do |config|
9
+ config.expect_with(:rspec) { |c| c.syntax = :should }
10
+ end
@@ -1,8 +1,8 @@
1
- require 'rubygems'
2
- require 'active_record'
3
1
  require File.join(File.dirname(__FILE__), '..', 'spec_helper')
4
2
 
5
- class BaseTable < ActiveRecord::Base
3
+ class BaseClass
4
+ include Biggs
5
+
6
6
  Biggs::Formatter::FIELDS.each do |field|
7
7
  define_method(field) do
8
8
  field == :country ? "us" : field.to_s.upcase
@@ -10,101 +10,106 @@ class BaseTable < ActiveRecord::Base
10
10
  end
11
11
  end
12
12
 
13
- class FooBarEmpty < BaseTable;end
13
+ class FooBarEmpty < BaseClass;end
14
14
 
15
- class FooBar < BaseTable
15
+ class FooBar < BaseClass
16
16
  biggs :postal_address
17
17
  end
18
18
 
19
- class FooBarCustomFields < BaseTable
19
+ class FooBarCustomFields < BaseClass
20
20
  biggs :postal_address, :country => :my_custom_country_method,
21
21
  :city => :my_custom_city_method
22
-
22
+
23
23
  def my_custom_country_method
24
24
  "de"
25
25
  end
26
-
26
+
27
27
  def my_custom_city_method
28
28
  "Hamburg"
29
29
  end
30
30
  end
31
31
 
32
- class FooBarCustomBlankDECountry < BaseTable
32
+ class FooBarCustomBlankDECountry < BaseClass
33
33
  biggs :postal_address, :blank_country_on => "de"
34
-
34
+
35
35
  def country
36
36
  "DE"
37
37
  end
38
38
  end
39
39
 
40
- class FooBarCustomMethod < BaseTable
40
+ class FooBarCustomMethod < BaseClass
41
41
  biggs :my_postal_address_method
42
42
  end
43
43
 
44
- class FooBarCustomProc < BaseTable
45
- biggs :postal_address,
46
- :country => Proc.new {|it| it.method_accessed_from_proc + "XX"},
44
+ class FooBarCustomProc < BaseClass
45
+ biggs :postal_address,
46
+ :country => Proc.new {|it| it.method_accessed_from_proc + "XX"},
47
47
  :state => Proc.new {|it| it.state.downcase }
48
-
48
+
49
49
  def method_accessed_from_proc
50
50
  "DE"
51
51
  end
52
52
  end
53
53
 
54
- class FooBarCustomArray < BaseTable
55
- biggs :postal_address,
54
+ class FooBarCustomArray < BaseClass
55
+ biggs :postal_address,
56
56
  :street => [:address_1, :address_empty, :address_nil, :address_2]
57
-
57
+
58
58
  def address_1
59
59
  "Address line 1"
60
60
  end
61
-
61
+
62
62
  def address_2
63
63
  "Address line 2"
64
64
  end
65
-
65
+
66
66
  def address_empty
67
67
  ""
68
68
  end
69
-
69
+
70
70
  def address_nil
71
71
  nil
72
72
  end
73
73
  end
74
74
 
75
- describe "ActiveRecord Class" do
76
-
77
- it "should include Biggs::ActiveRecordAdapter" do
78
- FooBar.included_modules.should be_include(Biggs::ActiveRecordAdapter)
75
+ class FooBarMultiple < BaseClass
76
+ biggs :postal_address_one
77
+ biggs :postal_address_two,
78
+ country: :alt_country
79
+
80
+ def alt_country
81
+ "Alt country"
79
82
  end
80
-
81
- it "should set class value biggs_value_methods" do
82
- FooBar.class_eval("biggs_value_methods").should be_is_a(Hash)
83
- FooBar.class_eval("biggs_value_methods").size.should be_zero
83
+ end
84
+
85
+ describe "ActiveRecord Class" do
86
+
87
+ it "should include Biggs::Concern" do
88
+ FooBar.included_modules.should be_include(Biggs::Concern)
84
89
  end
85
-
86
- it "should set class value biggs_instance" do
87
- FooBar.class_eval("biggs_instance").should be_is_a(Biggs::Formatter)
90
+
91
+ it "should set class value biggs_config" do
92
+ FooBar.class_eval("biggs_config").should be_is_a(Hash)
88
93
  end
89
-
94
+
90
95
  it "should respond to biggs" do
91
96
  FooBar.should be_respond_to(:biggs)
92
97
  end
93
98
  end
94
99
 
95
100
  describe "ActiveRecord Instance" do
96
-
101
+
97
102
  describe "Empty" do
98
103
  it "should not have postal_address method" do
99
104
  FooBarEmpty.new.should_not be_respond_to(:postal_address)
100
105
  end
101
106
  end
102
-
107
+
103
108
  describe "Standard" do
104
109
  it "should have postal_address method" do
105
110
  FooBar.new.should be_respond_to(:postal_address)
106
111
  end
107
-
112
+
108
113
  it "should return postal_address on postal_address" do
109
114
  FooBar.new.postal_address.should eql("RECIPIENT\nSTREET\nCITY STATE ZIP\nUnited States of America")
110
115
  end
@@ -121,27 +126,38 @@ describe "ActiveRecord Instance" do
121
126
  FooBarCustomBlankDECountry.new.postal_address.should eql("RECIPIENT\nSTREET\nZIP CITY")
122
127
  end
123
128
  end
124
-
129
+
125
130
  describe "Customized Method name" do
126
131
  it "should have my_postal_address_method" do
127
132
  FooBarCustomMethod.new.should be_respond_to(:my_postal_address_method)
128
133
  end
129
-
134
+
130
135
  it "should return formatted address on my_postal_address_method" do
131
136
  FooBarCustomMethod.new.my_postal_address_method.should eql("RECIPIENT\nSTREET\nCITY STATE ZIP\nUnited States of America")
132
137
  end
133
138
  end
134
-
139
+
135
140
  describe "Customized Proc as Param" do
136
141
  it "should return formatted address for unknown-country DEXX" do
137
142
  FooBarCustomProc.new.postal_address.should eql("RECIPIENT\nSTREET\nCITY state ZIP\ndexx")
138
143
  end
139
144
  end
140
-
145
+
141
146
  describe "Customized array of symbols" do
142
147
  it "should return formatted address with two lines for street" do
143
148
  FooBarCustomArray.new.postal_address.should eql("RECIPIENT\nAddress line 1\nAddress line 2\nCITY STATE ZIP\nUnited States of America")
144
149
  end
145
150
  end
146
151
 
147
- end
152
+ describe "Multiple" do
153
+
154
+ it "should return postal_address on postal_address_one" do
155
+ FooBarMultiple.new.postal_address_one.should eql("RECIPIENT\nSTREET\nCITY STATE ZIP\nUnited States of America")
156
+ end
157
+
158
+ 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")
160
+ end
161
+ end
162
+
163
+ end
metadata CHANGED
@@ -1,80 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: biggs
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.3.3
4
+ version: 0.5.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sebastian Munz
9
- autorequire:
8
+ autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2022-04-08 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- version_requirements: !ruby/object:Gem::Requirement
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '3.0'
20
- none: false
21
- name: activerecord
22
20
  type: :runtime
23
21
  prerelease: false
24
- requirement: !ruby/object:Gem::Requirement
22
+ version_requirements: !ruby/object:Gem::Requirement
25
23
  requirements:
26
- - - ! '>='
24
+ - - ">="
27
25
  - !ruby/object:Gem::Version
28
26
  version: '3.0'
29
- none: false
30
27
  - !ruby/object:Gem::Dependency
31
- version_requirements: !ruby/object:Gem::Requirement
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
32
30
  requirements:
33
- - - ! '>='
31
+ - - ">="
34
32
  - !ruby/object:Gem::Version
35
33
  version: '0'
36
- none: false
37
- name: rake
38
34
  type: :development
39
35
  prerelease: false
40
- requirement: !ruby/object:Gem::Requirement
36
+ version_requirements: !ruby/object:Gem::Requirement
41
37
  requirements:
42
- - - ! '>='
38
+ - - ">="
43
39
  - !ruby/object:Gem::Version
44
40
  version: '0'
45
- none: false
46
41
  - !ruby/object:Gem::Dependency
47
- version_requirements: !ruby/object:Gem::Requirement
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
48
44
  requirements:
49
- - - ! '>='
45
+ - - ">="
50
46
  - !ruby/object:Gem::Version
51
- version: 2.4.0
52
- none: false
53
- name: rspec
47
+ version: '3.0'
54
48
  type: :development
55
49
  prerelease: false
56
- requirement: !ruby/object:Gem::Requirement
50
+ version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
- - - ! '>='
52
+ - - ">="
59
53
  - !ruby/object:Gem::Version
60
- version: 2.4.0
61
- none: false
54
+ version: '3.0'
62
55
  - !ruby/object:Gem::Dependency
56
+ name: rspec-its
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
63
64
  version_requirements: !ruby/object:Gem::Requirement
64
65
  requirements:
65
- - - ! '>='
66
+ - - ">="
66
67
  - !ruby/object:Gem::Version
67
- version: 1.3.5
68
- none: false
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
69
70
  name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 1.3.5
70
76
  type: :development
71
77
  prerelease: false
72
- requirement: !ruby/object:Gem::Requirement
78
+ version_requirements: !ruby/object:Gem::Requirement
73
79
  requirements:
74
- - - ! '>='
80
+ - - ">="
75
81
  - !ruby/object:Gem::Version
76
82
  version: 1.3.5
77
- none: false
78
83
  description: biggs is a small ruby gem/rails plugin for formatting postal addresses
79
84
  from over 60 countries.
80
85
  email:
@@ -83,8 +88,8 @@ executables: []
83
88
  extensions: []
84
89
  extra_rdoc_files: []
85
90
  files:
86
- - .gitignore
87
- - .rvmrc
91
+ - ".gitignore"
92
+ - ".rvmrc"
88
93
  - CHANGES.md
89
94
  - Gemfile
90
95
  - LICENSE
@@ -95,41 +100,40 @@ files:
95
100
  - formats.yml
96
101
  - init.rb
97
102
  - lib/biggs.rb
98
- - lib/biggs/activerecord.rb
103
+ - lib/biggs/concern.rb
104
+ - lib/biggs/extractor.rb
99
105
  - lib/biggs/format.rb
100
106
  - lib/biggs/formatter.rb
101
107
  - lib/biggs/version.rb
102
108
  - spec/spec_helper.rb
103
- - spec/unit/activerecord_spec.rb
104
109
  - spec/unit/biggs_spec.rb
110
+ - spec/unit/concern_spec.rb
105
111
  - spec/unit/format_spec.rb
106
112
  homepage: https://github.com/yolk/biggs
107
113
  licenses: []
108
- post_install_message:
114
+ metadata: {}
115
+ post_install_message:
109
116
  rdoc_options: []
110
117
  require_paths:
111
118
  - lib
112
119
  required_ruby_version: !ruby/object:Gem::Requirement
113
120
  requirements:
114
- - - ! '>='
121
+ - - ">="
115
122
  - !ruby/object:Gem::Version
116
123
  version: '0'
117
- none: false
118
124
  required_rubygems_version: !ruby/object:Gem::Requirement
119
125
  requirements:
120
- - - ! '>='
126
+ - - ">="
121
127
  - !ruby/object:Gem::Version
122
128
  version: '0'
123
- none: false
124
129
  requirements: []
125
- rubyforge_project: biggs
126
- rubygems_version: 1.8.23
127
- signing_key:
128
- specification_version: 3
130
+ rubygems_version: 3.1.6
131
+ signing_key:
132
+ specification_version: 4
129
133
  summary: biggs is a small ruby gem/rails plugin for formatting postal addresses from
130
134
  over 60 countries.
131
135
  test_files:
132
136
  - spec/spec_helper.rb
133
- - spec/unit/activerecord_spec.rb
134
137
  - spec/unit/biggs_spec.rb
138
+ - spec/unit/concern_spec.rb
135
139
  - spec/unit/format_spec.rb
@@ -1,68 +0,0 @@
1
- require 'active_support/core_ext/class/attribute'
2
-
3
- module Biggs
4
- module ActiveRecordAdapter
5
-
6
- def self.included(base)
7
- base.extend(InitialClassMethods)
8
- end
9
-
10
- module InitialClassMethods
11
- def biggs(method_name=nil, options={})
12
- self.class_attribute :biggs_value_methods
13
- self.class_attribute :biggs_instance
14
-
15
- self.send(:include, Biggs::ActiveRecordAdapter::InstanceMethods)
16
- alias_method(method_name || :postal_address, :biggs_postal_address)
17
-
18
- value_methods = {}
19
- Biggs::Formatter::FIELDS.each do |field|
20
- value_methods[field] = options.delete(field) if options[field]
21
- end
22
-
23
- self.biggs_value_methods = value_methods
24
- self.biggs_instance = Biggs::Formatter.new(options)
25
- end
26
- end
27
-
28
- module InstanceMethods
29
-
30
- def biggs_postal_address
31
- self.class.biggs_instance.format(biggs_country, biggs_values)
32
- end
33
-
34
- private
35
-
36
- def biggs_country
37
- biggs_get_value(:country)
38
- end
39
-
40
- def biggs_values
41
- values = {}
42
- (Biggs::Formatter::FIELDS - [:country]).each do |field|
43
- values[field] = biggs_get_value(field)
44
- end
45
- values
46
- end
47
-
48
- def biggs_get_value(field)
49
- key = self.class.biggs_value_methods[field.to_sym] || field.to_sym
50
-
51
- case key
52
- when Symbol
53
- self.send(key.to_sym)
54
- when Proc
55
- key.call(self).to_s
56
- when Array
57
- if key.all?{|it| it.is_a?(Symbol) }
58
- key.map{|method| self.send(method) }.reject(&:blank?).join("\n")
59
- else
60
- raise "Biggs: Can't handle #{field} type Array with non-symbolic entries"
61
- end
62
- else
63
- raise "Biggs: Can't handle #{field} type #{key.class}"
64
- end
65
- end
66
- end
67
- end
68
- end