queue_it 0.0.1 → 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 80302e4595250a93745ae5cdde295cc1ef9c4dfe
4
+ data.tar.gz: 98f55674bca1f8d64ea1ea35b3cc0f9f14096cd5
5
+ SHA512:
6
+ metadata.gz: 734e01bc853574e3e963c60212debdc7ce9ea33e87cdb2d6b9619d7aecef8de31994a8aa7c2559935478ee0bae6a8825ecdcce1b3cc0ea90169ede943c798535
7
+ data.tar.gz: f86d410b4b320462e8aaa82c702ac1c1ef6eb700ec00117f212e9b2a132ef51d825cc734d52445544e7ccb4e9b21eb6c6766c806d2ba1e22e8696d4bb4c1755e
data/README.md CHANGED
@@ -1,24 +1,78 @@
1
1
  # QueueIt
2
2
 
3
- TODO: Write a gem description
3
+ This is a gem for integrating Ruby on Rails with Queue-it that is an online queuing system, https://queue-it.com/
4
4
 
5
5
  ## Installation
6
6
 
7
7
  Add this line to your application's Gemfile:
8
8
 
9
- gem 'queue_it'
9
+ ```ruby
10
+ gem 'queue_it'
11
+ ```
10
12
 
11
13
  And then execute:
12
14
 
13
- $ bundle
15
+ ```
16
+ $ bundle
17
+ ```
14
18
 
15
19
  Or install it yourself as:
16
20
 
17
- $ gem install queue_it
21
+ ```
22
+ $ gem install queue_it
23
+ ```
18
24
 
19
25
  ## Usage
20
26
 
21
- TODO: Write usage instructions here
27
+ We are using Queue-it on http://billetto.co.ok, and we create our queued events like this:
28
+
29
+ ```ruby
30
+ event = create(:event,
31
+ :queue_it_enabled => true,
32
+ :queue_it_customer_id => 'billettodk',
33
+ :queue_it_event_id => 'rainmaking',
34
+ :queue_it_known_user_secret_key => 'asdfbmnwqeklrj'
35
+ )
36
+ ```
37
+
38
+ In our Event-model, we determine whether or not its queue-enabled:
39
+
40
+ ```ruby
41
+ class Event < ActiveRecord::Base
42
+ def queue_enabled?
43
+ queue_it_enabled? &&
44
+ queue_it_customer_id.present? &&
45
+ queue_it_event_id.present? &&
46
+ queue_it_known_user_secret_key.present?
47
+ end
48
+ end
49
+ ```
50
+
51
+ For us, our precious actions are all about tickets, so we protect these actions like this:
52
+
53
+ ```ruby
54
+ class EventsController < ApplicationController
55
+ include QueueIt::Queueable
56
+
57
+ def tickets
58
+ event = Event.find(params[:id])
59
+
60
+ if event.queue_enabled?
61
+ protect_with_queue!(event.queue_it_known_user_secret_key,
62
+ event.queue_it_event_id,
63
+ event.queue_it_customer_id)
64
+ # We use performed to see if our queue protection have rendered something,
65
+ # if it has rendered stop all other execution
66
+ return if performed?
67
+ end
68
+ end
69
+
70
+ def receipt
71
+ # The user has bought his/her tickets, push them out of the queue
72
+ destroy_all_queue_it_sessions
73
+ end
74
+ end
75
+ ```
22
76
 
23
77
  ## Contributing
24
78
 
@@ -3,6 +3,14 @@ module QueueIt
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
+ def protect_with_queue!(known_user_secret_key, event_id, customer_id)
7
+ create_or_verify_queue_it_session(known_user_secret_key,
8
+ event_id,
9
+ customer_id,
10
+ request.url,
11
+ params)
12
+ end
13
+
6
14
  def queue_it_queue_id(event_id)
7
15
  session[queue_it_session_variable(event_id)].to_i
8
16
  end
@@ -16,6 +24,12 @@ module QueueIt
16
24
  session.delete(queue_it_session_variable(event_id))
17
25
  end
18
26
 
27
+ def queue_it_session_variable(event_id)
28
+ "KnownQueueItUser-#{event_id}"
29
+ end
30
+
31
+ private
32
+
19
33
  def create_or_verify_queue_it_session(secret_key, event_id, customer_id, request_url, params)
20
34
  # If there exists a session, we return. This needs to be refactored when we start to look at the timestamp parameter
21
35
  return if session[queue_it_session_variable(event_id)].present?
@@ -31,16 +45,13 @@ module QueueIt
31
45
  end
32
46
  rescue QueueIt::MissingArgsGiven
33
47
  queue_url = QueueIt::UrlBuilder.build_queue_url(customer_id, event_id)
48
+ destroy_all_queue_it_sessions
34
49
  render("queue_it/enter_queue", layout: false, locals: { queue_it_url: queue_url }) and return
35
50
  rescue QueueIt::NotAuthorized
36
51
  queue_cancel_url = QueueIt::UrlBuilder.build_cancel_url(customer_id, event_id)
52
+ destroy_all_queue_it_sessions
37
53
  render("queue_it/cheating_queue", layout: false, locals: { queue_it_url: queue_cancel_url }) and return
38
54
  end
39
-
40
- end
41
-
42
- def queue_it_session_variable(event_id)
43
- "KnownQueueItUser-#{event_id}"
44
55
  end
45
56
 
46
57
  end
@@ -1,3 +1,3 @@
1
1
  module QueueIt
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/queue_it.gemspec CHANGED
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
+ spec.add_runtime_dependency 'addressable'
22
+
21
23
  spec.add_development_dependency "bundler", "~> 1.3"
22
24
  spec.add_development_dependency "rake"
23
25
  end
metadata CHANGED
@@ -1,20 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: queue_it
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Kasper Grubbe
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-03-06 00:00:00.000000000 Z
11
+ date: 2014-11-06 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: addressable
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'
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: bundler
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
31
  - - ~>
20
32
  - !ruby/object:Gem::Version
@@ -22,7 +34,6 @@ dependencies:
22
34
  type: :development
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
38
  - - ~>
28
39
  - !ruby/object:Gem::Version
@@ -30,17 +41,15 @@ dependencies:
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: rake
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ! '>='
45
+ - - '>='
36
46
  - !ruby/object:Gem::Version
37
47
  version: '0'
38
48
  type: :development
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ! '>='
52
+ - - '>='
44
53
  - !ruby/object:Gem::Version
45
54
  version: '0'
46
55
  description: Gem to handle the implementation of http://queue-it.net!
@@ -67,26 +76,25 @@ files:
67
76
  homepage: https://github.com/gfish/queue_it
68
77
  licenses:
69
78
  - GNU/GPLv3
79
+ metadata: {}
70
80
  post_install_message:
71
81
  rdoc_options: []
72
82
  require_paths:
73
83
  - lib
74
84
  required_ruby_version: !ruby/object:Gem::Requirement
75
- none: false
76
85
  requirements:
77
- - - ! '>='
86
+ - - '>='
78
87
  - !ruby/object:Gem::Version
79
88
  version: '0'
80
89
  required_rubygems_version: !ruby/object:Gem::Requirement
81
- none: false
82
90
  requirements:
83
- - - ! '>='
91
+ - - '>='
84
92
  - !ruby/object:Gem::Version
85
93
  version: '0'
86
94
  requirements: []
87
95
  rubyforge_project:
88
- rubygems_version: 1.8.23
96
+ rubygems_version: 2.0.14
89
97
  signing_key:
90
- specification_version: 3
98
+ specification_version: 4
91
99
  summary: Gem to handle the implementation of http://queue-it.net
92
100
  test_files: []