bikepoa-tools 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,22 @@
1
+
2
+ describe BikePOA::Helpers::ForceField do
3
+ class DummySubject < Hashie::Dash
4
+ include BikePOA::Helpers::ForceField
5
+ property :number
6
+ force_integer :number
7
+ end
8
+
9
+ let(:dummy) { DummySubject.new }
10
+
11
+ describe 'force integer' do
12
+ it "accepts any value that is castable to integer" do
13
+ expect { dummy.number = '42' }.to_not raise_error(ArgumentError)
14
+ expect { dummy.number = 42 }.to_not raise_error(ArgumentError)
15
+ expect { dummy.number = 42.0 }.to_not raise_error(ArgumentError)
16
+ end
17
+ it "raises when the value is not castable to integer" do
18
+ expect { dummy.number = "abc" }.to raise_error(ArgumentError)
19
+ expect { dummy.number = "a12" }.to raise_error(ArgumentError)
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe BikePOA::HttpClient do
5
+ describe 'fetch' do
6
+ context 'when no URI is set in the config' do
7
+ before :each do
8
+ BikePOA.configure do |c|
9
+ c['bikepoa:uri'] = nil
10
+ end
11
+ end
12
+
13
+ let(:default_uri) { 'http://ww2.mobilicidade.com.br/bikepoa/mapaestacao.asp' }
14
+ let(:content) { 'pretend this is a content' }
15
+
16
+ it 'tries do download station map from bikepoa website' do
17
+ FakeWeb.register_uri(:get, default_uri, body: content)
18
+ subject.fetch.should == content
19
+ end
20
+ end
21
+
22
+ context 'when an URI is set in config' do
23
+ before :each do
24
+ BikePOA.configure do |c|
25
+ c['bikepoa:uri'] = pretend_uri
26
+ end
27
+ end
28
+ let(:pretend_uri) { 'http://pretend-uri.example.com' }
29
+ let(:content) { 'pretend this is another content' }
30
+
31
+ it 'tries do download spreadsheet from the configged URI' do
32
+ FakeWeb.register_uri(:get, pretend_uri, body: content)
33
+ subject.fetch.should == content
34
+ end
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe BikePOA::MapParser do
5
+ include FixtureHelper
6
+
7
+ context 'given a full map page' do
8
+ let(:map_page) { fixture('full_page.html').unpack('C*').pack('U*') } # gambi pattern around encoding silliness
9
+ let(:result) { subject.parse(map_page) }
10
+
11
+ it 'extracts relevant lines out of a map page' do
12
+ result.should have(40).stations
13
+ end
14
+
15
+ %w[id name address online status size available].each do |field|
16
+ it "extracted data for #{field} in all entries" do
17
+ result.map { |h| h.has_key? field }.should == [true] * 40
18
+ end
19
+ end
20
+ end
21
+
22
+ context 'given a certain area of a map page' do
23
+ let(:content) { <<EOF
24
+ trash trash
25
+ function criaPonto() {
26
+ blabla
27
+ }
28
+ trash trash trash
29
+ map.addOverlay( criaPonto(point,4,'Usina do Gasômetro','Avenida Presidente João Goulart, 551','','12x0',23,'A','EO',12,6,0,50) );
30
+
31
+ EOF
32
+ }
33
+ it 'extracts one relevant line containing a station' do
34
+ result = subject.parse(content)
35
+ result.should have(1).station
36
+ end
37
+ end
38
+
39
+ context 'given a line that has items with commas' do
40
+ let(:content) { "map.addOverlay( criaPonto(point,4,'Usina, na frente do cachorro-quente','Rua, 551','','12x0',23,'A','EO',12,6,0,50) );" }
41
+ it 'should not break those items into two items' do
42
+ entry = subject.parse(content).first
43
+ entry.should have(7).items
44
+ entry.values.should include('Usina, na frente do cachorro-quente')
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+ require 'bundler/setup'
3
+
4
+ Bundler.require :default, :test
5
+
6
+ SPEC_ROOT = File.expand_path(File.dirname(__FILE__))
7
+ LIB_ROOT = File.expand_path(File.join(SPEC_ROOT, '..', 'lib'))
8
+
9
+ $: << SPEC_ROOT
10
+
11
+ require File.join(LIB_ROOT, 'bikepoa')
12
+
13
+ module FixtureHelper
14
+ def fixture(filename)
15
+ IO.read(File.join(File.dirname(__FILE__), 'fixtures', filename))
16
+ end
17
+ end
18
+
19
+ # -*- encoding : utf-8 -*-
20
+ RSpec.configure do |c|
21
+ c.color_enabled = true
22
+ end
@@ -0,0 +1,25 @@
1
+ # encoding: utf-8
2
+ require 'spec_helper'
3
+
4
+ describe BikePOA::Station do
5
+ describe 'string representation' do
6
+ it 'should have station name, size and available bikes' do
7
+ subject.id = 5
8
+ subject.name = 'le estacion'
9
+ subject.size = 99
10
+ subject.available = 6
11
+ subject.to_s.should == "<Station#5:le estacion, 6/99>"
12
+ end
13
+ end
14
+
15
+ describe 'active station' do
16
+ it 'is active when online is A' do
17
+ subject.online = 'A'
18
+ subject.active?.should be_true
19
+ end
20
+ it 'is inactive otherwise' do
21
+ subject.online = "E"
22
+ subject.active?.should be_false
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bikepoa-tools
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Felipe Mobus
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-12-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rspec
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: hashie
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: active_support
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: bundler
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: jeweler
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
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
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rdoc
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ description: A simple read-only API for Porto Alegre's bike rental system, bikepoa.
143
+ email: fmobus@gmail.com
144
+ executables: []
145
+ extensions: []
146
+ extra_rdoc_files:
147
+ - LICENSE.txt
148
+ - README.md
149
+ - README.rdoc
150
+ files:
151
+ - .rspec
152
+ - .rvmrc
153
+ - .travis.yml
154
+ - Gemfile
155
+ - Gemfile.lock
156
+ - LICENSE.txt
157
+ - README.md
158
+ - README.rdoc
159
+ - Rakefile
160
+ - VERSION
161
+ - bikepoa-tools.gemspec
162
+ - lib/bikepoa.rb
163
+ - lib/bikepoa/client.rb
164
+ - lib/bikepoa/helpers.rb
165
+ - lib/bikepoa/http_client.rb
166
+ - lib/bikepoa/map_parser.rb
167
+ - lib/bikepoa/station.rb
168
+ - spec/client_spec.rb
169
+ - spec/fixtures/full_page.html
170
+ - spec/helpers_spec.rb
171
+ - spec/http_client_spec.rb
172
+ - spec/map_parser_spec.rb
173
+ - spec/spec_helper.rb
174
+ - spec/station_spec.rb
175
+ homepage: http://github.com/fmobus/bikepoa-tools
176
+ licenses:
177
+ - MIT
178
+ post_install_message:
179
+ rdoc_options: []
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ none: false
184
+ requirements:
185
+ - - ! '>='
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ segments:
189
+ - 0
190
+ hash: 2244769833083027769
191
+ required_rubygems_version: !ruby/object:Gem::Requirement
192
+ none: false
193
+ requirements:
194
+ - - ! '>='
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 1.8.24
200
+ signing_key:
201
+ specification_version: 3
202
+ summary: A simple read-only API for Porto Alegre's bike rental system, bikepoa.
203
+ test_files: []