cm_clickpost 0.1.0

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 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: []