effective_addresses 1.8.4 → 1.9.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ff3f966afab7e2c3b8199c448af7fea1ceee0411
4
- data.tar.gz: ff0c0b5f1b79f540088db80a4199204873ff6e1c
2
+ SHA256:
3
+ metadata.gz: f68f7e9190672bf40b176596387019c6e4ff3ce76f299950469dba367eca0d77
4
+ data.tar.gz: 180012dead028e83f163659605bc5f55dc9c345f3fccce1e201cf140f83c21a4
5
5
  SHA512:
6
- metadata.gz: aafa438364c21b562ab22fbfd5456f5ea760aeec032d243daa5f14571e9cb6cb1e77c62b249425b6a7554a4230648f2ff78cf4975328c0f6bbeb1eb78225e011
7
- data.tar.gz: 12fc4c7ad7132879f28e982aa7e4a658879c5e670f2d1eac59db063997e09db6a7d17a2a4389b0dc320f33751385085261487bbc3ead260c4cdfd84b3bd90bcb
6
+ metadata.gz: b879876863da03b54413dd98e9bce145e77e166b99822d8315c1f2d9620c150fb9999a1303aaeeb75e256c28aae9bc64c47391a1713deca10d53b6d462d78196
7
+ data.tar.gz: d6855b8a7b2b6171c1a88d973abd73347152ab5ce90884ded6409136f767aaf07b087126045bbc4a743f1605e2a9fe9cf1597d567f60d6e5227d4aa18de7c63e
@@ -37,7 +37,7 @@ module EffectiveAddressesHelper
37
37
  end
38
38
  end
39
39
 
40
- def region_options_for_simple_form_select(regions = nil)
40
+ def effective_address_regions_collection(regions = nil)
41
41
  if regions.present?
42
42
  countries = regions
43
43
  elsif EffectiveAddresses.country_codes == :all
@@ -46,20 +46,22 @@ module EffectiveAddressesHelper
46
46
  countries = Carmen::Country.all.select { |c| (EffectiveAddresses.country_codes || []).include?(c.code) }
47
47
  end
48
48
 
49
- collection = countries.map { |c| [c.name, c.code] }.sort! { |a, b| a.first <=> b.first }
50
-
51
49
  if regions.blank? && EffectiveAddresses.country_codes_priority.present?
52
- collection.insert(0, ['---------------------', '', :disabled])
50
+ countries = countries.reject { |c| EffectiveAddresses.country_codes_priority.include?(c.code) }
51
+ end
52
+
53
+ countries = countries.map { |c| [c.name, c.code] }.sort! { |a, b| a.first <=> b.first }
53
54
 
54
- EffectiveAddresses.country_codes_priority.reverse.each do |code|
55
- if (country = Carmen::Country.coded(code))
56
- collection.insert(0, [country.name, country.code])
57
- end
58
- end
55
+ if regions.blank? && EffectiveAddresses.country_codes_priority.present?
56
+ countries.unshift(*
57
+ EffectiveAddresses.country_codes_priority.map do |code|
58
+ country = Carmen::Country.coded(code)
59
+ [country.name, country.code]
60
+ end + [['-------------------', '-', disabled: :disabled]]
61
+ )
59
62
  end
60
63
 
61
- collection
64
+ countries
62
65
  end
63
-
64
66
  end
65
67
 
@@ -3,7 +3,7 @@
3
3
  module ActsAsAddressable
4
4
  extend ActiveSupport::Concern
5
5
 
6
- module ActiveRecord
6
+ module Base
7
7
  def acts_as_addressable(*options)
8
8
  @acts_as_addressable_opts = options || []
9
9
  include ::ActsAsAddressable
@@ -56,10 +56,14 @@ module ActsAsAddressable
56
56
  end
57
57
  end
58
58
 
59
- if ((categories.try(:keys) rescue nil) || categories).include?('billing') && ((categories.try(:keys) rescue nil) || categories).include?('shipping')
59
+ # [:billing_address, :shipping_address]
60
+ address_names = (categories.respond_to?(:keys) ? categories.keys : categories).map { |category| (category.to_s + '_address').to_sym }
61
+
62
+ if address_names.include?(:billing_address) && address_names.include?(:shipping_address)
60
63
  self.send(:define_method, :shipping_address_same_as_billing?) { billing_address == shipping_address }
61
64
  end
62
65
 
66
+ self.send(:define_method, :effective_address_names) { address_names }
63
67
  end
64
68
 
65
69
  module ClassMethods
@@ -87,6 +91,7 @@ module ActsAsAddressable
87
91
  return effective_address(category) if address == effective_address(category)
88
92
 
89
93
  (self.addresses.build).tap do |existing|
94
+ existing.addressable = self
90
95
  existing.category = category.to_s
91
96
  existing.full_name = address.full_name
92
97
  existing.address1 = address.address1
@@ -113,6 +118,7 @@ module ActsAsAddressable
113
118
  return effective_address(category) if address == effective_address(category)
114
119
 
115
120
  (effective_address(category) || self.addresses.build).tap do |existing|
121
+ existing.addressable = self
116
122
  existing.category = category.to_s
117
123
  existing.full_name = address.full_name
118
124
  existing.address1 = address.address1
@@ -8,6 +8,29 @@ module Effective
8
8
 
9
9
  belongs_to :addressable, polymorphic: true, touch: true
10
10
 
11
+ if defined?(EffectiveResources)
12
+ effective_resource do
13
+ category :string
14
+
15
+ full_name :string
16
+ address1 :string
17
+ address2 :string
18
+
19
+ if EffectiveAddresses.use_address3
20
+ address3 :string
21
+ end
22
+
23
+ city :string
24
+ state_code :string
25
+ country_code :string
26
+ postal_code :string
27
+
28
+ shipping_address_same_as_billing permitted: true
29
+
30
+ timestamps
31
+ end
32
+ end
33
+
11
34
  validates :category, :address1, :city, :country_code, :postal_code, presence: true, if: Proc.new { |address| address.present? }
12
35
  validates :state_code, presence: true, if: Proc.new { |address| address.present? && (address.country_code.blank? || Carmen::Country.coded(address.country_code).try(:subregions).present?) }
13
36
 
@@ -126,7 +149,7 @@ module Effective
126
149
  if defined?(::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES) # Rails 5
127
150
  ::ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES.include?(shipping_address_same_as_billing)
128
151
  else
129
- ActiveRecord::Type::Boolean.new.cast(shipping_address_same_as_billing)
152
+ ::ActiveRecord::Type::Boolean.new.cast(shipping_address_same_as_billing)
130
153
  end
131
154
  end
132
155
  end
@@ -26,7 +26,7 @@
26
26
  disabled: same_as_billing,
27
27
  wrapper: wrapper_options
28
28
 
29
- - if fa.object.respond_to?(:address3)
29
+ - if fa.object.respond_to?(:address3) && EffectiveAddresses.use_address3
30
30
  = fa.text_field :address3,
31
31
  label: false,
32
32
  required: false,
@@ -41,7 +41,7 @@
41
41
 
42
42
  .row
43
43
  .col-md-4
44
- = fa.select :country_code, region_options_for_simple_form_select(),
44
+ = fa.select :country_code, effective_address_regions_collection(),
45
45
  label: 'Country',
46
46
  required: required,
47
47
  disabled: same_as_billing,
@@ -50,7 +50,7 @@
50
50
 
51
51
  .col-md-5
52
52
  - if fa.object.try(:country_code).present?
53
- = fa.select :state_code, region_options_for_simple_form_select(Carmen::Country.coded(fa.object.country_code).subregions),
53
+ = fa.select :state_code, effective_address_regions_collection(Carmen::Country.coded(fa.object.country_code).subregions),
54
54
  label: 'State / Province',
55
55
  required: required,
56
56
  disabled: same_as_billing,
@@ -29,7 +29,7 @@
29
29
  :as => (defined?(EffectiveFormInputs) ? :effective_select : :select),
30
30
  :label => 'Country',
31
31
  :prompt => 'Country...',
32
- :collection => region_options_for_select(EffectiveAddresses.country_codes == :all ? Carmen::Country.all : Carmen::Country.all.select{ |c| EffectiveAddresses.country_codes.include?(c.code) rescue true}, fa.object.country_code, :priority => EffectiveAddresses.country_codes_priority),
32
+ :collection => options_for_select(effective_address_regions_collection()),
33
33
  :input_html => { 'data-effective-address-country' => uuid },
34
34
  :input_js => { placeholder: 'Please choose' }
35
35
 
@@ -38,7 +38,7 @@
38
38
  = fa.input :state_code,
39
39
  :as => (defined?(EffectiveFormInputs) ? :effective_select : :select),
40
40
  :label => 'Province / State',
41
- :collection => region_options_for_select(Carmen::Country.coded(fa.object.country_code).subregions, fa.object.state_code),
41
+ :collection => options_for_select(effective_address_regions_collection(Carmen::Country.coded(fa.object.country_code).subregions)),
42
42
  :prompt => 'please select a country',
43
43
  :input_html => { 'data-effective-address-state' => uuid },
44
44
  :input_js => { :placeholder => 'Please choose' }
@@ -41,7 +41,7 @@
41
41
  = fa.input :country_code,
42
42
  as: (defined?(EffectiveFormInputs) ? :effective_select : :select),
43
43
  required: required,
44
- collection: region_options_for_simple_form_select(),
44
+ collection: effective_address_regions_collection(),
45
45
  input_html: {'data-effective-address-country' => uuid},
46
46
  disabled: shipping_address_same_as_billing,
47
47
  wrapper_html: { style: ('display: none;' if shipping_address_same_as_billing) }
@@ -51,7 +51,7 @@
51
51
  = fa.input :state_code,
52
52
  as: (defined?(EffectiveFormInputs) ? :effective_select : :select),
53
53
  required: required,
54
- collection: region_options_for_simple_form_select(Carmen::Country.coded(fa.object.country_code).subregions),
54
+ collection: effective_address_regions_collection(Carmen::Country.coded(fa.object.country_code).subregions),
55
55
  prompt: 'Please choose',
56
56
  input_html: {'data-effective-address-state' => uuid},
57
57
  input_js: { placeholder: 'Please choose' },
@@ -1 +1 @@
1
- = region_options_for_select(@subregions)
1
+ = options_for_select(effective_address_regions_collection(@subregions))
@@ -6,12 +6,15 @@ EffectiveAddresses.setup do |config|
6
6
  # (can be overridden on a per address basis)
7
7
  config.use_full_name = true
8
8
 
9
+ # A 3rd address field
10
+ config.use_address3 = false
11
+
9
12
  # Country codes to display in country_select dropdowns.
10
13
  config.country_codes = :all
11
14
  #config.country_codes = ['US', 'CA'] # Or you can be more selective...
12
15
 
13
16
  # Select these countries ontop of the others
14
- config.country_codes_priority = ['US', 'CA'] # nil for no priority countries
17
+ # config.country_codes_priority = ['US', 'CA']
15
18
 
16
19
  # Force this country to be preselected on any new address forms.
17
20
  # Valid values are: country code, country name, or nil.
@@ -1,5 +1,4 @@
1
1
  require 'carmen'
2
- require 'carmen-rails'
3
2
  require 'effective_addresses/engine'
4
3
  require 'effective_addresses/version'
5
4
 
@@ -10,6 +9,7 @@ module EffectiveAddresses
10
9
  mattr_accessor :country_codes_priority
11
10
  mattr_accessor :addresses_table_name
12
11
  mattr_accessor :use_full_name
12
+ mattr_accessor :use_address3
13
13
  mattr_accessor :simple_form_options
14
14
  mattr_accessor :validate_postal_code_format
15
15
  mattr_accessor :pre_selected_country
@@ -20,7 +20,7 @@ module EffectiveAddresses
20
20
  end
21
21
 
22
22
  def self.permitted_params
23
- [:address1, :address2, :city, :country_code, :state_code, :postal_code, :full_name, :shipping_address_same_as_billing]
23
+ [:address1, :address2, :address3, :city, :country_code, :state_code, :postal_code, :full_name, :shipping_address_same_as_billing]
24
24
  end
25
25
 
26
26
  end
@@ -2,13 +2,13 @@ module EffectiveAddresses
2
2
  class Engine < ::Rails::Engine
3
3
  engine_name 'effective_addresses'
4
4
 
5
- config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
6
- config.autoload_paths += Dir["#{config.root}/app/models/validators"]
5
+ config.autoload_paths += Dir["#{config.root}/lib/validators"]
6
+ config.eager_load_paths += Dir["#{config.root}/lib/validators"]
7
7
 
8
8
  # Include acts_as_addressable concern and allow any ActiveRecord object to call it
9
9
  initializer 'effective_addresses.active_record' do |app|
10
10
  ActiveSupport.on_load :active_record do
11
- ActiveRecord::Base.extend(ActsAsAddressable::ActiveRecord)
11
+ ActiveRecord::Base.extend(ActsAsAddressable::Base)
12
12
  end
13
13
  end
14
14
 
@@ -19,4 +19,3 @@ module EffectiveAddresses
19
19
 
20
20
  end
21
21
  end
22
-
@@ -1,3 +1,3 @@
1
1
  module EffectiveAddresses
2
- VERSION = '1.8.4'.freeze
2
+ VERSION = '1.9.2'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_addresses
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.4
4
+ version: 1.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-27 00:00:00.000000000 Z
11
+ date: 2020-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: 3.2.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: carmen-rails
28
+ name: carmen
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -69,8 +69,6 @@ files:
69
69
  - app/helpers/effective_addresses_helper.rb
70
70
  - app/models/concerns/acts_as_addressable.rb
71
71
  - app/models/effective/address.rb
72
- - app/models/validators/effective_address_full_name_presence_validator.rb
73
- - app/models/validators/effective_address_valid_validator.rb
74
72
  - app/views/effective/addresses/_address.html.haml
75
73
  - app/views/effective/addresses/_form_with.html.haml
76
74
  - app/views/effective/addresses/_formtastic.html.haml
@@ -84,11 +82,13 @@ files:
84
82
  - lib/effective_addresses/engine.rb
85
83
  - lib/effective_addresses/version.rb
86
84
  - lib/generators/effective_addresses/install_generator.rb
85
+ - lib/validators/effective_address_full_name_presence_validator.rb
86
+ - lib/validators/effective_address_valid_validator.rb
87
87
  homepage: https://github.com/code-and-effect/effective_addresses
88
88
  licenses:
89
89
  - MIT
90
90
  metadata: {}
91
- post_install_message:
91
+ post_install_message:
92
92
  rdoc_options: []
93
93
  require_paths:
94
94
  - lib
@@ -103,9 +103,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  requirements: []
106
- rubyforge_project:
107
- rubygems_version: 2.5.2.3
108
- signing_key:
106
+ rubygems_version: 3.1.2
107
+ signing_key:
109
108
  specification_version: 4
110
109
  summary: Extend any ActiveRecord object to have one or more named addresses. Includes
111
110
  a geographic region-aware custom form input backed by Carmen.