velov 0.1.8 → 0.1.10
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.
- checksums.yaml +4 -4
- data/lib/velov/api.rb +4 -4
- data/lib/velov/station.rb +11 -6
- data/lib/velov/station_list.rb +32 -32
- data/lib/velov/version.rb +1 -1
- data/lib/velov.rb +5 -6
- data/velov.gemspec +5 -5
- metadata +13 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27fccd8e49639215948efb3253d5a12b6cbb51c0
|
4
|
+
data.tar.gz: e0bc547822e46c11e1d34e5157c6df6bbea9d33a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ea28fd31b982735326b6aef066df67e6dd6d7e519e6132350e862339562c36e0d7f91a5a4fe99552e72379b76728da22eb0208037c35721b15e91a2ce84e1668
|
7
|
+
data.tar.gz: fa3aeec19b9a4c91c2c84b292f14fbadca41ddfc4750d49e823e2ffa8c5e529b8a3e3c56b8e2366cb44e7ef63773800428c6430b31b50a633271ad1fc7ef147c
|
data/lib/velov/api.rb
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
module Velov
|
2
|
+
# API logic extracted into a class
|
2
3
|
class API
|
3
4
|
API_HOST = 'https://download.data.grandlyon.com'
|
4
|
-
API_ENDPOINT =
|
5
|
-
# DRY API Calls
|
5
|
+
API_ENDPOINT = '/ws/smartdata/jcd_jcdecaux.jcdvelov/all.json'
|
6
6
|
def self.get(params = {})
|
7
7
|
connection ||= Faraday.new API_HOST do |conn|
|
8
|
-
conn.response :json, :
|
8
|
+
conn.response :json, content_type: /\bjson$/
|
9
9
|
conn.adapter Faraday.default_adapter
|
10
10
|
end
|
11
11
|
connection.get API_ENDPOINT, params
|
12
12
|
end
|
13
13
|
end
|
14
|
-
end
|
14
|
+
end
|
data/lib/velov/station.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
module Velov
|
2
|
+
# A Velo'v station
|
2
3
|
class Station
|
3
4
|
include Virtus.model
|
4
5
|
|
@@ -27,7 +28,7 @@ module Velov
|
|
27
28
|
@address_complement = params[Velov::ADDRESS_COMPLEMENT]
|
28
29
|
@city = params[Velov::CITY]
|
29
30
|
@district_number = params[Velov::DISTRICT_NUMBER].to_i
|
30
|
-
@bonus = params[Velov::BONUS] ==
|
31
|
+
@bonus = params[Velov::BONUS] == 'Oui'
|
31
32
|
@position = params[Velov::POSITION]
|
32
33
|
@lat = params[Velov::LATITUDE].to_f
|
33
34
|
@lng = params[Velov::LONGITUDE].to_f
|
@@ -40,13 +41,17 @@ module Velov
|
|
40
41
|
@last_update = DateTime.parse(params[Velov::LAST_UPDATE])
|
41
42
|
end
|
42
43
|
|
44
|
+
# Find a bike Station.
|
45
|
+
#
|
46
|
+
# @param [Integer] station number
|
47
|
+
# @return [Station] Station object, nil if not found
|
43
48
|
def self.find_by_number(number)
|
44
|
-
|
45
|
-
StationList.fetch({ "field" => "number", "value" => number}).to_a.first
|
49
|
+
StationList.fetch('field' => 'number', 'value' => number).to_a.first
|
46
50
|
end
|
47
51
|
|
48
|
-
def distance_to(lat,lng)
|
49
|
-
Geocoder::Calculations.distance_between([@lat
|
52
|
+
def distance_to(lat, lng)
|
53
|
+
Geocoder::Calculations.distance_between([@lat, @lng], [lat, lng],
|
54
|
+
units: :km)
|
50
55
|
end
|
51
56
|
end
|
52
|
-
end
|
57
|
+
end
|
data/lib/velov/station_list.rb
CHANGED
@@ -1,9 +1,32 @@
|
|
1
1
|
module Velov
|
2
|
+
# A Velo'v station list
|
2
3
|
class StationList
|
3
4
|
include Virtus.model
|
4
5
|
|
5
6
|
attribute :list, Array[Station], default: []
|
6
7
|
|
8
|
+
# Fetch data of all stations
|
9
|
+
def self.fetch(params = {})
|
10
|
+
response = API.get(params)
|
11
|
+
|
12
|
+
build_list(response.body)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.from_json(json)
|
16
|
+
build_list(JSON.parse(json))
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.build_list(data)
|
20
|
+
station_list = StationList.new
|
21
|
+
|
22
|
+
data['values'].each do |station_params|
|
23
|
+
station_list.add_station(station_params)
|
24
|
+
end
|
25
|
+
|
26
|
+
station_list
|
27
|
+
end
|
28
|
+
private_class_method :build_list
|
29
|
+
|
7
30
|
def add_station(params)
|
8
31
|
@list << Station.new(params)
|
9
32
|
end
|
@@ -16,16 +39,9 @@ module Velov
|
|
16
39
|
@list
|
17
40
|
end
|
18
41
|
|
19
|
-
|
20
|
-
def self.fetch(params = {})
|
21
|
-
response = API.get(params)
|
22
|
-
|
23
|
-
build_list(response.body)
|
24
|
-
end
|
25
|
-
|
26
|
-
def nearest(lat,lng)
|
42
|
+
def nearest(lat, lng)
|
27
43
|
@list.sort_by do |station|
|
28
|
-
station.distance_to(lat,lng)
|
44
|
+
station.distance_to(lat, lng)
|
29
45
|
end
|
30
46
|
end
|
31
47
|
|
@@ -42,30 +58,14 @@ module Velov
|
|
42
58
|
end
|
43
59
|
|
44
60
|
def walking_distance(start, arrival)
|
45
|
-
start_station =
|
46
|
-
station.status ==
|
61
|
+
start_station = nearest(start.first, start.last).find do |station|
|
62
|
+
station.status == 'OPEN' && station.available_bikes > 0
|
47
63
|
end
|
48
|
-
arrival_station =
|
49
|
-
station.status ==
|
64
|
+
arrival_station = nearest(arrival.first, arrival.last).find do |station|
|
65
|
+
station.status == 'OPEN' && station.available_bike_stands > 0
|
50
66
|
end
|
51
|
-
start_station.distance_to(start.first, start.last) +
|
52
|
-
|
53
|
-
|
54
|
-
def self.from_json(json)
|
55
|
-
build_list(JSON.parse(json))
|
67
|
+
start_station.distance_to(start.first, start.last) +
|
68
|
+
arrival_station.distance_to(arrival.first, arrival.last)
|
56
69
|
end
|
57
|
-
|
58
|
-
private
|
59
|
-
def self.build_list(data)
|
60
|
-
station_list = StationList.new
|
61
|
-
|
62
|
-
data["values"].each do |station_params|
|
63
|
-
station_list.add_station(station_params)
|
64
|
-
end
|
65
|
-
|
66
|
-
station_list
|
67
|
-
end
|
68
|
-
|
69
|
-
|
70
70
|
end
|
71
|
-
end
|
71
|
+
end
|
data/lib/velov/version.rb
CHANGED
data/lib/velov.rb
CHANGED
@@ -2,13 +2,12 @@ require 'virtus'
|
|
2
2
|
require 'faraday'
|
3
3
|
require 'faraday_middleware'
|
4
4
|
require 'geocoder'
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
|
5
|
+
require 'velov/version'
|
6
|
+
require 'velov/api'
|
7
|
+
require 'velov/station'
|
8
|
+
require 'velov/station_list'
|
9
|
+
# Define API Constants
|
10
10
|
module Velov
|
11
|
-
# Define API Constants
|
12
11
|
NUMBER = 0
|
13
12
|
NAME = 1
|
14
13
|
ADDRESS = 2
|
data/velov.gemspec
CHANGED
@@ -18,12 +18,12 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler", '~> 1.
|
22
|
-
spec.add_development_dependency "rake" , '~> 10.
|
23
|
-
spec.add_development_dependency "rspec", '~> 2
|
21
|
+
spec.add_development_dependency "bundler", '~> 1.9'
|
22
|
+
spec.add_development_dependency "rake" , '~> 10.4'
|
23
|
+
spec.add_development_dependency "rspec", '~> 3.2'
|
24
24
|
spec.add_development_dependency "vcr", '~> 2.9'
|
25
|
-
spec.add_development_dependency "webmock", '~> 1.
|
26
|
-
spec.add_development_dependency "coveralls", '~> 0.
|
25
|
+
spec.add_development_dependency "webmock", '~> 1.21'
|
26
|
+
spec.add_development_dependency "coveralls", '~> 0.8'
|
27
27
|
|
28
28
|
spec.add_runtime_dependency "faraday", '~> 0.9'
|
29
29
|
spec.add_runtime_dependency "faraday_middleware", '~> 0.9'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: velov
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre-Baptiste Béchu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.9'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '10.
|
33
|
+
version: '10.4'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '10.
|
40
|
+
version: '10.4'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '2
|
47
|
+
version: '3.2'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '2
|
54
|
+
version: '3.2'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: vcr
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,28 +72,28 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '1.
|
75
|
+
version: '1.21'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '1.
|
82
|
+
version: '1.21'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: coveralls
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
89
|
+
version: '0.8'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0.
|
96
|
+
version: '0.8'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: faraday
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
197
197
|
version: '0'
|
198
198
|
requirements: []
|
199
199
|
rubyforge_project:
|
200
|
-
rubygems_version: 2.2.
|
200
|
+
rubygems_version: 2.2.2
|
201
201
|
signing_key:
|
202
202
|
specification_version: 4
|
203
203
|
summary: Ruby Wrapper for Velov API (Public Bike Sharing System of Lyon, France)
|