yc-algoliasearch-rails 2.1.4
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 +7 -0
- data/.document +5 -0
- data/.rspec +1 -0
- data/CHANGELOG.MD +566 -0
- data/Gemfile +38 -0
- data/Gemfile.lock +213 -0
- data/LICENSE +21 -0
- data/README.md +1171 -0
- data/Rakefile +17 -0
- data/algoliasearch-rails.gemspec +95 -0
- data/lib/algoliasearch/algolia_job.rb +9 -0
- data/lib/algoliasearch/configuration.rb +30 -0
- data/lib/algoliasearch/pagination/kaminari.rb +40 -0
- data/lib/algoliasearch/pagination/will_paginate.rb +15 -0
- data/lib/algoliasearch/pagination.rb +19 -0
- data/lib/algoliasearch/railtie.rb +11 -0
- data/lib/algoliasearch/tasks/algoliasearch.rake +19 -0
- data/lib/algoliasearch/utilities.rb +48 -0
- data/lib/algoliasearch/version.rb +3 -0
- data/lib/algoliasearch-rails.rb +1083 -0
- data/spec/spec_helper.rb +52 -0
- data/spec/utilities_spec.rb +30 -0
- data/vendor/assets/javascripts/algolia/algoliasearch.angular.js +2678 -0
- data/vendor/assets/javascripts/algolia/algoliasearch.angular.min.js +7 -0
- data/vendor/assets/javascripts/algolia/algoliasearch.jquery.js +2678 -0
- data/vendor/assets/javascripts/algolia/algoliasearch.jquery.min.js +7 -0
- data/vendor/assets/javascripts/algolia/algoliasearch.js +2663 -0
- data/vendor/assets/javascripts/algolia/algoliasearch.min.js +7 -0
- data/vendor/assets/javascripts/algolia/bloodhound.js +727 -0
- data/vendor/assets/javascripts/algolia/bloodhound.min.js +7 -0
- data/vendor/assets/javascripts/algolia/typeahead.bundle.js +1782 -0
- data/vendor/assets/javascripts/algolia/typeahead.bundle.min.js +7 -0
- data/vendor/assets/javascripts/algolia/typeahead.jquery.js +1184 -0
- data/vendor/assets/javascripts/algolia/typeahead.jquery.min.js +7 -0
- data/vendor/assets/javascripts/algolia/v2/algoliasearch.angular.js +2678 -0
- data/vendor/assets/javascripts/algolia/v2/algoliasearch.angular.min.js +7 -0
- data/vendor/assets/javascripts/algolia/v2/algoliasearch.jquery.js +2678 -0
- data/vendor/assets/javascripts/algolia/v2/algoliasearch.jquery.min.js +7 -0
- data/vendor/assets/javascripts/algolia/v2/algoliasearch.js +2663 -0
- data/vendor/assets/javascripts/algolia/v2/algoliasearch.min.js +7 -0
- data/vendor/assets/javascripts/algolia/v3/algoliasearch.angular.js +6277 -0
- data/vendor/assets/javascripts/algolia/v3/algoliasearch.angular.min.js +3 -0
- data/vendor/assets/javascripts/algolia/v3/algoliasearch.jquery.js +6223 -0
- data/vendor/assets/javascripts/algolia/v3/algoliasearch.jquery.min.js +3 -0
- data/vendor/assets/javascripts/algolia/v3/algoliasearch.js +6070 -0
- data/vendor/assets/javascripts/algolia/v3/algoliasearch.min.js +3 -0
- metadata +174 -0
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
require 'rdoc/task'
|
5
|
+
Rake::RDocTask.new do |rdoc|
|
6
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
7
|
+
|
8
|
+
rdoc.rdoc_dir = 'rdoc'
|
9
|
+
rdoc.title = "AlgoliaSearch Rails #{version}"
|
10
|
+
rdoc.rdoc_files.include('README*')
|
11
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
12
|
+
end
|
13
|
+
|
14
|
+
require "rspec/core/rake_task"
|
15
|
+
RSpec::Core::RakeTask.new(:spec)
|
16
|
+
|
17
|
+
task :default => :spec
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), 'lib', 'algoliasearch', 'version')
|
4
|
+
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "yc-algoliasearch-rails"
|
9
|
+
s.version = AlgoliaSearch::VERSION
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.authors = ["Algolia"]
|
13
|
+
s.date = Date.today
|
14
|
+
s.description = "AlgoliaSearch integration to your favorite ORM"
|
15
|
+
s.email = "contact@algolia.com"
|
16
|
+
s.extra_rdoc_files = [
|
17
|
+
"CHANGELOG.MD",
|
18
|
+
"LICENSE",
|
19
|
+
"README.md"
|
20
|
+
]
|
21
|
+
s.files = [
|
22
|
+
".document",
|
23
|
+
".rspec",
|
24
|
+
"CHANGELOG.MD",
|
25
|
+
"Gemfile",
|
26
|
+
"Gemfile.lock",
|
27
|
+
"LICENSE",
|
28
|
+
"README.md",
|
29
|
+
"Rakefile",
|
30
|
+
"algoliasearch-rails.gemspec",
|
31
|
+
"lib/algoliasearch-rails.rb",
|
32
|
+
"lib/algoliasearch/algolia_job.rb",
|
33
|
+
"lib/algoliasearch/configuration.rb",
|
34
|
+
"lib/algoliasearch/pagination.rb",
|
35
|
+
"lib/algoliasearch/pagination/kaminari.rb",
|
36
|
+
"lib/algoliasearch/pagination/will_paginate.rb",
|
37
|
+
"lib/algoliasearch/railtie.rb",
|
38
|
+
"lib/algoliasearch/tasks/algoliasearch.rake",
|
39
|
+
"lib/algoliasearch/utilities.rb",
|
40
|
+
"lib/algoliasearch/version.rb",
|
41
|
+
"spec/spec_helper.rb",
|
42
|
+
"spec/utilities_spec.rb",
|
43
|
+
"vendor/assets/javascripts/algolia/algoliasearch.angular.js",
|
44
|
+
"vendor/assets/javascripts/algolia/algoliasearch.angular.min.js",
|
45
|
+
"vendor/assets/javascripts/algolia/algoliasearch.jquery.js",
|
46
|
+
"vendor/assets/javascripts/algolia/algoliasearch.jquery.min.js",
|
47
|
+
"vendor/assets/javascripts/algolia/algoliasearch.js",
|
48
|
+
"vendor/assets/javascripts/algolia/algoliasearch.min.js",
|
49
|
+
"vendor/assets/javascripts/algolia/bloodhound.js",
|
50
|
+
"vendor/assets/javascripts/algolia/bloodhound.min.js",
|
51
|
+
"vendor/assets/javascripts/algolia/typeahead.bundle.js",
|
52
|
+
"vendor/assets/javascripts/algolia/typeahead.bundle.min.js",
|
53
|
+
"vendor/assets/javascripts/algolia/typeahead.jquery.js",
|
54
|
+
"vendor/assets/javascripts/algolia/typeahead.jquery.min.js",
|
55
|
+
"vendor/assets/javascripts/algolia/v2",
|
56
|
+
"vendor/assets/javascripts/algolia/v2/algoliasearch.angular.js",
|
57
|
+
"vendor/assets/javascripts/algolia/v2/algoliasearch.angular.min.js",
|
58
|
+
"vendor/assets/javascripts/algolia/v2/algoliasearch.jquery.js",
|
59
|
+
"vendor/assets/javascripts/algolia/v2/algoliasearch.jquery.min.js",
|
60
|
+
"vendor/assets/javascripts/algolia/v2/algoliasearch.js",
|
61
|
+
"vendor/assets/javascripts/algolia/v2/algoliasearch.min.js",
|
62
|
+
"vendor/assets/javascripts/algolia/v3",
|
63
|
+
"vendor/assets/javascripts/algolia/v3/algoliasearch.angular.js",
|
64
|
+
"vendor/assets/javascripts/algolia/v3/algoliasearch.angular.min.js",
|
65
|
+
"vendor/assets/javascripts/algolia/v3/algoliasearch.jquery.js",
|
66
|
+
"vendor/assets/javascripts/algolia/v3/algoliasearch.jquery.min.js",
|
67
|
+
"vendor/assets/javascripts/algolia/v3/algoliasearch.js",
|
68
|
+
"vendor/assets/javascripts/algolia/v3/algoliasearch.min.js"
|
69
|
+
]
|
70
|
+
s.homepage = "http://github.com/algolia/algoliasearch-rails"
|
71
|
+
s.licenses = ["MIT"]
|
72
|
+
s.require_paths = ["lib"]
|
73
|
+
s.rubygems_version = "2.1.11"
|
74
|
+
s.summary = "AlgoliaSearch integration to your favorite ORM"
|
75
|
+
|
76
|
+
if s.respond_to? :specification_version then
|
77
|
+
s.specification_version = 4
|
78
|
+
|
79
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
80
|
+
s.add_runtime_dependency(%q<json>, [">= 1.5.1"])
|
81
|
+
s.add_runtime_dependency(%q<algolia>, ["< 3.0.0"])
|
82
|
+
s.add_development_dependency(%q<will_paginate>, [">= 2.3.15"])
|
83
|
+
s.add_development_dependency(%q<kaminari>, [">= 0"])
|
84
|
+
s.add_development_dependency "rake"
|
85
|
+
s.add_development_dependency "rdoc"
|
86
|
+
else
|
87
|
+
s.add_dependency(%q<json>, [">= 1.5.1"])
|
88
|
+
s.add_dependency(%q<algolia>, ["< 3.0.0"])
|
89
|
+
end
|
90
|
+
else
|
91
|
+
s.add_dependency(%q<json>, [">= 1.5.1"])
|
92
|
+
s.add_dependency(%q<algolia>, ["< 3.0.0"])
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module AlgoliaSearch
|
2
|
+
module Configuration
|
3
|
+
def initiliaze
|
4
|
+
@client = nil
|
5
|
+
end
|
6
|
+
|
7
|
+
def configuration
|
8
|
+
@@configuration || raise(NotConfigured, "Please configure AlgoliaSearch. Set AlgoliaSearch.configuration = {application_id: 'YOUR_APPLICATION_ID', api_key: 'YOUR_API_KEY'}")
|
9
|
+
end
|
10
|
+
|
11
|
+
def configuration=(configuration)
|
12
|
+
@@configuration = configuration.merge(
|
13
|
+
:user_agent => "Algolia for Rails (#{AlgoliaSearch::VERSION}); Rails (#{Rails::VERSION::STRING})",
|
14
|
+
:symbolize_keys => false
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
def client
|
19
|
+
if @client.nil?
|
20
|
+
setup_client
|
21
|
+
end
|
22
|
+
|
23
|
+
@client
|
24
|
+
end
|
25
|
+
|
26
|
+
def setup_client
|
27
|
+
@client = Algolia::Search::Client.create_with_config(Algolia::Search::Config.new(@@configuration))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
unless defined? Kaminari
|
2
|
+
raise(AlgoliaSearch::BadConfiguration, "AlgoliaSearch: Please add 'kaminari' to your Gemfile to use kaminari pagination backend")
|
3
|
+
end
|
4
|
+
|
5
|
+
require "kaminari/models/array_extension"
|
6
|
+
|
7
|
+
module AlgoliaSearch
|
8
|
+
module Pagination
|
9
|
+
class Kaminari < ::Kaminari::PaginatableArray
|
10
|
+
|
11
|
+
def initialize(array, options)
|
12
|
+
super(array, **options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def limit(num)
|
16
|
+
# noop
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
def offset(num)
|
21
|
+
# noop
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
class << self
|
26
|
+
def create(results, total_hits, options = {})
|
27
|
+
offset = ((options[:page] - 1) * options[:per_page])
|
28
|
+
array = new results, :offset => offset, :limit => options[:per_page], :total_count => total_hits
|
29
|
+
if array.empty? and !results.empty?
|
30
|
+
# since Kaminari 0.16.0, you need to pad the results with nil values so it matches the offset param
|
31
|
+
# otherwise you'll get an empty array: https://github.com/amatsuda/kaminari/commit/29fdcfa8865f2021f710adaedb41b7a7b081e34d
|
32
|
+
results = ([nil] * offset) + results
|
33
|
+
array = new results, :offset => offset, :limit => options[:per_page], :total_count => total_hits
|
34
|
+
end
|
35
|
+
array
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
begin
|
2
|
+
require 'will_paginate/collection'
|
3
|
+
rescue LoadError
|
4
|
+
raise(AlgoliaSearch::BadConfiguration, "AlgoliaSearch: Please add 'will_paginate' to your Gemfile to use will_paginate pagination backend")
|
5
|
+
end
|
6
|
+
|
7
|
+
module AlgoliaSearch
|
8
|
+
module Pagination
|
9
|
+
class WillPaginate
|
10
|
+
def self.create(results, total_hits, options = {})
|
11
|
+
::WillPaginate::Collection.create(options[:page], options[:per_page], total_hits) { |pager| pager.replace results }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module AlgoliaSearch
|
2
|
+
module Pagination
|
3
|
+
|
4
|
+
autoload :WillPaginate, 'algoliasearch/pagination/will_paginate'
|
5
|
+
autoload :Kaminari, 'algoliasearch/pagination/kaminari'
|
6
|
+
|
7
|
+
def self.create(results, total_hits, options = {})
|
8
|
+
return results if AlgoliaSearch.configuration[:pagination_backend].nil?
|
9
|
+
begin
|
10
|
+
backend = AlgoliaSearch.configuration[:pagination_backend].to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } # classify pagination backend name
|
11
|
+
page = Object.const_get(:AlgoliaSearch).const_get(:Pagination).const_get(backend).create(results, total_hits, options)
|
12
|
+
page
|
13
|
+
rescue NameError
|
14
|
+
raise(BadConfiguration, "Unknown pagination backend")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
namespace :algoliasearch do
|
2
|
+
|
3
|
+
desc "Reindex all models"
|
4
|
+
task :reindex => :environment do
|
5
|
+
AlgoliaSearch::Utilities.reindex_all_models
|
6
|
+
end
|
7
|
+
|
8
|
+
desc "Set settings to all indexes"
|
9
|
+
task :set_all_settings => :environment do
|
10
|
+
AlgoliaSearch::Utilities.set_settings_all_models
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "Clear all indexes"
|
14
|
+
task :clear_indexes => :environment do
|
15
|
+
puts "clearing all indexes"
|
16
|
+
AlgoliaSearch::Utilities.clear_all_indexes
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module AlgoliaSearch
|
2
|
+
module Utilities
|
3
|
+
class << self
|
4
|
+
def get_model_classes
|
5
|
+
if Rails.application && defined?(Rails.autoloaders) && Rails.autoloaders.zeitwerk_enabled?
|
6
|
+
Zeitwerk::Loader.eager_load_all
|
7
|
+
elsif Rails.application
|
8
|
+
Rails.application.eager_load!
|
9
|
+
end
|
10
|
+
AlgoliaSearch.instance_variable_get :@included_in
|
11
|
+
end
|
12
|
+
|
13
|
+
def clear_all_indexes
|
14
|
+
get_model_classes.each do |klass|
|
15
|
+
klass.clear_index!
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def reindex_all_models
|
20
|
+
klasses = get_model_classes
|
21
|
+
|
22
|
+
puts ''
|
23
|
+
puts "Reindexing #{klasses.count} models: #{klasses.to_sentence}."
|
24
|
+
puts ''
|
25
|
+
|
26
|
+
klasses.each do |klass|
|
27
|
+
puts klass
|
28
|
+
puts "Reindexing #{klass.count} records..."
|
29
|
+
klass.algolia_reindex
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def set_settings_all_models
|
34
|
+
klasses = get_model_classes
|
35
|
+
|
36
|
+
puts ''
|
37
|
+
puts "Pushing settings for #{klasses.count} models: #{klasses.to_sentence}."
|
38
|
+
puts ''
|
39
|
+
|
40
|
+
klasses.each do |klass|
|
41
|
+
puts "Pushing #{klass} settings..."
|
42
|
+
klass.algolia_set_settings
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|