passninja-ruby 0.1.0

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: cb5c833457f6b6748d951bd149464e7606f52aa340221a616e4cb172cb1ef913
4
+ data.tar.gz: 1284c7b44e3b170eef7b5bd67c3dc6ec9560f6d1b0dcdaca232555257fdde734
5
+ SHA512:
6
+ metadata.gz: 2807cf73a22b0edf295fd0a004858df0e02eabbef48891b9d47bab7ffce0a4352c9b69896029cd189fd7c487bbf77c9981b98298acda70e47f50866c4dc3f152
7
+ data.tar.gz: 9636df9027075650f47c816b6d5a6d2e18f99c3a9c7209dfc186c1574bca94cb089081d4d843fbf25e6c2cad23d0557950708d3aaf1d1cf5ce98b3c1427c0915
@@ -0,0 +1,3 @@
1
+ module Passninja
2
+ VERSION = "0.1.0"
3
+ end
data/lib/passninja.rb ADDED
@@ -0,0 +1,148 @@
1
+ require "net/http"
2
+ require "json"
3
+
4
+ module Passninja
5
+ class Client
6
+ def initialize(account_id, api_key)
7
+ @account_id = account_id
8
+ @api_key = api_key
9
+ end
10
+
11
+ def pass_templates
12
+ PassTemplates.new(@account_id, @api_key)
13
+ end
14
+
15
+ def passes
16
+ Passes.new(@account_id, @api_key)
17
+ end
18
+ end
19
+
20
+ class PassTemplates
21
+ def initialize(account_id, api_key)
22
+ @account_id = account_id
23
+ @api_key = api_key
24
+ end
25
+
26
+ def find(pass_template_key)
27
+ uri = URI("https://api.passninja.com/v1/pass_templates/#{pass_template_key}")
28
+ request = Net::HTTP::Get.new(uri)
29
+ request.basic_auth(@account_id, @api_key)
30
+
31
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
32
+ http.request(request)
33
+ end
34
+
35
+ JSON.parse(response.body)
36
+ end
37
+ end
38
+
39
+ class Passes
40
+ def initialize(account_id, api_key)
41
+ @account_id = account_id
42
+ @api_key = api_key
43
+ end
44
+
45
+ def create(pass_type, pass_data)
46
+ required_fields = fetch_required_keys_set(pass_type)
47
+ validate_fields(pass_data, required_fields)
48
+ uri = URI("https://api.passninja.com/v1/passes")
49
+ request = Net::HTTP::Post.new(uri)
50
+ request.basic_auth(@account_id, @api_key)
51
+ request.content_type = "application/json"
52
+ request.body = { passType: pass_type, passData: pass_data }.to_json
53
+
54
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
55
+ http.request(request)
56
+ end
57
+
58
+ JSON.parse(response.body)
59
+ end
60
+
61
+ def find(pass_type)
62
+ uri = URI("https://api.passninja.com/v1/passes?passType=#{pass_type}")
63
+ request = Net::HTTP::Get.new(uri)
64
+ request.basic_auth(@account_id, @api_key)
65
+
66
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
67
+ http.request(request)
68
+ end
69
+
70
+ JSON.parse(response.body)
71
+ end
72
+
73
+ def get(pass_type, serial_number)
74
+ uri = URI("https://api.passninja.com/v1/passes/#{pass_type}/#{serial_number}")
75
+ request = Net::HTTP::Get.new(uri)
76
+ request.basic_auth(@account_id, @api_key)
77
+
78
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
79
+ http.request(request)
80
+ end
81
+
82
+ JSON.parse(response.body)
83
+ end
84
+
85
+ def decrypt(pass_type, payload)
86
+ uri = URI("https://api.passninja.com/v1/passes/decrypt")
87
+ request = Net::HTTP::Post.new(uri)
88
+ request.basic_auth(@account_id, @api_key)
89
+ request.content_type = "application/json"
90
+ request.body = { passType: pass_type, payload: payload }.to_json
91
+
92
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
93
+ http.request(request)
94
+ end
95
+
96
+ JSON.parse(response.body)
97
+ end
98
+
99
+ def update(pass_type, serial_number, pass_data)
100
+ required_fields = fetch_required_keys_set(pass_type)
101
+ validate_fields(pass_data, required_fields)
102
+ uri = URI("https://api.passninja.com/v1/passes/#{pass_type}/#{serial_number}")
103
+ request = Net::HTTP::Put.new(uri)
104
+ request.basic_auth(@account_id, @api_key)
105
+ request.content_type = "application/json"
106
+ request.body = { passData: pass_data }.to_json
107
+
108
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
109
+ http.request(request)
110
+ end
111
+
112
+ JSON.parse(response.body)
113
+ end
114
+
115
+ def delete(pass_type, serial_number)
116
+ uri = URI("https://api.passninja.com/v1/passes/#{pass_type}/#{serial_number}")
117
+ request = Net::HTTP::Delete.new(uri)
118
+ request.basic_auth(@account_id, @api_key)
119
+
120
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
121
+ http.request(request)
122
+ end
123
+
124
+ JSON.parse(response.body)["serialNumber"]
125
+ end
126
+
127
+ private
128
+
129
+ def fetch_required_keys_set(pass_type)
130
+ uri = URI("https://api.passninja.com/v1/pass_templates/#{pass_type}/required_fields")
131
+ request = Net::HTTP::Get.new(uri)
132
+ request.basic_auth(@account_id, @api_key)
133
+
134
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
135
+ http.request(request)
136
+ end
137
+
138
+ JSON.parse(response.body)["required_fields"].map(&:to_sym)
139
+ end
140
+
141
+ def validate_fields(fields, required_fields)
142
+ missing_fields = required_fields - fields.keys
143
+ unless missing_fields.empty?
144
+ raise ArgumentError, "Missing required fields: #{missing_fields.join(', ')}"
145
+ end
146
+ end
147
+ end
148
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: passninja-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Richard Grundy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-07-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: net-http
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ description: This gem provides a Ruby interface for the PassNinja API, allowing you
70
+ to create, get, update, and delete passes.
71
+ email:
72
+ - info@passninja.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - lib/passninja.rb
78
+ - lib/passninja/version.rb
79
+ homepage: https://github.com/flomio/passninja-ruby
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubygems_version: 3.3.7
99
+ signing_key:
100
+ specification_version: 4
101
+ summary: A Ruby gem for interacting with the PassNinja API
102
+ test_files: []