cm_clickpost 0.1.0

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
+ SHA256:
3
+ metadata.gz: 77a7d42124bb9b21c709fe046cd0d033d412eee61eba14ae29f4e9cf31438ea4
4
+ data.tar.gz: 5623e7be27011aa6b34ab1da53ea3ee72c90893e741c92306a061a1574f9cb4e
5
+ SHA512:
6
+ metadata.gz: f2e26ced3b18acce9fe80bb9a58e7495742314491feef492b88781005a2fe35729ecae3919d13f78f0c114ec4ecc5e2e25cad27c5330bd70d8fc38100ea784c8
7
+ data.tar.gz: 74aea3248db9b4e0b5223c642161d66018c6635270788b07ad6fb602f699e1566ef92037eb3f294fa17f8a2391f275141218eb646e3987d956fc01d5f14acdbe
data/README.md ADDED
@@ -0,0 +1,43 @@
1
+ # CmClickpost
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cm_clickpost`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cm_clickpost'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install cm_clickpost
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cm_clickpost. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/cm_clickpost/blob/master/CODE_OF_CONDUCT.md).
36
+
37
+ ## License
38
+
39
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
40
+
41
+ ## Code of Conduct
42
+
43
+ Everyone interacting in the CmClickpost project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/cm_clickpost/blob/master/CODE_OF_CONDUCT.md).
@@ -0,0 +1,12 @@
1
+ module CmClickpost
2
+ class AdditionalInfo < CmClickpost::BasePayload
3
+ @@attributes = [
4
+ :label, :awb_number, :delivery_type, :async,
5
+ :gst_number, :account_code, :order_date, :is_fragile,
6
+ :is_dangerous, :order_id
7
+ ]
8
+
9
+ define_class_methods(@@attributes, @attributes)
10
+
11
+ end
12
+ end
@@ -0,0 +1,8 @@
1
+ module ApiVersion
2
+ API_VERSIONS = {
3
+ create_order: 'v3',
4
+ track_order: 'v2',
5
+ predicted_sla_api: 'v2',
6
+ serviceability_api: 'v1'
7
+ }
8
+ end
@@ -0,0 +1,23 @@
1
+ module CmClickpost
2
+ class BasePayload
3
+
4
+
5
+ def self.define_class_methods(fields, attributes)
6
+ fields.each do |field|
7
+ define_method(field) do
8
+ attributes[field]
9
+ end
10
+
11
+ define_method("#{field}=") do |value|
12
+ attributes[field] = value
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ def initialize(attributes = {})
19
+ @attributes = attributes
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,13 @@
1
+ module CmClickpost
2
+ module Concerns
3
+ module Helpers
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ def convert_to_json(data)
7
+ return data.as_json.map {|a| a['attributes'].with_indifferent_access } if data.instance_of? (Array)
8
+ data.as_json['attributes'].with_indifferent_access
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module CmClickpost
2
+ class Configuration
3
+ attr_accessor :api_key, :username, :environment
4
+
5
+ def initialize(username, api_key, environment)
6
+ @username = username
7
+ @api_key = api_key
8
+ @environment = environment
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module CmClickpost
2
+ class DropAddress < CmClickpost::BasePayload
3
+ @@attributes = [
4
+ :drop_state, :drop_address, :drop_email,
5
+ :drop_pincode, :drop_city, :drop_phone, :drop_country, :drop_name
6
+ ]
7
+
8
+ define_class_methods(@@attributes, @attributes)
9
+
10
+ end
11
+ end
@@ -0,0 +1,12 @@
1
+ module CmClickpost
2
+ class GstInfo < CmClickpost::BasePayload
3
+ @@attributes = [
4
+ :seller_gstin, :taxable_value, :is_seller_registered_under_gst,
5
+ :place_of_supply, :hsn_code, :enterprise_gstin, :gst_total_tax,
6
+ :igst_amount, :cgst_amount, :consignee_gstin, :invoice_reference
7
+ ]
8
+
9
+ define_class_methods(@@attributes, @attributes)
10
+
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module CmClickpost
2
+ class Order < CmClickpost::BasePayload
3
+ @@attributes = [
4
+ :height, :length, :breadth, :weight,
5
+ :cod_value, :courier_partner, :order_type, :invoice_value,
6
+ :invoice_number, :invoice_date, :reference_number
7
+ ]
8
+
9
+ define_class_methods(@@attributes, @attributes)
10
+
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ module CmClickpost
2
+ class PickupAddress < CmClickpost::BasePayload
3
+ @@attributes = [
4
+ :pickup_state, :pickup_address, :email,
5
+ :pickup_time, :pickup_pincode, :pickup_city, :tin,
6
+ :pickup_phone, :pickup_country, :pickup_name
7
+ ]
8
+
9
+
10
+ define_class_methods(@@attributes, @attributes)
11
+
12
+
13
+ end
14
+ end
@@ -0,0 +1,8 @@
1
+ module CmClickpost
2
+ class ProductInfo < CmClickpost::BasePayload
3
+ @@attributes = [:product_url, :price, :description, :additional, :quantity, :sku]
4
+
5
+ define_class_methods(@@attributes, @attributes)
6
+
7
+ end
8
+ end
@@ -0,0 +1,8 @@
1
+ module CmClickpost
2
+ class ReturnAddress < CmClickpost::BasePayload
3
+ @@attributes = [:state, :address, :pincode, :city, :phone, :country, :name]
4
+
5
+ define_class_methods(@@attributes, @attributes)
6
+
7
+ end
8
+ end
@@ -0,0 +1,78 @@
1
+ module CmClickpost
2
+ class Shipment
3
+ attr_accessor :pickup_address, :drop_address, :order_details, :product_details, :products, :gst_info, :additional_info, :return_address
4
+ include CmClickpost::Concerns::Helpers
5
+
6
+ def initialize
7
+ @pickup_address = nil
8
+ @drop_address = nil
9
+ @order_details = nil
10
+ @product_details = nil
11
+ @products = []
12
+ @gst_info = nil
13
+ @additional_info = nil
14
+ @return_address = nil
15
+ end
16
+
17
+ def pickup_address(**args)
18
+ @pickup_address = CmClickpost::PickupAddress.new(args) if args.present?
19
+ @pickup_address
20
+ end
21
+
22
+ def drop_address(**args)
23
+ @drop_address = CmClickpost::DropAddress.new(args) if args.present?
24
+ @drop_address
25
+ end
26
+
27
+ def order_details(**args)
28
+ @order_details = CmClickpost::Order.new(args) if args.present?
29
+ @order_details
30
+ end
31
+
32
+ def product_details(**args)
33
+ if args.present?
34
+ @product_details = CmClickpost::ProductInfo.new(args)
35
+ @products << @product_details
36
+ return @product_details
37
+ end
38
+ @products
39
+ end
40
+
41
+ def gst_info(**args)
42
+ @gst_info = CmClickpost::GstInfo.new(args) if args.present?
43
+ @gst_info
44
+ end
45
+
46
+ def additional_info(**args)
47
+ @additional_info = CmClickpost::AdditionalInfo.new(args) if args.present?
48
+ @additional_info
49
+ end
50
+
51
+ def return_address(**args)
52
+ @return_address = CmClickpost::ReturnAddress.new(args) if args.present?
53
+ @return_address
54
+ end
55
+
56
+ def self.track(waybill:, courier_partner_id:)
57
+ additional_params = "&waybill=#{waybill}&cp_id=#{courier_partner_id}"
58
+ CmClickpost.send_request(method: 'get', route_param: '/track-order/', api_version: ApiVersion::API_VERSIONS[:track_order], additional_params: additional_params)
59
+ end
60
+
61
+ def create_shipping_order
62
+ shipment_details = convert_to_json(@order_details)
63
+ shipment_details.store(:items, convert_to_json(@products))
64
+
65
+ additional = convert_to_json(@additional_info)
66
+ additional.store(:return_info, convert_to_json(@return_address))
67
+
68
+ request_payload = {
69
+ "pickup_info": convert_to_json(@pickup_address),
70
+ "drop_info": convert_to_json(@drop_address),
71
+ "shipment_details": shipment_details,
72
+ "gst_info": convert_to_json(@gst_info),
73
+ "additional": additional
74
+ }
75
+ CmClickpost.send_request(route_param: '/create-order/', api_version: ApiVersion::API_VERSIONS[:create_order], request_payload: request_payload)
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CmClickpost
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "cm_clickpost/base_payload"
4
+ require_relative "cm_clickpost/version"
5
+ require_relative 'cm_clickpost/configuration'
6
+ require_relative 'cm_clickpost/api_version'
7
+ require_relative 'cm_clickpost/concerns/helpers.rb'
8
+ require_relative 'cm_clickpost/pickup_address'
9
+ require_relative 'cm_clickpost/shipment'
10
+ require_relative "cm_clickpost/drop_address"
11
+ require_relative "cm_clickpost/order"
12
+ require_relative "cm_clickpost/product_info"
13
+ require_relative "cm_clickpost/gst_info"
14
+ require_relative "cm_clickpost/additional_info"
15
+ require_relative "cm_clickpost/return_address"
16
+
17
+ # Dir["../cm_clickpost/lib/cm_clickpost/concerns/*.rb"].each { |file| require file }
18
+ # Dir["../cm_clickpost/lib/cm_clickpost/*.rb"].each { |file| require file }
19
+
20
+
21
+
22
+
23
+ module CmClickpost
24
+ class << self
25
+ include CmClickpost::Concerns::Helpers
26
+
27
+ attr_accessor :configuration, :pickup_address
28
+ require 'net/http'
29
+ require 'uri'
30
+ require 'json'
31
+
32
+ BASE_URL = "https://www.clickpost.in/api/"
33
+
34
+ def setup(username, api_key, environment)
35
+ @configuration ||= Configuration.new(username, api_key, environment)
36
+ end
37
+
38
+
39
+ def send_request(method: 'post', route_param:, api_version: '', request_payload: '', additional_params: '')
40
+ query_params = "/?username=#{@configuration.username}&key=#{@configuration.api_key}"
41
+ uri = URI.parse(BASE_URL + api_version + route_param + query_params + additional_params)
42
+ headers = {'Content-Type': 'application/json' }
43
+ http = Net::HTTP.new(uri.host, uri.port)
44
+ http.use_ssl = true
45
+ request = "Net::HTTP::#{method.classify}".constantize.new(uri.request_uri, headers)
46
+ request.body = request_payload.to_json
47
+ response = http.request(request)
48
+ result = JSON.parse(response.body)
49
+ if result['meta']['success'] == true
50
+ return result
51
+ else
52
+ raise Exception.new result['meta']['message']
53
+ end
54
+ end
55
+
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cm_clickpost
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jishnu De Sarkar
8
+ - Aditya Tiwari
9
+ autorequire:
10
+ bindir: exe
11
+ cert_chain: []
12
+ date: 2022-06-07 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Clickpost wrapper
15
+ email:
16
+ - jishnu@commutatus.com
17
+ - taditya.tiwari007@gmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - README.md
23
+ - lib/cm_clickpost.rb
24
+ - lib/cm_clickpost/additional_info.rb
25
+ - lib/cm_clickpost/api_version.rb
26
+ - lib/cm_clickpost/base_payload.rb
27
+ - lib/cm_clickpost/concerns/helpers.rb
28
+ - lib/cm_clickpost/configuration.rb
29
+ - lib/cm_clickpost/drop_address.rb
30
+ - lib/cm_clickpost/gst_info.rb
31
+ - lib/cm_clickpost/order.rb
32
+ - lib/cm_clickpost/pickup_address.rb
33
+ - lib/cm_clickpost/product_info.rb
34
+ - lib/cm_clickpost/return_address.rb
35
+ - lib/cm_clickpost/shipment.rb
36
+ - lib/cm_clickpost/version.rb
37
+ homepage: https://github.com/commutatus/cm_clickpost
38
+ licenses:
39
+ - MIT
40
+ metadata:
41
+ homepage_uri: https://github.com/commutatus/cm_clickpost
42
+ source_code_uri: https://github.com/commutatus/cm_clickpost
43
+ post_install_message:
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 2.3.0
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubygems_version: 3.3.7
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: Clickpost API integration
62
+ test_files: []