ipgeobase 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a5fd94751a091e9f684b217975349e98e6708aeb
4
+ data.tar.gz: 92fd18fe2d5cb2c7765e981cb079c998b020aff0
5
+ SHA512:
6
+ metadata.gz: 4e49790ef3ecb36d23c3adbf0fcd08e8ed6af2e48d9120a8b721fe5b4b350a3139b1f15c539d6c81f50b837d92b77e21c013ddb871dc7287a2fd8a8ba44cdbde
7
+ data.tar.gz: d3f5a30da27fbbf270204ea9f83dede310690e5ac530ff58958af94de0ee2bcc7884128b10195aa8f4ef066707b8c6df602e02980bc480be4c70706f0e8660a3
@@ -0,0 +1 @@
1
+ repo_token: eKNSKm6UDVvUejJOn77bpzYwokSYCV2PV
data/.gitignore CHANGED
@@ -4,3 +4,4 @@ Gemfile.lock
4
4
  pkg/*
5
5
  *.swp
6
6
  *.swo
7
+ coverage
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in ipgeobase.gemspec
4
4
  gemspec
5
+
6
+ gem 'rake'
7
+ gem 'minitest', '> 5.0.3'
8
+ gem 'webmock', require: 'webmock/minitest'
9
+ gem 'coveralls', require: false
@@ -0,0 +1,42 @@
1
+ # Ipgeobase
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/ipgeobase.png)](https://rubygems.org/gems/ipgeobase)
4
+ [![Build Status](https://travis-ci.org/mokevnin/ipgeobase.png)](https://travis-ci.org/mokevnin/ipgeobase)
5
+ [![Dependency Status](https://gemnasium.com/mokevnin/ipgeobase.png)](https://gemnasium.com/mokevnin/ipgeobase)
6
+ [![Code Climate](https://codeclimate.com/github/mokevnin/ipgeobase.png)](https://codeclimate.com/github/mokevnin/ipgeobase)
7
+ [![Coverage Status](https://coveralls.io/repos/mokevnin/ipgeobase/badge.png?branch=master)](https://coveralls.io/r/mokevnin/ipgeobase)
8
+ [![Gem Version](http://stillmaintained.com/mokevnin/ipgeobase.png)](http://stillmaintained.com/mokevnin/ipgeobase)
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'ipgeobase'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install 'ipgeobase'
23
+
24
+ ## Usage
25
+
26
+ ip_meta = Ipgeobase.lookup('10.11.12.134')
27
+ ip_meta.city # => Москва
28
+ ip_meta.country # => Россия
29
+
30
+
31
+ ## Contributing
32
+
33
+ 1. Fork it
34
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
35
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
36
+ 4. Push to the branch (`git push origin my-new-feature`)
37
+ 5. Create new Pull Request
38
+
39
+ run tests:
40
+
41
+ turn -Itest test/lib
42
+
data/Rakefile CHANGED
@@ -1 +1,11 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs << "test"
7
+ t.test_files = FileList['test/lib/*_test.rb']
8
+ t.verbose = true
9
+ end
10
+
11
+ task :default => :test
@@ -21,4 +21,5 @@ Gem::Specification.new do |s|
21
21
  # specify any dependencies here; for example:
22
22
  # s.add_development_dependency "rspec"
23
23
  s.add_runtime_dependency "happymapper"
24
+ s.add_runtime_dependency "iconv"
24
25
  end
@@ -1,14 +1,14 @@
1
1
  require 'uri'
2
2
  require 'net/http'
3
- require 'happymapper'
4
3
 
5
4
  module Ipgeobase
6
- autoload 'Version', 'ipgeobase/version'
5
+ URL = 'http://ipgeobase.ru:7020/geo'
7
6
  autoload 'IpMetaData', 'ipgeobase/ip_meta_data'
8
7
 
9
8
  def self.lookup(ip)
10
- uri = URI.parse('http://ipgeobase.ru:7020/geo')
9
+ uri = URI.parse(URL)
11
10
  uri.query = URI.encode_www_form :ip => ip
11
+
12
12
  IpMetaData.parse(Net::HTTP.get(uri))
13
13
  end
14
14
  end
@@ -1,10 +1,12 @@
1
- require 'iconv'
1
+ require 'happymapper'
2
+ require 'iconv' unless String.instance_methods.include?(:encode)
2
3
 
3
4
  module Ipgeobase
4
5
  class IpMetaData
5
6
  include HappyMapper
6
7
 
7
8
  tag 'ip-answer'
9
+ element :inetnum, String, :deep => true
8
10
  element :city, String, :deep => true
9
11
  element :country, String, :deep => true
10
12
  element :region, String, :deep => true
@@ -13,15 +15,25 @@ module Ipgeobase
13
15
  element :lng, Float, :deep => true
14
16
 
15
17
  def city
16
- Iconv.iconv('windows-1251', 'utf-8', @city).first
18
+ encode(@city)
17
19
  end
18
20
 
19
21
  def country
20
- Iconv.iconv('windows-1251', 'utf-8', @country).first
22
+ encode(@country)
21
23
  end
22
24
 
23
25
  def region
24
- Iconv.iconv('windows-1251', 'utf-8', @region).first
26
+ encode(@region)
27
+ end
28
+
29
+ private
30
+
31
+ def encode(api_string)
32
+ if api_string.respond_to?(:encode)
33
+ api_string.encode
34
+ else
35
+ Iconv.iconv('windows-1251', 'utf-8', api_string).first
36
+ end
25
37
  end
26
38
  end
27
39
  end
@@ -1,3 +1,3 @@
1
1
  module Ipgeobase
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,11 @@
1
+ <ip-answer>
2
+ <ip value="46.8.114.116">
3
+ <inetnum>46.8.112.0 - 46.8.127.255</inetnum>
4
+ <country>RU</country>
5
+ <city>Ульяновск</city>
6
+ <region>Ульяновская область</region>
7
+ <district>Приволжский федеральный округ</district>
8
+ <lat>54.321480</lat>
9
+ <lng>48.385651</lng>
10
+ </ip>
11
+ </ip-answer>
@@ -0,0 +1,22 @@
1
+ require 'test_helper'
2
+
3
+ class IpgeobaseTest < TestCase
4
+ def setup
5
+ @ip = '46.8.114.116'
6
+ @stub = stub_request(:get, "#{Ipgeobase::URL}?ip=#{@ip}").
7
+ with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
8
+ to_return(:status => 200, :body => load_fixture('response.xml'), :headers => {})
9
+ end
10
+
11
+ def test_lookup_http_query
12
+ Ipgeobase.lookup @ip
13
+
14
+ assert_requested @stub
15
+ end
16
+
17
+ def test_lookup_response_object
18
+ meta = Ipgeobase.lookup @ip
19
+
20
+ assert_equal 54.321480, meta.lat
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ require 'bundler/setup'
2
+ Bundler.require
3
+
4
+ require "minitest/autorun"
5
+
6
+ if ENV['TRAVIS']
7
+ require 'coveralls'
8
+ Coveralls.wear!
9
+ end
10
+
11
+ class TestCase < MiniTest::Test
12
+ def load_fixture(filename)
13
+ File.read(File.dirname(__FILE__) + "/fixtures/#{filename}")
14
+ end
15
+ end
metadata CHANGED
@@ -1,27 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ipgeobase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Mokevnin Kirill
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-02-13 00:00:00.000000000 Z
11
+ date: 2013-10-16 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: happymapper
16
- requirement: &18988120 !ruby/object:Gem::Requirement
17
- none: false
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
- version_requirements: *18988120
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: iconv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
25
41
  description: geo to ip
26
42
  email:
27
43
  - mokevnin@gmail.com
@@ -29,35 +45,42 @@ executables: []
29
45
  extensions: []
30
46
  extra_rdoc_files: []
31
47
  files:
48
+ - .coveralls.yml
32
49
  - .gitignore
33
50
  - Gemfile
51
+ - README.md
34
52
  - Rakefile
35
53
  - ipgeobase.gemspec
36
54
  - lib/ipgeobase.rb
37
55
  - lib/ipgeobase/ip_meta_data.rb
38
56
  - lib/ipgeobase/version.rb
57
+ - test/fixtures/response.xml
58
+ - test/lib/ipgeobase_test.rb
59
+ - test/test_helper.rb
39
60
  homepage: ''
40
61
  licenses: []
62
+ metadata: {}
41
63
  post_install_message:
42
64
  rdoc_options: []
43
65
  require_paths:
44
66
  - lib
45
67
  required_ruby_version: !ruby/object:Gem::Requirement
46
- none: false
47
68
  requirements:
48
- - - ! '>='
69
+ - - '>='
49
70
  - !ruby/object:Gem::Version
50
71
  version: '0'
51
72
  required_rubygems_version: !ruby/object:Gem::Requirement
52
- none: false
53
73
  requirements:
54
- - - ! '>='
74
+ - - '>='
55
75
  - !ruby/object:Gem::Version
56
76
  version: '0'
57
77
  requirements: []
58
78
  rubyforge_project: ipgeobase
59
- rubygems_version: 1.8.10
79
+ rubygems_version: 2.0.4
60
80
  signing_key:
61
- specification_version: 3
81
+ specification_version: 4
62
82
  summary: geo to ip
63
- test_files: []
83
+ test_files:
84
+ - test/fixtures/response.xml
85
+ - test/lib/ipgeobase_test.rb
86
+ - test/test_helper.rb