coordsafe_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YTIwYWU3NGY4OGQ0NWY3YzAxOGQ0MmQ4NmY4Y2I3OWE2ZmRhZjczZQ==
5
+ data.tar.gz: !binary |-
6
+ MzlkZWEyNGViNDc3ZDNhOTliZjQ2MmE1OWU2OWNmZmEyYjIwNjYxMw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NmYxOGIxYjhjMmFhYmQ5ZjNlNDI1ZGJlOWRjOGFjMDVhMTI2OGY5NDdkYzUw
10
+ ZDMyZjQ4YjIxYjhiNjA2NWYzYWUxMWYyN2Q3YThiYjYxYjc5NjA5MTk3ZTQ4
11
+ NTY2NjdiYmIyZjdiODhkMDkyZjZhMzI4YWQzZDdmOTNlM2EyNWU=
12
+ data.tar.gz: !binary |-
13
+ Y2Y1NmRhZDQ4MGQ0MTdkYWNlZmZhYTJiYmU4OTM0MWEzODM3NDExOTAyNGRh
14
+ ZDM3ZDQ5ZDk2MTM1Nzg3N2Y4MDJmMjMzN2Y0MmFiNjE3MWNlYWQ1OTE1ZTE3
15
+ OTgyZmRkYzg1ZGIwMzIxMGVmOGQ2Yjk4MjFkYzA3ZDY4YjQ0ZWU=
data/.gitignore ADDED
@@ -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,2 @@
1
+ --format nested
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.9.3"
4
+ script: bundle exec rake
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'coveralls', require: false
4
+
5
+ # Specify your gem's dependencies in coordsafe_api.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,59 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ coordsafe_api (0.1.0)
5
+ httparty
6
+ yajl-ruby
7
+
8
+ GEM
9
+ remote: http://rubygems.org/
10
+ specs:
11
+ addressable (2.3.5)
12
+ colorize (0.5.8)
13
+ coveralls (0.6.7)
14
+ colorize
15
+ multi_json (~> 1.3)
16
+ rest-client
17
+ simplecov (>= 0.7)
18
+ thor
19
+ crack (0.4.0)
20
+ safe_yaml (~> 0.9.0)
21
+ diff-lcs (1.2.4)
22
+ httparty (0.11.0)
23
+ multi_json (~> 1.0)
24
+ multi_xml (>= 0.5.2)
25
+ mime-types (1.23)
26
+ multi_json (1.7.7)
27
+ multi_xml (0.5.4)
28
+ rake (10.1.0)
29
+ rest-client (1.6.7)
30
+ mime-types (>= 1.16)
31
+ rspec (2.13.0)
32
+ rspec-core (~> 2.13.0)
33
+ rspec-expectations (~> 2.13.0)
34
+ rspec-mocks (~> 2.13.0)
35
+ rspec-core (2.13.1)
36
+ rspec-expectations (2.13.0)
37
+ diff-lcs (>= 1.1.3, < 2.0)
38
+ rspec-mocks (2.13.1)
39
+ safe_yaml (0.9.3)
40
+ simplecov (0.7.1)
41
+ multi_json (~> 1.0)
42
+ simplecov-html (~> 0.7.1)
43
+ simplecov-html (0.7.1)
44
+ thor (0.18.1)
45
+ webmock (1.13.0)
46
+ addressable (>= 2.2.7)
47
+ crack (>= 0.3.2)
48
+ yajl-ruby (1.1.0)
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ bundler (~> 1.3)
55
+ coordsafe_api!
56
+ coveralls
57
+ rake
58
+ rspec (~> 2.6)
59
+ webmock
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Vincent Paca
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.
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ Coordsafe Api
2
+ =============
3
+ [![Build Status](https://travis-ci.org/EdeyaLabs/coordsafe_api.png?branch=master)](https://travis-ci.org/EdeyaLabs/coordsafe_api)
4
+ [![Code Climate](https://codeclimate.com/github/EdeyaLabs/coordsafe_api.png)](https://codeclimate.com/github/EdeyaLabs/coordsafe_api)
5
+ [![Coverage Status](https://coveralls.io/repos/EdeyaLabs/coordsafe_api/badge.png?branch=master)](https://coveralls.io/r/EdeyaLabs/coordsafe_api?branch=master)
6
+
7
+ Ruby wrapper for the Coordsafe locator API
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake"
3
+ require "rspec"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec) do |s|
7
+ s.pattern = "spec/**/*_spec.rb"
8
+ end
9
+
10
+ task :default => :spec
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'coordsafe_api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "coordsafe_api"
8
+ spec.version = CoordsafeApi::VERSION
9
+ spec.authors = ["Vincent Paca"]
10
+ spec.email = ["vincent.paca@gmail.com"]
11
+ spec.description = %q{A ruby wrapper for the Coordsafe locator API}
12
+ spec.summary = %q{Wrapper for the Coordsafe API}
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_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec", "~> 2.6"
24
+ spec.add_development_dependency "webmock"
25
+
26
+ spec.add_dependency "httparty"
27
+ spec.add_dependency "yajl-ruby"
28
+ end
@@ -0,0 +1,43 @@
1
+ module CoordsafeApi
2
+ module Configuration
3
+ VALID_CONNECTION_KEYS = [:locator_endpoint, :history_endpoint, :single_history_endpoint, :user_agent, :method].freeze
4
+ VALID_OPTIONS_KEYS = [:secret, :company_name, :format].freeze
5
+ VALID_CONFIG_KEYS = VALID_CONNECTION_KEYS + VALID_OPTIONS_KEYS
6
+
7
+ DEFAULT_LOCATOR_ENDPOINT = "http://www.coordsafe.com.sg/CoordSafePortalApp/locators/lc/company"
8
+ DEFAULT_HISTORY_ENDPOINT = "http://www.coordsafe.com.sg/CoordSafePortalApp/locators/lc/history"
9
+ DEFAULT_SINGLE_HISTORY_ENDPOINT = "http://www.coordsafe.com.sg/CoordSafePortalApp/locators/lc/location"
10
+ DEFAULT_METHOD = :get
11
+ DEFAULT_USER_AGENT = "CoordsafeApi Ruby Gem #{CoordsafeApi::VERSION}".freeze
12
+
13
+ DEFAULT_KEY = nil
14
+ DEFAULT_COMPANY_NAME = nil
15
+ DEFAULT_FORMAT = :json
16
+
17
+ attr_accessor *VALID_CONFIG_KEYS
18
+
19
+ def self.extended(base)
20
+ base.reset
21
+ end
22
+
23
+ def configure
24
+ yield self
25
+ end
26
+
27
+ def reset
28
+ self.locator_endpoint = DEFAULT_LOCATOR_ENDPOINT
29
+ self.history_endpoint = DEFAULT_HISTORY_ENDPOINT
30
+ self.single_history_endpoint = DEFAULT_SINGLE_HISTORY_ENDPOINT
31
+ self.method = DEFAULT_METHOD
32
+ self.user_agent = DEFAULT_USER_AGENT
33
+
34
+ self.secret = DEFAULT_KEY
35
+ self.company_name = DEFAULT_COMPANY_NAME
36
+ self.format = DEFAULT_FORMAT
37
+ end
38
+
39
+ def options
40
+ Hash[ * VALID_CONFIG_KEYS.map { |key| [key, send(key)] }.flatten ]
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,40 @@
1
+ module CoordsafeApi
2
+ class Locator
3
+ include HTTParty
4
+
5
+ attr_accessor *Configuration::VALID_CONFIG_KEYS
6
+
7
+ def initialize(options={})
8
+ merged_options = CoordsafeApi.options.merge(options)
9
+
10
+ Configuration::VALID_CONFIG_KEYS.each do |key|
11
+ send("#{key}=", merged_options[key])
12
+ end
13
+ end
14
+
15
+ def locate
16
+ response = self.class.get("#{locator_endpoint}/#{URI.escape(company_name)}?key=#{secret}")
17
+ Response.new(response)
18
+ end
19
+
20
+ # opts: locator_id, date_from, date_to
21
+ # If only date_from exists,
22
+ def locate_history(locator_id, date_from, date_to=nil)
23
+ if date_to.nil?
24
+ response = self.class.get("#{single_history_endpoint}/#{locator_id}/#{Locator.parameterize(date_from)}?key=#{secret}")
25
+ Response.new(response)
26
+ else
27
+ response = self.class.get("#{history_endpoint}/#{locator_id}/#{Locator.parameterize(date_from, date_to)}?key=#{secret}")
28
+ Response.new(response)
29
+ end
30
+ end
31
+
32
+ def self.parameterize(date_from, date_to=nil)
33
+ unless date_to.nil?
34
+ URI.escape("#{date_from.strftime("%m-%d-%Y %H:%M")},#{date_to.strftime("%m-%d-%Y %H:%M")}")
35
+ else
36
+ URI.escape(date_from.strftime("%m-%d-%Y %H:%M"))
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,22 @@
1
+ module CoordsafeApi
2
+ class Response
3
+ attr_accessor :success, :body
4
+
5
+ def initialize(request)
6
+ @status, @body = request.response, request.response.body
7
+ end
8
+
9
+ def success
10
+ if @status.class == Net::HTTPOK
11
+ true
12
+ else
13
+ false
14
+ end
15
+ end
16
+
17
+ def body
18
+ JSON.parse @body
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,3 @@
1
+ module CoordsafeApi
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,13 @@
1
+ require 'httparty'
2
+ require 'json'
3
+
4
+ require "coordsafe_api/version"
5
+ require "coordsafe_api/configuration"
6
+ require "coordsafe_api/locator"
7
+ require "coordsafe_api/response"
8
+
9
+ module CoordsafeApi
10
+ extend Configuration
11
+ end
12
+
13
+
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ describe CoordsafeApi::Configuration do
4
+ describe "when setting the configuration" do
5
+ after do
6
+ CoordsafeApi.reset
7
+ end
8
+
9
+ it "should set the configuration keys" do
10
+ CoordsafeApi.configure do |config|
11
+ config.secret = "qwerty"
12
+ config.company_name = "EdeyaLabs"
13
+ end
14
+
15
+ CoordsafeApi.secret.should eq "qwerty"
16
+ CoordsafeApi.company_name.should eq "EdeyaLabs"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,149 @@
1
+ require 'spec_helper'
2
+
3
+ describe CoordsafeApi::Locator do
4
+ context "on utilizing the API" do
5
+ before(:each) do
6
+ @api = CoordsafeApi::Locator.new({:company_name => "Sypher Labs Pte. Ltd.", :key => "test-1234qwer"})
7
+ stub_request(:get, "http://www.coordsafe.com.sg/CoordSafePortalApp/locators/lc/company/Sypher%20Labs%20Pte.%20Ltd.?key=").to_return(
8
+ :body => '[ {"location":null,"imeiCode":"353301057336682","gpsLocation":{"time":0,"accuracy":0.0,"altitude":0.0,"bearing":0.0,
9
+ "distance":0.0,"hasAccuracy":false,"hasAltitude":false,"hasBearing":false,"hasSpeed":false,"initialBearing":0.0,"latitude":1.5296516666666666,
10
+ "longitude":103.77401,"speed":0.0},"deviceStatus":{"isGpsOn":false,"imei":"","isGsmOn":false,"networkAvailability":0,"ip":"","batteryLeft":0},
11
+ "create":false,"assignedTo":"Sypher Labs Pte. Ltd.","id":35,"type":"CS","status":null,"madeBy":null,"madeDate":1423065600000,"model":"BBT-01",
12
+ "label":"PDN399","lastLocationUpdate":1373096366341,"ownerId":"CS","lastStatusUpdate":1369535434914} ]',
13
+ :headers => { "Content-Type" => 'application/json', "Transfer-Encoding" => 'chunked' })
14
+ stub_request(:get, "http://www.coordsafe.com.sg/CoordSafePortalApp/locators/lc/location/18/01-27-2013%2009:30?key=").to_return(
15
+ :body => '[ {"id":209588,"accuracy":0.0,"altitude":0.0,"bearing":164.39999389648438,"distance":0.0,"speed":65.5,"lat":1.3918833333333334,
16
+ "lng":103.75420666666668,"location_time":1359248454818,"locator_id":18},{"id":209589,"accuracy":0.0,"altitude":0.0,"bearing":165.35000610351562,
17
+ "distance":0.0,"speed":64.5999984741211,"lat":1.3910783333333332,"lng":103.75441166666666,"location_time":1359248454862,"locator_id":18} ]',
18
+ :content_type => 'application/json')
19
+ stub_request(:get, "http://www.coordsafe.com.sg/CoordSafePortalApp/locators/lc/history/18/01-27-2013%2009:00,01-27-2013%2010:00?key=").to_return(
20
+ :body => ' {"id":209869,"accuracy":0.0,"altitude":0.0,"bearing":178.89999389648438,"distance":0.0,"speed":37.900001525878906,
21
+ "lat":1.3253249999999999,"lng":103.76431833333332,"location_time":1359250196802,"locator_id":18}',
22
+ :content_type => 'application/json')
23
+ end
24
+
25
+ it "should respond with the CoordsafeApi::Response object on #locate" do
26
+ request = @api.locate
27
+ request.class.should eq(CoordsafeApi::Response)
28
+ end
29
+
30
+ it "should respond with an Array of JSON on #locate" do
31
+ request = @api.locate
32
+ results = request.body
33
+ results.class.should eq(Array)
34
+ results.each do |r|
35
+ r.class.should eq(Hash)
36
+ end
37
+ end
38
+
39
+ it "should return true for success" do
40
+ request = @api.locate
41
+ request.success.should be_true
42
+ end
43
+
44
+ it "should respond with the CoordsafeApi::Response object on #locate_history with date_from" do
45
+ request = @api.locate_history(18, DateTime.parse("2013-01-27 09:30"))
46
+ request.class.should eq(CoordsafeApi::Response)
47
+ end
48
+
49
+ it "should respond with JSON on #locate_history with date_from" do
50
+ request = @api.locate_history(18, DateTime.parse("2013-01-27 09:30"))
51
+ results = request.body
52
+ results.class.should eq(Array)
53
+ results.each do |r|
54
+ r.class.should eq(Hash)
55
+ end
56
+ end
57
+
58
+ it "should return true for success" do
59
+ request = @api.locate_history(18, DateTime.parse("2013-01-27 09:30"))
60
+ request.success.should be_true
61
+ end
62
+
63
+ it "should respond with the CoordsafeApi::Response object on #locate_history with date_from and date_to" do
64
+ request = @api.locate_history(18, DateTime.parse("2013-01-27 09:00"), DateTime.parse("2013-01-27 10:00"))
65
+ request.class.should eq(CoordsafeApi::Response)
66
+ end
67
+
68
+ it "should respond with JSON on #locate_history with date_from and date_to" do
69
+ request = @api.locate_history(18, DateTime.parse("2013-01-27 09:00"), DateTime.parse("2013-01-27 10:00"))
70
+ results = request.body
71
+ results.class.should eq(Hash)
72
+ end
73
+
74
+ it "should return true for success" do
75
+ request = @api.locate_history(18, DateTime.parse("2013-01-27 09:00"), DateTime.parse("2013-01-27 10:00"))
76
+ request.success.should be_true
77
+ end
78
+
79
+
80
+ it "should parameterize date_from on #paramemterize" do
81
+ CoordsafeApi::Locator.parameterize(DateTime.parse("2013-07-06 9:30")).should eq("07-06-2013%2009:30")
82
+ end
83
+
84
+ it "should parameterize dates on #parameterize" do
85
+ CoordsafeApi::Locator.parameterize(DateTime.parse("2013-07-06 9:30"), DateTime.parse("2013-07-08 5:00")).should eq("07-06-2013%2009:30,07-08-2013%2005:00")
86
+ end
87
+ end
88
+
89
+ context "on configuration" do
90
+ before do
91
+ @keys = CoordsafeApi::Configuration::VALID_CONFIG_KEYS
92
+ end
93
+
94
+ describe "with module configuration" do
95
+ before do
96
+ CoordsafeApi.configure do |config|
97
+ @keys.each do |key|
98
+ config.send("#{key}=", key)
99
+ end
100
+ end
101
+ end
102
+
103
+ after do
104
+ CoordsafeApi.reset
105
+ end
106
+
107
+ it "should inherit module configuration" do
108
+ api = CoordsafeApi::Locator.new
109
+ @keys.each do |key|
110
+ api.send(key).should eq(key)
111
+ end
112
+ end
113
+
114
+ describe "with class configuration" do
115
+ before do
116
+ @config = {
117
+ :secret => "qwerty",
118
+ :company_name => "qwerty",
119
+ :format => "test",
120
+ :locator_endpoint => "test",
121
+ :history_endpoint => "test",
122
+ :single_history_endpoint => "test",
123
+ :user_agent => "qwerty",
124
+ :method => "test",
125
+ }
126
+ end
127
+
128
+ it "should ovverride module configuration" do
129
+ api = CoordsafeApi::Locator.new(@config)
130
+ @keys.each do |key|
131
+ api.send(key).should eq @config[key]
132
+ end
133
+ end
134
+
135
+ it "should override module configuration after" do
136
+ api = CoordsafeApi::Locator.new
137
+
138
+ @config.each do |key, value|
139
+ api.send("#{key}=", value)
140
+ end
141
+
142
+ @keys.each do |key|
143
+ api.send("#{key}").should eq @config[key]
144
+ end
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,9 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+
4
+ require 'rspec'
5
+ require 'coveralls'
6
+ require 'coordsafe_api'
7
+ require 'webmock/rspec'
8
+
9
+ Coveralls.wear!
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: coordsafe_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Vincent Paca
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-07-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '2.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '2.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
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'
69
+ - !ruby/object:Gem::Dependency
70
+ name: httparty
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: yajl-ruby
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: A ruby wrapper for the Coordsafe locator API
98
+ email:
99
+ - vincent.paca@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .gitignore
105
+ - .rspec
106
+ - .travis.yml
107
+ - Gemfile
108
+ - Gemfile.lock
109
+ - LICENSE.txt
110
+ - README.md
111
+ - Rakefile
112
+ - coordsafe_api.gemspec
113
+ - lib/coordsafe_api.rb
114
+ - lib/coordsafe_api/configuration.rb
115
+ - lib/coordsafe_api/locator.rb
116
+ - lib/coordsafe_api/response.rb
117
+ - lib/coordsafe_api/version.rb
118
+ - spec/coordsafe_api/configuration_spec.rb
119
+ - spec/coordsafe_api/locator_spec.rb
120
+ - spec/spec_helper.rb
121
+ homepage: ''
122
+ licenses:
123
+ - MIT
124
+ metadata: {}
125
+ post_install_message:
126
+ rdoc_options: []
127
+ require_paths:
128
+ - lib
129
+ required_ruby_version: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ required_rubygems_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ! '>='
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ requirements: []
140
+ rubyforge_project:
141
+ rubygems_version: 2.0.3
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Wrapper for the Coordsafe API
145
+ test_files:
146
+ - spec/coordsafe_api/configuration_spec.rb
147
+ - spec/coordsafe_api/locator_spec.rb
148
+ - spec/spec_helper.rb