jgeoip 0.2.3-java → 0.2.5-java

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: dc1f71133149460ad25bf351bec24d4a9471beaa
4
+ data.tar.gz: 08a03294e91471c417056aae3d3fbe0009012fcf
5
+ SHA512:
6
+ metadata.gz: 09c30ccf5ab9f03deb702724335d43678480448fee778a1d08937dc9ed06c750587ea2a52a0ee4a9b91a7a0436d30f849d256bd070ba99fc760ac574dce90837
7
+ data.tar.gz: 400ab61aa5345a0c52f5d96ff06cde1ba579346b990c0f6dcdb96508decaa3b00de3f5f8ff819b77743ad697196b1d2d5c72a1a0b7f1898e0ce707b2163dd26b
Binary file
@@ -1,12 +1,6 @@
1
- require 'java'
1
+ require 'geoip-jars'
2
2
 
3
- # Load the required jars
4
- require File.expand_path('../java/geoip-api-1.2.10', __FILE__)
3
+ Dir[File.expand_path('../java/*.jar', __FILE__)].each { |jar| require(jar) }
5
4
 
6
- # load the version file
7
- require File.expand_path('../jgeoip/version', __FILE__)
8
-
9
- # import the jRuby Extension
10
- require File.expand_path("../java/jgeoip-#{JGeoIP::VERSION}", __FILE__)
11
5
  java_import 'org.github.tobsch.jgeoip.JGeoIPLibrary'
12
6
  JGeoIPLibrary.new.load(JRuby.runtime, false)
@@ -1,3 +1,3 @@
1
1
  class JGeoIP
2
- VERSION = "0.2.3"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -19,7 +19,8 @@ class JGeoIPTest < Test::Unit::TestCase
19
19
 
20
20
  context 'The Geoip City API' do
21
21
  setup do
22
- @geo = JGeoIP.new('/opt/MaxMind/GeoLiteCity.dat')
22
+ @db_path = 'tmp/GeoLiteCity.dat'
23
+ @geo = JGeoIP.new(@db_path)
23
24
  end
24
25
 
25
26
  should 'find the correct city by hostname' do
@@ -37,8 +38,8 @@ class JGeoIPTest < Test::Unit::TestCase
37
38
  should 'find the city by ip too' do
38
39
  result = @geo.city('207.97.227.239')
39
40
  assert_equal 'United States', result[:country_name]
40
- assert_in_delta 37.74839782714844, result.latitude, 10
41
- assert_in_delta -122.41560363769531, result.longitude, 10
41
+ assert_in_delta 37.74839782714844, result.latitude, 100
42
+ assert_in_delta -122.41560363769531, result.longitude, 100
42
43
  end
43
44
 
44
45
  should 'find out the distance between to points' do
@@ -46,10 +47,10 @@ class JGeoIPTest < Test::Unit::TestCase
46
47
  p2 = @geo.city('alice.de')
47
48
  p3 = @geo.city('facebook.com')
48
49
  # from sa to hamburg
49
- assert_in_delta 8537.271518247373, p1.distance(p2), 10
50
+ assert_in_delta 8537.271518247373, p1.distance(p2), 100
50
51
 
51
52
  # from sa to sf
52
- assert_in_delta 2363.280770976432, p1.distance(p3), 10
53
+ assert_in_delta 2363.280770976432, p1.distance(p3), 100
53
54
  end
54
55
 
55
56
  should 'return nil if an attribute does not exist' do
@@ -71,7 +72,7 @@ class JGeoIPTest < Test::Unit::TestCase
71
72
 
72
73
  should 'be inspectable' do
73
74
  result = @geo.city('85.183.18.35').inspect
74
- assert_match /:city=>"(Othmarschen|Sparrieshoop)"/, result
75
+ assert_match /:city=>"Hamburg"/, result
75
76
  end
76
77
 
77
78
  should 'throw a clean exception if the ip was not found' do
@@ -84,6 +85,15 @@ class JGeoIPTest < Test::Unit::TestCase
84
85
  assert_equal 'Osnabrück', result
85
86
  assert_equal 'UTF-8', result.encoding.to_s
86
87
  end
87
-
88
+
89
+ should 'accept caching options' do
90
+ JGeoIP.new(@db_path, :caching => JGeoIP::GEOIP_STANDARD | JGeoIP::GEOIP_INDEX_CACHE)
91
+ end
92
+
93
+ should 'raises an error when the caching options are not a number' do
94
+ assert_raise ArgumentError do
95
+ JGeoIP.new(@db_path, :caching => 'yes please')
96
+ end
97
+ end
88
98
  end
89
99
  end
metadata CHANGED
@@ -1,80 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jgeoip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.2.5
6
5
  platform: java
7
6
  authors:
8
7
  - Tobias Schlottke
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-06-14 00:00:00.000000000 Z
11
+ date: 2014-03-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- type: :development
14
+ name: geoip-jars
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
16
20
  requirement: !ruby/object:Gem::Requirement
17
21
  requirements:
18
22
  - - '>='
19
23
  - !ruby/object:Gem::Version
20
24
  version: '0'
21
- none: false
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
22
28
  name: shoulda-context
23
29
  version_requirements: !ruby/object:Gem::Requirement
24
30
  requirements:
25
31
  - - '>='
26
32
  - !ruby/object:Gem::Version
27
33
  version: '0'
28
- none: false
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
29
39
  prerelease: false
30
- - !ruby/object:Gem::Dependency
31
40
  type: :development
32
- requirement: !ruby/object:Gem::Requirement
41
+ - !ruby/object:Gem::Dependency
42
+ name: buildr
43
+ version_requirements: !ruby/object:Gem::Requirement
33
44
  requirements:
34
45
  - - '='
35
46
  - !ruby/object:Gem::Version
36
47
  version: 1.4.6
37
- none: false
38
- name: buildr
39
- version_requirements: !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
40
49
  requirements:
41
50
  - - '='
42
51
  - !ruby/object:Gem::Version
43
52
  version: 1.4.6
44
- none: false
45
53
  prerelease: false
46
- - !ruby/object:Gem::Dependency
47
54
  type: :development
48
- requirement: !ruby/object:Gem::Requirement
55
+ - !ruby/object:Gem::Dependency
56
+ name: ci_reporter
57
+ version_requirements: !ruby/object:Gem::Requirement
49
58
  requirements:
50
59
  - - '>='
51
60
  - !ruby/object:Gem::Version
52
61
  version: '0'
53
- none: false
54
- name: ci_reporter
55
- version_requirements: !ruby/object:Gem::Requirement
62
+ requirement: !ruby/object:Gem::Requirement
56
63
  requirements:
57
64
  - - '>='
58
65
  - !ruby/object:Gem::Version
59
66
  version: '0'
60
- none: false
61
67
  prerelease: false
62
- - !ruby/object:Gem::Dependency
63
68
  type: :development
64
- requirement: !ruby/object:Gem::Requirement
69
+ - !ruby/object:Gem::Dependency
70
+ name: test-unit
71
+ version_requirements: !ruby/object:Gem::Requirement
65
72
  requirements:
66
73
  - - '>='
67
74
  - !ruby/object:Gem::Version
68
75
  version: '0'
69
- none: false
70
- name: test-unit
71
- version_requirements: !ruby/object:Gem::Requirement
76
+ requirement: !ruby/object:Gem::Requirement
72
77
  requirements:
73
78
  - - '>='
74
79
  - !ruby/object:Gem::Version
75
80
  version: '0'
76
- none: false
77
81
  prerelease: false
82
+ type: :development
78
83
  description: This gem wraps maxminds original java library, which should make things faster than using other pure ruby libraries.
79
84
  email:
80
85
  - tobias.schlottke@gmail.com
@@ -82,26 +87,14 @@ executables: []
82
87
  extensions: []
83
88
  extra_rdoc_files: []
84
89
  files:
85
- - .gitignore
86
- - .ruby-version
87
- - Buildfile
88
- - Gemfile
89
- - README.md
90
- - Rakefile
91
- - jgeoip.gemspec
92
- - lib/java/geoip-api-1.2.10.jar
93
- - lib/java/jgeoip-0.2.2.jar
94
- - lib/java/jgeoip-0.2.3.jar
90
+ - lib/java/jgeoip.jar
95
91
  - lib/jgeoip.rb
96
92
  - lib/jgeoip/version.rb
97
- - script/benchmark.rb
98
- - src/main/java/org/github/tobsch/jgeoip/JGeoIP.java
99
- - src/main/java/org/github/tobsch/jgeoip/JGeoIPLibrary.java
100
- - src/main/java/org/github/tobsch/jgeoip/LocationProxy.java
101
93
  - test/test_helper.rb
102
94
  - test/unit/jgeoip_test.rb
103
95
  homepage: http://github.com/tobsch/jgeoip
104
96
  licenses: []
97
+ metadata: {}
105
98
  post_install_message:
106
99
  rdoc_options: []
107
100
  require_paths:
@@ -110,25 +103,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
110
103
  requirements:
111
104
  - - '>='
112
105
  - !ruby/object:Gem::Version
113
- segments:
114
- - 0
115
106
  version: '0'
116
- hash: 2
117
- none: false
118
107
  required_rubygems_version: !ruby/object:Gem::Requirement
119
108
  requirements:
120
109
  - - '>='
121
110
  - !ruby/object:Gem::Version
122
- segments:
123
- - 0
124
111
  version: '0'
125
- hash: 2
126
- none: false
127
112
  requirements: []
128
113
  rubyforge_project:
129
- rubygems_version: 1.8.24
114
+ rubygems_version: 2.2.2
130
115
  signing_key:
131
- specification_version: 3
116
+ specification_version: 4
132
117
  summary: Fast jRuby library for Maxminds GeoIP Databases
133
118
  test_files:
134
119
  - test/test_helper.rb
data/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- target/*
6
- .DS_Store
7
- **/.DS_Store
8
- test/reports/*
@@ -1 +0,0 @@
1
- jruby-1.7.4
data/Buildfile DELETED
@@ -1,25 +0,0 @@
1
- require 'bundler/setup'
2
-
3
- $:.push File.expand_path("../lib", __FILE__)
4
- require "jgeoip/version"
5
-
6
- # add maven repositories
7
- repositories.remote << 'http://www.ibiblio.org/maven2'
8
- repositories.remote << 'http://repo1.maven.org/maven2'
9
-
10
- define 'jgeoip' do
11
- project.version = JGeoIP::VERSION
12
-
13
- # add dependencies from jar
14
- compile.using(:target => '1.6', :source => '1.6').with('com.maxmind.geoip:geoip-api:jar:1.2.10')
15
-
16
- # package our shiny little bidder jar
17
- package :jar, :file => _("lib/java/jgeoip-#{JGeoIP::VERSION}.jar")
18
-
19
- desc 'copy all dependent jars to lib folder'
20
- task :copy_dependencies do
21
- cp project.compile.dependencies.collect(&:to_s), project.path_to('lib/java')
22
- end
23
-
24
- task :setup => [ :clean, :compile, :package, :copy_dependencies ]
25
- end
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in jGeoIP.gemspec
4
- gemspec
data/README.md DELETED
@@ -1,53 +0,0 @@
1
- # Fast JRuby GeoIP Extension
2
- This jRuby extension will help you with all your GeoIP needs in JRuby.
3
- It is pretty small and simple right now but will surely grow up soon.
4
- You can easily use it with the free GeoIP Library from maxmind.com aswell as the commercial one.
5
-
6
- ## example
7
- ### City Lookup
8
- p JGeoIP.new('/opt/MaxMind/GeoLiteCity.dat').city('github.com')
9
-
10
- # => {:city=>"San Francisco", :postal_code=>"94110", :country_code=>"US", :country_name=>"United States", :region=>"CA", :latitude=>37.74839782714844, :longitude=>37.74839782714844, :dma_code=>807, :area_code=>415, :metro_code=>807}
11
-
12
- Will return a Location object with all the result properties and a #to_hash method
13
-
14
- ### Organization/ISP Lookup
15
- p JGeoIP.new('/opt/MaxMind/GeoIPISP.dat').org('github.com')
16
-
17
- Will return a string holding the organization/isp name
18
-
19
-
20
- ### Distance between two locations (km)
21
- p1 = @geo.city('github.com')
22
- p2 = @geo.city('facebook.com')
23
-
24
- p p1.distance(p2)
25
- # => 46.25354059751858
26
-
27
- ## speed?
28
- There is a benchmark script included, so you'll be able to check it yourself.
29
- We compared it to the GeoIP gem so far (because geoip-c won't compile with jRuby).
30
- Results are promising:
31
-
32
- #### JGeoIP
33
- JGeoIP (>=0.1.5):
34
- 0.285000 0.000000 0.285000 ( 0.286000)
35
- JGeoIP (old non extension version, <0.1.5):
36
- 1.047000 0.000000 1.047000 ( 1.048000)
37
-
38
- #### Others
39
- pure ruby GeoIP (jRuby):
40
- 35.614000 0.000000 35.614000 ( 35.614000)
41
- geoip-c (MRI 1.9.3-p0):
42
- 1.140000 0.000000 1.140000 ( 1.145224)
43
- pure ruby GeoIP (MRI 1.9.3-p0):
44
- 30.060000 16.420000 46.480000 ( 60.940723)
45
- *Cool, eh?*
46
-
47
- Please note that we did a warmup to give the JIT a chance.
48
- The benchmark does 100k lookups.
49
- Those results are Java 7, jruby-1.6.5 based. Looking forward to 1.7.0.
50
-
51
- ### TODO
52
- * integrate the other lookup methods: so far we're just able to do city lookups
53
- * check all the license related stuff: the maxmind lib is LGPL, which would be okay for me
data/Rakefile DELETED
@@ -1,21 +0,0 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
3
-
4
- desc 'Run all the tests'
5
- task :default => [ :test ]
6
-
7
- task :test => [ 'test:unit' ]
8
- namespace :test do
9
-
10
- task :environment do
11
- ENV['RACK_ENV'] = 'test'
12
- end
13
-
14
- [ :unit ].each do |category|
15
- Rake::TestTask.new(category) do |t|
16
- t.libs << "test"
17
- t.test_files = Dir["test/#{category}/**/*_test.rb"]
18
- t.verbose = true
19
- end
20
- end
21
- end
@@ -1,28 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- require File.expand_path("../lib/jgeoip/version", __FILE__)
3
-
4
- Gem::Specification.new do |s|
5
- s.name = "jgeoip"
6
- s.version = JGeoIP::VERSION
7
- s.authors = ["Tobias Schlottke"]
8
- s.email = ["tobias.schlottke@gmail.com"]
9
- s.homepage = "http://github.com/tobsch/jgeoip"
10
- s.summary = 'Fast jRuby library for Maxminds GeoIP Databases'
11
- s.description = 'This gem wraps maxminds original java library, which should make things faster than using other pure ruby libraries.'
12
- s.platform = 'java'
13
-
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ["lib"]
18
-
19
- # specify any dependencies here; for example:
20
- # s.add_development_dependency "rspec"
21
- # s.add_runtime_dependency "rest-client"
22
- s.add_development_dependency 'shoulda-context'
23
- s.add_development_dependency 'buildr', '1.4.6'
24
- s.add_development_dependency 'ci_reporter'
25
-
26
- # necessary instead of Mini:Unit as Mini:Unit cannot produce Jenkins-compatible test results
27
- s.add_development_dependency 'test-unit'
28
- end
Binary file
Binary file
@@ -1,45 +0,0 @@
1
- require 'benchmark'
2
- require 'rubygems'
3
-
4
- def benchmark(description, &block)
5
- puts description
6
- # do a warmup
7
- 10_000.times {
8
- block.call
9
- }
10
- # do the actual measurements
11
- puts Benchmark.measure {
12
- 100_000.times {
13
- block.call
14
- }
15
- }
16
- end
17
-
18
- jruby = defined?(JRUBY_VERSION)
19
- DB_FILE = '/opt/MaxMind/GeoLiteCity.dat'
20
- if jruby
21
- # check the JGeoIP
22
- require File.expand_path('../../lib/jgeoip.rb', __FILE__)
23
-
24
- db = JGeoIP.new(DB_FILE)
25
- benchmark 'JGeoIP:' do
26
- result = db.city('github.com')
27
- end
28
- end
29
-
30
- # check the pure lib
31
- gem 'geoip'
32
- require 'geoip'
33
- db = GeoIP.new(DB_FILE)
34
- benchmark 'pure ruby GeoIP:' do
35
- result = db.city('github.com')
36
- end
37
-
38
- unless jruby
39
- gem 'geoip-c'
40
- require 'geoip-c/geoip'
41
- db = GeoIP::City.new(DB_FILE)
42
- benchmark 'geoip-c:' do
43
- db.look_up('207.97.227.239')
44
- end
45
- end
@@ -1,64 +0,0 @@
1
- package org.github.tobsch.jgeoip;
2
-
3
- import com.maxmind.geoip.*;
4
-
5
- import java.io.IOException;
6
-
7
- import org.jruby.Ruby;
8
-
9
- import org.jruby.RubyClass;
10
- import org.jruby.RubyObject;
11
-
12
- import org.jruby.anno.JRubyMethod;
13
- import org.jruby.runtime.ThreadContext;
14
- import org.jruby.runtime.builtin.IRubyObject;
15
-
16
-
17
- public class JGeoIP extends RubyObject {
18
- LookupService cl;
19
- static RubyClass locationProxyClass;
20
-
21
- public JGeoIP(final Ruby ruby, RubyClass rubyClass) {
22
- super(ruby, rubyClass);
23
- this.locationProxyClass = ruby.getClass("Location");
24
- }
25
-
26
- @JRubyMethod
27
- public IRubyObject initialize(ThreadContext context, IRubyObject databaseLocation) throws IOException {
28
- cl = new LookupService(databaseLocation.toString(), LookupService.GEOIP_MEMORY_CACHE);
29
-
30
- return context.nil;
31
- }
32
-
33
- @JRubyMethod
34
- public IRubyObject city(ThreadContext context, IRubyObject searchString) throws IOException {
35
- Location location = cl.getLocation(searchString.toString());
36
- if (location == null) {
37
- return context.runtime.getNil();
38
- }
39
-
40
- LocationProxy loc = new LocationProxy(context.runtime, locationProxyClass, location);
41
-
42
- return loc;
43
- }
44
-
45
- @JRubyMethod
46
- public IRubyObject org(ThreadContext context, IRubyObject searchString) throws IOException {
47
- String org = cl.getOrg(searchString.toString());
48
- if (org == null) {
49
- return context.runtime.getNil();
50
- }
51
-
52
- return context.runtime.newString(org);
53
- }
54
-
55
- @JRubyMethod
56
- public IRubyObject id(ThreadContext context, IRubyObject searchString) throws IOException {
57
- Integer id = cl.getID(searchString.toString());
58
- if (id == null) {
59
- return context.runtime.getNil();
60
- }
61
-
62
- return context.runtime.newFixnum((long)id);
63
- }
64
- }
@@ -1,43 +0,0 @@
1
-
2
- package org.github.tobsch.jgeoip;
3
- import org.github.tobsch.jgeoip.*;
4
- import com.maxmind.geoip.*;
5
-
6
- import java.io.IOException;
7
-
8
- import org.jruby.Ruby;
9
- import org.jruby.RubyClass;
10
- import org.jruby.runtime.ObjectAllocator;
11
- import org.jruby.runtime.builtin.IRubyObject;
12
- import org.jruby.runtime.load.Library;
13
-
14
- /**
15
- *
16
- *
17
- */
18
- public class JGeoIPLibrary implements Library {
19
- private Ruby ruby;
20
-
21
- public void load(Ruby ruby, boolean bln) throws IOException {
22
- this.ruby = ruby;
23
-
24
- // define the jgeoip class
25
- final RubyClass jgeoip = ruby.defineClass("JGeoIP", ruby.getObject(), new ObjectAllocator() {
26
- public IRubyObject allocate(Ruby ruby, RubyClass rc) {
27
- return new JGeoIP(ruby, rc);
28
- }
29
- });
30
-
31
- jgeoip.defineAnnotatedMethods(JGeoIP.class);
32
-
33
- // define the location class
34
- final RubyClass location = ruby.defineClass("Location", ruby.getObject(), new ObjectAllocator() {
35
- public IRubyObject allocate(Ruby ruby, RubyClass rc) {
36
- return new LocationProxy(ruby, rc);
37
- }
38
- });
39
-
40
- location.defineAnnotatedMethods(LocationProxy.class);
41
-
42
- }
43
- }
@@ -1,142 +0,0 @@
1
- package org.github.tobsch.jgeoip;
2
- import com.maxmind.geoip.*;
3
-
4
- import java.io.IOException;
5
-
6
- import org.jruby.Ruby;
7
- import org.jruby.runtime.ThreadContext;
8
- import org.jruby.runtime.ObjectAllocator;
9
- import org.jruby.runtime.builtin.IRubyObject;
10
- import org.jruby.runtime.load.Library;
11
- import org.jruby.runtime.Block;
12
-
13
- import org.jruby.anno.JRubyMethod;
14
-
15
- import org.jruby.RubyClass;
16
- import org.jruby.RubyArray;
17
- import org.jruby.RubyClass;
18
- import org.jruby.RubyObject;
19
- import org.jruby.RubyHash;
20
- import org.jruby.RubySymbol;
21
-
22
- import java.util.ArrayList;
23
-
24
-
25
- public class LocationProxy extends RubyObject {
26
- Location location;
27
-
28
- private static final ArrayList<String> attributes = new ArrayList<String>();
29
-
30
- // a map with all properties
31
- static {
32
- attributes.add("city");
33
- attributes.add("postal_code");
34
- attributes.add("country_code");
35
- attributes.add("country_name");
36
- attributes.add("region");
37
- attributes.add("latitude");
38
- attributes.add("longitude");
39
- attributes.add("dma_code");
40
- attributes.add("area_code");
41
- attributes.add("metro_code");
42
- }
43
-
44
- public LocationProxy(final Ruby ruby, RubyClass rubyClass) {
45
- super(ruby, rubyClass);
46
- }
47
-
48
- public LocationProxy(final Ruby ruby, RubyClass rubyClass, Location location) {
49
- super(ruby, rubyClass);
50
- this.location = location;
51
- }
52
-
53
- @JRubyMethod
54
- public RubyArray keys(ThreadContext context) {
55
- RubyArray res = RubyArray.newArray(context.runtime);
56
- for (String key : attributes) {
57
- res.add(RubySymbol.newSymbol(context.runtime, key));
58
- }
59
-
60
- return res;
61
- }
62
-
63
- @JRubyMethod(name = "to_hash")
64
- public IRubyObject toHash(ThreadContext context) {
65
- RubyHash hash = RubyHash.newHash(context.runtime);
66
- for (String key : attributes) {
67
- hash.put(RubySymbol.newSymbol(context.runtime, key), get(context, context.runtime.newString(key)));
68
- }
69
-
70
- return hash;
71
- }
72
-
73
- @JRubyMethod(name = "[]")
74
- public IRubyObject get(ThreadContext context, IRubyObject key) {
75
- if (attributes.contains(key.toString())) {
76
- return send(context, key, Block.NULL_BLOCK);
77
- } else {
78
- return context.runtime.getNil();
79
- }
80
- }
81
-
82
- @JRubyMethod
83
- public IRubyObject distance(ThreadContext context, IRubyObject p2) {
84
- LocationProxy p2loc = (LocationProxy)p2;
85
- return context.runtime.newFloat(location.distance(p2loc.location));
86
- }
87
-
88
- @JRubyMethod
89
- public IRubyObject inspect(ThreadContext context) {
90
- return toHash(context).inspect();
91
- }
92
-
93
- @JRubyMethod(name = "city")
94
- public IRubyObject getCity(ThreadContext context) {
95
- return location.city == null ? context.runtime.getNil() : context.runtime.newString(location.city);
96
- }
97
-
98
- @JRubyMethod(name = "postal_code")
99
- public IRubyObject getPostalCode(ThreadContext context) {
100
- return location.postalCode == null ? context.runtime.getNil() : context.runtime.newString(location.postalCode);
101
- }
102
-
103
- @JRubyMethod(name = "country_code")
104
- public IRubyObject getCountryCode(ThreadContext context) {
105
- return location.countryCode == null ? context.runtime.getNil() : context.runtime.newString(location.countryCode);
106
- }
107
-
108
- @JRubyMethod(name = "country_name")
109
- public IRubyObject getCountryName(ThreadContext context) {
110
- return location.countryName == null ? context.runtime.getNil() : context.runtime.newString(location.countryName);
111
- }
112
-
113
- @JRubyMethod(name = "region")
114
- public IRubyObject getRegion(ThreadContext context) {
115
- return location.region == null ? context.runtime.getNil() : context.runtime.newString(location.region);
116
- }
117
-
118
- @JRubyMethod(name = "latitude")
119
- public IRubyObject getLatitude(ThreadContext context) {
120
- return context.runtime.newFloat(location.latitude);
121
- }
122
-
123
- @JRubyMethod(name = "longitude")
124
- public IRubyObject getLongitude(ThreadContext context) {
125
- return context.runtime.newFloat(location.longitude);
126
- }
127
-
128
- @JRubyMethod(name = "dma_code")
129
- public IRubyObject getDMACode(ThreadContext context) {
130
- return context.runtime.newFixnum(location.dma_code);
131
- }
132
-
133
- @JRubyMethod(name = "area_code")
134
- public IRubyObject getAreaCode(ThreadContext context) {
135
- return context.runtime.newFixnum(location.area_code);
136
- }
137
-
138
- @JRubyMethod(name = "metro_code")
139
- public IRubyObject getMetroCode(ThreadContext context) {
140
- return context.runtime.newFixnum(location.metro_code);
141
- }
142
- }