geocode_records 1.1.3 → 1.1.4

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
  SHA1:
3
- metadata.gz: a895a090a8b5d022953b811691a6e8b4caec813b
4
- data.tar.gz: a29e9e2f6a3d926edcdd0c3152fe9d257cdb371f
3
+ metadata.gz: e5956f06797c3f79547c0385cc672b451e8ad23b
4
+ data.tar.gz: 6d4a9b488113ce87fe0bc4b8615dac61ecf60aec
5
5
  SHA512:
6
- metadata.gz: 30d88e8e7121c28fa5f81cb32037f1f596411c7c4d40762d8f44c92f6a442cd57fb6bbaf941d29aaf229cb7d7ee39d6ddd819ee3d075db67dc7077c214bdb50a
7
- data.tar.gz: '093ccaa9d2279430a359f080f66f4675583c7c649af6ac60432628bc9b8b210fc436ea4c58ded0cafe1288e86506e3708cc73a45972b3a009b146fd21b1d33b9'
6
+ metadata.gz: 1b3a7c67d72a3d38b0a76903f66fef501dea328f9c752df674aedc918a12ef2e7c166eb65c95ef9bf041e864ae7ce1caa81dea421d7b4852161c15d71dff87eb
7
+ data.tar.gz: eaa1f7f94982cb13ea692f43b42cf5b82e286c49787c8aa688b2b0764f83c36a63b1eaa0806b1c71bf8123295b086a08f67ea1eae012a1c5c1a6914c972d666f
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 1.1.4 / 2018-01-29
2
+
3
+ * Enhancements
4
+
5
+ * num: 2 to geocode hnst2, etc.
6
+
1
7
  1.1.3 / 2018-01-23
2
8
 
3
9
  * Bug fixes
@@ -43,17 +43,20 @@ class GeocodeRecords
43
43
  # optional
44
44
  attr_reader :include_invalid
45
45
  attr_reader :subquery
46
+ attr_reader :num
46
47
 
47
48
  def initialize(
48
49
  database_url:,
49
50
  table_name:,
50
51
  subquery: nil,
51
- include_invalid: nil
52
+ include_invalid: false,
53
+ num: 1
52
54
  )
53
55
  @database_url = database_url
54
56
  @table_name = table_name
55
57
  @subquery = subquery
56
58
  @include_invalid = include_invalid
59
+ @num = num
57
60
  end
58
61
 
59
62
  def perform
@@ -71,7 +74,8 @@ class GeocodeRecords
71
74
  database_url: database_url,
72
75
  table_name: table_name,
73
76
  subquery: subquery,
74
- glob: glob
77
+ glob: glob,
78
+ num: num,
75
79
  ).perform
76
80
  unless File.size(ungeocoded_path) > 32
77
81
  return
@@ -79,12 +83,14 @@ class GeocodeRecords
79
83
  geocoded_path = GeocodeCsv.new(
80
84
  path: ungeocoded_path,
81
85
  glob: glob,
82
- include_invalid: include_invalid
86
+ include_invalid: include_invalid,
87
+ num: num,
83
88
  ).perform
84
89
  UpdateTableFromCsv.new(
85
90
  database_url: database_url,
86
91
  table_name: table_name,
87
- path: geocoded_path
92
+ path: geocoded_path,
93
+ num: num,
88
94
  ).perform
89
95
  ensure
90
96
  FileUtils.rm_f geocoded_path if geocoded_path
@@ -4,16 +4,20 @@ class GeocodeRecords
4
4
  attr_reader :glob
5
5
  attr_reader :table_name
6
6
  attr_reader :subquery
7
+ attr_reader :num
7
8
 
8
9
  def initialize(
9
10
  database_url:,
10
11
  glob:,
11
12
  table_name: nil,
12
- subquery: nil)
13
+ subquery: nil,
14
+ num: nil
15
+ )
13
16
  @database_url = database_url
14
17
  @glob = glob
15
18
  @table_name = table_name
16
19
  @subquery = subquery
20
+ @num = num
17
21
  end
18
22
 
19
23
  def perform
@@ -28,10 +32,13 @@ class GeocodeRecords
28
32
  private
29
33
 
30
34
  def sql
31
- @sql ||= unless glob
32
- "SELECT id, house_number_and_street, city, state, regexp_replace(postcode, '.0$', '') AS postcode FROM #{subquery ? "(#{subquery}) t1" : table_name} WHERE city IS NOT NULL OR postcode IS NOT NULL"
33
- else
34
- "SELECT id, glob FROM #{subquery ? "(#{subquery}) t1" : table_name} WHERE (city IS NULL AND postcode IS NULL) AND glob IS NOT NULL"
35
+ @sql ||= begin
36
+ num_suffix = (num == 1 ? '' : num)
37
+ unless glob
38
+ "SELECT id, house_number_and_street#{num_suffix}, city#{num_suffix}, state#{num_suffix}, regexp_replace(postcode#{num_suffix}, '.0$', '') AS postcode#{num_suffix} FROM #{subquery ? "(#{subquery}) t1" : table_name} WHERE city#{num_suffix} IS NOT NULL OR postcode#{num_suffix} IS NOT NULL"
39
+ else
40
+ "SELECT id, glob#{num_suffix} FROM #{subquery ? "(#{subquery}) t1" : table_name} WHERE (city#{num_suffix} IS NULL AND postcode#{num_suffix} IS NULL) AND glob#{num_suffix} IS NOT NULL"
41
+ end
35
42
  end
36
43
  end
37
44
  end
@@ -5,6 +5,7 @@ class GeocodeRecords
5
5
  attr_reader :path
6
6
  attr_reader :glob
7
7
  attr_reader :include_invalid
8
+ attr_reader :num
8
9
 
9
10
  REQUIRED_SMARTYSTREETS_VERSION = Gem::Version.new('1.8.2')
10
11
  COLUMN_DEFINITION = {
@@ -26,11 +27,13 @@ class GeocodeRecords
26
27
  def initialize(
27
28
  path:,
28
29
  glob:,
29
- include_invalid:
30
+ include_invalid:,
31
+ num:
30
32
  )
31
33
  @path = path
32
34
  @glob = glob
33
35
  @include_invalid = include_invalid
36
+ @num = num
34
37
  end
35
38
 
36
39
  def perform
@@ -58,13 +61,18 @@ class GeocodeRecords
58
61
  private
59
62
 
60
63
  def input_map
61
- @input_map ||= if glob
62
- { 'street' => 'glob' }
63
- else
64
- {
65
- 'street' => 'house_number_and_street',
66
- 'zipcode' => 'postcode',
67
- }
64
+ @input_map ||= begin
65
+ num_suffix = (num == 1 ? '' : num)
66
+ if glob
67
+ { 'street' => "glob#{num_suffix}" }
68
+ else
69
+ {
70
+ 'street' => "house_number_and_street#{num_suffix}",
71
+ 'zipcode' => "postcode#{num_suffix}",
72
+ 'city' => "city#{num_suffix}",
73
+ 'state' => "state#{num_suffix}",
74
+ }
75
+ end
68
76
  end
69
77
  end
70
78
 
@@ -33,8 +33,8 @@ class GeocodeRecords
33
33
  UPDATE_TABLE_SQL = (<<-SQL).gsub(' ', '').freeze
34
34
  UPDATE $TABLE_NAME AS target
35
35
  SET
36
- house_number_and_street = src.ss_delivery_line_1,
37
- house_number = CASE
36
+ house_number_and_street$NUM_SUFFIX = src.ss_delivery_line_1,
37
+ house_number$NUM_SUFFIX = CASE
38
38
  WHEN src.ss_primary_number IS NULL THEN NULL
39
39
  WHEN LENGTH(src.ss_primary_number) > 8 THEN NULL
40
40
  WHEN src.ss_primary_number ~ '\\A\\d+\\Z' THEN src.ss_primary_number::int
@@ -42,12 +42,12 @@ class GeocodeRecords
42
42
  WHEN src.ss_primary_number ~ '-' THEN (SELECT ROUND(AVG(v)) FROM unnest(array_remove(regexp_split_to_array(src.ss_primary_number, '\\D+'), '')::int[]) v)
43
43
  ELSE (SELECT regexp_matches(src.ss_primary_number, '(\\d+)'))[1]::int
44
44
  END,
45
- unit_number = src.ss_secondary_number,
46
- city = COALESCE(src.ss_default_city_name, src.ss_city_name),
47
- state = src.ss_state_abbreviation,
48
- postcode = src.ss_zipcode,
49
- latitude = src.ss_latitude,
50
- longitude = src.ss_longitude
45
+ unit_number$NUM_SUFFIX = src.ss_secondary_number,
46
+ city$NUM_SUFFIX = COALESCE(src.ss_default_city_name, src.ss_city_name),
47
+ state$NUM_SUFFIX = src.ss_state_abbreviation,
48
+ postcode$NUM_SUFFIX = src.ss_zipcode,
49
+ latitude$NUM_SUFFIX = src.ss_latitude,
50
+ longitude$NUM_SUFFIX = src.ss_longitude
51
51
  FROM $TMP_TABLE_NAME AS src
52
52
  WHERE
53
53
  target.id = src.id
@@ -57,15 +57,18 @@ class GeocodeRecords
57
57
  attr_reader :database_url
58
58
  attr_reader :table_name
59
59
  attr_reader :path
60
+ attr_reader :num
60
61
 
61
62
  def initialize(
62
63
  database_url:,
63
64
  table_name:,
64
- path:
65
+ path:,
66
+ num:
65
67
  )
66
68
  @database_url = database_url
67
69
  @table_name = table_name
68
70
  @path = path
71
+ @num = num
69
72
  end
70
73
 
71
74
  def perform
@@ -84,7 +87,7 @@ class GeocodeRecords
84
87
  memo = "geocode_records_#{table_name}_#{rand(999999)}".gsub(/[^a-z0-9_]/i, '')
85
88
  GeocodeRecords.psql(
86
89
  database_url,
87
- CREATE_TABLE_SQL.sub('$TMP_TABLE_NAME', memo)
90
+ CREATE_TABLE_SQL.gsub('$TMP_TABLE_NAME', memo)
88
91
  )
89
92
  memo
90
93
  end
@@ -103,14 +106,15 @@ class GeocodeRecords
103
106
  def load_csv_into_tmp_table(path:, table_name:)
104
107
  GeocodeRecords.psql(
105
108
  database_url,
106
- COPY_SQL.sub('$TMP_TABLE_NAME', table_name).sub('$PATH', path)
109
+ COPY_SQL.gsub('$TMP_TABLE_NAME', table_name).gsub('$PATH', path)
107
110
  )
108
111
  end
109
112
 
110
113
  def update_original_table(tmp_table_name)
114
+ num_suffix = (num == 1 ? '' : num.to_s)
111
115
  GeocodeRecords.psql(
112
116
  database_url,
113
- UPDATE_TABLE_SQL.sub('$TMP_TABLE_NAME', tmp_table_name).sub('$TABLE_NAME', table_name)
117
+ UPDATE_TABLE_SQL.gsub('$TMP_TABLE_NAME', tmp_table_name).gsub('$TABLE_NAME', table_name).gsub('$NUM_SUFFIX', num_suffix)
114
118
  )
115
119
  end
116
120
 
@@ -1,3 +1,3 @@
1
1
  class GeocodeRecords
2
- VERSION = '1.1.3'
2
+ VERSION = '1.1.4'
3
3
  end
@@ -8,6 +8,15 @@ describe GeocodeRecords do
8
8
  subject
9
9
  home.reload
10
10
  expect(home.house_number_and_street).to eq('1038 E Dayton St')
11
+ expect(home.latitude).to be_present
12
+ end
13
+
14
+ it "geocodes addr 2" do
15
+ home = Home.create! house_number_and_street2: '1038 e deyton st', postcode2: '53703'
16
+ GeocodeRecords.new(database_url: ENV.fetch('DATABASE_URL'), table_name: 'homes', num: 2).perform
17
+ home.reload
18
+ expect(home.house_number_and_street2).to eq('1038 E Dayton St')
19
+ expect(home.latitude2).to be_present
11
20
  end
12
21
 
13
22
  it "geocodes quoted table name" do
@@ -25,6 +34,14 @@ describe GeocodeRecords do
25
34
  expect(home.postcode).to eq('53703')
26
35
  end
27
36
 
37
+ it "geocodes glob2" do
38
+ home = Home.create! glob2: '1038 e dayton st, madison, wi 53703'
39
+ GeocodeRecords.new(database_url: ENV.fetch('DATABASE_URL'), table_name: 'homes', num: 2).perform
40
+ home.reload
41
+ expect(home.house_number_and_street2).to eq('1038 E Dayton St')
42
+ expect(home.postcode2).to eq('53703')
43
+ end
44
+
28
45
  it "geocodes by sql" do
29
46
  home = Home.create! house_number_and_street: '1038 e deyton st', postcode: '53703', foo: 'bar'
30
47
  home_ignored = Home.create! house_number_and_street: '1038 e deyton st', postcode: '53703'
@@ -35,6 +52,16 @@ describe GeocodeRecords do
35
52
  expect(home_ignored.latitude).to be_nil
36
53
  end
37
54
 
55
+ it "geocodes by sql num 2" do
56
+ home = Home.create! house_number_and_street2: '1038 e deyton st', postcode2: '53703', foo: 'bar'
57
+ home_ignored = Home.create! house_number_and_street2: '1038 e deyton st', postcode2: '53703'
58
+ GeocodeRecords.new(database_url: ENV.fetch('DATABASE_URL'), table_name: 'homes', subquery: %{SELECT * FROM homes WHERE foo = 'bar'}, num: 2).perform
59
+ home.reload
60
+ home_ignored.reload
61
+ expect(home.latitude2).to be_present
62
+ expect(home_ignored.latitude2).to be_nil
63
+ end
64
+
38
65
  it "doesn't break on float-format postcode" do
39
66
  home = Home.create! house_number_and_street: '1038 e deyton st', postcode: '53703.0'
40
67
  subject
@@ -30,6 +30,15 @@ unless ENV['FAST'] == 'true'
30
30
  postcode text,
31
31
  latitude float,
32
32
  longitude float,
33
+ glob2 text,
34
+ house_number_and_street2 text,
35
+ house_number2 int,
36
+ unit_number2 text,
37
+ city2 text,
38
+ state2 text,
39
+ postcode2 text,
40
+ latitude2 float,
41
+ longitude2 float,
33
42
  foo text
34
43
  )
35
44
  SQL
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geocode_records
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Seamus Abshere
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-01-23 00:00:00.000000000 Z
11
+ date: 2018-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport