geo_locale 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +21 -0
- data/README.md +9 -17
- data/geo_locale.gemspec +2 -1
- data/lib/geo_locale.rb +3 -3
- data/lib/geo_locale/country_code.rb +25 -22
- data/lib/geo_locale/locale.rb +28 -42
- data/lib/geo_locale/version.rb +1 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/tests/geolocation_spec.rb +1 -1
- data/spec/tests/locale_spec.rb +4 -3
- data/spec/tests/localhost_spec.rb +37 -0
- metadata +23 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13683f5ea4a417b4ba4935733dd2f6def4c8e61b
|
4
|
+
data.tar.gz: ecf16608e29da3c55ceff586e93060bf08e50d98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e6b16e1edf3fe8555bb31bf04fa97b54e28741b94aaa359c2f7a9d20eb42a3324cb8f755a98478577f394b3eb92e44694e048f06e3b91c775339f11f579daa1
|
7
|
+
data.tar.gz: 2eed2ced8a8a41db5e41f2e17d59475dbbdc777a955465ef6925d272fb0f99172c8f4b9c7de82cf43cef18ee4a8fc6434d377de932a1f3020db06fc03aa00cc0
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# Change Log
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
This project adheres to [Semantic Versioning](http://semver.org/).
|
4
|
+
|
5
|
+
## [Release candidate][ - - ]
|
6
|
+
### Changed
|
7
|
+
-
|
8
|
+
|
9
|
+
## [0.1.1] - 2015-10-02
|
10
|
+
### Added
|
11
|
+
- Localhost (127.0.0.1) is now quick-resolved to a locale defined in configuration for faster devving
|
12
|
+
|
13
|
+
## [0.1.0] - 2015-01-01
|
14
|
+
### Added
|
15
|
+
- Initial release with basic functionality described in README
|
16
|
+
### Changed
|
17
|
+
- Nothing
|
18
|
+
### Fixed
|
19
|
+
- Nothing
|
20
|
+
### Removed
|
21
|
+
- Nothing
|
data/README.md
CHANGED
@@ -1,34 +1,25 @@
|
|
1
1
|
# GeoLocale
|
2
|
-
|
3
2
|
Simple wrapper for GeoIP gem with some redundancy on GeoKit to get a two-letter country code or locale from an IP address.
|
4
3
|
|
5
|
-
Basic use-case
|
4
|
+
## Basic use-case
|
5
|
+
Detect application user's origin and display app in that language.
|
6
6
|
|
7
7
|
## Requirements
|
8
|
-
|
9
|
-
Ruby 2.0.0 and greater
|
8
|
+
Ruby 2.0.0 and greater.
|
10
9
|
|
11
10
|
## Installation
|
12
11
|
|
13
|
-
Add this line to your application's Gemfile:
|
14
|
-
|
15
12
|
```ruby
|
16
|
-
|
13
|
+
# in Gemfile
|
14
|
+
gem 'geo_locale' # and bundle
|
17
15
|
```
|
18
16
|
|
19
|
-
And then execute:
|
20
|
-
|
21
|
-
$ bundle
|
22
|
-
|
23
|
-
Or install it yourself as:
|
24
|
-
|
25
|
-
$ gem install geo_locale
|
26
|
-
|
27
17
|
## Usage
|
28
18
|
Configure default locales
|
29
19
|
```ruby
|
30
20
|
# in /config/initializers/geo_locale.rb
|
31
21
|
GeoLocale.configure do |config|
|
22
|
+
config.localhost_country = "lv" # set the country to return for localhost, this country's locale and lcid will also be used for localhost
|
32
23
|
config.default_country = "de" # set to nil or false if you want to catch fails in geolocation
|
33
24
|
config.default_locale = "en" # country->locale conversion is minimal for now, set this explicitly to ensure GeoLocale.locale returns useful value
|
34
25
|
config.default_lcid = "en-us"
|
@@ -36,7 +27,7 @@ GeoLocale.configure do |config|
|
|
36
27
|
end
|
37
28
|
```
|
38
29
|
|
39
|
-
To get country code:
|
30
|
+
### To get country code:
|
40
31
|
|
41
32
|
def self.country_code (ip: "")
|
42
33
|
|
@@ -46,7 +37,7 @@ GeoLocale.country_code(ip: request.remote_ip)
|
|
46
37
|
=> "en"
|
47
38
|
```
|
48
39
|
|
49
|
-
To get locale:
|
40
|
+
### To get locale:
|
50
41
|
|
51
42
|
def self.locale (ip: "", country_code: "", lcid: false)
|
52
43
|
```ruby
|
@@ -69,6 +60,7 @@ GeoLocale.locale(ip: "97.77.25.20", country_code: "lv")
|
|
69
60
|
|
70
61
|
1. Extend the country_code => locale hash in lib/geo_locale/locale.rb
|
71
62
|
2. Open the hash to configuration overrides
|
63
|
+
3. Automagically make initializer file for rails projects
|
72
64
|
|
73
65
|
## Contributing
|
74
66
|
|
data/geo_locale.gemspec
CHANGED
@@ -21,9 +21,10 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
spec.rubyforge_project = "geo_locale"
|
23
23
|
|
24
|
-
spec.add_development_dependency "bundler"
|
24
|
+
spec.add_development_dependency "bundler"
|
25
25
|
spec.add_development_dependency "rake", "~> 10.0"
|
26
26
|
spec.add_development_dependency 'rspec', "~> 3.1.0"
|
27
|
+
spec.add_development_dependency 'pry'
|
27
28
|
|
28
29
|
spec.add_dependency 'geoip'
|
29
30
|
spec.add_dependency 'geokit'
|
data/lib/geo_locale.rb
CHANGED
@@ -8,6 +8,8 @@ require 'geokit-rails'
|
|
8
8
|
module GeoLocale
|
9
9
|
class << self
|
10
10
|
attr_accessor :config
|
11
|
+
GeoLocale::ROOT = File.expand_path("../..", __FILE__)
|
12
|
+
GeoLocale::LOCALHOST_IP = "127.0.0.1"
|
11
13
|
end
|
12
14
|
|
13
15
|
def self.configure
|
@@ -16,7 +18,7 @@ module GeoLocale
|
|
16
18
|
end
|
17
19
|
|
18
20
|
class Config
|
19
|
-
attr_accessor :default_country, :default_locale, :default_lcid, :overrides
|
21
|
+
attr_accessor :localhost_country, :default_country, :default_locale, :default_lcid, :overrides
|
20
22
|
|
21
23
|
def initialize
|
22
24
|
@default_country = "us"
|
@@ -27,6 +29,4 @@ module GeoLocale
|
|
27
29
|
end
|
28
30
|
|
29
31
|
GeoLocale.configure {}
|
30
|
-
ROOT = File.expand_path("../..", __FILE__)
|
31
|
-
|
32
32
|
end
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module GeoLocale
|
2
2
|
IP_REGEX = /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/
|
3
3
|
|
4
|
-
def self.country_code
|
4
|
+
def self.country_code(ip: "") # ip = "12.12.12.12"
|
5
|
+
return GeoLocale.config.localhost_country if ip == GeoLocale::LOCALHOST_IP && GeoLocale.config.localhost_country.present?
|
5
6
|
country_code = GeoLocale.geo_ip_try(ip)
|
6
7
|
if country_code.present?
|
7
8
|
return country_code
|
@@ -16,31 +17,33 @@ module GeoLocale
|
|
16
17
|
end
|
17
18
|
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
return GeoLocale.config.overrides["#{code}"]
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.geo_ip_try(ip)
|
23
|
+
begin
|
24
|
+
return nil unless ip.match(GeoLocale::IP_REGEX).present?
|
25
|
+
code = GeoIP.new("#{GeoLocale::ROOT}/lib/data/GeoIP.dat").country(ip).country_code2.downcase
|
26
|
+
if code == "--"
|
27
|
+
return nil
|
28
28
|
else
|
29
|
-
|
29
|
+
if GeoLocale.config.overrides["#{code}"].present?
|
30
|
+
return GeoLocale.config.overrides["#{code}"]
|
31
|
+
else
|
32
|
+
return code
|
33
|
+
end
|
30
34
|
end
|
35
|
+
rescue
|
36
|
+
nil
|
31
37
|
end
|
32
|
-
rescue
|
33
|
-
nil
|
34
38
|
end
|
35
|
-
end
|
36
39
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
40
|
+
def self.geokit_try(ip)
|
41
|
+
return nil unless ip.match(GeoLocale::IP_REGEX).present?
|
42
|
+
begin
|
43
|
+
return Geokit::Geocoders::MultiGeocoder.geocode(ip).country_code.downcase
|
44
|
+
rescue
|
45
|
+
nil
|
46
|
+
end
|
43
47
|
end
|
44
|
-
end
|
45
48
|
|
46
|
-
end
|
49
|
+
end
|
data/lib/geo_locale/locale.rb
CHANGED
@@ -1,34 +1,8 @@
|
|
1
1
|
module GeoLocale
|
2
2
|
|
3
|
-
def self.locale (ip: "", country_code:
|
4
|
-
|
5
|
-
|
6
|
-
locale = GeoLocale::LOCALE[country_code]
|
7
|
-
return figure_out_returnable_locale(locale: locale)
|
8
|
-
else
|
9
|
-
lcid_string = GeoLocale::LCID[country_code]
|
10
|
-
return figure_out_returnable_lcid(lcid_string: lcid_string)
|
11
|
-
end
|
12
|
-
|
13
|
-
elsif ip.present?
|
14
|
-
country_code = GeoLocale.country_code(ip: ip)
|
15
|
-
unless lcid
|
16
|
-
locale = GeoLocale::LOCALE[country_code]
|
17
|
-
return figure_out_returnable_locale(locale: locale)
|
18
|
-
else
|
19
|
-
lcid_string = GeoLocale::LCID[country_code]
|
20
|
-
return figure_out_returnable_lcid(lcid_string: lcid_string)
|
21
|
-
end
|
22
|
-
|
23
|
-
else
|
24
|
-
unless lcid
|
25
|
-
locale = GeoLocale::LOCALE["#{GeoLocale.config.default_country}"]
|
26
|
-
return figure_out_returnable_locale(locale: locale)
|
27
|
-
else
|
28
|
-
lcid_string = GeoLocale::LCID["#{GeoLocale.config.default_country}"]
|
29
|
-
return figure_out_returnable_lcid(lcid_string: lcid_string)
|
30
|
-
end
|
31
|
-
end
|
3
|
+
def self.locale (ip: "", country_code: nil, lcid: false)
|
4
|
+
country_code ||= GeoLocale.country_code(ip: ip)
|
5
|
+
GeoLocale.get_locale_or_lcid(country_code: country_code, lcid: lcid)
|
32
6
|
end
|
33
7
|
|
34
8
|
LOCALE = {
|
@@ -59,21 +33,33 @@ module GeoLocale
|
|
59
33
|
"fr" => "fr"
|
60
34
|
}
|
61
35
|
|
36
|
+
private
|
62
37
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
38
|
+
def self.get_locale_or_lcid(country_code:, lcid: false)
|
39
|
+
if lcid
|
40
|
+
lcid_string = GeoLocale::LCID[country_code]
|
41
|
+
return figure_out_returnable_lcid(lcid_string: lcid_string)
|
42
|
+
else
|
43
|
+
locale = GeoLocale::LOCALE[country_code]
|
44
|
+
return figure_out_returnable_locale(locale: locale)
|
45
|
+
end
|
68
46
|
end
|
69
|
-
end
|
70
47
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
48
|
+
|
49
|
+
def self.figure_out_returnable_locale(locale: "")
|
50
|
+
if locale.present?
|
51
|
+
return locale
|
52
|
+
else
|
53
|
+
return GeoLocale.config.default_locale
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def self.figure_out_returnable_lcid(lcid_string: "")
|
58
|
+
if lcid_string.present?
|
59
|
+
return lcid_string
|
60
|
+
else
|
61
|
+
return GeoLocale.config.default_lcid
|
62
|
+
end
|
76
63
|
end
|
77
|
-
end
|
78
64
|
|
79
|
-
end
|
65
|
+
end
|
data/lib/geo_locale/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/spec/tests/locale_spec.rb
CHANGED
@@ -35,8 +35,9 @@ describe "Locale interpret" do
|
|
35
35
|
end
|
36
36
|
context "with customized config" do
|
37
37
|
it "should return de if no arguments given" do
|
38
|
-
GeoLocale.config.
|
39
|
-
|
38
|
+
GeoLocale.config.default_locale = "ch"
|
39
|
+
puts GeoLocale.config.inspect
|
40
|
+
expect( GeoLocale.locale(country_code: "") ).to eq "ch"
|
40
41
|
end
|
41
42
|
it 'should return lv for country_code: "lv"' do
|
42
43
|
GeoLocale.config.default_country = "de"
|
@@ -107,4 +108,4 @@ describe "Locale interpret" do
|
|
107
108
|
|
108
109
|
|
109
110
|
|
110
|
-
end
|
111
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
# rspec spec/tests/localhost_spec.rb
|
4
|
+
describe "Geolocation" do
|
5
|
+
before :each do
|
6
|
+
GeoLocale.configure do |config|
|
7
|
+
config.localhost_country = "lt"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "Localhost" do
|
12
|
+
describe "#country_code" do
|
13
|
+
it "should return the configured country code" do
|
14
|
+
expect(GeoLocale.country_code(ip: "127.0.0.1")).to eq "lt"
|
15
|
+
end
|
16
|
+
it "should return the gem default country_code if not configured" do
|
17
|
+
GeoLocale.config = nil
|
18
|
+
GeoLocale.configure {}
|
19
|
+
expect(GeoLocale.config.default_country).to eq "us"
|
20
|
+
expect(GeoLocale.country_code(ip: "127.0.0.1")).to eq "us"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "#locale" do
|
25
|
+
it "should return the configured locale" do
|
26
|
+
expect(GeoLocale.locale(ip: "127.0.0.1")).to eq "lt"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#locale/lcid" do
|
31
|
+
it "should return the configured lcid" do
|
32
|
+
expect(GeoLocale.locale(ip: "127.0.0.1", lcid: true)).to eq "lt"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
metadata
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo_locale
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Epigene
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
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:
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 3.1.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
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'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: geoip
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,6 +117,7 @@ extra_rdoc_files: []
|
|
103
117
|
files:
|
104
118
|
- ".gitignore"
|
105
119
|
- ".rspec"
|
120
|
+
- CHANGELOG.md
|
106
121
|
- Gemfile
|
107
122
|
- LICENSE.txt
|
108
123
|
- README.md
|
@@ -117,6 +132,7 @@ files:
|
|
117
132
|
- spec/tests/geolocation_spec.rb
|
118
133
|
- spec/tests/initialize_spec.rb
|
119
134
|
- spec/tests/locale_spec.rb
|
135
|
+
- spec/tests/localhost_spec.rb
|
120
136
|
homepage: ''
|
121
137
|
licenses:
|
122
138
|
- MIT
|
@@ -146,3 +162,4 @@ test_files:
|
|
146
162
|
- spec/tests/geolocation_spec.rb
|
147
163
|
- spec/tests/initialize_spec.rb
|
148
164
|
- spec/tests/locale_spec.rb
|
165
|
+
- spec/tests/localhost_spec.rb
|