indian-rail 1.0 → 1.0.1

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.
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Indian::Rail
2
2
 
3
- TODO: Write a gem description
3
+ Indian Rail is a simple wrapper for finding out India train details. Please see the documentation for the proper input arguments and expected output.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,12 +18,43 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
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 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
29
- 5. Create new Pull Request
21
+ To enquire the PNR status of your journey *ticket*:
22
+
23
+ response = IndianRail::Pnr.enquiry "pnr_number"
24
+
25
+ Train Schedule methods will accept either train number or train name to find the schedule of a particular *Train*:
26
+
27
+ response = IndianRail::Schedule.find "train_number"
28
+
29
+ response = IndianRail::Schedule.find "train_name"
30
+
31
+ IndianRail will return a hash filled result something like this:
32
+
33
+ {:pnr=>"XXXXXXX", :train_no=>"XXXX", :train_name=>"EXP", :boarding_date=>"DD-MM-YYYY", :from=>"XXX", :to=>"YYY", :reserved_upto=>"XXX"}
34
+
35
+ You can even send proxy details, if you are working under proxy server
36
+
37
+ response = IndianRail::Schedule.find "train-number", :proxy => {:url => "proxy.example.com", :port => 'port_number'}
38
+
39
+ ## MIT License
40
+
41
+ Copyright (c) 2013 Kalyan Allampalli
42
+
43
+ Permission is hereby granted, free of charge, to any person obtaining
44
+ a copy of this software and associated documentation files (the
45
+ "Software"), to deal in the Software without restriction, including
46
+ without limitation the rights to use, copy, modify, merge, publish,
47
+ distribute, sublicense, and/or sell copies of the Software, and to
48
+ permit persons to whom the Software is furnished to do so, subject to
49
+ the following conditions:
50
+
51
+ The above copyright notice and this permission notice shall be
52
+ included in all copies or substantial portions of the Software.
53
+
54
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
55
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
56
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
57
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
58
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
59
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
60
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1,14 +1,13 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'indian-rail/version'
5
4
 
6
5
  Gem::Specification.new do |gem|
7
6
  gem.name = %q{indian-rail}
8
- gem.version = IndianRail::VERSION
7
+ gem.version = %q{1.0.1}
9
8
  gem.authors = ["Kalyan Allampalli"]
10
9
  gem.email = %q{kalyan.allampalli@gmail.com}
11
- gem.description = %q{Client for the RESTful JSON Indian Rail}
10
+ gem.description = %q{Client for the Indian Rail Information}
12
11
  gem.summary = %q{Indian Rail helps you get all the required information you want to know about Indian Railways.}
13
12
  gem.homepage = %q{https://github.com/kalyanallampalli/indian-rail}
14
13
 
@@ -18,8 +17,7 @@ Gem::Specification.new do |gem|
18
17
  "LICENSE.txt",
19
18
  "README.md",
20
19
  "Rakefile",
21
- "lib/indian-rail.rb",
22
- "lib/indian-rail/version.rb",
20
+ "lib/indian-rail.rb",
23
21
  "lib/indian-rail/api.rb",
24
22
  "lib/indian-rail/pnr.rb",
25
23
  "lib/indian-rail/schedule.rb",
@@ -1,4 +1,3 @@
1
- require_relative "./indian-rail/version"
2
1
  require_relative "./indian-rail/api"
3
2
  require_relative "./indian-rail/pnr"
4
3
  require_relative "./indian-rail/schedule"
@@ -1,74 +1,87 @@
1
1
  module IndianRail
2
- class Schedule < Api
2
+ class Schedule < Api
3
3
  def self.find(train_no=nil, options={})
4
4
  response = {}
5
5
  response[:message] = 'Please Enter Train Number or Name' and return response if train_no.nil?
6
6
  begin
7
7
  page_response = get_response([base_url_prefix, schedule_url_sufix].compact.join("/"), {:form_params => {'lccp_trnname' => train_no}}.merge!(options))
8
- response = parse_train_details(page_response, train_no)
8
+ response = parse_train_details(page_response, train_no)
9
9
  rescue Exception => e
10
10
  response[:message] = "Service is not available - #{e.message}"
11
11
  end
12
12
  response
13
13
  end
14
14
 
15
- private
15
+ private
16
16
 
17
17
  def self.parse_train_details(body, train_no)
18
- page = Nokogiri::HTML(body)
19
- data = {:train_no => train_no}
20
- index = 1
18
+ page = Nokogiri::HTML(body)
21
19
  tables = page.xpath('//table[@class="table_border_both"]')
22
20
  details, train_detail = {}, {}
23
- runs_on = []
24
- coach_details, stn_details = [], [['Stn Code', 'Stn Name', 'Route No.', 'Arrival Time', 'Dep. time', 'Halt Time(In Min))', 'Distance', 'Day']]
25
- tables.collect do |table|
26
- if index == 1
27
- table.css("tr:not([@class='heading_table_top'])").collect do |row|
28
- [
29
- [:train_no, 'td[1]/text()'],
30
- [:train_name, 'td[2]/text()'],
31
- [:runs_from, 'td[3]/text()']
32
- ].each do |name, xpath|
33
- train_detail[name] = row.at_xpath(xpath).to_s.strip
34
- end
35
- (4..10).each do |day|
36
- runs_on << row.at_xpath("td[#{day}]/text()").to_s.strip
37
- end
38
- train_detail[:runs_on] = runs_on.join(', ')
39
- end
40
- elsif index == 2
41
- table.css("tr:not([@class='heading_table_top'])").collect do |row|
42
- coach_detail = {}
43
- [
44
- [:title, 'td[1]/text()'],
45
- ['1A', 'td[2]/text()'],
46
- ['2A', 'td[3]/text()'],
47
- ['FC', 'td[4]/text()'],
48
- ['3A', 'td[5]/text()'],
49
- ['CC', 'td[6]/text()'],
50
- ['SL', 'td[7]/text()'],
51
- ['2S', 'td[8]/text()'],
52
- ['3E', 'td[9]/text()']
53
- ].each do |name, xpath|
54
- coach_detail[name] = row.at_xpath(xpath).to_s.strip
21
+ if tables.length == 3
22
+ runs_on = []
23
+ index = 1
24
+ coach_details, stn_details = [], [['Stn Code', 'Stn Name', 'Route No.', 'Arrival Time', 'Dep. time', 'Halt Time(In Min))', 'Distance', 'Day']]
25
+ tables.collect do |table|
26
+ if index == 1
27
+ table.css("tr:not([@class='heading_table_top'])").collect do |row|
28
+ [
29
+ [:train_no, 'td[1]/text()'],
30
+ [:train_name, 'td[2]/text()'],
31
+ [:runs_from, 'td[3]/text()']
32
+ ].each do |name, xpath|
33
+ train_detail[name] = row.at_xpath(xpath).to_s.strip
34
+ end
35
+ (4..10).each do |day|
36
+ runs_on << row.at_xpath("td[#{day}]/text()").to_s.strip
37
+ end
38
+ train_detail[:runs_on] = runs_on.join(', ')
55
39
  end
56
- coach_details << coach_detail
57
- end
58
- elsif index == 3
59
- table.css("tr:not([@class='heading_table_top'])").collect do |row|
60
- stn_detail = []
61
- ['td[2]/text()', 'td[3]/text()', 'td[4]/text()', 'td[5]/text()', 'td[6]/text()', 'td[7]/text()', 'td[8]/text()','td[9]/text()'].each do |xpath|
62
- stn_detail << row.at_xpath(xpath).to_s.strip
40
+ elsif index == 2
41
+ table.css("tr:not([@class='heading_table_top'])").collect do |row|
42
+ coach_detail = {}
43
+ [
44
+ [:title, 'td[1]/text()'],
45
+ ['1A', 'td[2]/text()'],
46
+ ['2A', 'td[3]/text()'],
47
+ ['FC', 'td[4]/text()'],
48
+ ['3A', 'td[5]/text()'],
49
+ ['CC', 'td[6]/text()'],
50
+ ['SL', 'td[7]/text()'],
51
+ ['2S', 'td[8]/text()'],
52
+ ['3E', 'td[9]/text()']
53
+ ].each do |name, xpath|
54
+ coach_detail[name] = row.at_xpath(xpath).to_s.strip
55
+ end
56
+ coach_details << coach_detail
57
+ end
58
+ elsif index == 3
59
+ table.css("tr:not([@class='heading_table_top'])").collect do |row|
60
+ stn_detail = []
61
+ ['td[2]/text()', 'td[3]/text()', 'td[4]/text()', 'td[5]/text()', 'td[6]/text()', 'td[7]/text()', 'td[8]/text()','td[9]/text()'].each do |xpath|
62
+ stn_detail << row.at_xpath(xpath).to_s.strip
63
+ end
64
+ stn_details << stn_detail
63
65
  end
64
- stn_details << stn_detail
65
- end
66
- end
67
- index += 1
68
- end
69
- details[:train_details] = train_detail
70
- details[:coach_details] = coach_details
71
- details[:stn_details] = stn_details
66
+ end
67
+ index += 1
68
+ end
69
+ details[:train_details] = train_detail
70
+ details[:coach_details] = coach_details
71
+ details[:stn_details] = stn_details
72
+ else
73
+ stn_details = [['Train Number', 'Train Name', 'Train Source', 'Dep.Time', 'Train Destination', 'Arr.Time']]
74
+ tables.collect do |table|
75
+ table.css("tr:not([@class='heading_table_top'])").collect do |row|
76
+ train_detail = []
77
+ ['td[1]/input', 'td[2]/text()', 'td[3]/text()', 'td[4]/text()', 'td[5]/text()', 'td[6]/text()'].each_with_index do |xpath, i|
78
+ train_detail << (i == 0 ? row.at(xpath)['value'].to_i : row.at_xpath(xpath).to_s.strip)
79
+ end
80
+ stn_details << train_detail
81
+ end
82
+ end
83
+ details[:train_details] = stn_details.length == 1 ? 'Invalid Train name or data not exists' : details
84
+ end
72
85
  details
73
86
  end
74
87
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: indian-rail
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.0'
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-29 00:00:00.000000000 Z
12
+ date: 2013-05-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
16
- requirement: &16179492 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 1.5.9
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *16179492
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 1.5.9
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rspec
27
- requirement: &16178952 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,8 +37,13 @@ dependencies:
32
37
  version: 2.13.0
33
38
  type: :development
34
39
  prerelease: false
35
- version_requirements: *16178952
36
- description: Client for the RESTful JSON Indian Rail
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 2.13.0
46
+ description: Client for the Indian Rail Information
37
47
  email: kalyan.allampalli@gmail.com
38
48
  executables: []
39
49
  extensions: []
@@ -45,7 +55,6 @@ files:
45
55
  - README.md
46
56
  - Rakefile
47
57
  - lib/indian-rail.rb
48
- - lib/indian-rail/version.rb
49
58
  - lib/indian-rail/api.rb
50
59
  - lib/indian-rail/pnr.rb
51
60
  - lib/indian-rail/schedule.rb
@@ -70,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
70
79
  version: '0'
71
80
  requirements: []
72
81
  rubyforge_project:
73
- rubygems_version: 1.8.11
82
+ rubygems_version: 1.8.24
74
83
  signing_key:
75
84
  specification_version: 3
76
85
  summary: Indian Rail helps you get all the required information you want to know about
@@ -1,3 +0,0 @@
1
- module IndianRail
2
- VERSION = "1.0"
3
- end