biggs 0.4.0 → 0.5.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 +4 -4
- data/CHANGES.md +8 -0
- data/README.md +4 -4
- data/biggs.gemspec +1 -1
- data/lib/biggs/concern.rb +34 -0
- data/lib/biggs/extractor.rb +37 -0
- data/lib/biggs/format.rb +3 -3
- data/lib/biggs/formatter.rb +13 -12
- data/lib/biggs/version.rb +1 -1
- data/lib/biggs.rb +8 -11
- data/spec/spec_helper.rb +0 -10
- data/spec/unit/{activerecord_spec.rb → concern_spec.rb} +12 -14
- metadata +6 -5
- data/lib/biggs/activerecord.rb +0 -64
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a72bbb059021e59607a682f9fbb7afb229c8eb36a4ac7b08ba8cf867455f050
|
4
|
+
data.tar.gz: acec60971691c1ca1f72380e7ac1b81bb49ff14b02db4bea188a7a8ac57c5451
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1399a47f9f556a04f1362ac940b12965d233cc628d5197e7800f24c42400390b369dbcf88e20e2f16424638b704f83df9ace8d42420f213eb197e9618f4a457b
|
7
|
+
data.tar.gz: 67ed056b8cf7ace58a9426f493816cbb1575cd2af0c4c86bc1543a599246fd27725503c8035bef493ff4c7e51f910f037892a9dcf64a5831a040368eefe4a2cb
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
### dev
|
2
2
|
|
3
|
+
### 0.5.0 / 2022-04-08
|
4
|
+
|
5
|
+
* Refactored Biggs::Concern to use Biggs::Extractor
|
6
|
+
* Removed activerecord dependency and use only activesupport instead
|
7
|
+
* Renamed Biggs::ActiveRecordAdapter to Biggs::Concern, include with 'include Biggs'
|
8
|
+
* Optimization: Added Biggs::Formatter::FIELDS_WO_COUNTRY
|
9
|
+
* Moved Biggs.formats and Biggs.country_names to Constants Biggs::FORMATS & Biggs::COUNTRY_NAMES
|
10
|
+
|
3
11
|
### 0.4.0 / 2022-04-08
|
4
12
|
|
5
13
|
* [BREAKING]: Do not include to ActiveRecord::Base per default, use 'include Biggs::ActiveRecordAdapter' in your classes
|
data/README.md
CHANGED
@@ -40,7 +40,7 @@ With the data from the above example this would return:
|
|
40
40
|
### Usage with Rails and ActiveRecord
|
41
41
|
|
42
42
|
Address < ActiveRecord::Base
|
43
|
-
include Biggs
|
43
|
+
include Biggs
|
44
44
|
|
45
45
|
biggs :postal_address
|
46
46
|
end
|
@@ -50,7 +50,7 @@ This adds the method postal_address to your Address-model, and assumes the prese
|
|
50
50
|
You can customize the method-names biggs will use by passing in a hash of options:
|
51
51
|
|
52
52
|
Address < ActiveRecord::Base
|
53
|
-
include Biggs
|
53
|
+
include Biggs
|
54
54
|
|
55
55
|
biggs :postal_address,
|
56
56
|
:zip => :postal_code,
|
@@ -63,7 +63,7 @@ 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
|
66
|
+
include Biggs
|
67
67
|
|
68
68
|
biggs :postal_address,
|
69
69
|
:recipient => [:company_name, :person_name]
|
@@ -147,6 +147,6 @@ biggs knows how to format addresses of over 60 different countries. If you are m
|
|
147
147
|
* United States of America
|
148
148
|
* Yemen
|
149
149
|
|
150
|
-
biggs is tested to behave well with
|
150
|
+
biggs is tested to behave well with ActiveSupport 3 to 7
|
151
151
|
|
152
152
|
Copyright (c) 2009-2022 Yolk Sebastian Munz & Julia Soergel GbR
|
data/biggs.gemspec
CHANGED
@@ -19,7 +19,7 @@ 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 '
|
22
|
+
s.add_dependency 'activesupport', '>= 3.0'
|
23
23
|
s.add_development_dependency 'rake'
|
24
24
|
s.add_development_dependency 'rspec', '>= 3.0'
|
25
25
|
s.add_development_dependency 'rspec-its'
|
@@ -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,37 @@
|
|
1
|
+
module Biggs
|
2
|
+
class Extractor
|
3
|
+
def initialize(options)
|
4
|
+
@value_methods = {}
|
5
|
+
Biggs::Formatter::FIELDS.each do |field|
|
6
|
+
@value_methods[field] = options.delete(field) if options[field]
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_values(instance)
|
11
|
+
values = {}
|
12
|
+
Biggs::Formatter::FIELDS_WO_COUNTRY.each do |field|
|
13
|
+
values[field] = get_value(instance, field)
|
14
|
+
end
|
15
|
+
values
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_value(instance, field)
|
19
|
+
key = @value_methods[field] || field
|
20
|
+
|
21
|
+
case key
|
22
|
+
when Symbol
|
23
|
+
instance.send(key.to_sym)
|
24
|
+
when Proc
|
25
|
+
key.call(instance).to_s
|
26
|
+
when Array
|
27
|
+
if key.all?{|it| it.is_a?(Symbol) }
|
28
|
+
key.map{|method| instance.send(method) }.reject(&:blank?).join("\n")
|
29
|
+
else
|
30
|
+
raise "Biggs: Can't handle #{field} type Array with non-symbolic entries"
|
31
|
+
end
|
32
|
+
else
|
33
|
+
raise "Biggs: Can't handle #{field} type #{key.class}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
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
|
8
|
-
@format_string = Biggs
|
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
|
data/lib/biggs/formatter.rb
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
module Biggs
|
2
2
|
class Formatter
|
3
|
-
|
4
|
-
|
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
|
-
|
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
|
31
|
-
Biggs
|
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
data/lib/biggs.rb
CHANGED
@@ -1,19 +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
|
-
|
7
|
-
|
8
|
-
@@formats ||= YAML.load_file(File.join(File.dirname(__FILE__), '..', 'formats.yml')) || {}
|
9
|
-
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
10
|
|
11
|
-
|
12
|
-
@@country_names ||= YAML.load_file(File.join(File.dirname(__FILE__), '..', 'country_names.yml')) || {}
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
11
|
+
extend ActiveSupport::Concern
|
16
12
|
|
17
|
-
|
18
|
-
|
13
|
+
included do
|
14
|
+
include Biggs::Concern
|
15
|
+
end
|
19
16
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,16 +5,6 @@ require 'rspec/its'
|
|
5
5
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'biggs')
|
6
6
|
require 'logger'
|
7
7
|
|
8
|
-
ActiveRecord::Base.logger = Logger.new('/tmp/biggs.log')
|
9
|
-
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => '/tmp/biggs.sqlite')
|
10
|
-
ActiveRecord::Migration.verbose = false
|
11
|
-
|
12
|
-
ActiveRecord::Schema.define do
|
13
|
-
create_table :base_tables, :force => true do |table|
|
14
|
-
table.string :name
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
8
|
RSpec.configure do |config|
|
19
9
|
config.expect_with(:rspec) { |c| c.syntax = :should }
|
20
10
|
end
|
@@ -1,9 +1,7 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'active_record'
|
3
1
|
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
4
2
|
|
5
|
-
class
|
6
|
-
include Biggs
|
3
|
+
class BaseClass
|
4
|
+
include Biggs
|
7
5
|
|
8
6
|
Biggs::Formatter::FIELDS.each do |field|
|
9
7
|
define_method(field) do
|
@@ -12,13 +10,13 @@ class BaseTable < ActiveRecord::Base
|
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
|
-
class FooBarEmpty <
|
13
|
+
class FooBarEmpty < BaseClass;end
|
16
14
|
|
17
|
-
class FooBar <
|
15
|
+
class FooBar < BaseClass
|
18
16
|
biggs :postal_address
|
19
17
|
end
|
20
18
|
|
21
|
-
class FooBarCustomFields <
|
19
|
+
class FooBarCustomFields < BaseClass
|
22
20
|
biggs :postal_address, :country => :my_custom_country_method,
|
23
21
|
:city => :my_custom_city_method
|
24
22
|
|
@@ -31,7 +29,7 @@ class FooBarCustomFields < BaseTable
|
|
31
29
|
end
|
32
30
|
end
|
33
31
|
|
34
|
-
class FooBarCustomBlankDECountry <
|
32
|
+
class FooBarCustomBlankDECountry < BaseClass
|
35
33
|
biggs :postal_address, :blank_country_on => "de"
|
36
34
|
|
37
35
|
def country
|
@@ -39,11 +37,11 @@ class FooBarCustomBlankDECountry < BaseTable
|
|
39
37
|
end
|
40
38
|
end
|
41
39
|
|
42
|
-
class FooBarCustomMethod <
|
40
|
+
class FooBarCustomMethod < BaseClass
|
43
41
|
biggs :my_postal_address_method
|
44
42
|
end
|
45
43
|
|
46
|
-
class FooBarCustomProc <
|
44
|
+
class FooBarCustomProc < BaseClass
|
47
45
|
biggs :postal_address,
|
48
46
|
:country => Proc.new {|it| it.method_accessed_from_proc + "XX"},
|
49
47
|
:state => Proc.new {|it| it.state.downcase }
|
@@ -53,7 +51,7 @@ class FooBarCustomProc < BaseTable
|
|
53
51
|
end
|
54
52
|
end
|
55
53
|
|
56
|
-
class FooBarCustomArray <
|
54
|
+
class FooBarCustomArray < BaseClass
|
57
55
|
biggs :postal_address,
|
58
56
|
:street => [:address_1, :address_empty, :address_nil, :address_2]
|
59
57
|
|
@@ -74,7 +72,7 @@ class FooBarCustomArray < BaseTable
|
|
74
72
|
end
|
75
73
|
end
|
76
74
|
|
77
|
-
class FooBarMultiple <
|
75
|
+
class FooBarMultiple < BaseClass
|
78
76
|
biggs :postal_address_one
|
79
77
|
biggs :postal_address_two,
|
80
78
|
country: :alt_country
|
@@ -86,8 +84,8 @@ end
|
|
86
84
|
|
87
85
|
describe "ActiveRecord Class" do
|
88
86
|
|
89
|
-
it "should include Biggs::
|
90
|
-
FooBar.included_modules.should be_include(Biggs::
|
87
|
+
it "should include Biggs::Concern" do
|
88
|
+
FooBar.included_modules.should be_include(Biggs::Concern)
|
91
89
|
end
|
92
90
|
|
93
91
|
it "should set class value biggs_config" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: biggs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sebastian Munz
|
@@ -11,7 +11,7 @@ cert_chain: []
|
|
11
11
|
date: 2022-04-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -100,13 +100,14 @@ files:
|
|
100
100
|
- formats.yml
|
101
101
|
- init.rb
|
102
102
|
- lib/biggs.rb
|
103
|
-
- lib/biggs/
|
103
|
+
- lib/biggs/concern.rb
|
104
|
+
- lib/biggs/extractor.rb
|
104
105
|
- lib/biggs/format.rb
|
105
106
|
- lib/biggs/formatter.rb
|
106
107
|
- lib/biggs/version.rb
|
107
108
|
- spec/spec_helper.rb
|
108
|
-
- spec/unit/activerecord_spec.rb
|
109
109
|
- spec/unit/biggs_spec.rb
|
110
|
+
- spec/unit/concern_spec.rb
|
110
111
|
- spec/unit/format_spec.rb
|
111
112
|
homepage: https://github.com/yolk/biggs
|
112
113
|
licenses: []
|
@@ -133,6 +134,6 @@ summary: biggs is a small ruby gem/rails plugin for formatting postal addresses
|
|
133
134
|
over 60 countries.
|
134
135
|
test_files:
|
135
136
|
- spec/spec_helper.rb
|
136
|
-
- spec/unit/activerecord_spec.rb
|
137
137
|
- spec/unit/biggs_spec.rb
|
138
|
+
- spec/unit/concern_spec.rb
|
138
139
|
- spec/unit/format_spec.rb
|
data/lib/biggs/activerecord.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'active_support/core_ext/class/attribute'
|
2
|
-
|
3
|
-
module Biggs
|
4
|
-
module ActiveRecordAdapter
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
|
-
included do
|
8
|
-
class_attribute :biggs_config, default: {}
|
9
|
-
end
|
10
|
-
|
11
|
-
class_methods do
|
12
|
-
def biggs(method_name=:postal_address, options={})
|
13
|
-
self.define_method(method_name) do
|
14
|
-
value_methods = self.biggs_config[method_name][:value_methods]
|
15
|
-
self.biggs_config[method_name][:instance].format(
|
16
|
-
Helpers.biggs_get_value(self, :country, value_methods),
|
17
|
-
Helpers.biggs_values(self, value_methods)
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
value_methods = {}
|
22
|
-
Biggs::Formatter::FIELDS.each do |field|
|
23
|
-
value_methods[field] = options.delete(field) if options[field]
|
24
|
-
end
|
25
|
-
|
26
|
-
self.biggs_config = self.biggs_config.dup
|
27
|
-
|
28
|
-
self.biggs_config[method_name] = {
|
29
|
-
instance: Biggs::Formatter.new(options),
|
30
|
-
value_methods: value_methods
|
31
|
-
}
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
module Helpers
|
36
|
-
def self.biggs_values(instance, value_methods)
|
37
|
-
values = {}
|
38
|
-
(Biggs::Formatter::FIELDS - [:country]).each do |field|
|
39
|
-
values[field] = self.biggs_get_value(instance, field, value_methods)
|
40
|
-
end
|
41
|
-
values
|
42
|
-
end
|
43
|
-
|
44
|
-
def self.biggs_get_value(instance, field, value_methods)
|
45
|
-
key = value_methods[field] || field
|
46
|
-
|
47
|
-
case key
|
48
|
-
when Symbol
|
49
|
-
instance.send(key.to_sym)
|
50
|
-
when Proc
|
51
|
-
key.call(instance).to_s
|
52
|
-
when Array
|
53
|
-
if key.all?{|it| it.is_a?(Symbol) }
|
54
|
-
key.map{|method| instance.send(method) }.reject(&:blank?).join("\n")
|
55
|
-
else
|
56
|
-
raise "Biggs: Can't handle #{field} type Array with non-symbolic entries"
|
57
|
-
end
|
58
|
-
else
|
59
|
-
raise "Biggs: Can't handle #{field} type #{key.class}"
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|