bdz 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/README.md CHANGED
@@ -1,29 +1,5 @@
1
- # Bdz
1
+ # Bdz Usage
2
+ client = Bdz::Client.new
3
+ client.search({:from_station => "Пловдив", :to_station => "София", :date => "20/08/2012"})
2
4
 
3
- TODO: Write a gem description
4
5
 
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- gem 'bdz'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install bdz
18
-
19
- ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
23
- ## Contributing
24
-
25
- 1. Fork it
26
- 2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Added some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
data/bdz.gemspec CHANGED
@@ -5,7 +5,7 @@ Gem::Specification.new do |gem|
5
5
  gem.authors = ["Todor Grudev"]
6
6
  gem.email = ["tagrudev@gmail.com"]
7
7
  gem.description = %q{BDZ query maker}
8
- gem.summary = %q{Gives a routes for the Bulgarian railways}
8
+ gem.summary = %q{The Bulgarian State Railways schedule retriever}
9
9
  gem.homepage = ""
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
@@ -14,4 +14,12 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "bdz"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = Bdz::VERSION
17
+
18
+ gem.add_runtime_dependency "faraday"
19
+ gem.add_runtime_dependency "nokogiri"
20
+
21
+ gem.add_development_dependency "pry"
22
+ gem.add_development_dependency "rake"
23
+ gem.add_development_dependency "rspec", "~> 2.0"
24
+ gem.add_development_dependency "webmock", "~> 1.6"
17
25
  end
data/lib/bdz/client.rb ADDED
@@ -0,0 +1,35 @@
1
+ require 'faraday'
2
+ module Bdz
3
+ class Client
4
+ attr_reader :params
5
+ attr_reader :faraday_client
6
+
7
+ def initialize
8
+ @params = {}
9
+ @faraday_client = Faraday.new(:url => Bdz::ROOT_URL) do |faraday|
10
+ faraday.request :url_encoded # form-encode POST params
11
+ faraday.response :logger # log requests to STDOUT
12
+ faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
13
+ end
14
+ end
15
+
16
+ # client.search({:from_station => "Пловдив", :to_station => "София", :date => "20/08/2012"})
17
+ def search(params = {})
18
+ content = get(params)
19
+ parser = Bdz::Parser::Schedule.new content
20
+ parser.parse
21
+ end
22
+
23
+ private
24
+ def get(params = {})
25
+ @faraday_client.post do |req|
26
+ req.params = build_params(params)
27
+ end
28
+ end
29
+
30
+ def build_params(params = {})
31
+ @params = params.merge({ :action => 'listOptions', :dep_arr => '1', :time_from => '00:00', :time_to => '24:00', :all_cats => 'checked',
32
+ :cardId => '30', :sort_by => '0'})
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ module Bdz
2
+ module Parser
3
+ class Schedule
4
+ def initialize(response)
5
+ @response = response
6
+ end
7
+
8
+ def parse
9
+ @content = Nokogiri::HTML(@response.body)
10
+ parse_content
11
+ end
12
+
13
+ def parse_content
14
+ @content.css('div.accordionTabTitleBar').collect do |train|
15
+ t = Bdz::Train.new(
16
+ :id => train.css('table tr td')[0].text,
17
+ :leaves => train.css('table tr td')[1].text,
18
+ :arrives => train.css('table tr td')[2].text,
19
+ :type => train.css('table tr td')[3].text,
20
+ :docks => train.css('table tr td')[4].text
21
+ )
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
data/lib/bdz/parser.rb ADDED
@@ -0,0 +1 @@
1
+ require "bdz/parser/schedule"
data/lib/bdz/train.rb ADDED
@@ -0,0 +1,17 @@
1
+ module Bdz
2
+ class Train
3
+ attr_reader :id
4
+ attr_reader :leaves
5
+ attr_reader :arrives
6
+ attr_reader :type
7
+ attr_reader :docks
8
+ def initialize (params)
9
+ return if params.nil?
10
+
11
+ params.each do |key, value|
12
+ name = key.to_s
13
+ instance_variable_set("@#{name}", value) if respond_to?(name)
14
+ end
15
+ end
16
+ end
17
+ end
data/lib/bdz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bdz
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/bdz.rb CHANGED
@@ -1,7 +1,11 @@
1
+ require "nokogiri"
1
2
  require "bdz/version"
2
3
 
3
4
  module Bdz
4
- def self.ipsum
5
- "Lorum"
6
- end
5
+ BASE_URL = "http://razpisanie.bdz.bg/"
6
+ ROOT_URL = "http://razpisanie.bdz.bg/SearchServlet"
7
7
  end
8
+
9
+ require "bdz/client"
10
+ require "bdz/parser"
11
+ require "bdz/train"
@@ -0,0 +1,19 @@
1
+ #encoding: UTF-8
2
+ require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
3
+
4
+ describe Bdz::Client do
5
+ let(:client) { Bdz::Client.new }
6
+
7
+ describe '#build_params' do
8
+ it 'should merge defaults with params' do
9
+ params = client.send :build_params, {:from => 'Пловдив'}
10
+ params.should == {:from=>'Пловдив', :action=>"listOptions", :dep_arr=>"1", :time_from=>"00:00", :time_to=>"24:00",
11
+ :all_cats=>"checked", :cardId=>"30", :sort_by=>"0"}
12
+ end
13
+ end
14
+
15
+ describe '#search' do
16
+ it 'should return content' do
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ #encoding: UTF-8
2
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
3
+ require 'webmock/rspec'
4
+ WebMock.disable_net_connect!
5
+
6
+ describe Bdz::Parser::Schedule do
7
+ let(:client) { Bdz::Client.new}
8
+
9
+
10
+ it 'parse and return response of objects' do
11
+
12
+ stub_request(:post, "http://razpisanie.bdz.bg/SearchServlet?action=listOptions&all_cats=checked&cardId=30&date=20/08/2012&dep_arr=1&from_station=%D0%9F%D0%BB%D0%BE%D0%B2%D0%B4%D0%B8%D0%B2&sort_by=0&time_from=00:00&time_to=24:00&to_station=%D0%A1%D0%BE%D1%84%D0%B8%D1%8F").
13
+ with(:headers => {'Accept'=>'*/*', 'Content-Length'=>'0', 'User-Agent'=>'Ruby'}).
14
+ to_return(:status => 200, :body => File.new(File.join(File.dirname(__FILE__), '/../../mocks', "response.html")), :headers => {})
15
+ m = client.search({:from_station => "Пловдив", :to_station => "София", :date => "20/08/2012"})
16
+ end
17
+
18
+ it 'doesnt get enough params' do
19
+ stub_request(:post, "http://razpisanie.bdz.bg/SearchServlet?action=listOptions&all_cats=checked&cardId=30&dep_arr=1&from_station=%D0%9F%D0%BB%D0%BE%D0%B2%D0%B4%D0%B8%D0%B2&sort_by=0&time_from=00:00&time_to=24:00").
20
+ with(:headers => {'Accept'=>'*/*', 'Content-Length'=>'0', 'User-Agent'=>'Ruby'}).
21
+ to_return(:status => 200, :body => "", :headers => {})
22
+
23
+
24
+ m = client.search({:from_station => "Пловдив"})
25
+ m.should be_empty
26
+ end
27
+ end
data/spec/bdz_spec.rb ADDED
@@ -0,0 +1,9 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+
3
+ describe Bdz do
4
+ describe '#root_url' do
5
+ it 'shoudl define a constant ROOT_URL that returns the url of bdz' do
6
+ Bdz::ROOT_URL.should == 'http://razpisanie.bdz.bg/SearchServlet'
7
+ end
8
+ end
9
+ end