geogle 0.2.2

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: 420f8dc09e9f029c43118d8657382817e7c3c4f8
4
+ data.tar.gz: 307cf748f3fcb120c21f6022dc11613e84b4c140
5
+ SHA512:
6
+ metadata.gz: 7dbffd7b45e1688419d70177f8b3762050bb499b766fff93838886706f3cb568fd81ccf69c4701114f0ef88cd83c6851bb8223e9fff8002bd0d5e44e00c2f603
7
+ data.tar.gz: fc46aa55ac9c5126a4001132f81a4d83b369a6bb587a8e6c6e8499a85d20b6059aca31b613db433250f6dd1ca6babe687459ab23f5b463252c7ded7fc8f48464
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --require spec_helper
3
+ --require byebug
4
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in geogle.gemspec
4
+ gemspec
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :rspec do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara features specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml|slim)$}) { |m| "spec/features/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 yone_lc
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,68 @@
1
+ # Geogle
2
+
3
+ [![wercker status](https://app.wercker.com/status/6122e4f0966ee255949e2eb465aefd10/m "wercker status")](https://app.wercker.com/project/bykey/6122e4f0966ee255949e2eb465aefd10)
4
+
5
+ Still in development. Ruby wrapper for the Geocoding service provided from the Google Maps API.
6
+
7
+
8
+ Documentation
9
+ https://developers.google.com/maps/documentation/geocoding/
10
+
11
+
12
+ ## Installation
13
+
14
+ Add this line to your application's Gemfile:
15
+
16
+ gem 'geogle'
17
+
18
+ And then execute:
19
+
20
+ $ bundle
21
+
22
+ Or install it yourself as:
23
+
24
+ $ gem install geogle
25
+
26
+ ## Usage
27
+
28
+ When creating the Geogle::Client instance you can pass:
29
+
30
+ * sensor: true or false (false by default)
31
+ * language: ("en" by default).
32
+
33
+ In case you wanna use Google Maps API for Business, you'll need to pass the following attributes in order to sign the URL.
34
+ * client_id: ID of the client. It starts with "gme-" prefix.
35
+ * crypto_key: Criptographic key.
36
+
37
+ Here's more information about Google Maps API for Business:
38
+ https://developers.google.com/maps/documentation/business/webservices
39
+
40
+ ### Geocode by address with non-Business account
41
+
42
+ $ client = Geogle::Client.new({ sensor: false, language: "es" })
43
+ $ client.address("Blasco Ibañez, Valencia")
44
+
45
+ ### Geocode by address making use of the components
46
+
47
+ $ client = Geogle::Client.new({ sensor: false, language: "es" })
48
+ $ components = { country: 'ES' }
49
+ $ client.address("Blasco Ibañez, Valencia", components)
50
+
51
+ Available components to be used can be found here:
52
+ https://developers.google.com/maps/documentation/geocoding/#ComponentFiltering
53
+
54
+ ### Using a business account
55
+
56
+ $ client = Geogle::Client.new({ client_id: "gme-client-id", crypto_key: "crypto-key" })
57
+ $ Geogle::Client.new.latlng(39.5073225, -0.2914778)
58
+
59
+ The signature required to do the request will be included in the URL.
60
+
61
+
62
+ ## Contributing
63
+
64
+ 1. Fork it
65
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
66
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
67
+ 4. Push to the branch (`git push origin my-new-feature`)
68
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
7
+
8
+
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'geogle/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "geogle"
8
+ spec.version = Geogle::VERSION
9
+ spec.authors = ["yone_lc"]
10
+ spec.email = ["yonelacort@gmail.com"]
11
+ spec.description = %q{Ruby wrapper for Google MAPS API V3 geocode interface}
12
+ spec.summary = %q{Provides a Ruby interface to geocode requests to Google Maps API V3 and parse the response}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency 'faraday'
22
+ spec.add_dependency 'virtus'
23
+ spec.add_dependency 'ruby-hmac'
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.3"
26
+ spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "vcr"
29
+ spec.add_development_dependency "webmock"
30
+ spec.add_development_dependency "byebug"
31
+ spec.add_development_dependency "guard-rspec"
32
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: UTF-8
2
+
3
+ module Geogle
4
+ require "geogle/version"
5
+ require "geogle/model"
6
+ require "geogle/base"
7
+ require "geogle/geocoder"
8
+ require "geogle/error"
9
+ require "geogle/error_handler"
10
+ require "geogle/parametizer"
11
+ require "geogle/parser"
12
+ require "geogle/url"
13
+ require "geogle/url_builder"
14
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: UTF-8
2
+
3
+ require "faraday"
4
+ require "json"
5
+
6
+ module Geogle
7
+ class Base
8
+ def initialize(args = {})
9
+ @args = args
10
+ @parametizer = Parametizer.new(args)
11
+ @conn = Faraday.new
12
+ end
13
+
14
+ protected
15
+
16
+ def request(url, params)
17
+ response = @conn.get(UrlBuilder.new(url, @args).build(params))
18
+ body = JSON.parse(response.body)
19
+ ErrorHandler.check(body['status'])
20
+ body
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ # encoding: UTF-8
2
+
3
+ module Geogle
4
+ class Directions < Base
5
+
6
+ end
7
+ end
@@ -0,0 +1,10 @@
1
+ # encoding: UTF-8
2
+
3
+ module Geogle
4
+ class Error < StandardError;end
5
+
6
+ class BadRequestError < Error; end
7
+ class RequestDeniedError < Error; end
8
+ class OverQueryError < Error; end
9
+ class InvalidKeyError < Error; end
10
+ end
@@ -0,0 +1,16 @@
1
+ # encoding: UTF-8
2
+
3
+ module Geogle
4
+ module ErrorHandler
5
+ def self.check(status)
6
+ case status
7
+ when 'REQUEST_DENIED'
8
+ raise RequestDeniedError
9
+ when 'INVALID_REQUEST'
10
+ raise BadRequestError
11
+ when 'OVER_QUERY_LIMIT'
12
+ raise OverQueryError
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,20 @@
1
+ # encoding: UTF-8
2
+
3
+ module Geogle
4
+ class Geocoder < Base
5
+ def address(address, components = {})
6
+ executor(:address, address, components)
7
+ end
8
+
9
+ def latlng(lat, lng)
10
+ executor(:latlng, lat, lng)
11
+ end
12
+
13
+ private
14
+
15
+ def executor(method, arg1, arg2)
16
+ body = request(URL::GEOCODE, @parametizer.send(method, arg1, arg2))
17
+ Parser.places(body["results"])
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: UTF-8
2
+
3
+ module Geogle
4
+ module Model
5
+ require "geogle/model/address"
6
+ require "geogle/model/area"
7
+ require "geogle/model/coordinates"
8
+ require "geogle/model/geometry"
9
+ require "geogle/model/place"
10
+ end
11
+ end
@@ -0,0 +1,24 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'virtus'
4
+
5
+ module Geogle
6
+ module Model
7
+
8
+ class Address
9
+ include Virtus.model
10
+
11
+ attribute :street_number, String
12
+ attribute :street, String
13
+ attribute :locality, String
14
+ attribute :area_level_1, String
15
+ attribute :area_level_1_code, String
16
+ attribute :area_level_2, String
17
+ attribute :area_level_2_code, String
18
+ attribute :country, String
19
+ attribute :country_code, String
20
+ attribute :formatted, String
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'virtus'
4
+ require_relative 'coordinates'
5
+
6
+ module Geogle
7
+ module Model
8
+ class Area
9
+ include Virtus.model
10
+
11
+ attribute :northeast, Coordinates
12
+ attribute :southwest, Coordinates
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'virtus'
4
+
5
+ module Geogle
6
+ module Model
7
+ class Coordinates
8
+ include Virtus.model
9
+
10
+ attribute :lat, Float
11
+ attribute :lng, Float
12
+
13
+ def to_s
14
+ "#{lat},#{lng}"
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'virtus'
4
+ require_relative 'area'
5
+ require_relative 'coordinates'
6
+
7
+ module Geogle
8
+ module Model
9
+ class Geometry
10
+ include Virtus.model
11
+
12
+ attribute :location, Coordinates
13
+ attribute :location_type, String
14
+ attribute :bounds, Area
15
+ attribute :viewport, Area
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,81 @@
1
+ # encoding: UTF-8
2
+
3
+ require 'virtus'
4
+ require_relative 'address'
5
+ require_relative 'geometry'
6
+
7
+ module Geogle
8
+ module Model
9
+ class Place
10
+ include Virtus.model
11
+
12
+ TYPES = %w(street_address
13
+ route political
14
+ country
15
+ administrative_area_level_1
16
+ administrative_area_level_2
17
+ administrative_area_level_3
18
+ colloquial_area
19
+ locality
20
+ sublocality
21
+ neighborhood
22
+ premise
23
+ subpremise
24
+ postal_code
25
+ natural_feature
26
+ airport
27
+ park
28
+ point_of_interest
29
+ post_box
30
+ street_number
31
+ floor
32
+ room)
33
+
34
+ attribute :geometry, Geometry
35
+ attribute :address, Address
36
+
37
+ def geo_location
38
+ geometry.location
39
+ end
40
+
41
+ def street
42
+ address.street
43
+ end
44
+
45
+ def locality
46
+ address.locality
47
+ end
48
+
49
+ def city
50
+ address.area_level_2
51
+ end
52
+
53
+ def state
54
+ address.area_level_1
55
+ end
56
+
57
+ def country
58
+ address.country
59
+ end
60
+
61
+ def country_code
62
+ address.country_code
63
+ end
64
+
65
+ def method_missing(method, &block)
66
+ if method.to_s =~ /^is_(.+?)?$/ && TYPES.include?(method)
67
+ is_type?($1)
68
+ else
69
+ super
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ def is_type?(type)
76
+ # TODO
77
+ end
78
+
79
+ end
80
+ end
81
+ end