mainstreet 0.1.0 → 0.2.3

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: d572831c5d0c80c6580ac885edf6c1ea8137589d
4
- data.tar.gz: 3f50e8e84d9edad8918aa83e9b87ca6f450bc196
2
+ SHA256:
3
+ metadata.gz: '08e1a7061a00946e499902c0eab2b4a9ab51971a69ab722626b89047aa4c1eca'
4
+ data.tar.gz: e7696455f9372bdb90b889fb8193a499f992a6ecc3b1a6c51fc2c1cf732ca0ce
5
5
  SHA512:
6
- metadata.gz: f9b58c621595ee590c924beb58aa5f4c6402c9df339fc62fd78ea3789ca8ec23accc756f5dabc41a5733c42d98271431db6e1eba007d21ed8dbf2c232fe69134
7
- data.tar.gz: 954950d8881fd942e1f159e540eb1634780bb36350720402df09f6f25326490d35e1f38d85f9dd98aa4e2ec0fcf0fccc1d34b5a7024d9dc1d9438ada00558e15
6
+ metadata.gz: e9a5c7b6147226624d4492df51bde93d1ae3c35f3da48a3f2e5730f8e649011e1108e13bdf2469e32feae23e722140721907a029d9343c3d8d52f9aef653cc3f
7
+ data.tar.gz: 52038f683d0fa478446c4a04d1a74aa545bac6f75b54d9bc98a5827855374ca88383e9deb32ae3479269e742765bb06b75dca6249f7dad786ce601cb69f480ed
data/CHANGELOG.md ADDED
@@ -0,0 +1,29 @@
1
+ ## 0.2.3 (2022-02-08)
2
+
3
+ - Added `lookup` option
4
+ - Fixed duplicate API calls for invalid addresses
5
+
6
+ ## 0.2.2 (2020-04-16)
7
+
8
+ - Fixed bug with SmartyStreets and ZIP code only addresses
9
+
10
+ ## 0.2.1 (2019-10-04)
11
+
12
+ - Added support for i18n
13
+ - Added support for more validation options like `if` and `on`
14
+ - Specified minimum Geocoder version
15
+
16
+ ## 0.2.0 (2018-11-30)
17
+
18
+ - Added `AddressVerifier`
19
+ - Added `validates_address` method
20
+ - Removed `acts_as_address` method
21
+
22
+ ## 0.1.0 (2017-05-01)
23
+
24
+ - Added more validation
25
+ - Fixed model generator for Rails 5
26
+
27
+ ## 0.0.1 (2015-03-14)
28
+
29
+ - First release
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015 Andrew Kane
3
+ Copyright (c) 2015-2022 Andrew Kane
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,95 +1,163 @@
1
1
  # MainStreet
2
2
 
3
- A standard US address model for Rails
3
+ Address verification for Ruby and Rails
4
4
 
5
- You get:
5
+ :earth_americas: Supports international addresses
6
6
 
7
- - verification
8
- - standardization
9
- - geocoding
7
+ [![Build Status](https://github.com/ankane/mainstreet/workflows/build/badge.svg?branch=master)](https://github.com/ankane/mainstreet/actions)
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application’s Gemfile:
12
+
13
+ ```ruby
14
+ gem "mainstreet"
15
+ ```
10
16
 
11
17
  ## How It Works
12
18
 
19
+ MainStreet uses [Geocoder](https://github.com/alexreisner/geocoder) for address verification, which has a number of [3rd party services](https://github.com/alexreisner/geocoder/blob/master/README_API_GUIDE.md#global-street-address-lookups) you can use. If you adhere to GDPR, be sure to add the service to your subprocessor list.
20
+
21
+ With some services, bad street numbers, units, and postal codes may pass verification. For full verification, get an account with [SmartyStreets](https://smartystreets.com). The free plan supports 250 lookups per month for US addresses, and plans for international addresses start at $7. To use it, set:
22
+
13
23
  ```ruby
14
- Address.create!(street: "1 infinite loop", zip_code: "95014")
24
+ ENV["SMARTY_STREETS_AUTH_ID"] = "auth-id"
25
+ ENV["SMARTY_STREETS_AUTH_TOKEN"] = "auth-token"
15
26
  ```
16
27
 
17
- This creates an address with:
28
+ ## How to Use
18
29
 
19
- - street - `1 Infinite Loop`
20
- - city - `Cupertino`
21
- - state - `CA`
22
- - zip_code - `95014`
23
- - latitude - `37.33053`
24
- - longitude - `-122.02887`
25
- - original_attributes - `{"street"=>"1 infinite loop", "street2"=>nil, "city"=>nil, "state"=>nil, "zip_code"=>"95014"}`
26
- - verification_info
30
+ Check an address with:
27
31
 
28
- ### Verification
32
+ ```ruby
33
+ address = "1600 Pennsylvania Ave NW, Washington DC 20500"
34
+ verifier = MainStreet::AddressVerifier.new(address)
35
+ verifier.success?
36
+ ```
29
37
 
30
- By default, MainStreet performs ZIP code verification.
38
+ If verification fails, get the failure message with:
31
39
 
32
40
  ```ruby
33
- address = Address.new(street:"1 infinite loop", zip_code: "95015")
34
- address.valid?
35
- # false
36
- address.errors.full_messages
37
- # ["Did you mean 95014?"]
41
+ verifier.failure_message
38
42
  ```
39
43
 
40
- For full verification, including unit number, [see below](#full-verification).
44
+ Get details about the result with:
41
45
 
42
- ## Installation
46
+ ```ruby
47
+ verifier.result
48
+ ```
43
49
 
44
- Add this line to your application’s Gemfile:
50
+ Get the latitude and longitude with:
45
51
 
46
52
  ```ruby
47
- gem 'mainstreet'
53
+ verifier.latitude
54
+ verifier.longitude
48
55
  ```
49
56
 
50
- To create a new address model, run:
57
+ ## Active Record
51
58
 
52
- ```sh
53
- rails g mainstreet:address
59
+ For Active Record models, use:
60
+
61
+ ```ruby
62
+ class User < ApplicationRecord
63
+ validates_address fields: [:street, :street2, :city, :state, :postal_code]
64
+ end
54
65
  ```
55
66
 
56
- This creates an `Address` model with:
67
+ The order should be the same as if you were to write the address out.
68
+
69
+ For performance, the address is only verified if at least one of the fields changes. Set your own condition with:
57
70
 
58
- - street
59
- - street2
60
- - city
61
- - state
62
- - zip_code
63
- - latitude
64
- - longitude
65
- - original_attributes
66
- - verification_info
71
+ ```ruby
72
+ class User < ApplicationRecord
73
+ validates_address if: -> { something_changed? }, ...
74
+ end
75
+ ```
67
76
 
68
- To add to an existing model:
77
+ Geocode the address with:
69
78
 
70
- 1. Use `alias_attribute` to map existing field names
71
- 2. Add new fields like `original_attributes` and `verification_info`
72
- 3. Add `acts_as_address` to your model
79
+ ```ruby
80
+ class User < ApplicationRecord
81
+ validates_address geocode: true, ...
82
+ end
83
+ ```
73
84
 
74
- ## Full Verification
85
+ The `latitude` and `longitude` fields are used by default. Specify the fields with:
75
86
 
76
- [SmartyStreets](https://smartystreets.com/features) is required for full verification. The free plan supports 250 lookups per month.
87
+ ```ruby
88
+ class User < ApplicationRecord
89
+ validates_address geocode: {latitude: :lat, longitude: :lon}, ...
90
+ end
91
+ ```
77
92
 
78
- Set:
93
+ Empty addresses are not verified. To require an address, add your own validation.
79
94
 
80
95
  ```ruby
81
- ENV["SMARTY_STREETS_AUTH_ID"] = "auth-id"
82
- ENV["SMARTY_STREETS_AUTH_TOKEN"] = "auth-token"
96
+ class User < ApplicationRecord
97
+ validates :street, presence: true
98
+ end
83
99
  ```
84
100
 
85
- To test it, run:
101
+ ## SmartyStreets
102
+
103
+ With SmartyStreets, you must pass the country for non-US addresses.
104
+
105
+ ```ruby
106
+ MainStreet::AddressVerifier.new(address, country: "France")
107
+ ```
108
+
109
+ Here’s the list of [supported countries](https://smartystreets.com/docs/cloud/international-street-api#countries). You can pass the name, ISO-3, ISO-2, or ISO-N code (like `France`, `FRA`, `FR`, or `250`).
110
+
111
+ For Active Record, use:
112
+
113
+ ```ruby
114
+ class User < ApplicationRecord
115
+ validates_address country: "France", ...
116
+ end
117
+ ```
118
+
119
+ Or use a proc to make it dynamic
120
+
121
+ ```ruby
122
+ class User < ApplicationRecord
123
+ validates_address country: -> { country }, ...
124
+ end
125
+ ```
126
+
127
+ ## Internationalization (i18n)
128
+
129
+ You can customize error messages with the [i18n](https://github.com/ruby-i18n/i18n) gem. In Rails, add to the appropriate `config/locales` file:
130
+
131
+ ```yml
132
+ en:
133
+ mainstreet:
134
+ errors:
135
+ messages:
136
+ unconfirmed: Address can't be confirmed
137
+ apt_unconfirmed: Apartment or suite can't be confirmed
138
+ apt_missing: Apartment or suite is missing
139
+ ```
140
+
141
+ ## Data Protection
142
+
143
+ We recommend encrypting street information and postal code (at the very least) for user addresses. [Lockbox](https://github.com/ankane/lockbox) is great for this. Check out [this article](https://ankane.org/sensitive-data-rails) for more details.
86
144
 
87
145
  ```ruby
88
- address = Address.new(street: "122 Mast Rd", zip_code: "03861")
89
- address.valid?
90
- # should get false
146
+ class User < ApplicationRecord
147
+ encrypts :street, :postal_code
148
+ end
91
149
  ```
92
150
 
151
+ ## Upgrading
152
+
153
+ ### 0.2.0
154
+
155
+ See the [upgrade guide](docs/0-2-Upgrade.md)
156
+
157
+ ## History
158
+
159
+ View the [changelog](https://github.com/ankane/mainstreet/blob/master/CHANGELOG.md)
160
+
93
161
  ## Contributing
94
162
 
95
163
  Everyone is encouraged to help improve this project. Here are a few ways you can help:
@@ -98,3 +166,12 @@ Everyone is encouraged to help improve this project. Here are a few ways you can
98
166
  - Fix bugs and [submit pull requests](https://github.com/ankane/mainstreet/pulls)
99
167
  - Write, clarify, or fix documentation
100
168
  - Suggest or add new features
169
+
170
+ To get started with development:
171
+
172
+ ```sh
173
+ git clone https://github.com/ankane/mainstreet.git
174
+ cd mainstreet
175
+ bundle install
176
+ bundle exec rake test
177
+ ```
@@ -0,0 +1,82 @@
1
+ module MainStreet
2
+ class AddressVerifier
3
+ def initialize(address, country: nil, locale: nil)
4
+ @address = address
5
+ @country = country
6
+ @locale = locale
7
+ end
8
+
9
+ def success?
10
+ failure_message.nil?
11
+ end
12
+
13
+ def failure_message
14
+ if !result
15
+ message :unconfirmed, "Address can't be confirmed"
16
+ elsif result.respond_to?(:analysis)
17
+ analysis = result.analysis
18
+
19
+ if analysis["verification_status"]
20
+ case analysis["verification_status"]
21
+ when "Verified"
22
+ nil # success!!
23
+ when "Ambiguous", "Partial", "None"
24
+ message :unconfirmed, "Address can't be confirmed"
25
+ else
26
+ raise "Unknown verification_status"
27
+ end
28
+ elsif analysis["dpv_match_code"]
29
+ case analysis["dpv_match_code"]
30
+ when "Y"
31
+ nil # success!!
32
+ when "N"
33
+ message :unconfirmed, "Address can't be confirmed"
34
+ when "S"
35
+ message :apt_unconfirmed, "Apartment or suite can't be confirmed"
36
+ when "D"
37
+ message :apt_missing, "Apartment or suite is missing"
38
+ else
39
+ raise "Unknown dpv_match_code"
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ def result
46
+ return @result if defined?(@result)
47
+
48
+ @result = begin
49
+ options = {lookup: MainStreet.lookup}
50
+ options[:country] = @country if @country && !usa?
51
+ # don't use smarty streets zipcode only API
52
+ # keep mirrored with geocoder gem, including \Z
53
+ # \Z is the same as \z when strip is used
54
+ if @address.to_s.strip !~ /\A\d{5}(-\d{4})?\Z/
55
+ Geocoder.search(@address, options).first
56
+ end
57
+ end
58
+ end
59
+
60
+ def latitude
61
+ result && result.latitude
62
+ end
63
+
64
+ def longitude
65
+ result && result.longitude
66
+ end
67
+
68
+ private
69
+
70
+ def usa?
71
+ ["United States", "USA", "US", "840"].include?(@country.to_s)
72
+ end
73
+
74
+ def message(key, default)
75
+ if defined?(I18n)
76
+ I18n.t(key, scope: [:mainstreet, :errors, :messages], locale: @locale, default: default)
77
+ else
78
+ default
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,35 @@
1
+ module MainStreet
2
+ module Model
3
+ def validates_address(fields:, geocode: false, country: nil, **options)
4
+ fields = Array(fields.map(&:to_s))
5
+ geocode_options = {latitude: :latitude, longitude: :longitude}
6
+ geocode_options = geocode_options.merge(geocode) if geocode.is_a?(Hash)
7
+ options[:if] ||= -> { fields.any? { |f| changes.key?(f.to_s) } } unless options[:unless]
8
+
9
+ class_eval do
10
+ validate :verify_address, **options
11
+
12
+ define_method :verify_address do
13
+ address = fields.map { |v| send(v).presence }.compact.join(", ")
14
+
15
+ if address.present?
16
+ # must use a different variable than country
17
+ record_country = instance_exec(&country) if country.respond_to?(:call)
18
+ verifier = MainStreet::AddressVerifier.new(address, country: record_country)
19
+ if verifier.success?
20
+ if geocode
21
+ self.send("#{geocode_options[:latitude]}=", verifier.latitude)
22
+ self.send("#{geocode_options[:longitude]}=", verifier.longitude)
23
+ end
24
+ else
25
+ errors.add(:base, verifier.failure_message)
26
+ end
27
+
28
+ # legacy - for standardize_address method
29
+ @address_verification_result = verifier.result
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,3 +1,3 @@
1
- module Mainstreet
2
- VERSION = "0.1.0"
1
+ module MainStreet
2
+ VERSION = "0.2.3"
3
3
  end
data/lib/mainstreet.rb CHANGED
@@ -1,95 +1,32 @@
1
- require "mainstreet/version"
1
+ # dependencies
2
2
  require "geocoder"
3
3
 
4
- module Mainstreet
4
+ # modules
5
+ require "mainstreet/address_verifier"
6
+ require "mainstreet/version"
7
+
8
+ module MainStreet
5
9
  class << self
6
10
  attr_writer :lookup
7
11
 
8
12
  def lookup
9
- @lookup ||= begin
10
- if ENV["SMARTY_STREETS_AUTH_ID"] && ENV["SMARTY_STREETS_AUTH_TOKEN"]
11
- Geocoder.config[:smarty_streets] ||= {api_key: [ENV["SMARTY_STREETS_AUTH_ID"], ENV["SMARTY_STREETS_AUTH_TOKEN"]]}
12
- end
13
- Geocoder.config[:smarty_streets] ? :smarty_streets : nil
14
- end
13
+ @lookup ||= ENV["SMARTY_STREETS_AUTH_ID"] ? :smarty_streets : nil
15
14
  end
16
15
  end
16
+ end
17
17
 
18
- module Model
19
- def acts_as_address(_options = {})
20
- class_eval do
21
- serialize :original_attributes
22
- serialize :verification_info
23
-
24
- validates :street, presence: true
25
- validate :verify_address, if: -> { address_fields_changed? }
26
- before_save :standardize_address, if: -> { address_fields_changed? }
27
-
28
- def verify_address
29
- if zip_code.blank? && (city.blank? || state.blank?)
30
- errors.add(:base, "Address can't be confirmed")
31
- end
32
- if errors.empty?
33
- @verification_result = fetch_verification_info
34
- if @verification_result
35
- if @verification_result.respond_to?(:analysis)
36
- case @verification_result.analysis["dpv_match_code"]
37
- when "N"
38
- errors.add(:base, "Address can't be confirmed")
39
- when "S"
40
- errors.add(:base, "Apartment or suite can't be confirmed")
41
- when "D"
42
- errors.add(:base, "Apartment or suite is missing")
43
- end
44
- end
45
-
46
- correct_zip_code = @verification_result.postal_code
47
- if zip_code != correct_zip_code
48
- errors.add(:base, "Did you mean #{correct_zip_code}?")
49
- end
50
- else
51
- errors.add(:base, "Address can't be confirmed")
52
- end
53
- end
54
- errors.full_messages
55
- end
56
-
57
- def standardize_address
58
- result = @verification_result
59
- if result
60
- info = result.data
61
- self.original_attributes = attributes.slice(*address_fields)
62
- self.verification_info = result.data.to_hash
63
- self.street =
64
- if result.respond_to?(:delivery_line_1)
65
- result.delivery_line_1
66
- else
67
- result.formatted_address.split(",").first
68
- end
69
- self.street2 = nil
70
- self.city = result.city
71
- self.state = result.state_code
72
- self.zip_code = result.postal_code
73
- self.latitude = result.latitude
74
- self.longitude = result.longitude
75
- end
76
- true
77
- end
78
-
79
- def fetch_verification_info
80
- Geocoder.search("#{street} #{street2} #{city}, #{state} #{zip_code}", lookup: Mainstreet.lookup).first
81
- end
82
-
83
- def address_fields_changed?
84
- address_fields.any? { |f| send("#{f}_changed?") }
85
- end
18
+ if ENV["SMARTY_STREETS_AUTH_ID"]
19
+ Geocoder.config[:smarty_streets] ||= {
20
+ api_key: [
21
+ ENV["SMARTY_STREETS_AUTH_ID"],
22
+ ENV["SMARTY_STREETS_AUTH_TOKEN"]
23
+ ]
24
+ }
25
+ end
86
26
 
87
- def address_fields
88
- attributes.keys & %w(street street2 city state zip_code)
89
- end
90
- end
91
- end
27
+ if defined?(ActiveSupport.on_load)
28
+ ActiveSupport.on_load(:active_record) do
29
+ require "mainstreet/model"
30
+ extend MainStreet::Model
92
31
  end
93
32
  end
94
-
95
- ActiveRecord::Base.send(:extend, Mainstreet::Model) if defined?(ActiveRecord)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mainstreet
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
9
- bindir: exe
8
+ autorequire:
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-01 00:00:00.000000000 Z
11
+ date: 2022-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: geocoder
@@ -16,147 +16,32 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 1.5.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: '1.8'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: '1.8'
41
- - !ruby/object:Gem::Dependency
42
- name: rake
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '10.0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '10.0'
55
- - !ruby/object:Gem::Dependency
56
- name: minitest
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - ">="
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: activerecord
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: sqlite3
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: smartystreets
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: vcr
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: webmock
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: '0'
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: '0'
139
- description: A standard US address model for Rails
140
- email:
141
- - andrew@chartkick.com
26
+ version: 1.5.1
27
+ description:
28
+ email: andrew@ankane.org
142
29
  executables: []
143
30
  extensions: []
144
31
  extra_rdoc_files: []
145
32
  files:
146
- - ".gitignore"
147
- - Gemfile
33
+ - CHANGELOG.md
148
34
  - LICENSE.txt
149
35
  - README.md
150
- - Rakefile
151
- - lib/generators/mainstreet/address_generator.rb
152
36
  - lib/mainstreet.rb
37
+ - lib/mainstreet/address_verifier.rb
38
+ - lib/mainstreet/model.rb
153
39
  - lib/mainstreet/version.rb
154
- - mainstreet.gemspec
155
40
  homepage: https://github.com/ankane/mainstreet
156
41
  licenses:
157
42
  - MIT
158
43
  metadata: {}
159
- post_install_message:
44
+ post_install_message:
160
45
  rdoc_options: []
161
46
  require_paths:
162
47
  - lib
@@ -164,16 +49,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
49
  requirements:
165
50
  - - ">="
166
51
  - !ruby/object:Gem::Version
167
- version: '0'
52
+ version: '2.2'
168
53
  required_rubygems_version: !ruby/object:Gem::Requirement
169
54
  requirements:
170
55
  - - ">="
171
56
  - !ruby/object:Gem::Version
172
57
  version: '0'
173
58
  requirements: []
174
- rubyforge_project:
175
- rubygems_version: 2.5.1
176
- signing_key:
59
+ rubygems_version: 3.3.3
60
+ signing_key:
177
61
  specification_version: 4
178
- summary: A standard US address model for Rails
62
+ summary: Address verification for Ruby and Rails
179
63
  test_files: []
data/.gitignore DELETED
@@ -1,10 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- /test/fixtures/
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- # Specify your gem's dependencies in mainstreet.gemspec
4
- gemspec
data/Rakefile DELETED
@@ -1,8 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- task default: :test
5
- Rake::TestTask.new do |t|
6
- t.libs << "test"
7
- t.pattern = "test/**/*_test.rb"
8
- end
@@ -1,10 +0,0 @@
1
- require "rails/generators"
2
-
3
- module Mainstreet
4
- class AddressGenerator < Rails::Generators::Base
5
- def boom
6
- invoke "model", ["Address", "street:string", "street2:string", "city:string", "state:string", "zip_code:string", "latitude:decimal{15.10}", "longitude:decimal{15.10}", "verification_info:text", "original_attributes:text"], options
7
- insert_into_file "app/models/address.rb", " acts_as_address\n", after: "ApplicationRecord\n"
8
- end
9
- end
10
- end
data/mainstreet.gemspec DELETED
@@ -1,32 +0,0 @@
1
- # coding: utf-8
2
- lib = File.expand_path("../lib", __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "mainstreet/version"
5
-
6
- Gem::Specification.new do |spec|
7
- spec.name = "mainstreet"
8
- spec.version = Mainstreet::VERSION
9
- spec.authors = ["Andrew Kane"]
10
- spec.email = ["andrew@chartkick.com"]
11
-
12
- spec.summary = "A standard US address model for Rails"
13
- spec.description = "A standard US address model for Rails"
14
- spec.homepage = "https://github.com/ankane/mainstreet"
15
- spec.license = "MIT"
16
-
17
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
- spec.bindir = "exe"
19
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
- spec.require_paths = ["lib"]
21
-
22
- spec.add_dependency "geocoder"
23
-
24
- spec.add_development_dependency "bundler", "~> 1.8"
25
- spec.add_development_dependency "rake", "~> 10.0"
26
- spec.add_development_dependency "minitest"
27
- spec.add_development_dependency "activerecord"
28
- spec.add_development_dependency "sqlite3"
29
- spec.add_development_dependency "smartystreets"
30
- spec.add_development_dependency "vcr"
31
- spec.add_development_dependency "webmock"
32
- end