passninja-ruby 0.1.0

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.
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: []