zipMoney 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.
@@ -0,0 +1,192 @@
1
+ module ZipMoney
2
+ class Api
3
+
4
+ attr_accessor :options, :config, :payload, :response
5
+
6
+ HTTP_METHOD_POST = :post
7
+ HTTP_METHOD_GET = :get
8
+
9
+ # Initializes a new api object
10
+ #
11
+ # @param [conf] ZipMoney::Configuration
12
+ # @param [options] api options
13
+ #
14
+ # @return ZipMoney::Api instance
15
+ def initialize(conf,options={})
16
+ if conf.new.class == ZipMoney::Configuration
17
+ @config = conf
18
+ else
19
+ raise ArgumentError, "Config is not valid"
20
+ end
21
+ @options = options
22
+ end
23
+
24
+ # Appends api credentials to the request object
25
+ #
26
+ # @param [data] Request data
27
+ #
28
+ # @return data
29
+ def append_api_credentials(params)
30
+ is_param_defined(params) do
31
+ params = Struct::ApiCredentials.new
32
+ params.version = Struct::Version.new
33
+ end
34
+ if params.merchant_id == nil
35
+ params.merchant_id = self.config.merchant_id
36
+ end
37
+ if params.merchant_key == nil
38
+ params.merchant_key = self.config.merchant_key
39
+ end
40
+ if params.version.client == nil
41
+ params.version.client = ZipMoney::Configuration::API_NAME + " Version:" + ZipMoney::Configuration::API_VERSION
42
+ end
43
+ if params.version.platform == nil
44
+ params.version.platform = ZipMoney::Configuration::API_PLATFORM
45
+ end
46
+ params
47
+ end
48
+
49
+ # Checks if data is a Struct and calls the block passed as parameter if true
50
+ #
51
+ # @param [data] Request data
52
+ #
53
+ # @return true|false
54
+ def is_param_defined(params)
55
+ yield if !params.is_a?(Struct)
56
+ end
57
+
58
+ # Makes request to the zipMoney endpoint
59
+ #
60
+ # @param [resource] endpoint resource
61
+ # @param [method] method get|post
62
+ # @param [params] request parameters
63
+ #
64
+ # @return ZipMoney::Response object
65
+ def request(resource, method, params = nil)
66
+ resource = Resources.get(resource, method, params)
67
+ params = append_api_credentials(params)
68
+
69
+ if method == :post
70
+ payload = prepare_params(params)
71
+ else
72
+ payload = {}
73
+ end
74
+
75
+ headers = @options[:headers] || {}
76
+ if method == :get
77
+ resource.send(method, headers) do |response, request, result, &block|
78
+ ZipMoney::Response.new(response)
79
+ end
80
+ else
81
+ resource.send(method, payload, headers) do |response, request, result, &block|
82
+ ZipMoney::Response.new(response)
83
+ end
84
+ end
85
+ end
86
+
87
+ # Converts the parameters(Hash) to json
88
+ #
89
+ # @param [params] request parameters
90
+ #
91
+ # @return data as json
92
+ def prepare_params(params)
93
+ begin
94
+ params = Util.struct_to_hash(params).to_json
95
+ rescue TypeError => e
96
+ if params.is_a?(Hash)
97
+ params = params.to_json
98
+ else
99
+ raise ArgumentError, "Invalid params provided"
100
+ end
101
+ rescue JSON::ParserError => e
102
+ if params.is_a?(Hash)
103
+ params = params.to_json
104
+ else
105
+ raise ArgumentError, "Invalid params provided"
106
+ end
107
+ end
108
+ params
109
+ end
110
+
111
+ # Makes checkout call on the zipMoney endpoint
112
+ #
113
+ # @param [params] request parameters
114
+ #
115
+ # @return ZipMoney::Response object
116
+ def checkout(params)
117
+ request(Resources::RESOURCE_CHECKOUT, HTTP_METHOD_POST, params)
118
+ end
119
+
120
+ # Makes quote call on the zipMoney endpoint
121
+ #
122
+ # @param [params] request parameters
123
+ #
124
+ # @return ZipMoney::Response object
125
+ def quote(params)
126
+ request(Resources::RESOURCE_QUOTE, HTTP_METHOD_POST, params)
127
+ end
128
+
129
+ # Makes capture call on the zipMoney endpoint
130
+ #
131
+ # @param [params] request parameters
132
+ #
133
+ # @return ZipMoney::Response object
134
+ def capture(params)
135
+ request(Resources::RESOURCE_CAPTURE, HTTP_METHOD_POST, params)
136
+ end
137
+
138
+ # Makes refund call on the zipMoney endpoint
139
+ #
140
+ # @param [params] request parameters
141
+ #
142
+ # @return ZipMoney::Response object
143
+ def refund(params)
144
+ request(Resources::RESOURCE_REFUND, HTTP_METHOD_POST, params)
145
+ end
146
+
147
+ # Makes cancel call on the zipMoney endpoint
148
+ #
149
+ # @param [params] request parameters
150
+ #
151
+ # @return ZipMoney::Response object
152
+ def cancel(params)
153
+ request(Resources::RESOURCE_CANCEL, HTTP_METHOD_POST, params)
154
+ end
155
+
156
+ # Makes query call on the zipMoney endpoint
157
+ #
158
+ # @param [params] request parameters
159
+ #
160
+ # @return ZipMoney::Response object
161
+ def query(params)
162
+ request(Resources::RESOURCE_QUERY, HTTP_METHOD_POST, params)
163
+ end
164
+
165
+ # Makes configure call on the zipMoney endpoint
166
+ #
167
+ # @param [params] request parameters
168
+ #
169
+ # @return ZipMoney::Response object
170
+ def configure(params)
171
+ request(Resources::RESOURCE_CONFIGURE, HTTP_METHOD_POST, params)
172
+ end
173
+
174
+ # Makes settings call on the zipMoney endpoint
175
+ #
176
+ # @param [params] request parameters
177
+ #
178
+ # @return ZipMoney::Response object
179
+ def settings
180
+ request(Resources::RESOURCE_SETTINGS, HTTP_METHOD_POST)
181
+ end
182
+
183
+ # Makes heartbeat call on the zipMoney endpoint
184
+ #
185
+ # @param [params] request parameters
186
+ #
187
+ # @return ZipMoney::Response object
188
+ def heartbeat
189
+ request(Resources::RESOURCE_HEARTBEAT, HTTP_METHOD_POST)
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,44 @@
1
+ module ZipMoney
2
+ class Cancel
3
+ include Request
4
+
5
+ attr_accessor :params
6
+ Struct.new("CancelParams", :txn_id, :merchant_id, :merchant_key, :order, :order_id, :quote_id, :reference, :version, :metadata)
7
+
8
+ # Initializes a ZipMoney::Cancel object
9
+ #
10
+ # Returns ZipMoney::Cancel object
11
+ def initialize
12
+ @params = Struct::CancelParams.new
13
+ @params.order = Struct::Order.new
14
+ @params.order.detail = Array.new
15
+ @params.metadata = Struct::Metadata.new
16
+ @params.version = Struct::Version.new
17
+ end
18
+
19
+ # Performs the Cancel api call on zipMoney endpoint
20
+ #
21
+ # Returns ZipMoney::Cancel object
22
+ def do
23
+ validate
24
+ ZipMoney.api.cancel(@params)
25
+ end
26
+
27
+ # Performs the parameters validation
28
+ def validate
29
+ raise ArgumentError, "Params emtpy" if @params.nil?
30
+ @errors = []
31
+ @errors << 'txn_id must be provided' if @params.txn_id.nil?
32
+ @errors << 'order must be provided' if @params.order.nil?
33
+ @errors << 'order.id must be provided' if @params.order.id.nil?
34
+ @errors << 'order.total must be provided' if@params.order.total.nil?
35
+ @errors << 'order.shipping_value must be provided' if @params.order.shipping_value.nil?
36
+ @errors << 'order.tax must be provided' if @params.order.tax.nil?
37
+ @errors << 'order detail must be provided' if @params.order.detail.nil?
38
+
39
+ validate_item_details @params.order.detail
40
+
41
+ raise ZipMoney::RequestError.new("Following error(s) occurred while making request, please resolve them to make the request: #{@errors}") if @errors.any?
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ module ZipMoney
2
+ class Capture
3
+ include Request
4
+
5
+ attr_accessor :params
6
+
7
+ Struct.new("CaptureParams", :txn_id, :order_id, :quote_id, :order, :reference, :version, :metadata, :merchant_id, :merchant_key)
8
+
9
+ # Initializes a ZipMoney::Capture object
10
+ #
11
+ # Returns ZipMoney::Capture object
12
+ def initialize
13
+ @params = Struct::CaptureParams.new
14
+ @params.order = Struct::Order.new
15
+ @params.metadata = Struct::Metadata.new
16
+ @params.version = Struct::Version.new
17
+ @params.order.detail = Array.new
18
+ end
19
+
20
+ # Performs the Capture api call on zipMoney endpoint
21
+ #
22
+ # Returns ZipMoney::Cancel object
23
+ def do
24
+ validate
25
+ ZipMoney.api.capture(@params)
26
+ end
27
+
28
+ # Performs the parameters validation
29
+ def validate
30
+ raise ArgumentError, "Params emtpy" if @params.nil?
31
+ @errors = []
32
+ @errors << 'txn_id must be provided' if @params.txn_id.nil?
33
+ @errors << 'order.id must be provided' if @params.order.id.nil?
34
+ @errors << 'order.total must be provided' if @params.order.total.nil?
35
+ @errors << 'order.shipping_value must be provided' if @params.order.shipping_value.nil?
36
+ @errors << 'order.tax must be provided' if @params.order.tax.nil?
37
+ @errors << 'order detail must be provided' if @params.order.detail.nil?
38
+
39
+ validate_item_details @params.order.detail
40
+
41
+ raise ZipMoney::RequestError.new("Following error(s) occurred while making request, please resolve them to make the request: #{@errors}") if @errors.any?
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,52 @@
1
+ module ZipMoney
2
+ class Checkout
3
+ include Request
4
+
5
+ attr_accessor :params
6
+
7
+ Struct.new("CheckoutParams", :charge, :currency_code, :return_url, :cancel_url, :notify_url, :error_url, :in_store, :txn_id, :token, :merchant_id, :merchant_key,
8
+ :order_id, :order, :consumer, :billing_address, :shipping_address, :version, :metadata)
9
+
10
+ # Initializes a ZipMoney::Checkout object
11
+ #
12
+ # Returns ZipMoney::Checkout object
13
+ def initialize
14
+ @params = Struct::CheckoutParams.new
15
+ @params.order = Struct::Order.new
16
+ @params.billing_address = Struct::Address.new
17
+ @params.shipping_address = Struct::Address.new
18
+ @params.consumer = Struct::Consumer.new
19
+ @params.metadata = Struct::Metadata.new
20
+ @params.version = Struct::Version.new
21
+ @params.order.detail = Array.new
22
+ end
23
+
24
+ # Performs the Checkout api call on zipMoney endpoint
25
+ #
26
+ # Returns ZipMoney::Checkout object
27
+ def do
28
+ validate
29
+
30
+ ZipMoney.api.checkout(self.params)
31
+ end
32
+
33
+ # Performs the parameters validation
34
+ def validate
35
+ raise ArgumentError, "Params emtpy" if @params.nil?
36
+ @errors = []
37
+ @errors << 'charge must be provided' if @params.charge.nil?
38
+ @errors << 'currency_code must be provided' if @params.currency_code.nil?
39
+ @errors << 'order_id must be provided' if @params.order_id.nil?
40
+ @errors << 'order must be provided' if @params.order.nil?
41
+ @errors << 'order.id must be provided' if @params.order.id.nil?
42
+ @errors << 'order.total must be provided' if @params.order.total.nil?
43
+ @errors << 'order.shipping_value must be provided' if @params.order.shipping_value.nil?
44
+ @errors << 'order.tax must be provided' if @params.order.tax.nil?
45
+ @errors << 'order detail must be provided' if @params.order.detail.nil?
46
+
47
+ validate_item_details @params.order.detail
48
+
49
+ raise ZipMoney::RequestError.new("Following error(s) occurred while making request, please resolve them to make the request: #{@errors}") if @errors.any?
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,34 @@
1
+ module ZipMoney
2
+ class Configure
3
+ include Request
4
+
5
+ attr_accessor :params
6
+
7
+ Struct.new("ConfigureParams", :base_url, :merchant_id, :merchant_key, :version, :metadata)
8
+
9
+ # Initializes a ZipMoney::Configure object
10
+ #
11
+ # Returns ZipMoney::Configure object
12
+ def initialize
13
+ @params = Struct::ConfigureParams.new
14
+ @params.metadata = Struct::Metadata.new
15
+ @params.version = Struct::Version.new
16
+ end
17
+
18
+ # Performs the Configure api call on zipMoney endpoint
19
+ #
20
+ # Returns ZipMoney::Configure object
21
+ def do
22
+ validate
23
+ ZipMoney.api.configure(self.params)
24
+ end
25
+
26
+ # Performs the parameters validation
27
+ def validate
28
+ raise ArgumentError, "Params emtpy" if params.nil?
29
+ @errors = []
30
+ @errors << 'base_url must be provided' if self.params.txn_id.nil?
31
+ raise ZipMoney::RequestError.new("Following error(s) occurred while making request, please resolve them to make the request: #{@errors}") if @errors.any?
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,43 @@
1
+ module ZipMoney
2
+ class Query
3
+ include Request
4
+
5
+ attr_accessor :params
6
+
7
+ Struct.new("QueryParams", :orders, :merchant_id, :merchant_key, :version, :metadata)
8
+ Struct.new("QueryOrder", :id, :status, :error_message, :txn_id)
9
+
10
+ # Initializes a ZipMoney::Query object
11
+ #
12
+ # Returns ZipMoney::Query object
13
+ def initialize
14
+ @params = Struct::QueryParams.new
15
+ @params.orders = Array.new
16
+ @params.metadata = Struct::Metadata.new
17
+ @params.version = Struct::Version.new
18
+ end
19
+
20
+ # Performs the Query api call on zipMoney endpoint
21
+ #
22
+ # Returns ZipMoney::Query object
23
+ def do
24
+ validate
25
+ ZipMoney.api.query(@params)
26
+ end
27
+
28
+ # Performs the parameters validation
29
+ def validate
30
+ raise ArgumentError, "Params emtpy" if @params.nil?
31
+ @errors = []
32
+ @errors << 'at least one order must be provided' if @params.orders.nil?
33
+
34
+ @params.orders.each_with_index do |item,index|
35
+ @errors << "order.detail[#{index}].id must be provided" if item.id.nil?
36
+ end
37
+
38
+ raise ZipMoney::RequestError.new("Following error(s) occurred while making request, please resolve them to make the request: #{@errors}") if @errors.any?
39
+ end
40
+
41
+
42
+ end
43
+ end
@@ -0,0 +1,54 @@
1
+ module ZipMoney
2
+ class Quote
3
+ include Request
4
+
5
+ attr_accessor :params
6
+
7
+ Struct.new("QuoteParams", :currency_code, :cart_url, :success_url, :cancel_url, :refer_url, :error_url, :decline_url, :in_store, :checkout_source, :txn_id, :merchant_id, :merchant_key,
8
+ :quote_id, :order, :consumer, :billing_address, :shipping_address, :version, :metadata, :token)
9
+
10
+ # Initializes a ZipMoney::Quote object
11
+ #
12
+ # Returns ZipMoney::Quote object
13
+ def initialize
14
+ @params = Struct::QuoteParams.new
15
+ @params.order = Struct::Order.new
16
+ @params.billing_address = Struct::Address.new
17
+ @params.shipping_address = Struct::Address.new
18
+ @params.consumer = Struct::Consumer.new
19
+ @params.metadata = Struct::Metadata.new
20
+ @params.version = Struct::Version.new
21
+ @params.order.detail = Array.new
22
+ end
23
+
24
+ # Performs the Quote api call on zipMoney endpoint
25
+ #
26
+ # Returns ZipMoney::Quote object
27
+ def do
28
+ validate
29
+ ZipMoney.api.quote(@params)
30
+ end
31
+
32
+ # Performs the parameters validation
33
+ def validate
34
+ raise ArgumentError, "Params emtpy" if @params.nil?
35
+ @errors = []
36
+ @errors << 'quote_id must be provided' if @params.quote_id.nil?
37
+ @errors << 'success_url must be provided' if @params.success_url.nil?
38
+ @errors << 'cancel_url must be provided' if @params.cancel_url.nil?
39
+ @errors << 'error_url must be provided' if @params.error_url.nil?
40
+ @errors << 'decline_url must be provided' if @params.decline_url.nil?
41
+ @errors << 'quote_id must be provided' if @params.quote_id.nil?
42
+ @errors << 'order must be provided' if @params.order.nil?
43
+ @errors << 'order.id must be provided' if @params.order.id.nil?
44
+ @errors << 'order.total must be provided' if @params.order.total.nil?
45
+ @errors << 'order.shipping_value must be provided' if @params.order.shipping_value.nil?
46
+ @errors << 'order.tax must be provided' if @params.order.tax.nil?
47
+ @errors << 'order detail must be provided' if @params.order.detail.nil?
48
+
49
+ validate_item_details @params.order.detail
50
+
51
+ raise ZipMoney::RequestError.new("Following error(s) occurred while making request, please resolve them to make the request: #{@errors}") if @errors.any?
52
+ end
53
+ end
54
+ end