instamojo-ruby 1.1.2

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: 3c22eccfe2814ce57f124728f71fce854c27760ee83584420a2989e859e976df
4
+ data.tar.gz: 889f92aee37dd3305ba01be179f0c7189248f9e9c96e3cb9b639d9c21290c86f
5
+ SHA512:
6
+ metadata.gz: 945216e78b02a84146f03a40224627c45d7af8563a44687512f0747f7311cb60d54b612fe97c98da2dfa04d3d486be8fa68ce09eb7b4e2437943a63354a993b7
7
+ data.tar.gz: e9df688d4cc84207fd549c276bd693ce3d41137262290fadc01e21edf82b486193b578543dccdc475566daf1227611d9ebb505a200008a76fced302a9d3f4652
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+ gem "faraday", "0.8.8"
6
+ gem 'rest-client', '~> 1.8'
7
+
8
+ # Add dependencies to develop your gem here.
9
+ # Include everything needed to run rake, tests, features, etc.
10
+ group :development do
11
+ gem "rspec", "~> 2.8"
12
+ gem "bundler", "~> 1.0"
13
+ gem "jeweler", "~> 1.8"
14
+ gem "debugger", "~> 1.6"
15
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,83 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ addressable (2.3.5)
5
+ builder (3.2.2)
6
+ columnize (0.3.6)
7
+ debugger (1.6.5)
8
+ columnize (>= 0.3.1)
9
+ debugger-linecache (~> 1.2.0)
10
+ debugger-ruby_core_source (~> 1.3.1)
11
+ debugger-linecache (1.2.0)
12
+ debugger-ruby_core_source (1.3.1)
13
+ diff-lcs (1.1.3)
14
+ domain_name (0.5.25)
15
+ unf (>= 0.0.5, < 1.0.0)
16
+ faraday (0.8.8)
17
+ multipart-post (~> 1.2.0)
18
+ git (1.2.6)
19
+ github_api (0.10.1)
20
+ addressable
21
+ faraday (~> 0.8.1)
22
+ hashie (>= 1.2)
23
+ multi_json (~> 1.4)
24
+ nokogiri (~> 1.5.2)
25
+ oauth2
26
+ hashie (2.0.5)
27
+ highline (1.6.20)
28
+ http-cookie (1.0.2)
29
+ domain_name (~> 0.5)
30
+ httpauth (0.2.0)
31
+ jeweler (1.8.8)
32
+ builder
33
+ bundler (~> 1.0)
34
+ git (>= 1.2.5)
35
+ github_api (= 0.10.1)
36
+ highline (>= 1.6.15)
37
+ nokogiri (= 1.5.10)
38
+ rake
39
+ rdoc
40
+ json (1.8.1)
41
+ jwt (0.1.8)
42
+ multi_json (>= 1.5)
43
+ mime-types (2.99)
44
+ multi_json (1.8.2)
45
+ multi_xml (0.5.5)
46
+ multipart-post (1.2.0)
47
+ netrc (0.11.0)
48
+ nokogiri (1.5.10)
49
+ oauth2 (0.9.2)
50
+ faraday (~> 0.8)
51
+ httpauth (~> 0.2)
52
+ jwt (~> 0.1.4)
53
+ multi_json (~> 1.0)
54
+ multi_xml (~> 0.5)
55
+ rack (~> 1.2)
56
+ rack (1.5.2)
57
+ rake (10.1.1)
58
+ rdoc (3.12.2)
59
+ json (~> 1.4)
60
+ rest-client (1.8.0)
61
+ http-cookie (>= 1.0.2, < 2.0)
62
+ mime-types (>= 1.16, < 3.0)
63
+ netrc (~> 0.7)
64
+ rspec (2.8.0)
65
+ rspec-core (~> 2.8.0)
66
+ rspec-expectations (~> 2.8.0)
67
+ rspec-mocks (~> 2.8.0)
68
+ rspec-core (2.8.0)
69
+ rspec-expectations (2.8.0)
70
+ diff-lcs (~> 1.1.2)
71
+ rspec-mocks (2.8.0)
72
+ unf (0.2.0.beta2)
73
+
74
+ PLATFORMS
75
+ ruby
76
+
77
+ DEPENDENCIES
78
+ bundler (~> 1.0)
79
+ debugger (~> 1.6)
80
+ faraday (= 0.8.8)
81
+ jeweler (~> 1.8)
82
+ rest-client (~> 1.8)
83
+ rspec (~> 2.8)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2014 Ankur Goel
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,287 @@
1
+ # Instamojo-rb
2
+ This is the **Ruby** library of [Instamojo REST API](https://www.instamojo.com/developers/rest/).
3
+ This will assist you to programmatically create, edit and delete links on Instamojo. Also supports [RAP](https://www.instamojo.com/developers/request-a-payment-api/) api for payments request, listing and status.
4
+
5
+ ## Installation
6
+ `gem install instamojo-ruby`
7
+ For your Rails/bundler projects:
8
+ `gem 'instamojo-ruby'`
9
+
10
+ ## Usage
11
+ ### Set API keys
12
+ ```ruby
13
+ require 'Instamojo-rb'
14
+ api = Instamojo::API.new do |app|
15
+ app.api_key = "api_key-you-received-from-api@instamojo.com"
16
+ app.auth_token = "auth_token-you-received-from-api@instamojo.com"
17
+ end
18
+ #or
19
+ api = Instamojo::API.new("api_key-you-received-from-api@instamojo.com", "auth_token-you-received-from-api@instamojo.com")
20
+ ```
21
+
22
+ **Note**: If you're using this wrapper with our sandbox environment `https://test.instamojo.com/` then you should pass `'https://test.instamojo.com/api/1.1/'` as third argument to the `Instamojo` class while initializing it. API key and Auth token for the same can be obtained from https://test.instamojo.com/developers/ (Details: [Test Or Sandbox Account](https://instamojo.zendesk.com/hc/en-us/articles/208485675-Test-or-Sandbox-Account)).
23
+
24
+ api = Instamojo::API.new("api_key", "auth_token", "https://test.instamojo.com/api/1.1/")
25
+
26
+ ### Generate client
27
+ `client = api.client`
28
+
29
+ ---
30
+ ### Products
31
+
32
+ `Link` object contains all the necessary information required to interpret, modify and archive an Instamojo product. All product operations on client returns one or collection of `products`. Original response from Instamojo API for a product is encapsulated in `link.original`, which is immutable. Call `#to_h` on `link` to get its all attributes.
33
+ _Helper methods_ for `Link`:
34
+ * `link.to_h` - Returns equivalent Ruby hash for a link.
35
+ * `link.to_json` - Returns equivalent JSON for a link
36
+ * `link.original` - Returns original link data fetched from API.
37
+ * `link.save` - Edits updates carried out on Link object at Instamojo.
38
+ * `link.archive` - Archives link at Instamojo
39
+ * `link.reload` or `link.refresh` - Looks for changes on Instamojo server for the link. Immutable
40
+ * `link.reload!` or `link.refresh!` - Same as `link.reload`, but mutable.
41
+
42
+ More about its usage is below.
43
+
44
+
45
+ #### Get Products
46
+ ```ruby
47
+ client.links_list
48
+ #=> Array of Instamojo::Link objects
49
+ ```
50
+ ##### Supports optional pagination
51
+ ```ruby
52
+ client.links_list(page:1, limit:10)
53
+ #=> Array of 10 Link objects (page 1)
54
+ ```
55
+
56
+ #### Create a new product
57
+ ##### Required:
58
+ * `title` - Title of the product, be concise.
59
+ * `description` - Describe what your customers will get, you can add terms and conditions and any other relevant information here. Markdown is supported, popular media URLs like Youtube, Flickr are auto-embedded.
60
+ * `base_price` - Price of the product. This may be 0, if you want to offer it for free.
61
+
62
+ ##### File and Cover image:
63
+ * `file_upload` - Full path to the file you want to sell. This file will be available only after successful payment.
64
+ * `cover_image` - Full path to the IMAGE you want to upload as a cover image.
65
+
66
+ ##### Quantity:
67
+ * `quantity` - Set to 0 for unlimited sales. If you set it to say 10, a total of 10 sales will be allowed after which the product will be made unavailable.
68
+
69
+ ##### Post Purchase Note
70
+ * `note` - A post-purchase note, will only displayed after successful payment. Will also be included in the ticket/ receipt that is sent as attachment to the email sent to buyer. This will not be shown if the payment fails.
71
+
72
+ ##### Event
73
+ * `start_date` - Date-time when the event is beginning. Format: `YYYY-MM-DD HH:mm`
74
+ * `end_date` - Date-time when the event is ending. Format: `YYYY-MM-DD HH:mm`
75
+ * `venue` - Address of the place where the event will be held.
76
+ * `timezone` - Timezone of the venue. Example: Asia/Kolkata
77
+
78
+ ##### Redirects and Webhooks
79
+ * `redirect_url` - This can be a Thank-You page on your website. Buyers will be redirected to this page after successful payment.
80
+ * `webhook_url` - Set this to a URL that can accept POST requests made by Instamojo server after successful payment.
81
+ * `enable_pwyw` - set this to True, if you want to enable Pay What You Want. Default is False.
82
+ * `enable_sign` - set this to True, if you want to enable Link Signing. Default is False. For more information regarding this, and to avail this feature write to support at instamojo.com.
83
+
84
+ ##### Code:
85
+ ```ruby
86
+ new_link = client.create_link do |link|
87
+ link.title = 'API product v1.1'
88
+ link.description = 'Dummy offer via API'
89
+ link.currency = 'INR'
90
+ link.base_price = 0
91
+ link.quantity = 10
92
+ link.redirect_url = 'http://ankurgoel.com'
93
+ link.file_upload = '~/Pictures/RISE.jpg'
94
+ link.cover_image = '~/Pictures/saturday.jpg'
95
+ end
96
+ #=> Instamojo Link(slug: api-product-v11, title: API product v1.1, shorturl: )
97
+ new_link.reload!
98
+ #=> Instamojo Link(slug: api-product-v11, title: API product v1.1, shorturl: http://imojo.in/1dxv1h)
99
+ ```
100
+ or
101
+ ```ruby
102
+ new_product_params = {base_price: 199, title: 'API product 3', description: 'My dummy offer via API', currency: 'INR', quantity: 20}
103
+ new_link = client.create_link(new_product_params)
104
+ ```
105
+
106
+ #### Details of a product
107
+ ```ruby
108
+ link = client.link_detail('product_slug_goes_here')
109
+ #=> Instamojo Link(slug: product_slug_goes_here, title: Foo Bar, shorturl: http://imojo.in/ankurfoobar)
110
+ link.to_h
111
+ #=> {"title"=>"Foo Bar", "description"=>"", "slug"=>"foo-product", "shorturl"=>"http://imojo.in/ankurfoobar", "url"=>"https://www.instamojo.com/ankurgel/foo-product/", "cover_image"=> "https://www.filepicker.io/api/file/BHeefKAARCKGC5l1J29e/convert?w=500&h=500&fit=clip&quality=70", "currency"=>"INR", "base_price"=>"0.00", "quantity"=>nil, "quantity_sold"=>2, "requires_shipping"=>false, "ships_within_days"=>nil, "start_date"=>nil, "end_date"=>nil, "venue"=>"", "timezone"=>"", "note"=>"", "redirect_url"=>"", "webhook_url"=>"", "status"=>"Live", "enable_pwyw"=>false, "enable_sign"=>false, "socialpay_platforms"=>""}
112
+ ```
113
+
114
+ #### Edit a product
115
+ ```ruby
116
+ link = client.links_list.first
117
+ link.save do |l|
118
+ l.title = "Foo"
119
+ l.description = "This new information should go in product"
120
+ end
121
+ #=> Returns updated Link object from Instamojo
122
+ ```
123
+ or
124
+ ```ruby
125
+ link = client.link_detail('foo-product')
126
+ link.title = 'Foo'; link.description = 'This new information should go in product'
127
+ link.save
128
+ # returns updated Link object from Instamojo
129
+ ```
130
+ or handle it directly without Link object
131
+ ```ruby
132
+ client.edit_link({slug: 'foo-product', title: 'Foo', description: 'This new infromation should go in product'})
133
+ ```
134
+
135
+ ---
136
+ ### Payments
137
+ `Payment` object contains the necessary information such as `payment_id`, `quantity`, `status`, `buyer_email` etc. Call `#to_h` on `payment` to get it's all attributes. `Payment` object has following helpers:
138
+ - `payment.to_h` - Returns equivalent Ruby hash for a payment
139
+ - `payment.to_json` - Returns equivalent JSON for a payment
140
+ - `payment.original` - Returns original payment data fetched from API.
141
+ - Like `Link`, it also exposes `reload` and `reload!`
142
+
143
+ Details are documented [here](https://www.instamojo.com/developers/rest/#toc-payments)
144
+
145
+ #### Get Payments
146
+ ```ruby
147
+ client.payments_list
148
+ #=> Returns array of Payment objects
149
+ ```
150
+ ##### Supports optional pagination
151
+ ```ruby
152
+ client.payments_list(page:1, limit:10)
153
+ #=> Array of 10 Payment objects (page 1)
154
+ ```
155
+ #### Detail or status of a payment
156
+ ```ruby
157
+ payment = client.payment_detail('MOJxxx06000F97367750')
158
+ #=> Instamojo Payment(payment_id: MOJxxx06000F97367750, quantity: 1, amount: 0.00, status: Credit, link_slug: api-product-7-node, buyer_name: Ankur Goel)
159
+ payment.to_h
160
+ #=> Hash of all payment object attributes
161
+ ```
162
+ #### Request a payment
163
+ This is a part of [RAP API](https://www.instamojo.com/developers/request-a-payment-api/). You can request a payment from anyone via this who will then be notified to make a payment with specified payment. The payment then can be carried out via [Instapay](https://www.instamojo.com/pay/). Jump over to the documentation to see accepted parameters.
164
+ ##### Code:
165
+ ```ruby
166
+ payment_request = client.payment_request({amount:100, purpose: 'api', send_email: true, email: 'ankurgel+2@gmail.com', redirect_url: 'http://ankurgoel.com'})
167
+ #=> Instamojo PaymentRequest(id: 8726f8c5001e426f8b24e908b2761686, purpose: api, amount: 100.00, status: Sent, shorturl: , longurl: https://www.instamojo.com/@ashwini/8726f8c5001e426f8b24e908b2761686)
168
+ ```
169
+ #### Get Payment Requests
170
+ ```ruby
171
+ payment_requests = client.payment_requests_list
172
+ #=> Returns array of PaymentRequest objects
173
+ ```
174
+ ##### Supports optional pagination
175
+ ```ruby
176
+ client.payment_requests_list(page:1, limit:10)
177
+ #=> Array of 10 PaymentRequest objects (page 1)
178
+ ```
179
+ #### Status of payment request
180
+ You can get the status of a payment_request from the id you obtained after making payment request.
181
+ ```ruby
182
+ payment_request.reload!
183
+ #or
184
+ payment_request = client.payment_request_status('8726f8c5001e426f8b24e908b2761686')
185
+ #=> Instamojo PaymentRequest(id: 8726f8c5001e426f8b24e908b2761686, purpose: api, amount: 100.00, status: Sent, shorturl: http://imjo.in/Nasdf , longurl: https://www.instamojo.com/@ashwini/8726f8c5001e426f8b24e908b2761686)
186
+ ```
187
+ ---
188
+ ### Refunds
189
+ `Refund` object contains the necessary information such as `payment_id`, `refund_amount`, `status` and `body` etc. Call `#to_h` on `refund` to get it's all attributes. `Refund` object has the same helpers as `Payment` above, including `reload` and `reload!`.
190
+
191
+ #### Get Refunds
192
+ ```ruby
193
+ refunds = client.refunds_list
194
+ #=> Returns array of Refund objects
195
+ ```
196
+ ##### Supports optional pagination
197
+ ```ruby
198
+ client.refunds_list(page:1, limit:10)
199
+ #=> Array of 10 Refund objects (page 1)
200
+ ```
201
+ #### Create a new refund
202
+ ##### Required:
203
+ * `payment_id` - Payment ID of the payment against which you're initiating the refund.
204
+ * `type` - A three letter short-code identifying the [reason for this case](https://www.instamojo.com/developers/rest/#toc-refunds).
205
+ * `body` - Additonal text explaining the refund.
206
+
207
+ ```ruby
208
+ client.create_refund({payment_id: 'MOJO5c04000J30502939', type: 'QFL', body: 'Customer is not satisfied'})
209
+ #=> Returns Refund object or non-200 response object
210
+ ```
211
+ or
212
+ ```ruby
213
+ client.create_refund do |refund|
214
+ refund.payment_id = 'MOJO5c04000J30502939'
215
+ refund.type = 'QFL'
216
+ refund.body = 'Customer is not satisifed'
217
+ end
218
+ ```
219
+ or refund a `payment` directly:
220
+ ```ruby
221
+ payment = client.payment_detail('MOJO5c05000F97367750')
222
+ payment.process_refund(type: 'QFL', body: 'User wanted different version') #or
223
+ payment.process_refund do |refund|
224
+ refund.type = 'QFL'
225
+ refund.body = 'User wanted different version'
226
+ end
227
+ ```
228
+
229
+ #### Details of a refund
230
+ ```ruby
231
+ refund = client.refund_detail 'C5c0751269'
232
+ #=> Instamojo Refund(id: C5c0751269, status: 'Refunded' payment_id: MOJO5c04000J30502939, refund_amount: 100)
233
+ refund.to_h
234
+ #=> Hash of all refund attributes
235
+ refund.reload!
236
+ #=> Updates the refund from server
237
+ #=> Instamojo Refund(id: C5c0751269, status: 'Closed' payment_id: MOJO5c04000J30502939, refund_amount: 100)
238
+ ```
239
+ or
240
+ ```ruby
241
+ refunds = client.refunds_list
242
+ refund = refunds.last
243
+ refund.reload #=> refetches the refund from server
244
+ #=> Instamojo Refund(id: C5c0751269, status: 'Refunded' payment_id: MOJO5c04000J30502939, refund_amount: 100)
245
+ ```
246
+
247
+ ---
248
+ ### Authentication
249
+ ```ruby
250
+ client.authenticate('instamojo_username', 'instamojo_password')
251
+ #or
252
+ client.authenticate do |user|
253
+ user.username = "instamojo_username"
254
+ user.password = "instamojo_password"
255
+ end
256
+ #=> Instamojo Client(URL: https://www.instamojo.com/api/1, Status: Authenticated)
257
+ ```
258
+ #### Logout
259
+ ```ruby
260
+ client.logout
261
+ ```
262
+ ---
263
+ ### Misc
264
+ * `client.authorized` - View last status of api client request.
265
+ * `client.response` - View last procured response by client.
266
+ * `client.response.code` - View `response_code` of last request sent by client.
267
+
268
+ #### Logging
269
+ If you are interested in seeing api requests being made to Instamojo server. Flip this flag: `Instamojo::DEBUG = true` and genereate the api client again.
270
+
271
+
272
+ ## Contributing
273
+
274
+ * [Fork](https://github.com/AnkurGel/Instamojo-rb/fork) the project
275
+ * `bundle install` to satisfy gem dependencies.
276
+ * `rake install` to install the gem.
277
+ * Swim around in `lib/`.
278
+
279
+ ## Contributors
280
+ 1. Ashwini Chaudhary - [@ashwch](https://github.com/ashwch)
281
+ * [PR #3](https://github.com/AnkurGel/Instamojo-rb/pull/3) - Couple of minor fixes.
282
+ * [PR #4](https://github.com/AnkurGel/Instamojo-rb/pull/4) - Class wrapper over Payment Request. Code fixes.
283
+
284
+ ## Copyright
285
+
286
+ Copyright (c) 2014 Ankur Goel.
287
+
data/README.rdoc ADDED
@@ -0,0 +1,89 @@
1
+ = Instamojo-rb
2
+
3
+ This is the *Ruby* library of {Instamojo API}[http://instamojo.com/developers].
4
+ This will assist you to programmatically create, edit and delete offers on Instamojo.
5
+
6
+ == Installation
7
+ gem install Instamojo-rb
8
+
9
+ For Rails/bundler projects:
10
+ gem 'Instamojo-rb'
11
+
12
+ == Usage
13
+
14
+ === Set API keys
15
+ require 'Instamojo-rb'
16
+ api = Instamojo::API.new do |app|
17
+ app.app_id = "app_id-you-received-from-api@instamojo.com"
18
+ end
19
+ #or
20
+ api = Instamojo::API.new("app_id-you-received-from-api@instamojo.com")
21
+
22
+ === Generate Client
23
+ client = api.client
24
+
25
+ === Authentication
26
+ client.authenticate('instamojo_username', 'instamojo_password')
27
+ #or
28
+ client.authenticate do |user|
29
+ user.username = "instamojo_username"
30
+ user.password = "instamojo_password"
31
+ end
32
+ #=> Instamojo Client(URL: https://www.instamojo.com/api/1, Status: Authenticated)
33
+
34
+ === Offers
35
+
36
+ ==== List all offers
37
+
38
+ client.get_offers
39
+
40
+ ==== List details of an offer
41
+
42
+ offer_slug = "my-foo-product"
43
+ client.get_offer(offer_slug)
44
+ #=> {"offer"=> {"shorturl"=>nil, "start_date"=>nil, "note"=>"", "description"=>"This is a demo product. Just *claim* it. ", "venue"=>nil, "title"=>"Demo product", "url"=>"https://www.instamojo.com/ankurgel/demo-product/", "slug"=>"demo-product", "base_price"=>"0.00", "quantity"=>nil, "end_date"=>nil, "currency"=>"INR", "cover_image"=>nil, "timezone"=>nil, "redirect_url"=>""},
45
+
46
+ ==== Create an offer
47
+
48
+ client.create_offer do |offer|
49
+ offer.title = "Command line offer"
50
+ offer.description = "This offer is being created via Instamojo-rb"
51
+ offer.currency = "INR"
52
+ offer.base_price = 0
53
+ offer.quantity = 0
54
+ end
55
+
56
+ #OR
57
+ client.create_offer({
58
+ "title" => "Command line offer",
59
+ "description" => "This offer is being created via Instamojo-rb",
60
+ "currency" => "INR",
61
+ "base_price" => 0,
62
+ "quantity" => 0
63
+ })
64
+
65
+ ==== Archive an offer
66
+
67
+ offer_slug = "my-foo-product"
68
+ client.delete_offer(offer_slug)
69
+
70
+ ==== Logout
71
+ client.logout
72
+
73
+
74
+ == Development Pipeline
75
+ Few things which will be available in next versions:
76
+
77
+ * Error handling; with respect to `Instamojo` error codes.
78
+ * File Upload support.
79
+ * +Offer+ and +Event+ model with api methods like
80
+ * _Accessor_ methods like on +Offer+: +#title+, +#description+, +#quantity+
81
+ * Functional setters: +offer.set_title('Changed offer title')+
82
+ * +offer.set_quantity(30)+
83
+ * +offer.enable_variants+
84
+
85
+
86
+ == Copyright
87
+
88
+ Copyright (c) 2014 Ankur Goel. See LICENSE.txt for further details.
89
+