velibe 0.2.2 → 0.2.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1171c7eb99d496a8fe7098cd4bac0e55afc5d433
4
- data.tar.gz: f297507d830b9ced6865fd86c208ac0478fb323f
3
+ metadata.gz: 53bf1830ce882ba66e706edbf383b5c97f0a3fa8
4
+ data.tar.gz: 22d9f6e371bf02de9e399f7f72797acff029aa07
5
5
  SHA512:
6
- metadata.gz: 0c0ff73de3c30a96c1469c61871fc076fd70e6d7c21e4d4ac4305ffce471809d40436c55f1d19861805c0db5e251794afdddd0a0cfc7b63194a954f747a177e6
7
- data.tar.gz: a8e0c19d9df1ba889f7d68e1089d5c990cc6cade8183db671f42a7c0740642363cc1d2a0c3b41ac29e654ec96b040ad6f636979bf71f6e8b92d05ac4ebbc4803
6
+ metadata.gz: 881572db58c41d7c2ff371781661b743f1498005718dce68d0f7ddff0474105692f8c664679ea2a8841174fa2f54c7ebf5a345ec312c88cdb85f9b04a528531c
7
+ data.tar.gz: 214b62a2c0ace61ec874eb8b0cc1492a08c99894fcfab161c6dfad811745eefdb1cfb0f03a74d9107accf21b1734084b8fa0b3b42751a1a8b7b460f8ee6812bf
@@ -10,7 +10,6 @@ rvm:
10
10
  before_install: gem install bundler
11
11
  install: bundle install
12
12
  script:
13
- - export VELIBE_TOKEN="junk"
14
13
  - bundle exec rake spec
15
14
 
16
15
  matrix:
@@ -4,6 +4,10 @@ All notable changes to *Velibe* will be documented in this file.
4
4
  This project adheres to [Semantic Versioning](http://semver.org/).
5
5
 
6
6
  ## [Unreleased][unreleased]
7
+ ## [0.2.3] - 2015-12-04
8
+ ### Fixed
9
+ - ensure favorites stations are stored as integer
10
+ - prevent running test to destroy your config :)
7
11
 
8
12
  ## [0.2.2] - 2015-12-02
9
13
  ### Fixed
@@ -38,7 +42,9 @@ This project adheres to [Semantic Versioning](http://semver.org/).
38
42
  ## [0.0.1] - 2015-07-04
39
43
  - Initial Release
40
44
 
41
- [unreleased]: https://github.com/AdrieanKhisbe/velibe/compare/v0.2.1...HEAD
45
+ [unreleased]: https://github.com/AdrieanKhisbe/velibe/compare/v0.2.3...HEAD
46
+ [0.2.3]: https://github.com/AdrieanKhisbe/velibe/compare/v0.2.2...v0.2.3
47
+ [0.2.2]: https://github.com/AdrieanKhisbe/velibe/compare/v0.2.1...v0.2.2
42
48
  [0.2.1]: https://github.com/AdrieanKhisbe/velibe/compare/v0.2.0...v0.2.1
43
49
  [0.2.0]: https://github.com/AdrieanKhisbe/velibe/compare/v0.1.0...v0.2.0
44
50
  [0.1.0]: https://github.com/AdrieanKhisbe/velibe/compare/v0.0.2...v0.1.0
data/Rakefile CHANGED
@@ -1,8 +1,19 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
3
- # §todo: see task offered
1
+ # coding: utf-8
2
+ require 'bundler/gem_tasks'
3
+ require 'rspec/core/rake_task'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
6
+
7
+ # §todo: see task offered : -T flag
4
8
  # see -> http://pablocantero.com/blog/2011/01/02/new-gem-with-bundler-sample-rakefile/
5
9
 
6
10
  RSpec::Core::RakeTask.new(:spec)
11
+ Cucumber::Rake::Task.new(:features) do |t|
12
+ t.cucumber_opts = 'features --format pretty'
13
+ end
14
+
15
+ task test: [:spec, :features]
16
+ task default: :test
17
+
18
+
7
19
 
8
- task :default => :spec
@@ -0,0 +1,5 @@
1
+
2
+
3
+ Given(/^my favorites stations are ([\d, ]+)$/) do |pattern|
4
+ Velibe::KvStore.reset_favorite_stations *pattern.split(', ')
5
+ end
@@ -0,0 +1 @@
1
+ require 'aruba/cucumber'
@@ -0,0 +1,26 @@
1
+ require 'aruba/cucumber'
2
+ velibe_lib = File.expand_path('../../lib', __FILE__)
3
+
4
+ ENV['VELIBE_DB_PATH'] = '/tmp/velibe.db'
5
+ ENV['VELIBE_CONFIG_PATH'] = '/tmp/velibe.yaml'
6
+ ENV['VELIBE_TOKEN'] = 'fake-test-value'
7
+
8
+ if ENV['TRAVIS']
9
+ require 'simplecov'
10
+ require 'coveralls'
11
+
12
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
13
+ SimpleCov.start do
14
+ # No need to report coverage metrics for the test code
15
+ add_filter 'test'
16
+ add_filter 'features'
17
+ add_filter 'data'
18
+ end
19
+
20
+ # Eager load the entire lib directory so that SimpleCov is able to report
21
+ # accurate code coverage metrics.
22
+ at_exit { Dir["#{velibe_lib}/**/*.rb"].each { |rb| require(rb) } }
23
+ end
24
+
25
+ $LOAD_PATH.unshift velibe_lib
26
+ require 'velibe'
@@ -0,0 +1,16 @@
1
+ Feature: Playing with favorites
2
+ In order to see not specify each time wich station i'm interested in
3
+ As a user of the velibe cli
4
+ I want to be handle to manage favorite
5
+
6
+
7
+ Background: Favorites Exists
8
+ Given my favorites stations are 22, 42, 68
9
+
10
+ Scenario: List favorites
11
+
12
+ Scenario: Add a Favorite
13
+
14
+
15
+
16
+ Scenario: Force Reset of favorites
@@ -0,0 +1,25 @@
1
+ Feature: Querying the API
2
+ In order to see if I can take a bike at a given station
3
+ As a user of the velibe cli
4
+ I want to be able to query the api through the velibe cli
5
+
6
+ Background: Favorites Exists
7
+ Given my favorites stations are 22, 42, 68
8
+
9
+ Scenario: By Default, my favorites are queried
10
+ Given a file named "file.txt" with:
11
+ """
12
+ Hello World
13
+ """
14
+ Then the file "file.txt" should contain:
15
+ """
16
+ Hello World
17
+ """
18
+
19
+
20
+ Scenario: I can specify the station i'm interested into
21
+
22
+
23
+
24
+
25
+ Scenario: Wrong arguments are ignored and warning is printed
@@ -50,7 +50,7 @@ module Velibe
50
50
  end
51
51
 
52
52
  def self.add_favorite(stations)
53
- KvStore.add_favorite_station(*stations)
53
+ KvStore.add_favorite_station *stations
54
54
  end
55
55
 
56
56
  def self.setup_station_database(force = false)
@@ -0,0 +1,15 @@
1
+ module Velibe
2
+ module Config
3
+ # §see: http://stackoverflow.com/questions/7828066/accessing-files-packaged-into-a-ruby-gem
4
+
5
+ DB_NAME = ENV['VELIBE_DB_PATH'] || '~/.velib.db'
6
+ DB_PATH = Pathname.new(DB_NAME).expand_path # .to_s?
7
+ DATA_CSV = '../../data/Paris.csv'
8
+
9
+ DATA_CSV_FILE = File.join(File.dirname(File.expand_path(__FILE__)), DATA_CSV)
10
+
11
+ KV_NAME = ENV['VELIBE_CONFIG_PATH'] || '~/.velib.yaml'
12
+ KV_PATH = Pathname.new(KV_NAME).expand_path
13
+
14
+ end
15
+ end
@@ -6,15 +6,12 @@ require 'sqlite3'
6
6
  require 'active_record'
7
7
  require 'csv'
8
8
  require 'velibe/db/models'
9
+ require 'velibe/config'
9
10
 
10
11
  module Velibe
11
12
 
12
13
  module Database
13
- DB_NAME = '~/.velib.db' # TODO: more generic + config
14
- DB_PATH = Pathname.new(DB_NAME).expand_path # .to_s?
15
- DATA_CSV = '../../../data/Paris.csv'
16
- DATA_CSV_FILE = File.join(File.dirname(File.expand_path(__FILE__)), DATA_CSV)
17
- # §see: http://stackoverflow.com/questions/7828066/accessing-files-packaged-into-a-ruby-gem
14
+ include Config
18
15
 
19
16
  def self.exist?
20
17
  DB_PATH.exist? # §check
@@ -1,34 +1,44 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'moneta'
3
3
  require 'pathname'
4
+ require 'velibe/config'
4
5
 
5
6
  module Velibe
6
7
 
7
8
  module KvStore
8
- NAME = '~/.velib.yaml' # TODO: more generic
9
- PATH = Pathname.new(NAME).expand_path
10
- DB = Moneta.new(:YAML, file: PATH)
9
+ include Config
11
10
 
11
+ KV_DB = Moneta.new(:YAML, file: KV_PATH)
12
12
  FAV_KEY = 'favorites'
13
13
 
14
+ def self.db
15
+ KV_DB
16
+ end
17
+
18
+ def self.fav_key
19
+ FAV_KEY
20
+ end
21
+
14
22
  def self.token
15
- DB['token']
23
+ KV_DB['token']
16
24
  end
17
25
 
18
- def self.reset_favorite_stations
19
- DB[FAV_KEY] = []
26
+ def self.reset_favorite_stations(*new_stations)
27
+ KV_DB[FAV_KEY] = new_stations.collect(&:to_i)
20
28
  end
21
29
 
22
30
  def self.favorite_stations
23
- DB[FAV_KEY]
31
+ KV_DB[FAV_KEY]
24
32
  end
25
33
 
26
34
  def self.add_favorite_station(*stations)
27
- fav = DB[FAV_KEY]
35
+ fav = KV_DB[FAV_KEY]
28
36
  # TODO: handle setup
29
37
  # TODO: check existing station
30
- stations.each { |station| fav.push(station) unless fav.include?(station) }
31
- DB[FAV_KEY] = fav
38
+ stations.collect(&:to_i).each do |station|
39
+ fav.push(station) unless fav.include?(station)
40
+ end
41
+ KV_DB[FAV_KEY] = fav
32
42
  end
33
43
 
34
44
  end
@@ -1,3 +1,3 @@
1
1
  module Velibe
2
- VERSION = '0.2.2'
2
+ VERSION = '0.2.3'
3
3
  end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+
3
+
4
+ describe Velibe::KvStore do
5
+
6
+
7
+ before { Velibe::KvStore.db[Velibe::KvStore.fav_key] = [2, 3, 4] }
8
+ let(:favorites) { Velibe::KvStore.favorite_stations }
9
+
10
+
11
+ describe '#token' do
12
+ let(:token) { Velibe::KvStore.token }
13
+ context 'no token in conf' do
14
+ before { Velibe::KvStore.db.delete 'token'}
15
+ it { expect(token).to be_nil }
16
+ end
17
+ context 'with token in conf' do
18
+ before { Velibe::KvStore.db['token'] = 'fake-test-value' }
19
+ it { expect(token).to eq 'fake-test-value' }
20
+ end
21
+ end
22
+
23
+ describe '#favorite_stations' do
24
+ it { expect(favorites).to eq [2, 3, 4] }
25
+ end
26
+
27
+ describe '#reset_favorite_stations' do
28
+
29
+ context 'default arguments' do
30
+ before { Velibe::KvStore.reset_favorite_stations }
31
+ it { expect(favorites).to eq [] }
32
+ end
33
+
34
+ context 'specific arguments' do
35
+ before { Velibe::KvStore.reset_favorite_stations 12, 42 }
36
+ it { expect(favorites).to eq [12, 42] }
37
+ end
38
+
39
+ context 'specific arguments as string' do
40
+ before { Velibe::KvStore.reset_favorite_stations '33' }
41
+ it { expect(favorites).to eq [33] }
42
+ end
43
+
44
+ end
45
+
46
+ describe '#add_favorite_station' do
47
+ before { Velibe::KvStore.add_favorite_station *new_fav }
48
+ let(:final_fav) { Velibe::KvStore.favorite_stations }
49
+
50
+ context 'single new favorite' do
51
+ let(:new_fav) { 5 }
52
+ it { expect(final_fav).to eq (2..5).to_a }
53
+ end
54
+
55
+ context 'list of favorites' do
56
+ let(:new_fav) { (5..10).to_a }
57
+ it { expect(final_fav).to eq (2..10).to_a }
58
+ end
59
+
60
+ context 'single new as string' do
61
+ let(:new_fav) { '5' }
62
+ it { expect(final_fav).to eq (2..5).to_a }
63
+ end
64
+
65
+ context 'ignore duplicates' do
66
+ let(:new_fav) { (3..5).to_a }
67
+ it { expect(final_fav).to eq (2..5).to_a }
68
+ end
69
+
70
+ context 'no values' do
71
+ let(:new_fav) {}
72
+ it { expect(final_fav).to eq (2..4).to_a }
73
+ end
74
+
75
+
76
+ end
77
+
78
+ end
@@ -1,5 +1,9 @@
1
1
  velibe_lib = File.expand_path('../../lib', __FILE__)
2
2
 
3
+ ENV['VELIBE_DB_PATH'] = '/tmp/velibe.db'
4
+ ENV['VELIBE_CONFIG_PATH'] = '/tmp/velibe.yaml'
5
+ ENV['VELIBE_TOKEN'] = 'fake-test-value'
6
+
3
7
  if ENV['TRAVIS']
4
8
  require 'simplecov'
5
9
  require 'coveralls'
@@ -8,6 +12,8 @@ if ENV['TRAVIS']
8
12
  SimpleCov.start do
9
13
  # No need to report coverage metrics for the test code
10
14
  add_filter 'test'
15
+ add_filter 'features'
16
+ add_filter 'data'
11
17
  end
12
18
 
13
19
  # Eager load the entire lib directory so that SimpleCov is able to report
@@ -26,6 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'bundler', '~> 1.6'
27
27
  spec.add_development_dependency 'rake'
28
28
  spec.add_development_dependency 'rspec'
29
+ spec.add_development_dependency 'cucumber'
30
+ spec.add_development_dependency 'aruba', '~> 0.11.1'
29
31
  spec.add_development_dependency 'simplecov'
30
32
  spec.add_development_dependency 'coveralls'
31
33
  spec.add_development_dependency 'jazz_fingers'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: velibe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adriean Khisbe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-02 00:00:00.000000000 Z
11
+ date: 2015-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http
@@ -108,6 +108,34 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: cucumber
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: aruba
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.11.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.11.1
111
139
  - !ruby/object:Gem::Dependency
112
140
  name: simplecov
113
141
  requirement: !ruby/object:Gem::Requirement
@@ -186,13 +214,20 @@ files:
186
214
  - bin/velibe
187
215
  - data/Paris.csv
188
216
  - data/Paris.json
217
+ - features/step_definitions/config_steps.rb
218
+ - features/support/aruba.rb
219
+ - features/support/env.rb
220
+ - features/velibe_favorites.feature
221
+ - features/velibe_query.feature
189
222
  - lib/velibe.rb
190
223
  - lib/velibe/api_velib.rb
224
+ - lib/velibe/config.rb
191
225
  - lib/velibe/db/database.rb
192
226
  - lib/velibe/db/kv_store.rb
193
227
  - lib/velibe/db/models.rb
194
228
  - lib/velibe/station_status.rb
195
229
  - lib/velibe/version.rb
230
+ - spec/kv_store_spec.rb
196
231
  - spec/spec_helper.rb
197
232
  - spec/station_status_spec.rb
198
233
  - velibe.gemspec
@@ -222,6 +257,12 @@ signing_key:
222
257
  specification_version: 4
223
258
  summary: Small Velib Utility
224
259
  test_files:
260
+ - features/step_definitions/config_steps.rb
261
+ - features/support/aruba.rb
262
+ - features/support/env.rb
263
+ - features/velibe_favorites.feature
264
+ - features/velibe_query.feature
265
+ - spec/kv_store_spec.rb
225
266
  - spec/spec_helper.rb
226
267
  - spec/station_status_spec.rb
227
268
  has_rdoc: