stream_sampler 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 (54) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +17 -0
  4. data/Rakefile +28 -0
  5. data/lib/stream_sampler.rb +54 -0
  6. data/lib/stream_sampler/version.rb +3 -0
  7. data/lib/tasks/stream_sampler_tasks.rake +4 -0
  8. data/test/dummy/README.rdoc +28 -0
  9. data/test/dummy/Rakefile +6 -0
  10. data/test/dummy/app/assets/javascripts/application.js +13 -0
  11. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  12. data/test/dummy/app/controllers/application_controller.rb +5 -0
  13. data/test/dummy/app/helpers/application_helper.rb +2 -0
  14. data/test/dummy/app/models/user.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/bin/setup +29 -0
  20. data/test/dummy/config.ru +4 -0
  21. data/test/dummy/config/application.rb +26 -0
  22. data/test/dummy/config/boot.rb +5 -0
  23. data/test/dummy/config/database.yml +25 -0
  24. data/test/dummy/config/environment.rb +5 -0
  25. data/test/dummy/config/environments/development.rb +41 -0
  26. data/test/dummy/config/environments/production.rb +79 -0
  27. data/test/dummy/config/environments/test.rb +42 -0
  28. data/test/dummy/config/initializers/assets.rb +11 -0
  29. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  30. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  31. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  32. data/test/dummy/config/initializers/inflections.rb +16 -0
  33. data/test/dummy/config/initializers/mime_types.rb +4 -0
  34. data/test/dummy/config/initializers/session_store.rb +3 -0
  35. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  36. data/test/dummy/config/locales/en.yml +23 -0
  37. data/test/dummy/config/routes.rb +56 -0
  38. data/test/dummy/config/secrets.yml +22 -0
  39. data/test/dummy/db/development.sqlite3 +0 -0
  40. data/test/dummy/db/migrate/20150305003414_create_users.rb +9 -0
  41. data/test/dummy/db/schema.rb +22 -0
  42. data/test/dummy/db/test.sqlite3 +0 -0
  43. data/test/dummy/log/development.log +25 -0
  44. data/test/dummy/log/test.log +3211 -0
  45. data/test/dummy/public/404.html +67 -0
  46. data/test/dummy/public/422.html +67 -0
  47. data/test/dummy/public/500.html +66 -0
  48. data/test/dummy/public/favicon.ico +0 -0
  49. data/test/dummy/test/fixtures/users.yml +7 -0
  50. data/test/dummy/test/models/user_test.rb +7 -0
  51. data/test/stream_sampler_test.rb +43 -0
  52. data/test/stream_sampler_test.rb~ +6 -0
  53. data/test/test_helper.rb +18 -0
  54. metadata +186 -0
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ body {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body>
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
@@ -0,0 +1,7 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ one:
4
+ name: MyString
5
+
6
+ two:
7
+ name: MyString
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class UserTest < ActiveSupport::TestCase
4
+ # test "the truth" do
5
+ # assert true
6
+ # end
7
+ end
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class StreamSamplerTest < ActiveSupport::TestCase
4
+ test "reservoir_sample handles blank and 0 values for n" do
5
+ assert_equal [], StreamSampler.reservoir_sample((1..10).to_a, 0)
6
+ assert_equal [], StreamSampler.reservoir_sample((1..10).to_a, nil)
7
+ end
8
+
9
+ test "reservoir_sample handles sample size greater than stream size" do
10
+ items = (1..10).to_a
11
+ assert_equal items, StreamSampler.reservoir_sample(items, 100)
12
+ end
13
+
14
+ test "reservoir_sample fails on negative sample sizes" do
15
+ assert_raises(ArgumentError) do
16
+ StreamSampler.reservoir_sample((1..10).to_a, -1)
17
+ end
18
+ end
19
+
20
+ test "reservoir_sample produces a sample of at most the specified size" do
21
+ items = (1..100).to_a
22
+ result = StreamSampler.reservoir_sample(items, 10)
23
+ assert_equal 10, result.length
24
+ end
25
+ end
26
+
27
+ class ActsAsSamplableTest < ActiveSupport::TestCase
28
+ def setup
29
+ 100.times do |i|
30
+ base_name = ['alice','bob','charlie','daryl'].sample
31
+ User.create(name: "#{base_name}")
32
+ end
33
+ end
34
+
35
+ test "reservoir_sample works with scopes and clauses" do
36
+ result = User.reservoir_sample(10)
37
+ assert_equal 10, result.length
38
+
39
+ result = User.where(name: 'alice').reservoir_sample(10)
40
+ assert_equal 10, result.length
41
+ assert result.all? { |r| r.name == "alice" }
42
+ end
43
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ class StreamSamplerTest < ActiveSupport::TestCase
4
+ test "stream_sample is a scope" do
5
+ end
6
+ end
@@ -0,0 +1,18 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../../test/dummy/config/environment.rb", __FILE__)
5
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)]
6
+ require "rails/test_help"
7
+
8
+ # Filter out Minitest backtrace while allowing backtrace from other libraries
9
+ # to be shown.
10
+ Minitest.backtrace_filter = Minitest::BacktraceFilter.new
11
+
12
+ # Load support files
13
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
14
+
15
+ # Load fixtures from the engine
16
+ if ActiveSupport::TestCase.respond_to?(:fixture_path=)
17
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
18
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stream_sampler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Tim Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-03-05 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.2.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
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: byebug
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
+ description: Adds scopes to ActiveRecord to allow for biased and weighted random sampling
56
+ from a query.
57
+ email:
58
+ - support@omniref.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - MIT-LICENSE
64
+ - README.md
65
+ - Rakefile
66
+ - lib/stream_sampler.rb
67
+ - lib/stream_sampler/version.rb
68
+ - lib/tasks/stream_sampler_tasks.rake
69
+ - test/dummy/README.rdoc
70
+ - test/dummy/Rakefile
71
+ - test/dummy/app/assets/javascripts/application.js
72
+ - test/dummy/app/assets/stylesheets/application.css
73
+ - test/dummy/app/controllers/application_controller.rb
74
+ - test/dummy/app/helpers/application_helper.rb
75
+ - test/dummy/app/models/user.rb
76
+ - test/dummy/app/views/layouts/application.html.erb
77
+ - test/dummy/bin/bundle
78
+ - test/dummy/bin/rails
79
+ - test/dummy/bin/rake
80
+ - test/dummy/bin/setup
81
+ - test/dummy/config.ru
82
+ - test/dummy/config/application.rb
83
+ - test/dummy/config/boot.rb
84
+ - test/dummy/config/database.yml
85
+ - test/dummy/config/environment.rb
86
+ - test/dummy/config/environments/development.rb
87
+ - test/dummy/config/environments/production.rb
88
+ - test/dummy/config/environments/test.rb
89
+ - test/dummy/config/initializers/assets.rb
90
+ - test/dummy/config/initializers/backtrace_silencers.rb
91
+ - test/dummy/config/initializers/cookies_serializer.rb
92
+ - test/dummy/config/initializers/filter_parameter_logging.rb
93
+ - test/dummy/config/initializers/inflections.rb
94
+ - test/dummy/config/initializers/mime_types.rb
95
+ - test/dummy/config/initializers/session_store.rb
96
+ - test/dummy/config/initializers/wrap_parameters.rb
97
+ - test/dummy/config/locales/en.yml
98
+ - test/dummy/config/routes.rb
99
+ - test/dummy/config/secrets.yml
100
+ - test/dummy/db/development.sqlite3
101
+ - test/dummy/db/migrate/20150305003414_create_users.rb
102
+ - test/dummy/db/schema.rb
103
+ - test/dummy/db/test.sqlite3
104
+ - test/dummy/log/development.log
105
+ - test/dummy/log/test.log
106
+ - test/dummy/public/404.html
107
+ - test/dummy/public/422.html
108
+ - test/dummy/public/500.html
109
+ - test/dummy/public/favicon.ico
110
+ - test/dummy/test/fixtures/users.yml
111
+ - test/dummy/test/models/user_test.rb
112
+ - test/stream_sampler_test.rb
113
+ - test/stream_sampler_test.rb~
114
+ - test/test_helper.rb
115
+ homepage: https://www.omniref.com/ruby/gems/stream_sampler
116
+ licenses:
117
+ - MIT
118
+ metadata: {}
119
+ post_install_message:
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubyforge_project:
135
+ rubygems_version: 2.4.6
136
+ signing_key:
137
+ specification_version: 4
138
+ summary: ActiveRecord scopes to sample randomly from a query result.
139
+ test_files:
140
+ - test/dummy/app/assets/javascripts/application.js
141
+ - test/dummy/app/assets/stylesheets/application.css
142
+ - test/dummy/app/controllers/application_controller.rb
143
+ - test/dummy/app/helpers/application_helper.rb
144
+ - test/dummy/app/models/user.rb
145
+ - test/dummy/app/views/layouts/application.html.erb
146
+ - test/dummy/bin/bundle
147
+ - test/dummy/bin/rails
148
+ - test/dummy/bin/rake
149
+ - test/dummy/bin/setup
150
+ - test/dummy/config/application.rb
151
+ - test/dummy/config/boot.rb
152
+ - test/dummy/config/database.yml
153
+ - test/dummy/config/environment.rb
154
+ - test/dummy/config/environments/development.rb
155
+ - test/dummy/config/environments/production.rb
156
+ - test/dummy/config/environments/test.rb
157
+ - test/dummy/config/initializers/assets.rb
158
+ - test/dummy/config/initializers/backtrace_silencers.rb
159
+ - test/dummy/config/initializers/cookies_serializer.rb
160
+ - test/dummy/config/initializers/filter_parameter_logging.rb
161
+ - test/dummy/config/initializers/inflections.rb
162
+ - test/dummy/config/initializers/mime_types.rb
163
+ - test/dummy/config/initializers/session_store.rb
164
+ - test/dummy/config/initializers/wrap_parameters.rb
165
+ - test/dummy/config/locales/en.yml
166
+ - test/dummy/config/routes.rb
167
+ - test/dummy/config/secrets.yml
168
+ - test/dummy/config.ru
169
+ - test/dummy/db/development.sqlite3
170
+ - test/dummy/db/migrate/20150305003414_create_users.rb
171
+ - test/dummy/db/schema.rb
172
+ - test/dummy/db/test.sqlite3
173
+ - test/dummy/log/development.log
174
+ - test/dummy/log/test.log
175
+ - test/dummy/public/404.html
176
+ - test/dummy/public/422.html
177
+ - test/dummy/public/500.html
178
+ - test/dummy/public/favicon.ico
179
+ - test/dummy/Rakefile
180
+ - test/dummy/README.rdoc
181
+ - test/dummy/test/fixtures/users.yml
182
+ - test/dummy/test/models/user_test.rb
183
+ - test/stream_sampler_test.rb
184
+ - test/stream_sampler_test.rb~
185
+ - test/test_helper.rb
186
+ has_rdoc: