gares 0.1.0
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 +7 -0
- data/.gitignore +8 -0
- data/.rspec +1 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +36 -0
- data/.travis.yml +19 -0
- data/Gemfile +3 -0
- data/MIT-LICENSE +21 -0
- data/README.md +85 -0
- data/Rakefile +27 -0
- data/gares.gemspec +32 -0
- data/lib/gares/base.rb +49 -0
- data/lib/gares/gare.rb +5 -0
- data/lib/gares/gare_list.rb +15 -0
- data/lib/gares/search.rb +48 -0
- data/lib/gares/string_extensions.rb +22 -0
- data/lib/gares/version.rb +3 -0
- data/lib/gares.rb +16 -0
- data/spec/fixtures/frabt +330 -0
- data/spec/fixtures/frhco +346 -0
- data/spec/fixtures/frlpd +365 -0
- data/spec/fixtures/search +5254 -0
- data/spec/gares/gare_spec.rb +36 -0
- data/spec/gares/search_spec.rb +42 -0
- data/spec/spec_helper.rb +40 -0
- data/tasks/fixtures.rake +17 -0
- data/tasks/rspec.rake +21 -0
- metadata +183 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
# This test uses "Lyon Part-Dieu" as a testing sample:
|
6
|
+
#
|
7
|
+
# http://www.gares-en-mouvement.com/fr/frlpd/votre-gare/
|
8
|
+
#
|
9
|
+
|
10
|
+
describe Gares::Gare do
|
11
|
+
|
12
|
+
describe 'valid gare' do
|
13
|
+
|
14
|
+
before(:each) do
|
15
|
+
# Get gare de Lyon Part-Dieu
|
16
|
+
@gare = Gares::Gare.new('frlpd')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'should find the name' do
|
20
|
+
name = @gare.name
|
21
|
+
|
22
|
+
expect(name).to eql('Lyon Part Dieu')
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe 'with name that has utf-8 characters' do
|
27
|
+
# Belleville sur Sâone
|
28
|
+
before(:each) do
|
29
|
+
@gare = Gares::Gare.search('Saone').first
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should give the proper name' do
|
33
|
+
expect(@gare.name).to eql('Belleville sur Sâone')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Gares::Search do
|
4
|
+
context 'with multiple search results' do
|
5
|
+
before(:each) do
|
6
|
+
@search = Gares::Search.new('Aix')
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'should remember the query' do
|
10
|
+
expect(@search.query).to eql('Aix')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should find 5 results' do
|
14
|
+
expect(@search.gares.size).to eql(7)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should return Gares::Gare objects only' do
|
18
|
+
expect(@search.gares).to all(be_an(Gares::Gare))
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'should not return gares with no name' do
|
22
|
+
@search.gares.each { |gare| expect(gare.name).to_not be_blank }
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should return only the name of the result' do
|
26
|
+
expect(@search.gares.first.name).to eql('Aix en Provence')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'with an exact match' do
|
31
|
+
it 'should not raise an exception' do
|
32
|
+
expect do
|
33
|
+
@search = Gares::Search.new('Paris Austerlitz').gares
|
34
|
+
end.not_to raise_error
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should return the movie slug correctly' do
|
38
|
+
@search = Gares::Search.new('Paris Austerlitz')
|
39
|
+
expect(@search.gares.first.slug).to eql('frpaz')
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# By default if you have the FakeWeb gem installed when the specs are
|
2
|
+
# run they will hit recorded responses. However, if you don't have
|
3
|
+
# the FakeWeb gem installed or you set the environment variable
|
4
|
+
# LIVE_TEST then the tests will hit the live site gares-en-mouvement.com.
|
5
|
+
#
|
6
|
+
# Having both methods available for testing allows you to quickly
|
7
|
+
# refactor and add features, while also being able to make sure that
|
8
|
+
# no changes to the gares-en-mouvement.com interface have affected the parser.
|
9
|
+
###
|
10
|
+
|
11
|
+
require 'rspec'
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib')
|
14
|
+
require 'gares'
|
15
|
+
|
16
|
+
def read_fixture(path)
|
17
|
+
File.read(File.expand_path(File.join(File.dirname(__FILE__), 'fixtures', path)))
|
18
|
+
end
|
19
|
+
|
20
|
+
GARES_SAMPLES = {
|
21
|
+
'http://www.gares-en-mouvement.com/fr/frabt/services-en-gare/vente/' => 'frabt',
|
22
|
+
'http://www.gares-en-mouvement.com/fr/frlpd/votre-gare' => 'frlpd',
|
23
|
+
'http://www.gares-en-mouvement.com/fr/frhco/vore-gare/' => 'frhco',
|
24
|
+
'https://www.kimonolabs.com/api/7jys32dy?apikey=lsOO4tNm78cH9JxqWg9gAk9l4nYaou9j&kimmodify=1' => 'search'
|
25
|
+
}
|
26
|
+
|
27
|
+
unless ENV['LIVE_TEST']
|
28
|
+
begin
|
29
|
+
require 'rubygems'
|
30
|
+
require 'fakeweb'
|
31
|
+
|
32
|
+
FakeWeb.allow_net_connect = false
|
33
|
+
GARES_SAMPLES.each do |url, response|
|
34
|
+
FakeWeb.register_uri(:get, url, response: read_fixture(response))
|
35
|
+
end
|
36
|
+
rescue LoadError
|
37
|
+
puts 'Could not load FakeWeb, these tests will hit gares-en-mouvement.com'
|
38
|
+
puts 'You can run `gem install fakeweb` to stub out the responses.'
|
39
|
+
end
|
40
|
+
end
|
data/tasks/fixtures.rake
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
namespace :fixtures do
|
2
|
+
desc "Refresh spec fixtures with fresh data from gares-en-mouvement.com"
|
3
|
+
task :refresh do
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec/spec_helper")
|
5
|
+
|
6
|
+
ONLY = ENV['ONLY'] ? ENV['ONLY'].split(',') : []
|
7
|
+
GARES_SAMPLES.each_pair do |url, fixture|
|
8
|
+
next if !ONLY.empty? and !ONLY.include?(fixture)
|
9
|
+
page = `curl -is #{url}`
|
10
|
+
|
11
|
+
File.open(File.expand_path(File.dirname(__FILE__) + "/../spec/fixtures/#{fixture}"), 'w') do |f|
|
12
|
+
f.write(page)
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/tasks/rspec.rake
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
begin
|
2
|
+
require 'spec'
|
3
|
+
rescue LoadError
|
4
|
+
require 'rubygems'
|
5
|
+
require 'spec'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'spec/rake/spectask'
|
9
|
+
rescue LoadError
|
10
|
+
puts <<-EOS
|
11
|
+
To use rspec for testing you must install rspec gem:
|
12
|
+
gem install rspec
|
13
|
+
EOS
|
14
|
+
exit(0)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Run the specs under spec/models"
|
18
|
+
Spec::Rake::SpecTask.new do |t|
|
19
|
+
t.spec_opts = ['--options', "spec/spec.opts"]
|
20
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gares
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paul Bonaud
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hashie
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
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: unidecoder
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
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: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
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: gokdok
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rdoc
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: fakeweb
|
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
|
+
description: Easily use Ruby or the command line to find information on gares-en-mouvement.com.
|
126
|
+
email:
|
127
|
+
- paul+gh@bonaud.fr
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rspec"
|
134
|
+
- ".rubocop.yml"
|
135
|
+
- ".rubocop_todo.yml"
|
136
|
+
- ".travis.yml"
|
137
|
+
- Gemfile
|
138
|
+
- MIT-LICENSE
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- gares.gemspec
|
142
|
+
- lib/gares.rb
|
143
|
+
- lib/gares/base.rb
|
144
|
+
- lib/gares/gare.rb
|
145
|
+
- lib/gares/gare_list.rb
|
146
|
+
- lib/gares/search.rb
|
147
|
+
- lib/gares/string_extensions.rb
|
148
|
+
- lib/gares/version.rb
|
149
|
+
- spec/fixtures/frabt
|
150
|
+
- spec/fixtures/frhco
|
151
|
+
- spec/fixtures/frlpd
|
152
|
+
- spec/fixtures/search
|
153
|
+
- spec/gares/gare_spec.rb
|
154
|
+
- spec/gares/search_spec.rb
|
155
|
+
- spec/spec_helper.rb
|
156
|
+
- tasks/fixtures.rake
|
157
|
+
- tasks/rspec.rake
|
158
|
+
homepage: http://github.com/paulrbr/gares
|
159
|
+
licenses:
|
160
|
+
- MIT
|
161
|
+
metadata: {}
|
162
|
+
post_install_message:
|
163
|
+
rdoc_options: []
|
164
|
+
require_paths:
|
165
|
+
- lib
|
166
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: '0'
|
171
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - ">="
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
176
|
+
requirements: []
|
177
|
+
rubyforge_project: gares
|
178
|
+
rubygems_version: 2.2.0
|
179
|
+
signing_key:
|
180
|
+
specification_version: 4
|
181
|
+
summary: Easily access the publicly available information on gares-en-mouvement.com.
|
182
|
+
test_files: []
|
183
|
+
has_rdoc:
|