cm_clickpost 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +43 -0
- data/lib/cm_clickpost/additional_info.rb +12 -0
- data/lib/cm_clickpost/api_version.rb +8 -0
- data/lib/cm_clickpost/base_payload.rb +23 -0
- data/lib/cm_clickpost/concerns/helpers.rb +13 -0
- data/lib/cm_clickpost/configuration.rb +11 -0
- data/lib/cm_clickpost/drop_address.rb +11 -0
- data/lib/cm_clickpost/gst_info.rb +12 -0
- data/lib/cm_clickpost/order.rb +12 -0
- data/lib/cm_clickpost/pickup_address.rb +14 -0
- data/lib/cm_clickpost/product_info.rb +8 -0
- data/lib/cm_clickpost/return_address.rb +8 -0
- data/lib/cm_clickpost/shipment.rb +78 -0
- data/lib/cm_clickpost/version.rb +5 -0
- data/lib/cm_clickpost.rb +57 -0
- metadata +62 -0
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,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 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,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
|
data/lib/cm_clickpost.rb
ADDED
@@ -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: []
|