pages_sphinx 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ffb058adcfa1d0c7b0240625381820dc3f502486
4
+ data.tar.gz: 6f8ed67b3036b8913710b58cfe2bc286ec1ee230
5
+ SHA512:
6
+ metadata.gz: 64858c58e457c483dab56e94931f2ef41f4afdfaf9bb3b0bd8a3d3189c9cc006a502c1281b7a0cc428fb1fe43d9b7936ef5c2f1ed3188ef11ca446f3be22cee7
7
+ data.tar.gz: f47fc41a675bfe380aaa45b677d0d261450bf44d08e531c927390f272e2323990dcf0cc3c54cb33e7799f0c47f0957f6c2a4f93b6eb3412b0d31d4ff4f1373c1
data/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # PagesSphinx
2
+
3
+ Adds fulltext search support to Pages using ThinkingSphinx.
4
+
5
+ ## Getting started
6
+
7
+ To get started, add it to your Gemfile:
8
+
9
+ ```ruby
10
+ gem "pages_sphinx"
11
+ ```
12
+
13
+ Next, run the installer to generate the configuration file:
14
+
15
+ ```sh
16
+ bin/rails g pages_sphinx:install
17
+ ```
18
+
19
+ You can now start the process and index your content:
20
+
21
+ ```ssh
22
+ bin/rails ts:configure
23
+ bin/rails ts:start
24
+ bin/rails ts:generate
25
+ ```
26
+
27
+ ## License
28
+
29
+ Pages is licensed under the
30
+ [MIT License](http://www.opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ APP_RAKEFILE = "spec/internal/Rakefile".freeze
5
+ load "rails/tasks/engine.rake"
6
+
7
+ RSpec::Core::RakeTask.new
8
+
9
+ task default: :spec
10
+ task test: :spec
@@ -0,0 +1,9 @@
1
+ ThinkingSphinx::Index.define :page_file, with: :real_time do
2
+ indexes name
3
+ indexes filename
4
+
5
+ has page_id, type: :integer
6
+ has created_at, type: :timestamp
7
+ has updated_at, type: :timestamp
8
+ has published, type: :boolean
9
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ ThinkingSphinx::Index.define :page, with: :real_time do
4
+ indexes localization_values
5
+ indexes category_names
6
+ indexes tag_list
7
+ indexes author.name, as: :author_name
8
+ indexes author.email, as: :author_email
9
+ indexes comment_names
10
+ indexes comment_bodies
11
+ indexes file_names
12
+ indexes file_filenames
13
+
14
+ has category_ids, type: :integer, multi: true
15
+ has tag_ids, type: :integer, multi: true
16
+
17
+ has published_at, type: :timestamp
18
+ has created_at, type: :timestamp
19
+ has updated_at, type: :timestamp
20
+ has user_id, type: :integer
21
+ has parent_page_id, type: :integer
22
+ has status, type: :integer
23
+ has template, type: :string
24
+ has autopublish, type: :boolean
25
+ has feed_enabled, type: :boolean
26
+ has published, type: :boolean
27
+
28
+ set_property group_concat_max_len: 16.megabytes
29
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ ThinkingSphinx::Index.define :user, with: :real_time do
4
+ indexes username
5
+ indexes name
6
+ indexes email
7
+
8
+ has last_login_at, type: :timestamp
9
+ has created_at, type: :timestamp
10
+ has activated, type: :boolean
11
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ require "thinking-sphinx"
4
+
5
+ load "pages_sphinx/category_extension.rb"
6
+ load "pages_sphinx/page_extension.rb"
7
+ load "pages_sphinx/page_file_extension.rb"
8
+ load "pages_sphinx/pages_controller_extension.rb"
9
+ load "pages_sphinx/user_extension.rb"
10
+
11
+ load "pages_sphinx/engine.rb"
12
+ load "pages_sphinx/version.rb"
13
+
14
+ module PagesSphinx
15
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ module CategoryExtension
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ after_save ThinkingSphinx::RealTime.callback_for(:pages, [:page])
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ class Engine < Rails::Engine
5
+ initializer :extend_pages do |_config|
6
+ Category.send(:include, PagesSphinx::CategoryExtension)
7
+ Page.send(:include, PagesSphinx::PageExtension)
8
+ PageFile.send(:include, PagesSphinx::PageFileExtension)
9
+ User.send(:include, PagesSphinx::UserExtension)
10
+ PagesCore::Frontend::PagesController.send(
11
+ :include, PagesSphinx::PagesControllerExtension
12
+ )
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ module PageExtension
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ after_save ThinkingSphinx::RealTime.callback_for(:page)
9
+ end
10
+
11
+ def localization_values
12
+ localizations.map(&:value)
13
+ end
14
+
15
+ def category_names
16
+ categories.map(&:name)
17
+ end
18
+
19
+ def comment_names
20
+ comments.map(&:name)
21
+ end
22
+
23
+ def comment_bodies
24
+ comments.map(&:body)
25
+ end
26
+
27
+ def file_names
28
+ files.map(&:name)
29
+ end
30
+
31
+ def file_filenames
32
+ files.map(&:filename)
33
+ end
34
+
35
+ def published
36
+ published?
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ module PageFileExtension
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ after_save ThinkingSphinx::RealTime.callback_for(:page_file)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,40 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ module PagesControllerExtension
5
+ extend ActiveSupport::Concern
6
+
7
+ def search
8
+ @search_query = params[:q] || params[:query] || ""
9
+ @search_category_id = params[:category_id]
10
+
11
+ @pages = Page.search(
12
+ normalize_search_query(@search_query),
13
+ search_options(category_id: @search_category_id)
14
+ )
15
+ @pages.each { |p| p.localize!(locale) }
16
+ @pages
17
+ end
18
+
19
+ private
20
+
21
+ def normalize_search_query(str)
22
+ str.split(/\s+/)
23
+ .map { |p| "#{p}*" }
24
+ .join(" ")
25
+ end
26
+
27
+ def search_options(category_id: nil)
28
+ options = {
29
+ page: (params[:page] || 1).to_i,
30
+ per_page: 20,
31
+ include: [:localizations, :categories, :image, :author],
32
+ order: :published_at,
33
+ sort_mode: :desc,
34
+ with: { status: 2, autopublish: 0 }
35
+ }
36
+ options[:with][:category_ids] = category_id unless category_id.blank?
37
+ options
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ module UserExtension
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ after_save ThinkingSphinx::RealTime.callback_for(:user)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ VERSION = "0.0.1".freeze unless PagesSphinx.const_defined?("VERSION")
5
+ end
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ module PagesSphinx
4
+ module Generators
5
+ class InstallGenerator < Rails::Generators::Base
6
+ desc "Creates the PagesSphinx configuration"
7
+ source_root File.expand_path("../templates", __FILE__)
8
+
9
+ def read_configuration!
10
+ @sphinx_port ||= ask_with_fallback("Sphinx port?", "3312")
11
+ end
12
+
13
+ def create_sphinx_config
14
+ template "thinking_sphinx.yml", File.join("config/thinking_sphinx.yml")
15
+ end
16
+
17
+ private
18
+
19
+ def ask_with_fallback(question, default)
20
+ result = ask(question + " [#{default}]")
21
+ if result.blank?
22
+ default
23
+ else
24
+ result
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,8 @@
1
+ development:
2
+ mysql41: <%= @sphinx_port %>
3
+ min_prefix_len: 3
4
+ dict: keywords
5
+ production:
6
+ mysql41: <%= @sphinx_port %>
7
+ min_prefix_len: 3
8
+ dict: keywords
metadata ADDED
@@ -0,0 +1,187 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pages_sphinx
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Inge Jørgensen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-06-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: mysql2
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.2
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.4.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: pg
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.18.3
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.18.3
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec-rails
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.5'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 3.5.1
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '3.5'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 3.5.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: factory_girl
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '4.5'
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: 4.5.0
71
+ type: :development
72
+ prerelease: false
73
+ version_requirements: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - "~>"
76
+ - !ruby/object:Gem::Version
77
+ version: '4.5'
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: 4.5.0
81
+ - !ruby/object:Gem::Dependency
82
+ name: shoulda-matchers
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '3.1'
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 3.1.0
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: '3.1'
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: 3.1.0
101
+ - !ruby/object:Gem::Dependency
102
+ name: rails
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: 4.2.0
108
+ - - "<"
109
+ - !ruby/object:Gem::Version
110
+ version: 5.1.0
111
+ type: :runtime
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: 4.2.0
118
+ - - "<"
119
+ - !ruby/object:Gem::Version
120
+ version: 5.1.0
121
+ - !ruby/object:Gem::Dependency
122
+ name: thinking-sphinx
123
+ requirement: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - "~>"
126
+ - !ruby/object:Gem::Version
127
+ version: '3.2'
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 3.2.0
131
+ type: :runtime
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '3.2'
138
+ - - ">="
139
+ - !ruby/object:Gem::Version
140
+ version: 3.2.0
141
+ description: Adds ThinkingSphinx to Pages
142
+ email:
143
+ - inge@anyone.no
144
+ executables: []
145
+ extensions: []
146
+ extra_rdoc_files: []
147
+ files:
148
+ - README.md
149
+ - Rakefile
150
+ - app/indices/page_file_index.rb
151
+ - app/indices/page_index.rb
152
+ - app/indices/user_index.rb
153
+ - lib/pages_sphinx.rb
154
+ - lib/pages_sphinx/category_extension.rb
155
+ - lib/pages_sphinx/engine.rb
156
+ - lib/pages_sphinx/page_extension.rb
157
+ - lib/pages_sphinx/page_file_extension.rb
158
+ - lib/pages_sphinx/pages_controller_extension.rb
159
+ - lib/pages_sphinx/user_extension.rb
160
+ - lib/pages_sphinx/version.rb
161
+ - lib/rails/generators/pages_sphinx/install/install_generator.rb
162
+ - lib/rails/generators/pages_sphinx/install/templates/thinking_sphinx.yml
163
+ homepage: https://github.com/anyone-oslo/pages_sphinx
164
+ licenses:
165
+ - MIT
166
+ metadata: {}
167
+ post_install_message:
168
+ rdoc_options: []
169
+ require_paths:
170
+ - lib
171
+ required_ruby_version: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: 1.9.2
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ requirements: []
182
+ rubyforge_project: "."
183
+ rubygems_version: 2.4.5
184
+ signing_key:
185
+ specification_version: 4
186
+ summary: Sphinx support for Pages
187
+ test_files: []