passworks 0.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.
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