enrichment_db 0.1.4 → 0.1.5

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
2
  SHA1:
3
- metadata.gz: fac1cbd711cda815b1fa1f3b2f9ccb03d3cb3d87
4
- data.tar.gz: b148dfebfe4da0ecb2bfea97088645de89c5cd4d
3
+ metadata.gz: ceeab3783a59c54f74ed47b5068319a203955e2c
4
+ data.tar.gz: b0fffe8b8f5856086423784b8fac993e4803517c
5
5
  SHA512:
6
- metadata.gz: 60c6b6d4516375f7de949472233930bed26cde2270bac3c906f32c5e8c4c100b8fdc580c77a7296d62ba12557e6ea548ea300d1a620657d56198c8a2e51d5c6a
7
- data.tar.gz: 0f77ea54c9fe29580b8750db699befcdec594533cb470d2eb943c5db149ea337ad28382006aeded2c868d37e1a4c34ef5da8492f3a6a133e09d92880c9d031dd
6
+ metadata.gz: 454bc5d8e9e609175f6a9292d7b3268a21dcc3c5715617e08bb12c2a9ff6ef9e88c64e98880bd02d69d57b6fd7ef7c9aea08f6ae91d0740e50005dcbbc82b4b3
7
+ data.tar.gz: 5f16865505cfb6c740654684d4ccf4905a3d936049e1f73146d8ee710fd9282573405e15beadea9f6eee8a107e14e627bb0c5874829a14d7ef6bc4b09408c7f6
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ **.DS_Store
2
+ test/reports/
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enrichment_db (0.0.1)
4
+ enrichment_db (0.1.5)
5
5
  multi_json (~> 1.3)
6
6
  pg
7
7
  pr_geohash
@@ -33,7 +33,7 @@ GEM
33
33
  minitest (>= 5.0)
34
34
  ruby-progressbar
35
35
  multi_json (1.11.2)
36
- pg (0.18.2)
36
+ pg (0.18.3)
37
37
  pr_geohash (1.0.0)
38
38
  rake (10.4.2)
39
39
  ruby-progressbar (1.7.5)
Binary file
@@ -0,0 +1,34 @@
1
+ require 'helper'
2
+
3
+ class EnrichmentDb::Census::Datum < EnrichmentDb::DatumModel
4
+ attr_reader :id
5
+
6
+ DATABASE_NAME = 'censis'
7
+
8
+ def self.by_id(table_name, id)
9
+ puts "Finding object from #{table_name} with region_id = '#{id}'."
10
+ query = "SELECT * FROM #{DATABASE_NAME}.#{table_name} where region_id = $1"
11
+ values = [id]
12
+
13
+ result = EnrichmentDb.request(DATABASE_NAME, query, values)
14
+
15
+ if result.ntuples == 1
16
+ puts "Found object with region_id = '#{id}'"
17
+ format_result(result, id)
18
+ else
19
+ puts "Nothing found"
20
+ nil
21
+ end
22
+ end
23
+
24
+ def self.format_result(result, id)
25
+ result = result[0]
26
+ result = EnrichmentDb::Helper.hash_float_str_to_float(result)
27
+ region_type = result['region_type']
28
+ region_type = region_type[0..-2]
29
+ region = EnrichmentDb::Geo.const_get(region_type).by_id(id.to_i)
30
+ region = EnrichmentDb::Helper.hash_float_str_to_float(region)
31
+ result['region'] = region
32
+ result
33
+ end
34
+ end
@@ -0,0 +1,6 @@
1
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
2
+
3
+ module EnrichmentDb::Census
4
+ end
5
+
6
+ require 'census/datum'
@@ -0,0 +1,20 @@
1
+ require 'helper'
2
+
3
+ class EnrichmentDb::Datum < EnrichmentDb::DatumModel
4
+ def self.by_id(schema_name, table_name, condition)
5
+ puts "Finding object from #{table_name} with condition #{condition}."
6
+ query = "SELECT * FROM #{schema_name}.#{table_name} where #{condition}"
7
+
8
+ result = EnrichmentDb.request(schema_name, query)
9
+
10
+ if result.ntuples > 0
11
+ puts "Found #{result.ntuples} object/s"
12
+ result.collect do |v|
13
+ v
14
+ end
15
+ else
16
+ puts "Nothing found"
17
+ nil
18
+ end
19
+ end
20
+ end
@@ -1,10 +1,11 @@
1
1
  require 'pg'
2
2
 
3
3
  module EnrichmentDb
4
+
4
5
  def self.db_connection
5
6
  @__db_connection ||= PGconn.connect(
6
- host:'geo-mappings.cfmmyp7uix0j.ap-southeast-2.rds.amazonaws.com',
7
- dbname:'geo',
7
+ host: 'geo-mappings.cfmmyp7uix0j.ap-southeast-2.rds.amazonaws.com',
8
+ dbname: 'geo',
8
9
  user: 'lexer',
9
10
  password: 'campl3x3r'
10
11
  )
@@ -14,11 +15,31 @@ module EnrichmentDb
14
15
  @__api_connection = nil
15
16
  end
16
17
 
17
- def self.request(query, values)
18
+ def self.table_names(schema = 'public')
19
+ query = "SELECT table_name
20
+ FROM information_schema.tables
21
+ WHERE table_schema='#{schema}'
22
+ AND table_type='BASE TABLE'"
23
+ request(schema, query).collect do |h|
24
+ h['table_name']
25
+ end
26
+ end
27
+
28
+ def self.table_columns(table, schema = 'public')
29
+ query = "SELECT *
30
+ FROM information_schema.columns
31
+ WHERE table_schema = '#{schema}'
32
+ AND table_name = '#{table}'"
33
+ request(schema, query).collect do |h|
34
+ h['column_name']
35
+ end
36
+ end
37
+
38
+ def self.request(db, query, values = nil)
18
39
  type = request_type(query)
19
40
 
20
41
  case type
21
- when :select, 'select'
42
+ when :select, 'select', '\d'
22
43
  result = if values
23
44
  EnrichmentDb::db_connection.exec(query, values)
24
45
  else
@@ -32,7 +53,7 @@ module EnrichmentDb
32
53
  end
33
54
 
34
55
  def self.request_type(query)
35
- result = query.downcase.match(/(^(?:drop|select|insert|delete))/)
56
+ result = query.downcase.match(/(^(?:drop|select|insert|delete|\\d))/)
36
57
  return unless result
37
58
 
38
59
  result[0]
@@ -2,6 +2,8 @@ class EnrichmentDb::Geo::Region < EnrichmentDb::DatumModel
2
2
  attr_reader :id
3
3
  attr_reader :name
4
4
 
5
+ DATABASE_NAME = 'geo'
6
+
5
7
  def initialize(data)
6
8
  @id = data['id']
7
9
  @name = data['name']
@@ -11,10 +13,10 @@ class EnrichmentDb::Geo::Region < EnrichmentDb::DatumModel
11
13
  puts "Finding #{object_type} with id = '#{id}'."
12
14
  field_names = fields
13
15
  table = make_table_name
14
- query = "SELECT #{field_names} FROM #{table} where id = $1"
16
+ query = "SELECT #{field_names} FROM #{DATABASE_NAME}.#{table} where id = $1"
15
17
  values = [id]
16
18
 
17
- result = EnrichmentDb.request(query, values)
19
+ result = EnrichmentDb.request(DATABASE_NAME, query, values)
18
20
  if result.ntuples == 1
19
21
  puts "Found #{object_type}"
20
22
  result[0]
@@ -28,9 +30,9 @@ class EnrichmentDb::Geo::Region < EnrichmentDb::DatumModel
28
30
  puts "Finding #{object_type} intersecting with some geohash"
29
31
  field_names = fields
30
32
  table = make_table_name
31
- query = "SELECT #{field_names} FROM #{table} where ST_Within(ST_SetSRID(ST_GeomFromGeoHash($1), 4283), boundary)"
33
+ query = "SELECT #{field_names} FROM #{DATABASE_NAME}.#{table} where ST_Within(ST_SetSRID(ST_GeomFromGeoHash($1), 4283), boundary)"
32
34
 
33
- result = EnrichmentDb.request(query, values)
35
+ result = EnrichmentDb.request(DATABASE_NAME, query, values)
34
36
  if result.ntuples == 1
35
37
  puts "Found #{object_type}"
36
38
  result[0]
@@ -0,0 +1,17 @@
1
+ $LOAD_PATH.unshift("#{File.dirname(__FILE__)}")
2
+
3
+ module EnrichmentDb::Helper
4
+ def self.float_str_to_float(str)
5
+ if str.match(/^[0-9\.-]*$/)
6
+ str.to_f
7
+ else
8
+ str
9
+ end
10
+ end
11
+
12
+ def self.hash_float_str_to_float(hash)
13
+ hash.each_with_object({}) do |(k, v), h|
14
+ h[k] = float_str_to_float(v)
15
+ end
16
+ end
17
+ end
@@ -1,3 +1,3 @@
1
1
  module EnrichmentDb
2
- VERSION = "0.1.4"
2
+ VERSION = '0.1.5'
3
3
  end
data/lib/enrichment_db.rb CHANGED
@@ -35,4 +35,6 @@ module EnrichmentDb
35
35
  end
36
36
 
37
37
  require 'enrichment_db/geo'
38
+ require 'enrichment_db/census'
39
+ require 'datum'
38
40
  require 'db'
@@ -0,0 +1,10 @@
1
+ require "#{File.dirname(__FILE__)}/../test_helper"
2
+
3
+ describe EnrichmentDb::Census::Datum do
4
+ it 'should retrieve correct record' do
5
+ result = EnrichmentDb::Census::Datum.by_id('selected_medians_and_averages', '3000')
6
+ assert_equal 3000, result['region_id']
7
+ assert_equal 'Postcodes', result['region_type']
8
+ assert_equal 26, result['median_age_of_persons']
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ describe EnrichmentDb::Datum do
4
+ it 'should get correct ato record' do
5
+ condition = "region_id = '3000'"
6
+ result = EnrichmentDb::Datum.by_id('ato', 'taxable_incomes', condition)
7
+ region = result.first
8
+ assert_equal '3000', region['region_id']
9
+ assert_equal 'Postcodes', region['region_type']
10
+ assert_equal '51948.229', region['taxable_income']
11
+ end
12
+ end
data/test/db_test.rb ADDED
@@ -0,0 +1,27 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ describe EnrichmentDb do
4
+ it 'should list all table names for geo schema' do
5
+ result = EnrichmentDb.table_names('geo')
6
+ geo_table_count = 7
7
+ assert_equal geo_table_count, result.size
8
+ end
9
+
10
+ it 'should list all table names for census schema' do
11
+ result = EnrichmentDb.table_names('censis')
12
+ census_table_count = 33
13
+ assert_equal census_table_count, result.size
14
+ end
15
+
16
+ it 'should list table columns from geo.sa1 table' do
17
+ result = EnrichmentDb.table_columns('sa1s', 'geo')
18
+ sa1s_column_count = 8
19
+ assert_equal sa1s_column_count, result.size
20
+ end
21
+
22
+ it 'should list table columns from censis.selected_medians_and_averages table' do
23
+ result = EnrichmentDb.table_columns('selected_medians_and_averages', 'censis')
24
+ sa1s_column_count = 8
25
+ assert_equal sa1s_column_count, result.size
26
+ end
27
+ end
@@ -9,33 +9,31 @@ describe EnrichmentDb::Geo::Locator do
9
9
  assert_equal id, result
10
10
  end
11
11
 
12
- it 'should correctly format a has to a latlong' do
12
+ it 'should correctly format a hash to a latlong' do
13
13
  lat = 10
14
14
  long = 180
15
15
  lat_long = { 'lat' => lat, 'long' => long }
16
- geohash = EnrichmentDb::Geo::Locator.format_geo(lat_long)
17
- assert_equal 'xczbzurypzpg', geohash
16
+ begin
17
+ geohash = EnrichmentDb::Geo::Locator.format_geo(lat_long)
18
+ rescue EnrichmentDb::InvalidGeoPointFormat => e
19
+ # Should get here
20
+ else
21
+ flunk('This should have errored out.')
22
+ end
18
23
  end
19
24
 
20
25
  it 'should break as the lat long format is incorrect' do
21
26
  lat = 10
22
27
  long = 180
23
28
  lat_long = { 'lat' => lat, 'lon' => long }
24
- begin
25
- EnrichmentDb::Geo::Locator.format_geo(lat_long)
26
- rescue EnrichmentDb::InvalidGeoPointFormat => e
27
-
28
- else
29
- flunk('This should have errored out.')
30
- end
29
+ geohash = EnrichmentDb::Geo::Locator.format_geo(lat_long)
30
+ assert_equal 'xczbzurypzpg', geohash
31
31
  end
32
32
 
33
- it 'should ' do
33
+ it 'should find region from geohash' do
34
34
  geo = 'r1r0g2e'
35
35
  result = EnrichmentDb::Geo::Locator.geo_locate(geo)
36
- puts result.smallest_region.inspect
37
- puts result.name.inspect
38
- puts result.inspect
36
+ assert_equal ':sa4', result.smallest_region.inspect
37
+ assert_equal 'Melbourne - Inner', result.name
39
38
  end
40
-
41
39
  end
@@ -0,0 +1,28 @@
1
+ require "#{File.dirname(__FILE__)}/test_helper"
2
+
3
+ describe EnrichmentDb::Helper do
4
+ it 'should convert float str to float' do
5
+ result = EnrichmentDb::Helper.float_str_to_float('26')
6
+ assert_equal 26, result
7
+ end
8
+
9
+ it 'should not convert float str to float' do
10
+ input = 's26'
11
+ result = EnrichmentDb::Helper.float_str_to_float(input)
12
+ assert_equal input, result
13
+ end
14
+
15
+ it 'should convert hash with float str values to float values' do
16
+ input = { 'er' => '-26', 'rt' => '234567.43' }
17
+ result = EnrichmentDb::Helper.hash_float_str_to_float(input)
18
+ expecting = { 'er' => -26, 'rt' => 234567.43 }
19
+ assert_equal expecting, result
20
+ end
21
+
22
+ it 'should partially convert hash with float str values to float values' do
23
+ input = { 'er' => '-26', 'rt' => '23s4567.43' }
24
+ result = EnrichmentDb::Helper.hash_float_str_to_float(input)
25
+ expecting = { 'er' => -26, 'rt' => '23s4567.43' }
26
+ assert_equal expecting, result
27
+ end
28
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enrichment_db
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Wallis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-09-06 00:00:00.000000000 Z
11
+ date: 2015-10-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: multi_json
@@ -58,15 +58,19 @@ executables: []
58
58
  extensions: []
59
59
  extra_rdoc_files: []
60
60
  files:
61
- - ".DS_Store"
61
+ - ".gitignore"
62
62
  - Gemfile
63
63
  - Gemfile.lock
64
64
  - LICENSE
65
65
  - README.md
66
66
  - Rakefile
67
+ - enrichment_db-0.1.4.gem
67
68
  - enrichment_db.gemspec
68
69
  - lib/enrichment_db.rb
69
70
  - lib/enrichment_db/.DS_Store
71
+ - lib/enrichment_db/census.rb
72
+ - lib/enrichment_db/census/datum.rb
73
+ - lib/enrichment_db/datum.rb
70
74
  - lib/enrichment_db/db.rb
71
75
  - lib/enrichment_db/error.rb
72
76
  - lib/enrichment_db/geo.rb
@@ -79,8 +83,11 @@ files:
79
83
  - lib/enrichment_db/geo/sa4.rb
80
84
  - lib/enrichment_db/geo/state.rb
81
85
  - lib/enrichment_db/geo/suburb.rb
86
+ - lib/enrichment_db/helper.rb
82
87
  - lib/enrichment_db/version.rb
83
- - test/.DS_Store
88
+ - test/census/datum_test.rb
89
+ - test/datum_test.rb
90
+ - test/db_test.rb
84
91
  - test/factories/postcode.rb
85
92
  - test/factories/sa1.rb
86
93
  - test/factories/sa2.rb
@@ -89,7 +96,7 @@ files:
89
96
  - test/factories/state.rb
90
97
  - test/factories/suburb.rb
91
98
  - test/geo/locator_test.rb
92
- - test/reports/TEST-EnrichmentDb-Geo-Locator.xml
99
+ - test/helper_test.rb
93
100
  - test/test_helper.rb
94
101
  homepage: https://github.com/lexerdev/enrichment-db.gem
95
102
  licenses:
@@ -116,15 +123,19 @@ signing_key:
116
123
  specification_version: 4
117
124
  summary: Lexer Enrichment Database Gem
118
125
  test_files:
119
- - ".DS_Store"
126
+ - ".gitignore"
120
127
  - Gemfile
121
128
  - Gemfile.lock
122
129
  - LICENSE
123
130
  - README.md
124
131
  - Rakefile
132
+ - enrichment_db-0.1.4.gem
125
133
  - enrichment_db.gemspec
126
134
  - lib/enrichment_db.rb
127
135
  - lib/enrichment_db/.DS_Store
136
+ - lib/enrichment_db/census.rb
137
+ - lib/enrichment_db/census/datum.rb
138
+ - lib/enrichment_db/datum.rb
128
139
  - lib/enrichment_db/db.rb
129
140
  - lib/enrichment_db/error.rb
130
141
  - lib/enrichment_db/geo.rb
@@ -137,8 +148,11 @@ test_files:
137
148
  - lib/enrichment_db/geo/sa4.rb
138
149
  - lib/enrichment_db/geo/state.rb
139
150
  - lib/enrichment_db/geo/suburb.rb
151
+ - lib/enrichment_db/helper.rb
140
152
  - lib/enrichment_db/version.rb
141
- - test/.DS_Store
153
+ - test/census/datum_test.rb
154
+ - test/datum_test.rb
155
+ - test/db_test.rb
142
156
  - test/factories/postcode.rb
143
157
  - test/factories/sa1.rb
144
158
  - test/factories/sa2.rb
@@ -147,5 +161,6 @@ test_files:
147
161
  - test/factories/state.rb
148
162
  - test/factories/suburb.rb
149
163
  - test/geo/locator_test.rb
150
- - test/reports/TEST-EnrichmentDb-Geo-Locator.xml
164
+ - test/helper_test.rb
151
165
  - test/test_helper.rb
166
+ has_rdoc:
data/.DS_Store DELETED
Binary file
data/test/.DS_Store DELETED
Binary file
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <testsuite name="EnrichmentDb::Geo::Locator" skipped="0" failures="0" errors="0" tests="4" assertions="2" time="6.202437521191314">
3
- <testcase name="test_0004_should " classname="EnrichmentDb::Geo::Locator" assertions="0" time="6.202266245032661">
4
- </testcase>
5
- <testcase name="test_0003_should break as the lat long format is incorrect" classname="EnrichmentDb::Geo::Locator" assertions="0" time="6.976805161684752e-05">
6
- </testcase>
7
- <testcase name="test_0002_should correctly format a has to a latlong" classname="EnrichmentDb::Geo::Locator" assertions="1" time="8.18880507722497e-05">
8
- </testcase>
9
- <testcase name="test_0001_should find id from a hash of hashes" classname="EnrichmentDb::Geo::Locator" assertions="1" time="1.962005626410246e-05">
10
- </testcase>
11
- </testsuite>