yc-algoliasearch-rails 2.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|