plain_search 0.1.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.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +135 -0
  4. data/Rakefile +34 -0
  5. data/lib/plain_search.rb +6 -0
  6. data/lib/plain_search/concern.rb +186 -0
  7. data/lib/plain_search/railtie.rb +13 -0
  8. data/lib/plain_search/version.rb +3 -0
  9. data/lib/tasks/plain_search.rake +19 -0
  10. data/test/dummy/README.rdoc +28 -0
  11. data/test/dummy/Rakefile +6 -0
  12. data/test/dummy/app/assets/javascripts/application.js +13 -0
  13. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  14. data/test/dummy/app/controllers/application_controller.rb +5 -0
  15. data/test/dummy/app/helpers/application_helper.rb +2 -0
  16. data/test/dummy/app/models/company.rb +3 -0
  17. data/test/dummy/app/models/dossier.rb +2 -0
  18. data/test/dummy/app/models/employee.rb +3 -0
  19. data/test/dummy/app/models/search_term.rb +3 -0
  20. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  21. data/test/dummy/bin/bundle +3 -0
  22. data/test/dummy/bin/rails +4 -0
  23. data/test/dummy/bin/rake +4 -0
  24. data/test/dummy/bin/setup +29 -0
  25. data/test/dummy/config.ru +4 -0
  26. data/test/dummy/config/application.rb +26 -0
  27. data/test/dummy/config/boot.rb +5 -0
  28. data/test/dummy/config/database.yml +25 -0
  29. data/test/dummy/config/environment.rb +5 -0
  30. data/test/dummy/config/environments/development.rb +41 -0
  31. data/test/dummy/config/environments/production.rb +79 -0
  32. data/test/dummy/config/environments/test.rb +42 -0
  33. data/test/dummy/config/initializers/assets.rb +11 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  36. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  37. data/test/dummy/config/initializers/inflections.rb +16 -0
  38. data/test/dummy/config/initializers/mime_types.rb +4 -0
  39. data/test/dummy/config/initializers/session_store.rb +3 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +23 -0
  42. data/test/dummy/config/routes.rb +56 -0
  43. data/test/dummy/config/secrets.yml +22 -0
  44. data/test/dummy/db/development.sqlite3 +0 -0
  45. data/test/dummy/db/migrate/20151013022315_create_base_tables.rb +32 -0
  46. data/test/dummy/db/schema.rb +47 -0
  47. data/test/dummy/db/test.sqlite3 +0 -0
  48. data/test/dummy/log/development.log +340 -0
  49. data/test/dummy/log/test.log +3615 -0
  50. data/test/dummy/public/404.html +67 -0
  51. data/test/dummy/public/422.html +67 -0
  52. data/test/dummy/public/500.html +66 -0
  53. data/test/dummy/public/favicon.ico +0 -0
  54. data/test/plain_search_test.rb +136 -0
  55. data/test/test_helper.rb +19 -0
  56. metadata +176 -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,136 @@
1
+ require 'test_helper'
2
+
3
+ class PlainSearchTest < ActiveSupport::TestCase
4
+
5
+ def setup
6
+
7
+ @acme = Company.create!(name: 'ACME')
8
+ @initec = Company.create!(name: 'IniTec')
9
+
10
+ @andreas = Employee.create!(
11
+ company: @acme,
12
+ first_name: 'Andreas',
13
+ last_name: 'Baumgart',
14
+ address: 'Adalbertstr. 8',
15
+ zip_code: '10999',
16
+ city: 'Berlin',
17
+ phone: '00491731234567',
18
+ email: 'andreas@polycast.de',
19
+ profession: 'Web Developer',
20
+ )
21
+
22
+ @oskar = Employee.create!(
23
+ company: @acme,
24
+ first_name: 'Oskar',
25
+ last_name: 'Entenweich',
26
+ address: 'Hauptstrasse 10',
27
+ zip_code: '33602',
28
+ city: 'Bielefeld',
29
+ phone: '00491791234501',
30
+ email: 'oskar@polycast.de',
31
+ profession: 'Visual Artist',
32
+ )
33
+
34
+ @sebastian = Employee.create!(
35
+ company: @initec,
36
+ first_name: 'Sebastian',
37
+ last_name: 'Sorglos',
38
+ address: 'Auf dem Holzweg 1',
39
+ zip_code: '33602',
40
+ city: 'Bielefeld',
41
+ phone: '00491791234501',
42
+ email: 'oskar@polycast.de',
43
+ profession: 'Administrator',
44
+ )
45
+
46
+ @susi = Employee.create!(
47
+ company: @initec,
48
+ first_name: 'Susi',
49
+ last_name: 'Sorglos',
50
+ address: 'Hauptstrasse 10',
51
+ zip_code: '33602',
52
+ city: 'Bielefeld',
53
+ phone: '00491791234502',
54
+ email: 'oskar@polycast.de',
55
+ profession: 'Mobile Developer',
56
+ )
57
+
58
+ @dossier_1 = Dossier.create!(filename: 'susi-cv.pdf')
59
+ @dossier_2 = Dossier.create!(filename: 'susi-portfolio.pdf')
60
+ @dossier_3 = Dossier.create!(filename: 'sebastian.pdf')
61
+ @dossier_4 = Dossier.create!(filename: 'oskar-cv.doc')
62
+ @dossier_5 = Dossier.create!(filename: 'andreas-cv.doc')
63
+ @dossier_6 = Dossier.create!(filename: 'oskar-portfolio.doc')
64
+
65
+ end
66
+
67
+ def test_by_example
68
+
69
+ Employee.searchable_by company_name: 50, first_name: 10, last_name: 10, profession: 5, address: 1, zip_code: 1, city: 1
70
+ Employee.rebuild_search_terms_for_all
71
+
72
+ assert Employee.searchable_attributes.present?
73
+
74
+ results = Employee.search('susi sorglos 33602 hauptstrasse developer')
75
+
76
+ # first_name: 10
77
+ # last_name: 10
78
+ # profession: 5
79
+ # zip_code: 1
80
+ # address: 1
81
+ # -----------
82
+ # total: 27
83
+ assert_equal results[0], @susi
84
+ assert_equal 27, results[0].score
85
+
86
+ # last_name: 10
87
+ # zip_code: 1
88
+ # -----------
89
+ # total: 11
90
+ assert_equal results[1], @sebastian
91
+ assert_equal 11, results[1].score
92
+
93
+ # profession: 5
94
+ # -----------
95
+ # total: 5
96
+ assert_equal results[2], @andreas
97
+ assert_equal 5, results[2].score
98
+
99
+ # address: 1
100
+ # zip_code: 1
101
+ # -----------
102
+ # total: 2
103
+ assert_equal results[3], @oskar
104
+ assert_equal 2, results[3].score
105
+
106
+
107
+ Dossier.searchable_by :filename
108
+ Dossier.rebuild_search_terms_for_all
109
+ Dossier.search_terms_delimiter = /[\-.]/
110
+
111
+ results = Dossier.search('susi portfolio pdf')
112
+
113
+ assert_equal results.size, 4
114
+ assert_equal results[0], @dossier_2
115
+ assert_equal results[1], @dossier_1
116
+ assert_equal results[2], @dossier_3
117
+ assert_equal results[3], @dossier_6
118
+
119
+ results = Employee.search('susi initec')
120
+ assert_equal results.size, 2
121
+
122
+ # company_name: 50
123
+ # first_name: 10
124
+ # -----------
125
+ # total: 60
126
+ assert_equal results[0], @susi
127
+ assert_equal 60, results[0].score
128
+
129
+ # company_name: 50
130
+ # -----------
131
+ # total: 50
132
+ assert_equal results[1], @sebastian
133
+ assert_equal 50, results[1].score
134
+
135
+ end
136
+ end
@@ -0,0 +1,19 @@
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
+ ActiveSupport::TestCase.fixtures :all
19
+ end
metadata ADDED
@@ -0,0 +1,176 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: plain_search
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Andreas Baumgart
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-11-08 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.3
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.3
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
+ description: A simple scored search plugin for ActiveRecord models. Suited for small
42
+ projects with little needs for scalability and a reserved attitude towards technical
43
+ debt (i.e. ElasticSearch, Solr, ...).
44
+ email:
45
+ - andreas@baumgart.software
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - MIT-LICENSE
51
+ - README.md
52
+ - Rakefile
53
+ - lib/plain_search.rb
54
+ - lib/plain_search/concern.rb
55
+ - lib/plain_search/railtie.rb
56
+ - lib/plain_search/version.rb
57
+ - lib/tasks/plain_search.rake
58
+ - test/dummy/README.rdoc
59
+ - test/dummy/Rakefile
60
+ - test/dummy/app/assets/javascripts/application.js
61
+ - test/dummy/app/assets/stylesheets/application.css
62
+ - test/dummy/app/controllers/application_controller.rb
63
+ - test/dummy/app/helpers/application_helper.rb
64
+ - test/dummy/app/models/company.rb
65
+ - test/dummy/app/models/dossier.rb
66
+ - test/dummy/app/models/employee.rb
67
+ - test/dummy/app/models/search_term.rb
68
+ - test/dummy/app/views/layouts/application.html.erb
69
+ - test/dummy/bin/bundle
70
+ - test/dummy/bin/rails
71
+ - test/dummy/bin/rake
72
+ - test/dummy/bin/setup
73
+ - test/dummy/config.ru
74
+ - test/dummy/config/application.rb
75
+ - test/dummy/config/boot.rb
76
+ - test/dummy/config/database.yml
77
+ - test/dummy/config/environment.rb
78
+ - test/dummy/config/environments/development.rb
79
+ - test/dummy/config/environments/production.rb
80
+ - test/dummy/config/environments/test.rb
81
+ - test/dummy/config/initializers/assets.rb
82
+ - test/dummy/config/initializers/backtrace_silencers.rb
83
+ - test/dummy/config/initializers/cookies_serializer.rb
84
+ - test/dummy/config/initializers/filter_parameter_logging.rb
85
+ - test/dummy/config/initializers/inflections.rb
86
+ - test/dummy/config/initializers/mime_types.rb
87
+ - test/dummy/config/initializers/session_store.rb
88
+ - test/dummy/config/initializers/wrap_parameters.rb
89
+ - test/dummy/config/locales/en.yml
90
+ - test/dummy/config/routes.rb
91
+ - test/dummy/config/secrets.yml
92
+ - test/dummy/db/development.sqlite3
93
+ - test/dummy/db/migrate/20151013022315_create_base_tables.rb
94
+ - test/dummy/db/schema.rb
95
+ - test/dummy/db/test.sqlite3
96
+ - test/dummy/log/development.log
97
+ - test/dummy/log/test.log
98
+ - test/dummy/public/404.html
99
+ - test/dummy/public/422.html
100
+ - test/dummy/public/500.html
101
+ - test/dummy/public/favicon.ico
102
+ - test/plain_search_test.rb
103
+ - test/test_helper.rb
104
+ homepage: https://github.com/polycaster/plain_search
105
+ licenses:
106
+ - MIT
107
+ metadata: {}
108
+ post_install_message:
109
+ rdoc_options: []
110
+ require_paths:
111
+ - lib
112
+ required_ruby_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ required_rubygems_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ requirements: []
123
+ rubyforge_project:
124
+ rubygems_version: 2.4.8
125
+ signing_key:
126
+ specification_version: 4
127
+ summary: A simple scored search plugin for ActiveRecord models. Suited for small projects
128
+ with little needs for scalability and a reserved attitude towards technical debt
129
+ (i.e. ElasticSearch, Solr, ...).
130
+ test_files:
131
+ - test/dummy/app/assets/javascripts/application.js
132
+ - test/dummy/app/assets/stylesheets/application.css
133
+ - test/dummy/app/controllers/application_controller.rb
134
+ - test/dummy/app/helpers/application_helper.rb
135
+ - test/dummy/app/models/company.rb
136
+ - test/dummy/app/models/dossier.rb
137
+ - test/dummy/app/models/employee.rb
138
+ - test/dummy/app/models/search_term.rb
139
+ - test/dummy/app/views/layouts/application.html.erb
140
+ - test/dummy/bin/bundle
141
+ - test/dummy/bin/rails
142
+ - test/dummy/bin/rake
143
+ - test/dummy/bin/setup
144
+ - test/dummy/config/application.rb
145
+ - test/dummy/config/boot.rb
146
+ - test/dummy/config/database.yml
147
+ - test/dummy/config/environment.rb
148
+ - test/dummy/config/environments/development.rb
149
+ - test/dummy/config/environments/production.rb
150
+ - test/dummy/config/environments/test.rb
151
+ - test/dummy/config/initializers/assets.rb
152
+ - test/dummy/config/initializers/backtrace_silencers.rb
153
+ - test/dummy/config/initializers/cookies_serializer.rb
154
+ - test/dummy/config/initializers/filter_parameter_logging.rb
155
+ - test/dummy/config/initializers/inflections.rb
156
+ - test/dummy/config/initializers/mime_types.rb
157
+ - test/dummy/config/initializers/session_store.rb
158
+ - test/dummy/config/initializers/wrap_parameters.rb
159
+ - test/dummy/config/locales/en.yml
160
+ - test/dummy/config/routes.rb
161
+ - test/dummy/config/secrets.yml
162
+ - test/dummy/config.ru
163
+ - test/dummy/db/development.sqlite3
164
+ - test/dummy/db/migrate/20151013022315_create_base_tables.rb
165
+ - test/dummy/db/schema.rb
166
+ - test/dummy/db/test.sqlite3
167
+ - test/dummy/log/development.log
168
+ - test/dummy/log/test.log
169
+ - test/dummy/public/404.html
170
+ - test/dummy/public/422.html
171
+ - test/dummy/public/500.html
172
+ - test/dummy/public/favicon.ico
173
+ - test/dummy/Rakefile
174
+ - test/dummy/README.rdoc
175
+ - test/plain_search_test.rb
176
+ - test/test_helper.rb