passworks 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/CHANGELOG.md +7 -0
  4. data/Gemfile +4 -0
  5. data/README.md +319 -0
  6. data/Rakefile +2 -0
  7. data/lib/passworks.rb +49 -0
  8. data/lib/passworks/asset_resource.rb +11 -0
  9. data/lib/passworks/campaign_resource.rb +40 -0
  10. data/lib/passworks/client.rb +53 -0
  11. data/lib/passworks/collection_proxy.rb +46 -0
  12. data/lib/passworks/configuration.rb +58 -0
  13. data/lib/passworks/exception.rb +5 -0
  14. data/lib/passworks/exceptions/bad_gateway.rb +8 -0
  15. data/lib/passworks/exceptions/bad_request.rb +8 -0
  16. data/lib/passworks/exceptions/enhance_your_calm.rb +9 -0
  17. data/lib/passworks/exceptions/file_not_found.rb +8 -0
  18. data/lib/passworks/exceptions/forbidden.rb +8 -0
  19. data/lib/passworks/exceptions/gateway_timeout.rb +8 -0
  20. data/lib/passworks/exceptions/internal_server_error.rb +8 -0
  21. data/lib/passworks/exceptions/method_not_allowed.rb +8 -0
  22. data/lib/passworks/exceptions/not_found.rb +8 -0
  23. data/lib/passworks/exceptions/not_implemented.rb +8 -0
  24. data/lib/passworks/exceptions/payment_required.rb +8 -0
  25. data/lib/passworks/exceptions/precondition_failed.rb +8 -0
  26. data/lib/passworks/exceptions/service_unavailable.rb +8 -0
  27. data/lib/passworks/exceptions/unauthorized.rb +8 -0
  28. data/lib/passworks/exceptions/unprocessable_entity.rb +8 -0
  29. data/lib/passworks/faraday/http_exception_middleware.rb +73 -0
  30. data/lib/passworks/inflector.rb +38 -0
  31. data/lib/passworks/pass_resource.rb +40 -0
  32. data/lib/passworks/request.rb +49 -0
  33. data/lib/passworks/request_proxy.rb +115 -0
  34. data/lib/passworks/resource.rb +18 -0
  35. data/lib/passworks/response.rb +56 -0
  36. data/lib/passworks/version.rb +3 -0
  37. data/passworks.gemspec +34 -0
  38. metadata +208 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7ba2d0f9da5b52d98c7e8d28467ba75e7d7984f1
4
+ data.tar.gz: 74f29a1668f6560cb74ab045a94d90c9eb756146
5
+ SHA512:
6
+ metadata.gz: c5ddfe8be5badfd3462c239c88f27b9c0d99a2b68a8587f84e57ab455ba86e5bdf41335e5664ad983496d3ca2d27ab3b582674265f73c94315630a387e65703c
7
+ data.tar.gz: 8ced775e48072afb76a94f1f368b42e111e4498d4ac9d10fde61cac5c2496a8a13b1050859935e83ed9a0dff39f30fa2901ae3d1b03e57538b6b4304ac41a888
data/.gitignore ADDED
@@ -0,0 +1,22 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.bundle
19
+ *.so
20
+ *.o
21
+ *.a
22
+ mkmf.log
data/CHANGELOG.md ADDED
@@ -0,0 +1,7 @@
1
+ # CHANGELOG
2
+
3
+ This file is a manually maintained list of changes for each release. Feel free to add your
4
+ changes here when sending pull requests. Also send corrections if you spot any mistakes.
5
+
6
+ ## v0.0.1 (2014-10-30)
7
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in passworks.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,319 @@
1
+ # passworks-ruby [![Code Climate](https://codeclimate.com/github/passworks/passworks-ruby/badges/gpa.svg)](https://codeclimate.com/github/passworks/passworks-ruby) [![Build Status](https://travis-ci.org/passworks/passworks-ruby.svg)](https://travis-ci.org/passworks/passworks-ruby)
2
+
3
+ Ruby bindings for the Passworks API (http://api.passworks.io)
4
+
5
+ [API Documentation](https://github.com/passworks/passworks-api)
6
+
7
+ Passworks Ruby API client can be installed via rubygems [http://rubygems.org/gems/passworks](http://rubygems.org/gems/passworks).
8
+
9
+
10
+ ## Instalation
11
+
12
+
13
+ ```ruby
14
+ gem install passworks
15
+ ```
16
+
17
+ Using bundler
18
+
19
+ ```ruby
20
+ gem 'passworks'
21
+ ```
22
+
23
+ ## Basic usage
24
+
25
+ ### Configuring the client
26
+
27
+
28
+ The Passworks ruby client can be configured at class level or instance level.
29
+
30
+ ```ruby
31
+ # Class level configuration
32
+ Passworks.configure do |config|
33
+ config.api_username = "your api username"
34
+ config.api_secret = "your api secret"
35
+ end
36
+
37
+ client = Passworks.new
38
+ ```
39
+
40
+ ```ruby
41
+ # Instance level configuration
42
+ client = Passworks.new({
43
+ api_username: 'your api username',
44
+ api_secret: 'your api secret'
45
+ })
46
+ ```
47
+
48
+ ## Examples
49
+
50
+ ### Assets
51
+
52
+ ```ruby
53
+ # Upload an asset (icon image)
54
+ asset_icon = client.assets.create({ file: '/path-to-file/icon-file.png', asset_type: 'icon' })
55
+
56
+ # Fetch and iterate through all your assets
57
+ assets = client.assets.all
58
+ assets.each do |asset|
59
+ puts asset
60
+ end
61
+
62
+ # Fetch a specific assets via uuid (uuid=c3d5fc64-3a43-4d3a-a167-473dfeb1edd3)
63
+ asset = client.assets.find('c3d5fc64-3a43-4d3a-a167-473dfeb1edd3')
64
+
65
+ # Delete asset without loading it first
66
+ client.assets.delete('c3d5fc64-3a43-4d3a-a167-473dfeb1edd3')
67
+
68
+ # delete the asset instance (loading first the asset)
69
+ asset.delete
70
+ ```
71
+
72
+ ### Coupons
73
+
74
+ ```ruby
75
+ # Create a coupon campaign
76
+ coupon_campaign = client.coupons.create({
77
+ name: "my first coupon campaign",
78
+ icon_id: "c3d5fc64-3a43-4d3a-a167-473dfeb1edd3"
79
+ })
80
+
81
+ # Add a pass the the coupon campaign
82
+ # see [Coupon API documentation for details about the valid coupon fields
83
+ # https://github.com/passworks/passworks-api/blob/master/sections/coupon.md
84
+ coupon_pass = coupon_campaign.passes.create({
85
+ primary_fields: [
86
+ {
87
+ key: "key1",
88
+ label: "label1",
89
+ value: "value1"
90
+ }
91
+ ]
92
+ })
93
+
94
+ # Fetch and print all passes from the `coupon_campaign` campaign
95
+ coupon_campaign.passes.all.each do |coupon_pass|
96
+ puts coupon_pass
97
+ end
98
+
99
+ # send push notification all users of a coupon campaign
100
+ coupon_campaign.push
101
+
102
+ # Send push notification to the users of a given passe of the `coupon_campaign`
103
+ coupon_campaign.passes.all.first.push
104
+
105
+ # Update coupon pass
106
+ # the `update` method returns the updated PassResource instance
107
+ coupon_pass = coupon_campaign.passes.all.first
108
+ updated_coupon_pass = coupon_pass.update({
109
+ primary_fields: [
110
+ {
111
+ key: "key2",
112
+ label: "label2",
113
+ value: "value2"
114
+ }
115
+ ]
116
+ })
117
+ ```
118
+
119
+ ### Store Cards
120
+
121
+ ```ruby
122
+ # Create a store card campaign
123
+ coupon_campaign = client.store_cards.create({
124
+ name: "my first store card campaign",
125
+ icon_id: "c3d5fc64-3a43-4d3a-a167-473dfeb1edd3"
126
+ })
127
+
128
+ # Add a pass the the store card campaign
129
+ # see [Store Card API documentation for details about the valid store card fields
130
+ # https://github.com/passworks/passworks-api/blob/master/sections/store_card.md
131
+ store_card_pass = store_card_campaign.passes.create({
132
+ primary_fields: [
133
+ {
134
+ key: "key1",
135
+ label: "label1",
136
+ value: "value1"
137
+ }
138
+ ]
139
+ })
140
+
141
+ # Fetch and print all passes from the `store_card_campaign` campaign
142
+ store_card_campaign.passes.all.each do |store_card_pass|
143
+ puts store_card_pass
144
+ end
145
+
146
+ # send push notification all users of a store card campaign
147
+ store_card_campaign.push
148
+
149
+ # Send push notification to the users of a given passe of the `store_card_campaign`
150
+ store_card_campaign.passes.all.first.push
151
+
152
+ # Update store card pass
153
+ # the `update` method returns the updated PassResource instance
154
+ store_card_pass = store_card_campaign.passes.all.first
155
+ updated_coupon_pass = store_card_pass.update({
156
+ primary_fields: [
157
+ {
158
+ key: "key2",
159
+ label: "label2",
160
+ value: "value2"
161
+ }
162
+ ]
163
+ })
164
+ ```
165
+
166
+ ### Event Tickets
167
+
168
+ ```ruby
169
+ # Create a event ticket campaign
170
+ event_ticket_campaign = client.event_tickets.create({
171
+ name: "my first event ticket campaign",
172
+ icon_id: "c3d5fc64-3a43-4d3a-a167-473dfeb1edd3"
173
+ })
174
+
175
+ # Add a pass the the event ticket campaign
176
+ # see [Event Ticket API documentation for details about the valid event ticket fields
177
+ # https://github.com/passworks/passworks-api/blob/master/sections/event_ticket.md
178
+ event_ticket_campaign = event_ticket_campaign.passes.create({
179
+ primary_fields: [
180
+ {
181
+ key: "key1",
182
+ label: "label1",
183
+ value: "value1"
184
+ }
185
+ ]
186
+ })
187
+
188
+ # Fetch and print all passes from the `event_ticket_campaign` campaign
189
+ event_ticket_campaign.passes.all.each do |event_ticket_pass|
190
+ puts event_ticket_pass
191
+ end
192
+
193
+ # send push notification all users of a store card campaign
194
+ event_ticket_campaign.push
195
+
196
+ # Send push notification to the users of a given passe of the `event_ticket_campaign`
197
+ event_ticket_campaign.passes.all.first.push
198
+
199
+ # Update event ticket pass
200
+ # the `update` method returns the updated PassResource instance
201
+ event_ticket_pass = event_ticket_campaign.passes.all.first
202
+ updated_event_ticket_pass = event_ticket_pass.update({
203
+ primary_fields: [
204
+ {
205
+ key: "key2",
206
+ label: "label2",
207
+ value: "value2"
208
+ }
209
+ ]
210
+ })
211
+ ```
212
+
213
+ ### Bording Passes
214
+
215
+ ```ruby
216
+ # Create a boarding pass campaign
217
+ boarding_pass_campaign = client.boarding_passes.create({
218
+ name: "my first boarding pass campaign",
219
+ icon_id: "c3d5fc64-3a43-4d3a-a167-473dfeb1edd3",
220
+ transit_type: "air"
221
+ })
222
+
223
+ # Add a pass the the boarding pass campaign
224
+ # see [Boarding Pass API documentation for details about the valid boarding passe fields
225
+ # https://github.com/passworks/passworks-api/blob/master/sections/boarding_pass.md
226
+ boarding_pass_pass = boarding_pass_campaign.passes.create({
227
+ primary_fields: [
228
+ {
229
+ key: "key1",
230
+ label: "label1",
231
+ value: "value1"
232
+ }
233
+ ]
234
+ })
235
+
236
+ # Fetch and print all passes from the `boarding_pass_campaign` campaign
237
+ boarding_pass_campaign.passes.all.each do |boarding_pass|
238
+ puts boarding_pass
239
+ end
240
+
241
+ # send push notification all users of a boarding pass campaign
242
+ boarding_pass_campaign.push
243
+
244
+ # Send push notification to the users of a given passe of the `boarding_pass_campaign`
245
+ boarding_pass_campaign.passes.all.first.push
246
+
247
+ # Update event ticket pass
248
+ # the `update` method returns the updated PassResource instance
249
+ boarding_pass_pass = boarding_pass_campaign.passes.all.first
250
+ updated_boarding_pass_pass = boarding_pass_pass.update({
251
+ primary_fields: [
252
+ {
253
+ key: "key2",
254
+ label: "label2",
255
+ value: "value2"
256
+ }
257
+ ]
258
+ })
259
+ ```
260
+
261
+ ### Generic
262
+
263
+ ```ruby
264
+ # Create a generic pass campaign
265
+ generic_campaign = client.boarding_passes.create({
266
+ name: "my first generic campaign",
267
+ icon_id: "c3d5fc64-3a43-4d3a-a167-473dfeb1edd3"
268
+ })
269
+
270
+ # Add a pass the the generic campaign
271
+ # see [Generic Pass API documentation for details about the valid generic passe fields
272
+ # https://github.com/passworks/passworks-api/blob/master/sections/generic.md
273
+ generic_pass = generic_campaign.passes.create({
274
+ primary_fields: [
275
+ {
276
+ key: "key1",
277
+ label: "label1",
278
+ value: "value1"
279
+ }
280
+ ]
281
+ })
282
+
283
+ # Fetch and print all passes from the `generic_campaign` campaign
284
+ generic_campaign.passes.all.each do |generic_pass|
285
+ puts generic_pass
286
+ end
287
+
288
+ # send push notification all users of an generic pass campaign
289
+ generic_campaign.push
290
+
291
+ # Send push notification to the users of a given passe of the `generic_campaign`
292
+ generic_campaign.passes.all.first.push
293
+
294
+ # Update event ticket pass
295
+ # the `update` method returns the updated PassResource instance
296
+ generic_pass = generic_campaign.passes.all.first
297
+ updated_generic_pass = generic_pass.update({
298
+ primary_fields: [
299
+ {
300
+ key: "key2",
301
+ label: "label2",
302
+ value: "value2"
303
+ }
304
+ ]
305
+ })
306
+ ```
307
+
308
+ ## Documentation
309
+
310
+ For more information about the API please please refere to [https://github.com/passworks/passworks-api](https://github.com/passworks/passworks-api)
311
+
312
+ For more examples about the Ruby client try browsing the [wiki](https://github.com/passworks/passworks-ruby/wiki)
313
+
314
+
315
+ ## Help us make it better
316
+
317
+ Please tell us how we can make the Ruby client better. If you have a specific feature request or if you found a bug, please use GitHub issues. Fork these docs and send a pull request with improvements.
318
+
319
+ To talk with us and other developers about the API [open a support ticket](https://github.com/passworks/passworks-ruby/issues) or mail us at `api at passworks.io` if you need to talk to us.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/lib/passworks.rb ADDED
@@ -0,0 +1,49 @@
1
+ require 'uri'
2
+ require 'faraday'
3
+ require 'faraday_middleware'
4
+ require 'passworks/version'
5
+ require 'passworks/configuration'
6
+ require 'passworks/exception'
7
+ require 'passworks/response'
8
+ require 'passworks/inflector'
9
+ require 'passworks/faraday/http_exception_middleware'
10
+ require 'passworks/request'
11
+ require 'passworks/request_proxy'
12
+ require 'passworks/client'
13
+ require 'passworks/collection_proxy'
14
+ require 'passworks/resource'
15
+ require 'passworks/campaign_resource'
16
+ require 'passworks/asset_resource'
17
+ require 'passworks/pass_resource'
18
+
19
+ # Passworks
20
+
21
+ module Passworks
22
+ extend Configuration
23
+
24
+ # Creates an instance of {Passworks::Client} to allow access to Passworks API
25
+ # @param [Hash] options
26
+ # @option options [String] :endpoint Defines the API end point (see {Passworks::Configuration::DEFAULT_ENDPOINT} for default endpoint)
27
+ # @option options [String] :api_username Your API username
28
+ # @option options [String] :api_secret Your API secret key
29
+ # @option options [Boolean] :debug Enables debug messages to STDOUT
30
+ #
31
+ # @return [Passworks::Client]
32
+ def self.new(options={})
33
+ merged_options = self.options.merge(options)
34
+ @client = Client.new(merged_options) unless defined?(@client) && @client.same_options?(merged_options)
35
+ @client
36
+ end
37
+
38
+ # @!visibility private
39
+ def self.respond_to?(method, include_all=false)
40
+ new.respond_to?(method, include_all) || super
41
+ end
42
+
43
+ # @!visibility private
44
+ def self.method_missing?(method, *args, &block)
45
+ return super unless new.respond_to?(method)
46
+ new.send(method, *args, &block)
47
+ end
48
+
49
+ end
@@ -0,0 +1,11 @@
1
+ module Passworks
2
+ class AssetResource < Resource
3
+
4
+ # Deletes the current Asset
5
+ # @return [Boolean]
6
+ def delete
7
+ client.delete("#{collection_name}/#{id}").ok?
8
+ end
9
+
10
+ end
11
+ end
@@ -0,0 +1,40 @@
1
+ require 'passworks/resource'
2
+
3
+ module Passworks
4
+
5
+ # Represents a Campaign of a given type: Coupon, Boarding Pass, Event Ticket, Generic, Store Card
6
+ #
7
+ class CampaignResource < Resource
8
+
9
+ # @return [RequestProxy]
10
+ def passes(options={})
11
+ Passworks::RequestProxy.new(client, collection_name, id, options)
12
+ end
13
+
14
+ # Deletes the current Campaign
15
+ # @return [Boolean]
16
+ def delete
17
+ client.delete("#{collection_name}/#{id}").ok?
18
+ end
19
+
20
+ # Send push notifications to all customers that have installed passes from this campaign
21
+ # @return [Boolean]
22
+ def push
23
+ client.post("#{collection_name}/#{id}/push").ok?
24
+ end
25
+
26
+ # Updates the {CampaignResource} and returns the updated instance
27
+ # @return [CampaignResource] Updated instance
28
+ def update(data, params={})
29
+ content = {
30
+ body: {
31
+ single_name.to_sym => data
32
+ }.merge(params)
33
+ }
34
+ response = client.patch("#{collection_name}/#{id}", content)
35
+ self.class.new(client, collection_name, response.data)
36
+ end
37
+
38
+
39
+ end
40
+ end