iupick 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0ef9d8be0aafb0cd408311d5269f58f123a74544
4
- data.tar.gz: 6487603a03e9d7744b57845ecc974ebd9e8f473f
3
+ metadata.gz: 2e65b0e7e4524d21a6542175eb7eeec47e8833ab
4
+ data.tar.gz: a8e4b556bd21e149d37982fadd908499f5ca55c1
5
5
  SHA512:
6
- metadata.gz: 4f954acb9a0c2afd1e86e27703e7c949867d5b28beda736ad4902700bce28878d167bb5ba73f37e62ea32f9e0f2a884c5b6052fa6ce18e110a95686ed14f5b4d
7
- data.tar.gz: 6b9c26d3367687476aafabed10aa23805974545e80eb13ee633d57eb0cf790a3b65ad4e70b5da775df46479f24e3c2a93a372b65e7709d6ae3ee84c28e76fe6b
6
+ metadata.gz: ce2af8fb42811258c93636f5325201e1c3891dc6c9003b2276ef0174ea1172c61cc337c422f48a43eed1b847cbf5ef89a9205252e9aea162a8eff35e7eb14a2f
7
+ data.tar.gz: 669d22866cdc269d67b8578fb1fc5dc8ce7bc6e344ac428e6850f482f84b90aa24bd9f58d80e41e002f7d18a38e8f85dcf33a708cd3a069d46528b69ca7aa295
data/LICENSE ADDED
@@ -0,0 +1,29 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2017, iupick
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ * Neither the name of the copyright holder nor the names of its
17
+ contributors may be used to endorse or promote products derived from
18
+ this software without specific prior written permission.
19
+
20
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,145 @@
1
+ # Iupick
2
+
3
+ The iupick Ruby gem wraps the iupick API to facilitate access from applications written in ruby.
4
+
5
+ Keep in mind that this package requires iupick secret keys, contact
6
+ info@iupick.com for more information.
7
+
8
+ ## Installation
9
+
10
+ Add this line to your application's Gemfile:
11
+
12
+ ```ruby
13
+ gem 'iupick'
14
+ ```
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install iupick
23
+
24
+ ## Usage
25
+
26
+ Add your secret and public tokens as required.
27
+
28
+ Never expose your secret token.
29
+
30
+ Methods that require your secret_token should never be done from the front-end. Since this methods deal with sensitive information.
31
+
32
+ ``` ruby
33
+ require 'iupick'
34
+
35
+ Iupick.secret_token = 'sk_sandbox_4bdcd3630417c5119029859c08a7b8d9d97dda79'
36
+ Iupick.public_token = '315cdf3ca4dd588ab8e6f7fa4b7aa433c641cadd'
37
+ Iupick.environment = 'sandbox'
38
+ ```
39
+
40
+ ## Waybills
41
+
42
+ The waybill generation occurs on three steps.
43
+
44
+
45
+ ### Step 1.
46
+
47
+ Create a shipment on the iupick platform and receive a
48
+ shipment token.
49
+
50
+ ``` ruby
51
+ shipment_token = Iupick::Shipment.create(length=8,width=8,height=8,weight=1.1)
52
+ ```
53
+
54
+ ### Step 2.
55
+
56
+ Fill the rest of the information required to generate a waybill,
57
+ and receive a confirmation token.
58
+
59
+ You can send a shipment either to an arbitrary direction or to one
60
+ of our waypoints; just replace the waypoint_id attribute for a recipient
61
+ address.
62
+
63
+ ``` ruby
64
+ shipper_address = Iupick.create_address(
65
+ city='Querétaro',
66
+ line_one='Epigmenio Gonzáles 500',
67
+ postal_code=76130,
68
+ line_two='',
69
+ neighborhood='Momma'
70
+ )
71
+
72
+ shipper_contact = Iupick.create_person(
73
+ person_name='Tony Stark',
74
+ phone_number='555555555',
75
+ email_address='tony@fakemail.com',
76
+ title='CEO',
77
+ company_name='Stark Industries',
78
+ phone_extension='123'
79
+ )
80
+
81
+
82
+ recipient_contact = Iupick.create_person(
83
+ person_name='Steve Rogers',
84
+ phone_number='555555555',
85
+ email_address='steve@fakemail.com',
86
+ title='Agent',
87
+ company_name='SHIELD',
88
+ phone_extension='123'
89
+ )
90
+
91
+ confirmation_token = Iupick::Shipment.add_information(
92
+ shipment_token = shipment_token,
93
+ waypoint_id = 486,
94
+ shipper_address = shipper_address,
95
+ shipper_contact = shipper_contact,
96
+ recipient_contact = recipient_contact,
97
+ third_party_reference = 'I am a shipment'
98
+ )
99
+ ```
100
+
101
+ ### Step 3.
102
+
103
+ Generate your waybill with your confirmation token.
104
+
105
+ ``` ruby
106
+ waybill_information = Iupick::Shipment.generate_waybill(
107
+ confirmation_token = confirmation_token
108
+ )
109
+ ```
110
+
111
+ ### Tracking your shipment
112
+
113
+ In order to track a shipment send the carrier and the tracking number.
114
+
115
+ ``` ruby
116
+ tracking_info = Iupick::Shipment.track(
117
+ carrier = carrier, tracking_number = tracking_number
118
+ )
119
+ ```
120
+
121
+ ### Waypoints
122
+
123
+ The Waypoints resource allows you to interact with all the delivery points from
124
+ our network that are available to your account.
125
+
126
+ To pull the full information for a single waypoint. Use `getWaypointInformation`
127
+ It requires the waypoint unique id.
128
+
129
+ ``` ruby
130
+ waypoint = Iupick::Waypoints.get_waypoint_information(waypoint_id = 20)
131
+ ```
132
+
133
+ To get a list of all the coordinates of available waypoints, use
134
+ `getWaypointsLite`.
135
+
136
+ ``` ruby
137
+ waypoints = Iupick::Waypoints.get_waypoints_lite()
138
+ ```
139
+
140
+ You can get all the waypoints close to a Postal Code with
141
+ `getPostalCodeWaypoints`.
142
+
143
+ ``` ruby
144
+ cp_waypoints = Iupick::Waypoints.get_postal_code_waypoints(postal_code = 95710)
145
+ ```
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "iupick"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/lib/iupick.rb ADDED
@@ -0,0 +1,95 @@
1
+ # Version
2
+ require_relative "iupick/version"
3
+
4
+ # Dependencies
5
+ require 'unirest'
6
+ require 'json'
7
+
8
+ # API resources
9
+ require_relative "iupick/shipment"
10
+ require_relative "iupick/waypoint"
11
+
12
+ module Iupick
13
+
14
+ class << self
15
+
16
+ attr_accessor :secret_token, :public_token, :environment
17
+
18
+ # Initializes the address dictionary with
19
+ # the values to be passed.
20
+ # This returns a dictionary for versatility.
21
+ def create_address(
22
+ city,
23
+ line_one,
24
+ postal_code,
25
+ line_two='',
26
+ neighborhood=''
27
+ )
28
+
29
+ return {
30
+ 'city': city,
31
+ 'line_one': line_one,
32
+ 'line_two': line_two,
33
+ 'neighborhood': neighborhood,
34
+ 'postal_code': postal_code
35
+ }
36
+ end
37
+
38
+ # Initializes the an empty address
39
+ def empty_address()
40
+ return create_address(
41
+ city = 'Empty',
42
+ line_one = 'Empty',
43
+ postal_code = 'Empty',
44
+ line_two = 'Empty',
45
+ neighborhood = 'Empty'
46
+ )
47
+ end
48
+
49
+ # Initializes the person_object with
50
+ # the values to be passed.
51
+ # This returns a dictionary for versatility.
52
+ def create_person(
53
+ person_name,
54
+ phone_number,
55
+ email_address,
56
+ title = '',
57
+ company_name = '',
58
+ phone_extension = ''
59
+ )
60
+
61
+ return {
62
+ 'person_name': person_name,
63
+ 'phone_number': phone_number,
64
+ 'email_address': email_address,
65
+ 'title': title,
66
+ 'company_name': company_name,
67
+ 'phone_extension': phone_extension
68
+ }
69
+ end
70
+
71
+ # Gets the base url, to be used for the API service.
72
+ def get_base_url()
73
+ if environment == 'development'
74
+ return 'http://localhost:8000/api/'
75
+ elsif environment == 'sandbox'
76
+ return 'https://sandbox.iupick.com/api/'
77
+ elsif environment == 'production'
78
+ return 'https://iupick.com/api/'
79
+ end
80
+ end
81
+
82
+ # Returns the proper header either public or secret.
83
+ def generate_headers(auth)
84
+ if auth == 'public'
85
+ keyword = 'Token '
86
+ token = public_token
87
+ elsif auth == 'secret'
88
+ keyword = 'Secret '
89
+ token = secret_token
90
+ end
91
+ return {'Authorization': keyword + token}
92
+ end
93
+
94
+ end
95
+ end
@@ -0,0 +1,94 @@
1
+ module Iupick
2
+ # This is the class object for the shipments.
3
+ class Shipment
4
+
5
+ # Allows you to generate a token for the new shipment.
6
+ # Needs weight
7
+ # Needs Dimensions
8
+ # Receive a shipment id.
9
+ def self.create(length, width, height, weight)
10
+ url = Iupick.get_base_url() + 'create-shipment-token/'
11
+ headers = Iupick.generate_headers(auth = 'secret')
12
+ payload = {
13
+ 'length': length.to_i,
14
+ 'width': width.to_i,
15
+ 'height': height.to_i,
16
+ 'weight': weight.to_i
17
+ }
18
+
19
+ response = Unirest.post url,
20
+ headers: headers,
21
+ parameters: payload.to_json
22
+ decoded_response = response.body['shipment_token']
23
+ end
24
+
25
+ # This method allows you to fill the information required
26
+ # for the package, and receive a confirmation_token in exchange.
27
+ def self.add_information(
28
+ shipment_token,
29
+ waypoint_id,
30
+ shipper_address,
31
+ shipper_contact,
32
+ recipient_contact,
33
+ third_party_reference,
34
+ recipient_address = Iupick.empty_address()
35
+ )
36
+
37
+ waypoint_id = waypoint_id ? waypoint_id : nil;
38
+ recipient_address = recipient_address ?
39
+ recipient_address :
40
+ Iupick.emptyAddress();
41
+
42
+
43
+ if waypoint_id or recipient_address != Iupick.empty_address()
44
+ url = Iupick.get_base_url() +
45
+ 'fill-shipment-information/' + shipment_token + '/'
46
+ headers = Iupick.generate_headers(auth = 'public')
47
+ payload = {
48
+ 'waypoint': waypoint_id,
49
+ 'shipper_address': shipper_address,
50
+ 'shipper_contact': shipper_contact,
51
+ 'recipient_address': recipient_address,
52
+ 'recipient_contact': recipient_contact,
53
+ 'third_party_reference': third_party_reference
54
+ }
55
+
56
+ response = Unirest.post url,
57
+ headers: headers,
58
+ parameters: payload.to_json
59
+ decoded_response = response.body['confirmation_token']
60
+ return decoded_response
61
+ end
62
+ return false
63
+ end
64
+
65
+ # Generates a waybill, once the information has been
66
+ # properly filled for the shipment.
67
+ def self.generate_waybill(confirmation_token)
68
+ url = Iupick.get_base_url() + 'generate-waybill/' + confirmation_token + '/'
69
+ headers = Iupick.generate_headers(auth = 'secret')
70
+
71
+ response = Unirest.post url,
72
+ headers: headers
73
+ decoded_response = response.body.to_json
74
+ return decoded_response
75
+ end
76
+
77
+ # Allows you to track the status of a shipment, with the
78
+ # tracking number and carrier.
79
+ def self.track(carrier, tracking_number)
80
+ url = Iupick.get_base_url() + 'track-shipment/'
81
+ payload = {
82
+ 'carrier': carrier,
83
+ 'tracking_number': tracking_number
84
+ }
85
+ headers = Iupick.generate_headers(auth = 'public')
86
+ response = Unirest.get url,
87
+ headers: headers,
88
+ parameters: payload
89
+ decoded_response = response.body['Message']
90
+ end
91
+
92
+ end
93
+ end
94
+
@@ -0,0 +1,3 @@
1
+ module Iupick
2
+ VERSION = "1.0.1"
3
+ end
@@ -0,0 +1,49 @@
1
+ module Iupick
2
+ # This is the class object for the waypoints.
3
+ class Waypoints
4
+
5
+ # This method pulls the complete information for a single waypoint.
6
+ def self.get_waypoint_information(waypoint_id)
7
+ if waypoint_id
8
+ url = Iupick.get_base_url() + 'waypoints/' + waypoint_id.to_s + '/'
9
+ headers = Iupick.generate_headers(auth = 'public')
10
+
11
+ response = Unirest.get url,
12
+ headers: headers
13
+ decoded_response = response.body
14
+ return decoded_response
15
+ else
16
+ return {
17
+ 'error': 'No es posible obtener la informacion del punto ' + waypoint_id.to_s
18
+ }
19
+ end
20
+ end
21
+
22
+ # This method allows you to pull the basic information required to plot
23
+ # the waypoints in a map
24
+ def self.get_waypoints_lite()
25
+ url = Iupick.get_base_url() + 'waypoints/lite/'
26
+ headers = Iupick.generate_headers(auth = 'public')
27
+
28
+ response = Unirest.get url,
29
+ headers: headers
30
+
31
+ decoded_response = response.body
32
+ return decoded_response
33
+ end
34
+
35
+ # This method allows you to pull the full information for waypoints in a
36
+ # certain postal code
37
+ def self.get_postal_code_waypoints(postal_code)
38
+ url = Iupick.get_base_url() + 'waypoints/postal-ids/' + postal_code.to_s + '/'
39
+ headers = Iupick.generate_headers(auth='public')
40
+
41
+ response = Unirest.get url,
42
+ headers: headers
43
+
44
+ decoded_response = response.body
45
+ return decoded_response
46
+ end
47
+
48
+ end
49
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iupick
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Valencia
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-30 00:00:00.000000000 Z
11
+ date: 2017-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.16.a
19
+ version: '1.15'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.16.a
26
+ version: '1.15'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,7 +44,15 @@ email:
44
44
  executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
- files: []
47
+ files:
48
+ - LICENSE
49
+ - README.md
50
+ - bin/console
51
+ - bin/setup
52
+ - lib/iupick.rb
53
+ - lib/iupick/shipment.rb
54
+ - lib/iupick/version.rb
55
+ - lib/iupick/waypoint.rb
48
56
  homepage: https://github.com/iupickmx/iupick-ruby
49
57
  licenses:
50
58
  - MIT