userq 0.0.1

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.
Files changed (46) hide show
  1. checksums.yaml +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +102 -0
  4. data/Rakefile +32 -0
  5. data/lib/generators/userq/install_generator.rb +44 -0
  6. data/lib/generators/userq/templates/migration.rb +12 -0
  7. data/lib/userq.rb +201 -0
  8. data/lib/userq/version.rb +3 -0
  9. data/test/Gemfile.test +5 -0
  10. data/test/dummy/Rakefile +6 -0
  11. data/test/dummy/app/assets/javascripts/application.js +13 -0
  12. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  13. data/test/dummy/app/controllers/application_controller.rb +5 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  16. data/test/dummy/bin/bundle +3 -0
  17. data/test/dummy/bin/rails +4 -0
  18. data/test/dummy/bin/rake +4 -0
  19. data/test/dummy/config.ru +4 -0
  20. data/test/dummy/config/application.rb +23 -0
  21. data/test/dummy/config/boot.rb +5 -0
  22. data/test/dummy/config/database.yml +25 -0
  23. data/test/dummy/config/environment.rb +5 -0
  24. data/test/dummy/config/environments/development.rb +29 -0
  25. data/test/dummy/config/environments/production.rb +80 -0
  26. data/test/dummy/config/environments/test.rb +36 -0
  27. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  28. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  29. data/test/dummy/config/initializers/inflections.rb +16 -0
  30. data/test/dummy/config/initializers/mime_types.rb +5 -0
  31. data/test/dummy/config/initializers/secret_token.rb +12 -0
  32. data/test/dummy/config/initializers/session_store.rb +3 -0
  33. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  34. data/test/dummy/config/locales/en.yml +23 -0
  35. data/test/dummy/config/routes.rb +56 -0
  36. data/test/dummy/db/schema.rb +16 -0
  37. data/test/dummy/db/test.sqlite3 +0 -0
  38. data/test/dummy/log/development.log +414 -0
  39. data/test/dummy/log/test.log +1955 -0
  40. data/test/dummy/public/404.html +58 -0
  41. data/test/dummy/public/422.html +58 -0
  42. data/test/dummy/public/500.html +57 -0
  43. data/test/dummy/public/favicon.ico +0 -0
  44. data/test/test_helper.rb +15 -0
  45. data/test/userq_test.rb +102 -0
  46. metadata +181 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,15 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ Rails.backtrace_cleaner.remove_silencers!
8
+
9
+ # Load support files
10
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.method_defined?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
15
+ end
@@ -0,0 +1,102 @@
1
+ require 'test_helper'
2
+
3
+ class UserqTest < ActiveSupport::TestCase
4
+
5
+
6
+ test "if modules are available" do
7
+ assert_kind_of Module, UserQ, "Module UserQ does not exist"
8
+ assert_kind_of Class, UserQ::Queue, "Class UserQ::Queue does not exist"
9
+ assert_kind_of Class, UserQ::Entry, "Class UserQ::Entry does not exist"
10
+ assert_kind_of Class, UserQ::UserQueue, "Class UserQ::UserQueue does not exist"
11
+ assert_kind_of Class, UserQ::Internal, "Class UserQ::Internal does not exist"
12
+ end
13
+
14
+ test "migration should exist" do
15
+ migration_exists = Dir["test/dummy/db/migrate/*_create_user_queues.rb"].count > 0
16
+ assert migration_exists, "migration file for UserQ does not exist"
17
+ end
18
+
19
+ test "should be able to create instance of a queue" do
20
+ assert_instance_of UserQ::Queue, UserQ::Queue.new(context: 'test', capacity: 5, taken: 2, entry_time: 5, auto_clean: true), "Instance of UserQ::Queue could not be created"
21
+ end
22
+
23
+ test "should be able to access existing entry under same context" do
24
+ instance = UserQ::Queue.new(context: 'test', capacity: 5, taken: 2, entry_time: 5, auto_clean: true)
25
+ instance.reset
26
+ code_for_created_entry = instance.enter.code
27
+
28
+ assert UserQ::Entry.new(code_for_created_entry).entry.context == "test", "New entry in Queue could not be recognized as UserQ::Entry"
29
+ end
30
+
31
+ test "should NOT be able to access existing entry under different context" do
32
+ instance = UserQ::Queue.new(context: 'test', capacity: 5, taken: 2, entry_time: 5, auto_clean: true)
33
+ instance.reset
34
+ code_for_created_entry = instance.enter.code
35
+
36
+ assert_not UserQ::Entry.new(code_for_created_entry).entry.context == "not_a_test", "New entry in Queue is recognized a different context (should not happen)"
37
+ end
38
+
39
+ test "should not allow more than 5 requests" do
40
+ instance = UserQ::Queue.new(context: 'test', capacity: 5, taken: 0, entry_time: 5, auto_clean: true)
41
+ instance.reset
42
+
43
+ 5.times do
44
+ instance.enter
45
+ end
46
+
47
+ assert_not instance.enter, "More than 5 Queue entries are being allowed (when 5 was a defined limit)"
48
+ end
49
+
50
+ test "should not allow more than 5 requests with 2 already taken" do
51
+ instance = UserQ::Queue.new(context: 'test', capacity: 5, taken: 2, entry_time: 5, auto_clean: true)
52
+ instance.reset
53
+
54
+ 3.times do
55
+ instance.enter
56
+ end
57
+
58
+ assert_not instance.enter, "More than 3 Queue entries are being allowed (when 5 was a defined limit with 2 already taken)"
59
+ end
60
+
61
+ test "average wait time should be rightly calculated" do
62
+ instance = UserQ::Queue.new(context: 'test', capacity: 5, entry_time: 10, auto_clean: true)
63
+ instance.reset
64
+
65
+ 5.times { instance.enter }
66
+ assert_not instance.enter_into_queue?, "was not able to enter queue"
67
+
68
+ # average wait time should be 10 seconds
69
+ # well, 9 seconds.
70
+ assert_equal "Less than 30 seconds", instance.avg_wait_time
71
+ assert_equal 9, instance.nearest_entry
72
+
73
+ # now for longer time
74
+ instance = UserQ::Queue.new(context: 'test', capacity: 5, entry_time: 150, auto_clean: true)
75
+ instance.reset
76
+
77
+ 5.times { instance.enter }
78
+
79
+ # average wait time should be 150 seconds (aka 2 minutes rounded down)
80
+ # well, 149 seconds.
81
+ assert_equal "approximately 2 minutes", instance.avg_wait_time
82
+ assert_equal 149, instance.nearest_entry
83
+ end
84
+
85
+ test "queue should be closed and then re-opened after time expires" do
86
+ instance = UserQ::Queue.new(context: 'test', capacity: 1, entry_time: 5, auto_clean: true)
87
+ instance.reset
88
+ assert instance.enter_into_queue?, "Was not able to enter into queue"
89
+
90
+ entry = instance.enter
91
+ assert_not instance.enter_into_queue?, "Was able to enter in queue before 1 capacity had expired"
92
+
93
+ entry.expire # Should be expired.
94
+ assert entry.expired?, "Entry not considered expired"
95
+
96
+ entry.shorten(5) # Should again be expired.
97
+ assert entry.expired?, "Entry not considered expired"
98
+
99
+ assert instance.enter_into_queue?, "Was not able to re-enter into queue"
100
+ end
101
+
102
+ end
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: userq
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bilawal Hameed
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.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: sqlite3
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: json
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: Designed to improve user experience, UserQ helps you queue users until
70
+ space is available in the queue. Example usage is ticket sales.
71
+ email:
72
+ - bilawal@studenthack.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - lib/generators/userq/install_generator.rb
78
+ - lib/generators/userq/templates/migration.rb
79
+ - lib/userq/version.rb
80
+ - lib/userq.rb
81
+ - MIT-LICENSE
82
+ - Rakefile
83
+ - README.md
84
+ - test/dummy/app/assets/javascripts/application.js
85
+ - test/dummy/app/assets/stylesheets/application.css
86
+ - test/dummy/app/controllers/application_controller.rb
87
+ - test/dummy/app/helpers/application_helper.rb
88
+ - test/dummy/app/views/layouts/application.html.erb
89
+ - test/dummy/bin/bundle
90
+ - test/dummy/bin/rails
91
+ - test/dummy/bin/rake
92
+ - test/dummy/config/application.rb
93
+ - test/dummy/config/boot.rb
94
+ - test/dummy/config/database.yml
95
+ - test/dummy/config/environment.rb
96
+ - test/dummy/config/environments/development.rb
97
+ - test/dummy/config/environments/production.rb
98
+ - test/dummy/config/environments/test.rb
99
+ - test/dummy/config/initializers/backtrace_silencers.rb
100
+ - test/dummy/config/initializers/filter_parameter_logging.rb
101
+ - test/dummy/config/initializers/inflections.rb
102
+ - test/dummy/config/initializers/mime_types.rb
103
+ - test/dummy/config/initializers/secret_token.rb
104
+ - test/dummy/config/initializers/session_store.rb
105
+ - test/dummy/config/initializers/wrap_parameters.rb
106
+ - test/dummy/config/locales/en.yml
107
+ - test/dummy/config/routes.rb
108
+ - test/dummy/config.ru
109
+ - test/dummy/db/schema.rb
110
+ - test/dummy/db/test.sqlite3
111
+ - test/dummy/log/development.log
112
+ - test/dummy/log/test.log
113
+ - test/dummy/public/404.html
114
+ - test/dummy/public/422.html
115
+ - test/dummy/public/500.html
116
+ - test/dummy/public/favicon.ico
117
+ - test/dummy/Rakefile
118
+ - test/Gemfile.test
119
+ - test/test_helper.rb
120
+ - test/userq_test.rb
121
+ homepage: http://studenthack.github.io/userq
122
+ licenses: []
123
+ metadata: {}
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ! '>='
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubyforge_project:
140
+ rubygems_version: 2.1.9
141
+ signing_key:
142
+ specification_version: 4
143
+ summary: Lightweight user-based queue for Rails.
144
+ test_files:
145
+ - test/dummy/app/assets/javascripts/application.js
146
+ - test/dummy/app/assets/stylesheets/application.css
147
+ - test/dummy/app/controllers/application_controller.rb
148
+ - test/dummy/app/helpers/application_helper.rb
149
+ - test/dummy/app/views/layouts/application.html.erb
150
+ - test/dummy/bin/bundle
151
+ - test/dummy/bin/rails
152
+ - test/dummy/bin/rake
153
+ - test/dummy/config/application.rb
154
+ - test/dummy/config/boot.rb
155
+ - test/dummy/config/database.yml
156
+ - test/dummy/config/environment.rb
157
+ - test/dummy/config/environments/development.rb
158
+ - test/dummy/config/environments/production.rb
159
+ - test/dummy/config/environments/test.rb
160
+ - test/dummy/config/initializers/backtrace_silencers.rb
161
+ - test/dummy/config/initializers/filter_parameter_logging.rb
162
+ - test/dummy/config/initializers/inflections.rb
163
+ - test/dummy/config/initializers/mime_types.rb
164
+ - test/dummy/config/initializers/secret_token.rb
165
+ - test/dummy/config/initializers/session_store.rb
166
+ - test/dummy/config/initializers/wrap_parameters.rb
167
+ - test/dummy/config/locales/en.yml
168
+ - test/dummy/config/routes.rb
169
+ - test/dummy/config.ru
170
+ - test/dummy/db/schema.rb
171
+ - test/dummy/db/test.sqlite3
172
+ - test/dummy/log/development.log
173
+ - test/dummy/log/test.log
174
+ - test/dummy/public/404.html
175
+ - test/dummy/public/422.html
176
+ - test/dummy/public/500.html
177
+ - test/dummy/public/favicon.ico
178
+ - test/dummy/Rakefile
179
+ - test/Gemfile.test
180
+ - test/test_helper.rb
181
+ - test/userq_test.rb