queue_it 1.1.8 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rbenv-gemsets +1 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +20 -0
- data/README.md +1 -1
- data/lib/queue_it/api/client.rb +5 -4
- data/lib/queue_it/api/event.rb +8 -6
- data/lib/queue_it/queueable.rb +6 -6
- data/lib/queue_it/url_builder.rb +2 -2
- data/lib/queue_it/version.rb +1 -1
- data/queue_it.gemspec +1 -1
- data/spec/queue_it/api/client_spec.rb +3 -3
- data/spec/queue_it/api/event_spec.rb +6 -7
- metadata +19 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37fa1c47d1ae47fffa2b3bc9b78dad1a983356b232329d8016ea14a6d0a2ecd2
|
4
|
+
data.tar.gz: e2a72cd51b72e2da2ae74f388924e59e4c2664977d8d826d2b35d1a646f4a519
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4f59ab64f17ce5991d321bfbd59ec9d4189a00cc820e080945e58877a8e58eeb368a533a464fe3f4a05e002d889f5ee0723905caf2760cfbd421502cdd938f3
|
7
|
+
data.tar.gz: 48a90881475da361a4b1446162f612419a6c56e250ebe1750c92b504b77a0c8d97f70d5d1909dc24f7bae490a1c076ed13639a3e0c8f688d75a31dbc16035275
|
data/.rbenv-gemsets
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
queue-it
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.1
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,23 @@
|
|
1
|
+
### 3.0.0 - 2021-07-30
|
2
|
+
|
3
|
+
* Replace session store with cookie store to prevent some users of being kicked out of the queue
|
4
|
+
|
5
|
+
### 2.0.2 - 2021-07-21
|
6
|
+
|
7
|
+
* Defaults changed when creating/updating a queue: CustomLayout set to dark theme, MaxNoOfRedirectsPrQueueId to 3, QueueNumberValidityInMinutes to 30.
|
8
|
+
* UseSSL parameter is no longer sent since the use of https will be enforced.
|
9
|
+
|
10
|
+
### 2.0.1 - 2021-04-26
|
11
|
+
|
12
|
+
* Updated the queue and cancel URL from `q.queue-it.net` to `customer_id.queue-it.net`.
|
13
|
+
* Updated the queue URLs to use https.
|
14
|
+
|
15
|
+
### 2.0.0 - 2020-10-29
|
16
|
+
|
17
|
+
* A customer ID is needed to create a client instance
|
18
|
+
* Always include the Customer ID in the API request URL
|
19
|
+
* Bump webmock to properly handle Ruby 2.4+
|
20
|
+
|
1
21
|
### 1.1.6 - 2017-03-15
|
2
22
|
|
3
23
|
* Now by default, during creation event, we support using redirect urls
|
data/README.md
CHANGED
data/lib/queue_it/api/client.rb
CHANGED
@@ -8,11 +8,12 @@ module QueueIt
|
|
8
8
|
module Api
|
9
9
|
class Client
|
10
10
|
JSON_FORMAT = "application/json".freeze
|
11
|
-
ENDPOINT_URL = URI("https://api2.queue-it.net/2_0/event").freeze
|
12
11
|
|
13
|
-
def initialize(api_key: nil, debug: false)
|
12
|
+
def initialize(customer_id, api_key: nil, debug: false)
|
13
|
+
self.customer_id = customer_id
|
14
14
|
self.api_key = api_key
|
15
15
|
self.debug = debug
|
16
|
+
self.endpoint = URI("https://#{customer_id}.api2.queue-it.net/2_0/event")
|
16
17
|
end
|
17
18
|
|
18
19
|
def put(path, body)
|
@@ -21,11 +22,11 @@ module QueueIt
|
|
21
22
|
|
22
23
|
private
|
23
24
|
|
24
|
-
attr_accessor :api_key, :debug
|
25
|
+
attr_accessor :api_key, :customer_id, :debug, :endpoint
|
25
26
|
|
26
27
|
def options
|
27
28
|
{
|
28
|
-
url:
|
29
|
+
url: endpoint.dup,
|
29
30
|
headers: {
|
30
31
|
accept: JSON_FORMAT,
|
31
32
|
content_type: JSON_FORMAT,
|
data/lib/queue_it/api/event.rb
CHANGED
@@ -11,7 +11,7 @@ module QueueIt
|
|
11
11
|
self.client = client
|
12
12
|
end
|
13
13
|
|
14
|
-
def create_or_update(event_id:, display_name:, start_time:, pre_queue_start_time:nil, know_user_secret_key: nil, redirect_url:, end_time: nil, description: "", event_culture_name: "en-US", time_zone: "UTC", queue_number_validity_in_minutes:
|
14
|
+
def create_or_update(event_id:, display_name:, start_time:, pre_queue_start_time:nil, know_user_secret_key: nil, redirect_url:, end_time: nil, description: "", event_culture_name: "en-US", time_zone: "UTC", queue_number_validity_in_minutes: 30, max_no_of_redirects: 1, custom_layout: "Default layout by Queue-it")
|
15
15
|
raise InvalidEventIdFormat unless valid_event_id_format?(event_id)
|
16
16
|
|
17
17
|
attributes = queue_attributes(
|
@@ -24,7 +24,10 @@ module QueueIt
|
|
24
24
|
display_name: display_name,
|
25
25
|
event_culture_name: event_culture_name,
|
26
26
|
queue_number_validity_in_minutes: queue_number_validity_in_minutes,
|
27
|
-
time_zone: time_zone
|
27
|
+
time_zone: time_zone,
|
28
|
+
max_no_of_redirects: max_no_of_redirects,
|
29
|
+
custom_layout: custom_layout
|
30
|
+
)
|
28
31
|
|
29
32
|
perform_request(:put, event_id, attributes)
|
30
33
|
end
|
@@ -97,7 +100,7 @@ module QueueIt
|
|
97
100
|
MICROSOFT_TIME_ZONE_INDEX_VALUES.fetch(time_zone, time_zone)
|
98
101
|
end
|
99
102
|
|
100
|
-
def queue_attributes(pre_queue_start_time:, start_time:, end_time:, know_user_secret_key:, redirect_url:, description:, display_name:, event_culture_name:, queue_number_validity_in_minutes:, time_zone:)
|
103
|
+
def queue_attributes(pre_queue_start_time:, start_time:, end_time:, know_user_secret_key:, redirect_url:, description:, display_name:, event_culture_name:, queue_number_validity_in_minutes:, time_zone:, max_no_of_redirects:, custom_layout:)
|
101
104
|
{
|
102
105
|
"DisplayName" => display_name,
|
103
106
|
"RedirectUrl" => URI(redirect_url).to_s,
|
@@ -107,17 +110,16 @@ module QueueIt
|
|
107
110
|
"EventStartTime" => format_time( utc_start_time(start_time) ),
|
108
111
|
"EventEndTime" => format_time( utc_end_time(start_time, end_time) ),
|
109
112
|
"EventCulture" => event_culture_name,
|
110
|
-
"MaxNoOfRedirectsPrQueueId" => "
|
113
|
+
"MaxNoOfRedirectsPrQueueId" => "#{max_no_of_redirects}",
|
111
114
|
"QueueNumberValidityInMinutes" => "#{queue_number_validity_in_minutes}",
|
112
115
|
"AfterEventLogic" => "RedirectUsersToTargetPage",
|
113
116
|
"AfterEventRedirectPage" => "",
|
114
|
-
"UseSSL" => "Auto",
|
115
117
|
"JavaScriptSupportEnabled" => "False",
|
116
118
|
"TargetUrlSupportEnabled" => "True",
|
117
119
|
"SafetyNetMode" => "Disabled",
|
118
120
|
"KnowUserSecurity" => "MD5Hash",
|
119
121
|
"KnowUserSecretKey" => know_user_secret_key,
|
120
|
-
"CustomLayout" =>
|
122
|
+
"CustomLayout" => custom_layout,
|
121
123
|
"XUsersInFrontOfYou" => nil,
|
122
124
|
"TargetUrlValidationRegex" => "",
|
123
125
|
"DomainAlias" => "",
|
data/lib/queue_it/queueable.rb
CHANGED
@@ -15,18 +15,18 @@ module QueueIt
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def queue_it_queue_id(event_id)
|
18
|
-
|
18
|
+
cookies.signed[queue_it_session_variable(event_id)].to_i
|
19
19
|
end
|
20
20
|
|
21
21
|
def destroy_all_queue_it_sessions
|
22
22
|
session_variable_prefix = queue_it_session_variable("")
|
23
|
-
|
24
|
-
|
23
|
+
cookies.each do |key, _|
|
24
|
+
cookies.signed.delete(key) if key.starts_with?(session_variable_prefix)
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
def destroy_queue_it_session(event_id)
|
29
|
-
|
29
|
+
cookies.signed.delete(queue_it_session_variable(event_id))
|
30
30
|
end
|
31
31
|
|
32
32
|
def queue_it_session_variable(event_id)
|
@@ -37,14 +37,14 @@ module QueueIt
|
|
37
37
|
|
38
38
|
def create_or_verify_queue_it_session(secret_key, event_id, customer_id, request_url, params, current_tickets_url)
|
39
39
|
# If there exists a session, we return. This needs to be refactored when we start to look at the timestamp parameter
|
40
|
-
return if
|
40
|
+
return if cookies.signed[queue_it_session_variable(event_id)].present?
|
41
41
|
|
42
42
|
begin
|
43
43
|
queue_number = QueueIt::ExtractQueueNumber.new.(
|
44
44
|
secret_key: secret_key,
|
45
45
|
request_url: request_url,
|
46
46
|
request_params: params)
|
47
|
-
|
47
|
+
cookies.signed[queue_it_session_variable(event_id)] = { value: queue_number, expires: 24.hours.from_now }
|
48
48
|
|
49
49
|
# If the request URL contains queue_it params we remove them and redirect
|
50
50
|
# this is done to mask the params we use to create and verify the queue_it session
|
data/lib/queue_it/url_builder.rb
CHANGED
@@ -3,11 +3,11 @@ require 'addressable/uri'
|
|
3
3
|
module QueueIt
|
4
4
|
class UrlBuilder
|
5
5
|
def self.build_queue_url(customer_id, event_id, redirect_url)
|
6
|
-
"
|
6
|
+
"https://#{customer_id}.queue-it.net/?c=#{customer_id}&e=#{event_id}&t=#{CGI.escape(redirect_url)}"
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.build_cancel_url(customer_id, event_id, queue_id = nil)
|
10
|
-
"
|
10
|
+
"https://#{customer_id}.queue-it.net/cancel.aspx?c=#{customer_id}&e=#{event_id}&q=#{queue_id}"
|
11
11
|
end
|
12
12
|
|
13
13
|
# Removes all queue_it params from URL
|
data/lib/queue_it/version.rb
CHANGED
data/queue_it.gemspec
CHANGED
@@ -5,7 +5,7 @@ require 'queue_it/api/client'
|
|
5
5
|
module QueueIt
|
6
6
|
module Api
|
7
7
|
describe Client do
|
8
|
-
subject(:client) {
|
8
|
+
subject(:client) { Client.new("customerid", api_key: "SECURE_KEY") }
|
9
9
|
|
10
10
|
specify "PUT data under given endpoint & path in JSON format" do
|
11
11
|
request_hash = { "Request" => true }
|
@@ -71,7 +71,7 @@ module QueueIt
|
|
71
71
|
end
|
72
72
|
|
73
73
|
specify "debugging mode puts to STDOUT" do
|
74
|
-
client = Client.new(api_key: "SECURE_KEY", debug: true)
|
74
|
+
client = Client.new("customerid", api_key: "SECURE_KEY", debug: true)
|
75
75
|
|
76
76
|
request_hash = { "Request" => true }
|
77
77
|
|
@@ -83,7 +83,7 @@ module QueueIt
|
|
83
83
|
private
|
84
84
|
|
85
85
|
def endpoint_url
|
86
|
-
|
86
|
+
"https://customerid.api2.queue-it.net/2_0/event/fancy_event"
|
87
87
|
end
|
88
88
|
|
89
89
|
def stub_request_factory(method: :put, status: 200, request_body: "{}", response_body: "{}", content_type: "application/json")
|
@@ -20,7 +20,7 @@ module QueueIt
|
|
20
20
|
let(:pre_queue_start_time) { Time.new(2015,04,28,15,25,46, "+02:00") }
|
21
21
|
let(:start_time) { Time.new(2015,04,28,17,25,46, "+02:00") }
|
22
22
|
let(:end_time) { Time.new(2015,04,28,21,25,46, "+02:00") }
|
23
|
-
let(:queue_number_validity_in_minutes) {
|
23
|
+
let(:queue_number_validity_in_minutes) { 30 }
|
24
24
|
|
25
25
|
specify "Submits proper request" do
|
26
26
|
expect(client).to receive(:put).with(event_id, valid_create_body).and_return(double(body:{}))
|
@@ -108,12 +108,12 @@ module QueueIt
|
|
108
108
|
end
|
109
109
|
|
110
110
|
specify "Request hits proper endpoint" do
|
111
|
-
client = Client.new(api_key: "SECURE_KEY")
|
111
|
+
client = Client.new("customerid", api_key: "SECURE_KEY")
|
112
112
|
event_adapter = Event.new(client)
|
113
113
|
|
114
114
|
body = JSON.generate(valid_create_body)
|
115
115
|
|
116
|
-
stub = stub_request(:put, "https://api2.queue-it.net/2_0/event/fancyevent")
|
116
|
+
stub = stub_request(:put, "https://customerid.api2.queue-it.net/2_0/event/fancyevent")
|
117
117
|
.with(body: body, headers: headers)
|
118
118
|
|
119
119
|
event_adapter.create_or_update(event_id: event_id,
|
@@ -146,7 +146,6 @@ module QueueIt
|
|
146
146
|
"QueueNumberValidityInMinutes" => "#{queue_number_validity_in_minutes}",
|
147
147
|
"AfterEventLogic" => "RedirectUsersToTargetPage",
|
148
148
|
"AfterEventRedirectPage" => "",
|
149
|
-
"UseSSL" => "Auto",
|
150
149
|
"JavaScriptSupportEnabled" => "False",
|
151
150
|
"TargetUrlSupportEnabled" => "True",
|
152
151
|
"SafetyNetMode" => "Disabled",
|
@@ -165,13 +164,13 @@ module QueueIt
|
|
165
164
|
end
|
166
165
|
|
167
166
|
context "#set_speed" do
|
168
|
-
let(:client) { Client.new(api_key: "SECURE_KEY") }
|
167
|
+
let(:client) { Client.new("customerid", api_key: "SECURE_KEY") }
|
169
168
|
let(:max_redirects_per_minute) { 15 }
|
170
169
|
|
171
170
|
specify "Proper speed value is set" do
|
172
171
|
body = { "MaxRedirectsPerMinute" => "15" }
|
173
172
|
|
174
|
-
stub = stub_request(:put, "https://api2.queue-it.net/2_0/event/fancyevent/queue/speed")
|
173
|
+
stub = stub_request(:put, "https://customerid.api2.queue-it.net/2_0/event/fancyevent/queue/speed")
|
175
174
|
.with(body: body, headers: headers)
|
176
175
|
|
177
176
|
event_adapter.set_speed(event_id: event_id, max_redirects_per_minute: max_redirects_per_minute)
|
@@ -182,7 +181,7 @@ module QueueIt
|
|
182
181
|
specify "Speed must be greater than 5 so we send at least 5" do
|
183
182
|
expected_body = { "MaxRedirectsPerMinute" => "5" }
|
184
183
|
|
185
|
-
stub = stub_request(:put, "https://api2.queue-it.net/2_0/event/fancyevent/queue/speed")
|
184
|
+
stub = stub_request(:put, "https://customerid.api2.queue-it.net/2_0/event/fancyevent/queue/speed")
|
186
185
|
.with(body: expected_body, headers: headers)
|
187
186
|
|
188
187
|
event_adapter.set_speed(event_id: event_id, max_redirects_per_minute: 1)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: queue_it
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Billetto
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-07-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -28,42 +28,42 @@ dependencies:
|
|
28
28
|
name: faraday
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.9'
|
34
31
|
- - "<="
|
35
32
|
- !ruby/object:Gem::Version
|
36
33
|
version: '2.0'
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '0.9'
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0.9'
|
44
41
|
- - "<="
|
45
42
|
- !ruby/object:Gem::Version
|
46
43
|
version: '2.0'
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.9'
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: faraday_middleware
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: '0.9'
|
54
51
|
- - "<="
|
55
52
|
- !ruby/object:Gem::Version
|
56
53
|
version: '2.0'
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0.9'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
|
-
- - ">="
|
62
|
-
- !ruby/object:Gem::Version
|
63
|
-
version: '0.9'
|
64
61
|
- - "<="
|
65
62
|
- !ruby/object:Gem::Version
|
66
63
|
version: '2.0'
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0.9'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: bundler
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,14 +98,14 @@ dependencies:
|
|
98
98
|
requirements:
|
99
99
|
- - "~>"
|
100
100
|
- !ruby/object:Gem::Version
|
101
|
-
version: '
|
101
|
+
version: '3.3'
|
102
102
|
type: :development
|
103
103
|
prerelease: false
|
104
104
|
version_requirements: !ruby/object:Gem::Requirement
|
105
105
|
requirements:
|
106
106
|
- - "~>"
|
107
107
|
- !ruby/object:Gem::Version
|
108
|
-
version: '
|
108
|
+
version: '3.3'
|
109
109
|
description: Gem to handle the implementation of http://queue-it.net!
|
110
110
|
email:
|
111
111
|
- development@billetto.dk
|
@@ -114,6 +114,8 @@ extensions: []
|
|
114
114
|
extra_rdoc_files: []
|
115
115
|
files:
|
116
116
|
- ".gitignore"
|
117
|
+
- ".rbenv-gemsets"
|
118
|
+
- ".ruby-version"
|
117
119
|
- CHANGELOG.md
|
118
120
|
- Gemfile
|
119
121
|
- LICENSE.txt
|
@@ -154,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
156
|
- !ruby/object:Gem::Version
|
155
157
|
version: '0'
|
156
158
|
requirements: []
|
157
|
-
rubygems_version: 3.
|
159
|
+
rubygems_version: 3.1.2
|
158
160
|
signing_key:
|
159
161
|
specification_version: 4
|
160
162
|
summary: Gem to handle the implementation of http://queue-it.net
|