world-flags 0.4.7 → 0.4.8.2
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.
- data/Gemfile +5 -2
- data/Gemfile.lock +31 -0
- data/README.md +9 -1
- data/VERSION +1 -1
- data/lib/generators/world_flags/GeoIP.dat +0 -0
- data/lib/generators/world_flags/geoip_generator.rb +87 -0
- data/lib/world_flags/helper/geo.rb +4 -4
- data/lib/world_flags/helper/locale.rb +1 -1
- data/lib/world_flags/util/config.rb +1 -1
- data/world-flags.gemspec +13 -2
- metadata +53 -3
data/Gemfile
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
source :rubygems
|
2
2
|
|
3
|
-
gem
|
4
|
-
gem
|
3
|
+
gem "mechanize"
|
4
|
+
gem "resourceful", "~> 1.0.1"
|
5
|
+
gem "rubyzip", "~> 0.9.8"
|
6
|
+
gem 'hashie', '~> 1.2'
|
7
|
+
gem 'i18n', '~> 0.6'
|
5
8
|
|
6
9
|
# Add dependencies to develop your gem here.
|
7
10
|
# Include everything needed to run rake, tests, features, etc.
|
data/Gemfile.lock
CHANGED
@@ -28,14 +28,19 @@ GEM
|
|
28
28
|
activesupport (3.2.2)
|
29
29
|
i18n (~> 0.6)
|
30
30
|
multi_json (~> 1.0)
|
31
|
+
addressable (2.2.8)
|
31
32
|
arel (3.0.2)
|
32
33
|
builder (3.0.0)
|
33
34
|
diff-lcs (1.1.3)
|
35
|
+
domain_name (0.5.3)
|
36
|
+
unf (~> 0.0.3)
|
34
37
|
erubis (2.7.0)
|
38
|
+
fattr (2.2.1)
|
35
39
|
geoip (1.1.2)
|
36
40
|
git (1.2.5)
|
37
41
|
hashie (1.2.0)
|
38
42
|
hike (1.2.1)
|
43
|
+
httpauth (0.1)
|
39
44
|
i18n (0.6.0)
|
40
45
|
jeweler (1.8.3)
|
41
46
|
bundler (~> 1.0)
|
@@ -48,8 +53,22 @@ GEM
|
|
48
53
|
i18n (>= 0.4.0)
|
49
54
|
mime-types (~> 1.16)
|
50
55
|
treetop (~> 1.4.8)
|
56
|
+
mechanize (2.5.1)
|
57
|
+
domain_name (~> 0.5, >= 0.5.1)
|
58
|
+
mime-types (~> 1.17, >= 1.17.2)
|
59
|
+
net-http-digest_auth (~> 1.1, >= 1.1.1)
|
60
|
+
net-http-persistent (~> 2.5, >= 2.5.2)
|
61
|
+
nokogiri (~> 1.4)
|
62
|
+
ntlm-http (~> 0.1, >= 0.1.1)
|
63
|
+
webrobots (~> 0.0, >= 0.0.9)
|
51
64
|
mime-types (1.17.2)
|
52
65
|
multi_json (1.1.0)
|
66
|
+
net-http-digest_auth (1.2.1)
|
67
|
+
net-http-persistent (2.6)
|
68
|
+
nokogiri (1.5.2)
|
69
|
+
ntlm-http (0.1.1)
|
70
|
+
options (2.3.0)
|
71
|
+
fattr
|
53
72
|
polyglot (0.3.3)
|
54
73
|
rack (1.4.1)
|
55
74
|
rack-cache (1.2)
|
@@ -76,6 +95,10 @@ GEM
|
|
76
95
|
rake (0.9.2.2)
|
77
96
|
rdoc (3.12)
|
78
97
|
json (~> 1.4)
|
98
|
+
resourceful (1.0.1)
|
99
|
+
addressable (>= 2.1.0)
|
100
|
+
httpauth
|
101
|
+
options (>= 2.1.1)
|
79
102
|
rspec (2.9.0)
|
80
103
|
rspec-core (~> 2.9.0)
|
81
104
|
rspec-expectations (~> 2.9.0)
|
@@ -84,6 +107,7 @@ GEM
|
|
84
107
|
rspec-expectations (2.9.0)
|
85
108
|
diff-lcs (~> 1.1.3)
|
86
109
|
rspec-mocks (2.9.0)
|
110
|
+
rubyzip (0.9.8)
|
87
111
|
simplecov (0.6.1)
|
88
112
|
multi_json (~> 1.0)
|
89
113
|
simplecov-html (~> 0.5.3)
|
@@ -98,6 +122,10 @@ GEM
|
|
98
122
|
polyglot
|
99
123
|
polyglot (>= 0.3.1)
|
100
124
|
tzinfo (0.3.32)
|
125
|
+
unf (0.0.5)
|
126
|
+
unf_ext
|
127
|
+
unf_ext (0.0.4)
|
128
|
+
webrobots (0.0.13)
|
101
129
|
|
102
130
|
PLATFORMS
|
103
131
|
ruby
|
@@ -108,7 +136,10 @@ DEPENDENCIES
|
|
108
136
|
hashie (~> 1.2)
|
109
137
|
i18n (~> 0.6)
|
110
138
|
jeweler (>= 1.8.3)
|
139
|
+
mechanize
|
111
140
|
rails (>= 3.1)
|
112
141
|
rdoc (>= 3.12)
|
142
|
+
resourceful (~> 1.0.1)
|
113
143
|
rspec (>= 2.8.0)
|
144
|
+
rubyzip (~> 0.9.8)
|
114
145
|
simplecov (>= 0.5)
|
data/README.md
CHANGED
@@ -142,6 +142,14 @@ Extract and put latest `GeoIP.dat` file in `db/GeoIP.dat` of your Rails app. Alt
|
|
142
142
|
|
143
143
|
The _world-flags_ engine comes pre-packaged with a recent version of `GeoIP.dat` in the `db` folder of the engine itself.
|
144
144
|
|
145
|
+
### GeoIP generator
|
146
|
+
|
147
|
+
Copy WorldFlags GeoIP.dat to Rails app '/db/GeoIP.dat'
|
148
|
+
|
149
|
+
TODO: Should optimally fetch the one from maxmind.com
|
150
|
+
|
151
|
+
`rails g world_flags:geoip`
|
152
|
+
|
145
153
|
### Localhosts filtering
|
146
154
|
|
147
155
|
Also set `WorldFlags.localhost_list` if you have localhosts other than the default `127.0.0.1`.
|
@@ -160,7 +168,7 @@ Code extract of the locale source logic for browser IP country code detection:
|
|
160
168
|
|
161
169
|
```ruby
|
162
170
|
when :ip
|
163
|
-
|
171
|
+
country_code_from_ip browser_ip
|
164
172
|
```
|
165
173
|
|
166
174
|
## TODO for version 1.0
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.8.2
|
Binary file
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# require 'generators/world_flags/redirect_follower'
|
2
|
+
require 'resourceful'
|
3
|
+
require 'mechanize'
|
4
|
+
require 'zip/zip'
|
5
|
+
require 'fileutils'
|
6
|
+
|
7
|
+
module WorldFlags
|
8
|
+
module Generators
|
9
|
+
class GeoipGenerator < ::Rails::Generators::Base
|
10
|
+
desc "Copy IP database - GeoIP.dat"
|
11
|
+
|
12
|
+
class_option :local, :type => :boolean, :default => true, :desc => 'Use local cached GeoIP or retrieve latest from maxmind.com'
|
13
|
+
|
14
|
+
source_root File.dirname(__FILE__)
|
15
|
+
|
16
|
+
def main_flow
|
17
|
+
puts "local: #{local?}"
|
18
|
+
local? ? copy_local : download_latest
|
19
|
+
end
|
20
|
+
|
21
|
+
protected
|
22
|
+
|
23
|
+
def local?
|
24
|
+
!(options[:local] == false)
|
25
|
+
end
|
26
|
+
|
27
|
+
def copy_local
|
28
|
+
copy_file "GeoIP.dat", "db/GeoIP.dat"
|
29
|
+
end
|
30
|
+
|
31
|
+
def download_latest
|
32
|
+
# http = ::Resourceful::HttpAccessor.new
|
33
|
+
# resource = http.resource( zip_adr )
|
34
|
+
# # resource.on_redirect { |req, resp| resp.header['Location'] =~ /example.com/ }
|
35
|
+
# resp = resource.get # Will only follow the redirect if the new location is example.com
|
36
|
+
|
37
|
+
puts "get: #{file_name} from #{zip_adr}"
|
38
|
+
|
39
|
+
agent = Mechanize.new { |agent| agent.user_agent_alias = 'Mac Safari'}
|
40
|
+
agent.robots = false
|
41
|
+
|
42
|
+
# puts "robots allowed? #{agent.robots_allowed?}"
|
43
|
+
|
44
|
+
agent.pluggable_parser.default = Mechanize::Download
|
45
|
+
agent.get(zip_adr).save(file_name)
|
46
|
+
|
47
|
+
# File.open(file_name, 'w+') do |zip_file|
|
48
|
+
# zip_file.write(resp.body)
|
49
|
+
# end
|
50
|
+
#zf is an instance of class Tempfile
|
51
|
+
puts "zip path: #{zf.path}"
|
52
|
+
|
53
|
+
Zip::ZipFile.open(file_name) do |zipfile|
|
54
|
+
puts "zipfile: #{zipfile}"
|
55
|
+
#zipfile.class is Zip::ZipFile
|
56
|
+
zipfile.each do |e|
|
57
|
+
#e is an instance of Zip::ZipEntry
|
58
|
+
fpath = File.join file_name, e.to_s
|
59
|
+
FileUtils.mkdir_p File.dirname(target_location)
|
60
|
+
#the block is for handling an existing file. returning true will overwrite the files.
|
61
|
+
zipfile.extract(e, target_location) { true }
|
62
|
+
end
|
63
|
+
end
|
64
|
+
FileUtils.rm(file_name) # if options[:cleanup]
|
65
|
+
end
|
66
|
+
|
67
|
+
def agent_options
|
68
|
+
{"User-Agent" => "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.9) Gecko/20100402 Ubuntu/9.10 (karmic) Firefox/3.5.9", "From" => "foo@bar.com", "Referer" => "http://www.foo.bar/"}
|
69
|
+
end
|
70
|
+
|
71
|
+
def target_location
|
72
|
+
::Rails.root.join 'db', 'GeoIP.dat'
|
73
|
+
end
|
74
|
+
|
75
|
+
def zip_adr
|
76
|
+
"http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/#{file_name}"
|
77
|
+
end
|
78
|
+
|
79
|
+
def file_name
|
80
|
+
'GeoIP.dat.gz'
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
|
@@ -3,11 +3,11 @@ module WorldFlags
|
|
3
3
|
|
4
4
|
module Helper
|
5
5
|
module Geo
|
6
|
-
def self.
|
6
|
+
def self.country_code_from_ip ip = nil
|
7
7
|
ip ||= request.remote_ip
|
8
8
|
raise WorldFlags::GeoIPError, "IP address #{ip} is a localhost address" if local_ip?(ip)
|
9
9
|
|
10
|
-
@geoip ||= GeoIP.new WorldFlags.geo_ip_db_path
|
10
|
+
@geoip ||= ::GeoIP.new WorldFlags.geo_ip_db_path
|
11
11
|
country = @geoip.country(ip)
|
12
12
|
return country[2] unless country.nil?
|
13
13
|
raise WorldFlags::GeoIPError, "No country code could be found for IP: #{ip}"
|
@@ -17,8 +17,8 @@ module WorldFlags
|
|
17
17
|
WorldFlags.localhost_list.include?(ip)
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
21
|
-
WorldFlags::Helper::Geo.
|
20
|
+
def country_code_from_ip ip = nil
|
21
|
+
WorldFlags::Helper::Geo.country_code_from_ip ip
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
data/world-flags.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "world-flags"
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.8.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = "2012-05-
|
12
|
+
s.date = "2012-05-21"
|
13
13
|
s.description = "Use world flag icons in your Rails app"
|
14
14
|
s.email = "kmandrup@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -30,6 +30,8 @@ Gem::Specification.new do |s|
|
|
30
30
|
"config/languages/locale_languages.en.json",
|
31
31
|
"config/locale_map/locale_to_country_code.json",
|
32
32
|
"db/GeoIP.dat",
|
33
|
+
"lib/generators/world_flags/GeoIP.dat",
|
34
|
+
"lib/generators/world_flags/geoip_generator.rb",
|
33
35
|
"lib/generators/world_flags/init_generator.rb",
|
34
36
|
"lib/generators/world_flags/templates/world_flags.erb",
|
35
37
|
"lib/world-flags.rb",
|
@@ -95,6 +97,9 @@ Gem::Specification.new do |s|
|
|
95
97
|
s.specification_version = 3
|
96
98
|
|
97
99
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
100
|
+
s.add_runtime_dependency(%q<mechanize>, [">= 0"])
|
101
|
+
s.add_runtime_dependency(%q<resourceful>, ["~> 1.0.1"])
|
102
|
+
s.add_runtime_dependency(%q<rubyzip>, ["~> 0.9.8"])
|
98
103
|
s.add_runtime_dependency(%q<hashie>, ["~> 1.2"])
|
99
104
|
s.add_runtime_dependency(%q<i18n>, ["~> 0.6"])
|
100
105
|
s.add_development_dependency(%q<rspec>, [">= 2.8.0"])
|
@@ -103,6 +108,9 @@ Gem::Specification.new do |s|
|
|
103
108
|
s.add_development_dependency(%q<jeweler>, [">= 1.8.3"])
|
104
109
|
s.add_development_dependency(%q<simplecov>, [">= 0.5"])
|
105
110
|
else
|
111
|
+
s.add_dependency(%q<mechanize>, [">= 0"])
|
112
|
+
s.add_dependency(%q<resourceful>, ["~> 1.0.1"])
|
113
|
+
s.add_dependency(%q<rubyzip>, ["~> 0.9.8"])
|
106
114
|
s.add_dependency(%q<hashie>, ["~> 1.2"])
|
107
115
|
s.add_dependency(%q<i18n>, ["~> 0.6"])
|
108
116
|
s.add_dependency(%q<rspec>, [">= 2.8.0"])
|
@@ -112,6 +120,9 @@ Gem::Specification.new do |s|
|
|
112
120
|
s.add_dependency(%q<simplecov>, [">= 0.5"])
|
113
121
|
end
|
114
122
|
else
|
123
|
+
s.add_dependency(%q<mechanize>, [">= 0"])
|
124
|
+
s.add_dependency(%q<resourceful>, ["~> 1.0.1"])
|
125
|
+
s.add_dependency(%q<rubyzip>, ["~> 0.9.8"])
|
115
126
|
s.add_dependency(%q<hashie>, ["~> 1.2"])
|
116
127
|
s.add_dependency(%q<i18n>, ["~> 0.6"])
|
117
128
|
s.add_dependency(%q<rspec>, [">= 2.8.0"])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: world-flags
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.8.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,56 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mechanize
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: resourceful
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.0.1
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.0.1
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rubyzip
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.8
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.8
|
14
62
|
- !ruby/object:Gem::Dependency
|
15
63
|
name: hashie
|
16
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -144,6 +192,8 @@ files:
|
|
144
192
|
- config/languages/locale_languages.en.json
|
145
193
|
- config/locale_map/locale_to_country_code.json
|
146
194
|
- db/GeoIP.dat
|
195
|
+
- lib/generators/world_flags/GeoIP.dat
|
196
|
+
- lib/generators/world_flags/geoip_generator.rb
|
147
197
|
- lib/generators/world_flags/init_generator.rb
|
148
198
|
- lib/generators/world_flags/templates/world_flags.erb
|
149
199
|
- lib/world-flags.rb
|
@@ -213,7 +263,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
263
|
version: '0'
|
214
264
|
segments:
|
215
265
|
- 0
|
216
|
-
hash:
|
266
|
+
hash: 2155340704912814203
|
217
267
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
268
|
none: false
|
219
269
|
requirements:
|