geolocal 0.8.1 → 0.9

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: 47113ceb0b482073f831d29622e2bc7beb06131f
4
- data.tar.gz: b311e669ffa4b394edc577e6d4d20c307366872b
3
+ metadata.gz: 65d27c3ffbd6c516bc62cb08663fd536472a24ef
4
+ data.tar.gz: 85c77e798dab700c8ddb602fce533fad7794b46a
5
5
  SHA512:
6
- metadata.gz: d66866807b4ac24c99024652453cdbd677f0ea1689df1aa367832bf49e9071e1b295f0ec9293c8fe8f5aac703b2eddeba745254ed4d46de94dd145d1adb4db75
7
- data.tar.gz: b0ab1135e3bc4b53af4849dd6ed8163c951a78e66c01d6e12c5c28bc1b6b6cc0227ca61f99d7b9c9101fd92c69ffb24c737f269bceff30b10500f8689199c94f
6
+ metadata.gz: 8e94cb66a6465c12d7b8111fc99eca1cc2a800bcc7e0e98abfbe42f690cb03ba835ba88665be74330e85eeb9e314bcd8ee98f902ff9fcad989b9717455047cbe
7
+ data.tar.gz: c97b4d0bc05f06481587c39b1410450036cf83887ee2188870b2e007c6a940914382c44e4a7bea0076a342fa400c098ab1b61f7f5ac52dcc6ff0f8edfc1f192c
data/README.md CHANGED
@@ -24,6 +24,7 @@ The config file describes the ranges you're interested in.
24
24
  Here's an example:
25
25
 
26
26
  ```ruby
27
+ require 'geolocal/configuration'
27
28
  Geolocal.configure do |config|
28
29
  config.countries = {
29
30
  us: 'US',
@@ -38,6 +39,7 @@ from the default provider (see the [providers](#providers) section) and
38
39
  creates the desired methods:
39
40
 
40
41
  ```ruby
42
+ require 'geolocal'
41
43
  Geolocal.in_us?(request.remote_ip)
42
44
  Geolocal.in_spain?('2a05:af06::') # optional IPv6 support
43
45
  Geolocal.in_central_america?('200.16.66.0')
@@ -1,4 +1,4 @@
1
- require 'geolocal'
1
+ require 'geolocal/configuration'
2
2
 
3
3
  Geolocal.configure do |config|
4
4
  # This example creates a Geolocal.in_us?(addr) command:
@@ -1,4 +1,4 @@
1
- require 'geolocal'
1
+ require 'geolocal/configuration'
2
2
 
3
3
  Geolocal.configure do |config|
4
4
  # This example creates a Geolocal.in_us?(addr) command:
@@ -1,32 +1,5 @@
1
- require 'geolocal/version'
2
- require 'geolocal/configuration'
3
- require 'geolocal/provider/base'
4
-
5
-
1
+ # If you're wondering why nothing's here, you probably wanted to require 'geolocal/configuration'
2
+ # Once you define a configuration and generate the geolocation code, this module will have contents.
6
3
  module Geolocal
7
4
  require 'geolocal/railtie' if defined? Rails
8
-
9
- def self.configuration
10
- @configuration ||= Configuration.new
11
- end
12
-
13
- def self.configure
14
- yield(configuration)
15
- end
16
-
17
- def self.reset_configuration
18
- @configuration = nil
19
- end
20
-
21
- def self.provider
22
- @provider ||= configuration.load_provider.new
23
- end
24
-
25
- def self.download
26
- provider.download
27
- end
28
-
29
- def self.update
30
- provider.update
31
- end
32
5
  end
@@ -1,45 +1,60 @@
1
- class Configuration
2
- OPTIONS = [ :provider, :module, :file, :tmpdir, :ipv4, :ipv6, :quiet, :countries ]
3
- attr_accessor(*OPTIONS)
4
-
5
- def initialize
6
- # configuration defaults
7
- @provider = 'Geolocal::Provider::DB_IP'
8
- @module = 'Geolocal'
9
- @file = nil # default is computed
10
- @tmpdir = 'tmp/geolocal'
11
- @ipv4 = true
12
- @ipv6 = true
13
- @quiet = false
14
- @countries = {}
15
- end
1
+ module Geolocal
2
+ class Configuration
3
+ OPTIONS = [ :provider, :module, :file, :tmpdir, :ipv4, :ipv6, :quiet, :countries ]
4
+ attr_accessor(*OPTIONS)
16
5
 
17
- # if not set, defaults to lib/module-name
18
- def file
19
- @file || "lib/#{module_file @module}.rb"
20
- end
6
+ def initialize
7
+ # configuration defaults
8
+ @provider = 'Geolocal::Provider::DB_IP'
9
+ @module = 'Geolocal'
10
+ @file = nil # default is computed
11
+ @tmpdir = 'tmp/geolocal'
12
+ @ipv4 = true
13
+ @ipv6 = true
14
+ @quiet = false
15
+ @countries = {}
16
+ end
17
+
18
+ # if not set, defaults to lib/module-name
19
+ def file
20
+ @file || "lib/#{module_file @module}.rb"
21
+ end
22
+
23
+ def require_provider_file
24
+ begin
25
+ # normal ruby/gem load path
26
+ Kernel.require module_file(@provider)
27
+ rescue LoadError
28
+ # used when running source code locally
29
+ Kernel.require "./lib/#{module_file(@provider)}.rb"
30
+ end
31
+ end
32
+
33
+ def load_provider
34
+ require_provider_file
35
+ @provider.split('::').reduce(Module, :const_get)
36
+ end
21
37
 
22
- def require_provider_file
23
- begin
24
- # normal ruby/gem load path
25
- Kernel.require module_file(@provider)
26
- rescue LoadError
27
- # used when running source code locally
28
- Kernel.require "./lib/#{module_file(@provider)}.rb"
38
+ def to_hash
39
+ # returned keys will always be symbols
40
+ OPTIONS.reduce({}) { |a,v| a.merge! v => self.send(v) }
41
+ end
42
+
43
+ def module_file modname
44
+ modname.gsub('::', '/').gsub(/([a-z])([A-Z])/, '\1_\2').downcase
29
45
  end
30
46
  end
31
47
 
32
- def load_provider
33
- require_provider_file
34
- @provider.split('::').reduce(Module, :const_get)
48
+
49
+ def self.configuration
50
+ @configuration ||= Configuration.new
35
51
  end
36
52
 
37
- def to_hash
38
- # returned keys will always be symbols
39
- OPTIONS.reduce({}) { |a,v| a.merge! v => self.send(v) }
53
+ def self.configure
54
+ yield(configuration)
40
55
  end
41
56
 
42
- def module_file modname
43
- modname.gsub('::', '/').gsub(/([a-z])([A-Z])/, '\1_\2').downcase
57
+ def self.reset_configuration
58
+ @configuration = nil
44
59
  end
45
60
  end
@@ -47,7 +47,7 @@ module Geolocal
47
47
  end
48
48
 
49
49
  def countries
50
- @countries ||= config[:countries].sort_by { |k, v| k }.reduce({}) { |a, (k, v)|
50
+ @countries ||= config[:countries].sort_by { |k, v| k.to_s }.reduce({}) { |a, (k, v)|
51
51
  k = k.to_s.gsub(/[ -]/, '_')
52
52
  raise "invalid identifier: '#{k}'" if k =~ /^[^A-Za-z_]|[^A-Za-z0-9_]|^\s*$/
53
53
  a.merge! k.to_s.downcase => Array(v).map { |c| c.to_s.upcase }.sort.to_set
@@ -1,3 +1,5 @@
1
+ require 'geolocal/provider/base'
2
+
1
3
  require 'csv'
2
4
  require 'net/http'
3
5
  require 'fileutils'
@@ -69,6 +71,7 @@ class Geolocal::Provider::DB_IP < Geolocal::Provider::Base
69
71
  end
70
72
 
71
73
  # a bit of debugging code to print all non-matched country codes. should be deleted one day.
74
+ # The Countries gem doesn't know about these country codes from the csv: CS FX UK YU TP and blank
72
75
  def check_country_codes(countries, row)
73
76
  @known_codes ||= countries.reduce(Set.new) { |a,(_,v)| a.merge v; a }
74
77
  unless @known_codes.include?(row[2])
@@ -1,3 +1,3 @@
1
1
  module Geolocal
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9"
3
3
  end
@@ -7,18 +7,18 @@ config='config/geolocal'
7
7
  # `rake geolocal config=contrib/continents`
8
8
  config=ENV['config'] if ENV['config']
9
9
  puts "loading geolocal configuration from #{config}"
10
- require './'+config
10
+ require './' + config
11
11
 
12
12
 
13
13
  namespace :geolocal do
14
14
  desc "Downloads the most recent geocoding information"
15
15
  task :download do
16
- Geolocal.download
16
+ Geolocal.configuration.load_provider.new.download
17
17
  end
18
18
 
19
19
  desc "Updates your geocoding statements to use new data."
20
20
  task :update => :download do
21
- Geolocal.update
21
+ Geolocal.configuration.load_provider.new.update
22
22
  end
23
23
  end
24
24
 
@@ -50,7 +50,7 @@ describe Geolocal::Provider::Base do
50
50
  describe '#countries' do
51
51
  it 'preprocesses the countries' do
52
52
  Geolocal.configure do |config|
53
- config.countries = { ua: :UA, na: ['MX', 'CA', :US] }
53
+ config.countries = { ua: :UA, Na: ['MX', 'CA', :US] }
54
54
  end
55
55
 
56
56
  expect(provider.countries).to eq({ 'na' => Set['CA', 'MX', 'US'], 'ua' => Set['UA'] })
@@ -58,7 +58,7 @@ describe Geolocal::Provider::Base do
58
58
 
59
59
  it 'preprocesses countries with an odd name' do
60
60
  Geolocal.configure do |config|
61
- config.countries = { 'U s-a': 'US', 'Mex': 'MX' }
61
+ config.countries = { 'U s-a' => 'US', mex: 'MX' }
62
62
  end
63
63
 
64
64
  expect(provider.countries).to eq({ 'mex' => Set['MX'], 'u_s_a' => Set['US'] })
@@ -1,4 +1,4 @@
1
- require 'geolocal'
1
+ require 'geolocal/configuration'
2
2
  require 'webmock/rspec'
3
3
 
4
4
  WebMock.disable_net_connect!(allow_localhost: true)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geolocal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: '0.9'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Bronson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-08 00:00:00.000000000 Z
11
+ date: 2015-02-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler