queue_it 1.1.8 → 3.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c485ac9dd1277900f3ed127d294b5d54afcb27d3d79f80cd7fe54c668079c28f
4
- data.tar.gz: 407a76048056f086591bd4fcd3088acb94f94be010f50937b0a645248258d497
3
+ metadata.gz: 37fa1c47d1ae47fffa2b3bc9b78dad1a983356b232329d8016ea14a6d0a2ecd2
4
+ data.tar.gz: e2a72cd51b72e2da2ae74f388924e59e4c2664977d8d826d2b35d1a646f4a519
5
5
  SHA512:
6
- metadata.gz: 26ccccd935d7770cddfc276e3944be5664362969187b1967db1b9a239bedbd7f69e0f44bb021a8d4c40a826262b7545908ff3606eca47b5347184044e433af4b
7
- data.tar.gz: 54df44820c6b12d1a9469f4187f8204dee202f898cf47ef60935aee262ad09fba40cb58937d65f27d6ffe92108adb6ea8371c0d2e5ce05249ee98b852df496d6
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
@@ -80,7 +80,7 @@ end
80
80
  Initialize client to pass it as a dependency to `Event` instance.
81
81
 
82
82
  ``` ruby
83
- client = QueueIt::Api::Client.new(api_key: "SECRET_API_KEY")
83
+ client = QueueIt::Api::Client.new("YOUR_CUSTOMER_ID", api_key: "SECRET_API_KEY")
84
84
  ```
85
85
 
86
86
  #### Event
@@ -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: ENDPOINT_URL.dup,
29
+ url: endpoint.dup,
29
30
  headers: {
30
31
  accept: JSON_FORMAT,
31
32
  content_type: JSON_FORMAT,
@@ -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: 15)
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" => "1",
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" => "Default layout by Queue-it",
122
+ "CustomLayout" => custom_layout,
121
123
  "XUsersInFrontOfYou" => nil,
122
124
  "TargetUrlValidationRegex" => "",
123
125
  "DomainAlias" => "",
@@ -15,18 +15,18 @@ module QueueIt
15
15
  end
16
16
 
17
17
  def queue_it_queue_id(event_id)
18
- session[queue_it_session_variable(event_id)].to_i
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
- session.keys.select{ |session_key| session_key.start_with?(session_variable_prefix) }.each do |key|
24
- session.delete(key)
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
- session.delete(queue_it_session_variable(event_id))
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 session[queue_it_session_variable(event_id)].present?
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
- session[queue_it_session_variable(event_id)] = queue_number
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
@@ -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
- "http://q.queue-it.net/?c=#{customer_id}&e=#{event_id}&t=#{CGI.escape(redirect_url)}"
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
- "http://q.queue-it.net/cancel.aspx?c=#{customer_id}&e=#{event_id}&q=#{queue_id}"
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
@@ -1,3 +1,3 @@
1
1
  module QueueIt
2
- VERSION = "1.1.8"
2
+ VERSION = "3.0.0"
3
3
  end
data/queue_it.gemspec CHANGED
@@ -24,5 +24,5 @@ Gem::Specification.new do |spec|
24
24
 
25
25
  spec.add_development_dependency "bundler", "~> 1.3"
26
26
  spec.add_development_dependency "rspec", "~> 3.2"
27
- spec.add_development_dependency "webmock", "~> 1.21"
27
+ spec.add_development_dependency "webmock", "~> 3.3"
28
28
  end
@@ -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) { described_class.new(api_key: "SECURE_KEY") }
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
- Client::ENDPOINT_URL.to_s + "/fancy_event"
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) { 15 }
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: 1.1.8
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: 2020-09-23 00:00:00.000000000 Z
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: '1.21'
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: '1.21'
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.0.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