jp_post 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ed8fae8b77e629216a0372bd02f42a0f8314d5a7
4
+ data.tar.gz: 225992dbba78ad33c9827b4ac2517ef58b4586a8
5
+ SHA512:
6
+ metadata.gz: 56448f562c0000fa69c2aed2cee8d29210dd1299f42f903e9b520a2475b23e1554e8479be7762cdcfafc0485448aebf897abdcc161a689ad02682e09bc2be814
7
+ data.tar.gz: 496b9cc7902097eab34f34c088db42ee399552726ccded657ce8118b34da050c743d5fe06cf6fdf48cb2386e21a0d62a3edeec44e2bcb6399a3423dc399c0ac3
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ # osx noise
2
+ .DS_Store
3
+ profile
4
+
5
+ # xcode noise
6
+ build/*
7
+ *.mode1
8
+ *.mode1v3
9
+ *.mode2v3
10
+ *.perspective
11
+ *.perspectivev3
12
+ *.pbxuser
13
+ *.xcworkspace
14
+ xcuserdata
15
+
16
+ # svn & cvs
17
+ .svn
18
+ CVS
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,68 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jp_post (0.0.1)
5
+ chronic
6
+ nokogiri
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ celluloid (0.16.0)
12
+ timers (~> 4.0.0)
13
+ chronic (0.10.2)
14
+ coderay (1.1.0)
15
+ diff-lcs (1.2.5)
16
+ ffi (1.9.6)
17
+ formatador (0.2.5)
18
+ guard (2.8.0)
19
+ formatador (>= 0.2.4)
20
+ listen (~> 2.7)
21
+ lumberjack (~> 1.0)
22
+ pry (>= 0.9.12)
23
+ thor (>= 0.18.1)
24
+ guard-rspec (4.3.1)
25
+ guard (~> 2.1)
26
+ rspec (>= 2.14, < 4.0)
27
+ hitimes (1.2.2)
28
+ listen (2.7.11)
29
+ celluloid (>= 0.15.2)
30
+ rb-fsevent (>= 0.9.3)
31
+ rb-inotify (>= 0.9)
32
+ lumberjack (1.0.9)
33
+ method_source (0.8.2)
34
+ mini_portile (0.6.0)
35
+ nokogiri (1.6.3.1)
36
+ mini_portile (= 0.6.0)
37
+ pry (0.10.1)
38
+ coderay (~> 1.1.0)
39
+ method_source (~> 0.8.1)
40
+ slop (~> 3.4)
41
+ rb-fsevent (0.9.4)
42
+ rb-inotify (0.9.5)
43
+ ffi (>= 0.5.0)
44
+ rspec (3.1.0)
45
+ rspec-core (~> 3.1.0)
46
+ rspec-expectations (~> 3.1.0)
47
+ rspec-mocks (~> 3.1.0)
48
+ rspec-core (3.1.7)
49
+ rspec-support (~> 3.1.0)
50
+ rspec-expectations (3.1.2)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.1.0)
53
+ rspec-mocks (3.1.3)
54
+ rspec-support (~> 3.1.0)
55
+ rspec-support (3.1.2)
56
+ slop (3.6.0)
57
+ thor (0.19.1)
58
+ timers (4.0.1)
59
+ hitimes
60
+
61
+ PLATFORMS
62
+ ruby
63
+
64
+ DEPENDENCIES
65
+ bundler
66
+ guard-rspec
67
+ jp_post!
68
+ rspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Sebastian Szturo
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ ## JP Post :postbox:
2
+
3
+ A gem to access JP Post Services.
4
+
5
+ ## Requirements
6
+ - Ruby 1.9
7
+
8
+ ## Installation
9
+
10
+ Add this to your gemfile
11
+
12
+ ```ruby
13
+ gem 'jp_post'
14
+ ```
15
+
16
+ and
17
+
18
+ ```
19
+ bundle
20
+ ```
21
+
22
+ ## Tracking
23
+
24
+ Track a package with it's item number.
25
+
26
+ ```ruby
27
+ package = JpPost::Tracking.new("RR123455678")
28
+ ```
29
+
30
+ Access information from the tracking website.
31
+
32
+ ```ruby
33
+ package = JpPost::Tracking.new("CI123455678")
34
+
35
+ package.classification # e.g. Parcel
36
+ package.additional_services # Additional Services
37
+ package.history # Array of package movement history
38
+ ```
39
+
40
+ ## Contributing
41
+
42
+ 1. Fork it
43
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
44
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
45
+ 4. Push to the branch (`git push origin my-new-feature`)
46
+ 5. Create new Pull Request
data/jp_post.gemspec ADDED
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jp_post/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "jp_post"
8
+ spec.version = JpPost::VERSION
9
+ spec.authors = ["Sebastian Szturo"]
10
+ spec.email = ["s.szturo@me.com"]
11
+ spec.description = "Gem to access JP Posts Services."
12
+ spec.summary = "Gem to access JP Posts Services."
13
+ spec.homepage = "http://github.com/SebastianSzturo/jp_post"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "nokogiri"
22
+ spec.add_dependency "chronic"
23
+ spec.add_development_dependency "bundler"
24
+ spec.add_development_dependency "rspec"
25
+ spec.add_development_dependency "guard-rspec"
26
+ end
@@ -0,0 +1,74 @@
1
+ require "open-uri"
2
+ require "nokogiri"
3
+ require "chronic"
4
+
5
+ module JpPost
6
+ class Tracking
7
+ # Create a new Tracking object.
8
+ #
9
+ # tracking_number - tracking number of the package to lookup.
10
+ #
11
+ # Returns an instance of JpPost::Tracking.
12
+ def initialize(tracking_number)
13
+ raise ArgumentError unless tracking_number
14
+
15
+ @tracking_number = tracking_number
16
+ tracking_url = "https://trackings.post.japanpost.jp/services/srv/search/direct?reqCodeNo1=#{@tracking_number}&locale=en"
17
+
18
+ @tracking_page = Nokogiri::HTML(open(tracking_url))
19
+
20
+ raise RuntimeError, "No Tracking found." if @tracking_page.css(".indent table[summary='履歴情報']").empty?
21
+ end
22
+
23
+ # "Class of Goods" string from tracking site
24
+ #
25
+ # Returns classification String.
26
+ def classification
27
+ @delivery_status_details_box ||= @tracking_page.css(".indent table[summary='配達状況詳細']")
28
+ classification = @delivery_status_details_box.css("tr:last .w_380").text.strip
29
+ return classification
30
+ end
31
+
32
+ # "Additional Services" string from tracking site
33
+ #
34
+ # Returns additional_services String.
35
+ def additional_services
36
+ @delivery_status_details_box ||= @tracking_page.css(".indent table[summary='配達状況詳細']")
37
+ additional_services = @delivery_status_details_box.css(".w_100").last.text.strip
38
+ return additional_services
39
+ end
40
+
41
+ # "History Information" table from tracking site
42
+ #
43
+ # Returns tracking history as Array.
44
+ def history
45
+ @history_information_box ||= @tracking_page.css(".indent table[summary='履歴情報']")
46
+ history_columns = @history_information_box.css("tr")
47
+ history_columns = history_columns[2..history_columns.size] # remove header
48
+
49
+ history = []
50
+
51
+ history_columns.each_with_index do |tr, index|
52
+ next if index.odd? # skip zip code row
53
+ date = Chronic.parse(tr.css("td").first.text) rescue nil
54
+
55
+ action = tr.css("td")[1].text.strip
56
+ action = nil if action.empty?
57
+
58
+ details = tr.css("td")[2].text.strip
59
+ details = nil if action.empty?
60
+
61
+ office = tr.css("td")[3].text.strip
62
+ office = nil if action.empty?
63
+
64
+ location = tr.css("td")[4].text.strip
65
+ location = nil if action.empty?
66
+
67
+ history << { date: date, action: action, details: details, office: office, location: location }
68
+ end
69
+
70
+ return history
71
+ end
72
+
73
+ end
74
+ end
@@ -0,0 +1,3 @@
1
+ module JpPost
2
+ VERSION = "0.0.1"
3
+ end
data/lib/jp_post.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "jp_post/version"
2
+ require "jp_post/tracking"
3
+
4
+ module JpPost
5
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jp_post
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sebastian Szturo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-04 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: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: chronic
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: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
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: rspec
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: guard-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
+ description: Gem to access JP Posts Services.
84
+ email:
85
+ - s.szturo@me.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - Gemfile
92
+ - Gemfile.lock
93
+ - LICENSE.txt
94
+ - README.md
95
+ - jp_post.gemspec
96
+ - lib/jp_post.rb
97
+ - lib/jp_post/tracking.rb
98
+ - lib/jp_post/version.rb
99
+ homepage: http://github.com/SebastianSzturo/jp_post
100
+ licenses:
101
+ - MIT
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 2.2.2
120
+ signing_key:
121
+ specification_version: 4
122
+ summary: Gem to access JP Posts Services.
123
+ test_files: []