yc-algoliasearch-rails 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.document +5 -0
  3. data/.rspec +1 -0
  4. data/CHANGELOG.MD +566 -0
  5. data/Gemfile +38 -0
  6. data/Gemfile.lock +213 -0
  7. data/LICENSE +21 -0
  8. data/README.md +1171 -0
  9. data/Rakefile +17 -0
  10. data/algoliasearch-rails.gemspec +95 -0
  11. data/lib/algoliasearch/algolia_job.rb +9 -0
  12. data/lib/algoliasearch/configuration.rb +30 -0
  13. data/lib/algoliasearch/pagination/kaminari.rb +40 -0
  14. data/lib/algoliasearch/pagination/will_paginate.rb +15 -0
  15. data/lib/algoliasearch/pagination.rb +19 -0
  16. data/lib/algoliasearch/railtie.rb +11 -0
  17. data/lib/algoliasearch/tasks/algoliasearch.rake +19 -0
  18. data/lib/algoliasearch/utilities.rb +48 -0
  19. data/lib/algoliasearch/version.rb +3 -0
  20. data/lib/algoliasearch-rails.rb +1083 -0
  21. data/spec/spec_helper.rb +52 -0
  22. data/spec/utilities_spec.rb +30 -0
  23. data/vendor/assets/javascripts/algolia/algoliasearch.angular.js +2678 -0
  24. data/vendor/assets/javascripts/algolia/algoliasearch.angular.min.js +7 -0
  25. data/vendor/assets/javascripts/algolia/algoliasearch.jquery.js +2678 -0
  26. data/vendor/assets/javascripts/algolia/algoliasearch.jquery.min.js +7 -0
  27. data/vendor/assets/javascripts/algolia/algoliasearch.js +2663 -0
  28. data/vendor/assets/javascripts/algolia/algoliasearch.min.js +7 -0
  29. data/vendor/assets/javascripts/algolia/bloodhound.js +727 -0
  30. data/vendor/assets/javascripts/algolia/bloodhound.min.js +7 -0
  31. data/vendor/assets/javascripts/algolia/typeahead.bundle.js +1782 -0
  32. data/vendor/assets/javascripts/algolia/typeahead.bundle.min.js +7 -0
  33. data/vendor/assets/javascripts/algolia/typeahead.jquery.js +1184 -0
  34. data/vendor/assets/javascripts/algolia/typeahead.jquery.min.js +7 -0
  35. data/vendor/assets/javascripts/algolia/v2/algoliasearch.angular.js +2678 -0
  36. data/vendor/assets/javascripts/algolia/v2/algoliasearch.angular.min.js +7 -0
  37. data/vendor/assets/javascripts/algolia/v2/algoliasearch.jquery.js +2678 -0
  38. data/vendor/assets/javascripts/algolia/v2/algoliasearch.jquery.min.js +7 -0
  39. data/vendor/assets/javascripts/algolia/v2/algoliasearch.js +2663 -0
  40. data/vendor/assets/javascripts/algolia/v2/algoliasearch.min.js +7 -0
  41. data/vendor/assets/javascripts/algolia/v3/algoliasearch.angular.js +6277 -0
  42. data/vendor/assets/javascripts/algolia/v3/algoliasearch.angular.min.js +3 -0
  43. data/vendor/assets/javascripts/algolia/v3/algoliasearch.jquery.js +6223 -0
  44. data/vendor/assets/javascripts/algolia/v3/algoliasearch.jquery.min.js +3 -0
  45. data/vendor/assets/javascripts/algolia/v3/algoliasearch.js +6070 -0
  46. data/vendor/assets/javascripts/algolia/v3/algoliasearch.min.js +3 -0
  47. 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,9 @@
1
+ module AlgoliaSearch
2
+ class AlgoliaJob < ::ActiveJob::Base
3
+ queue_as :algoliasearch
4
+
5
+ def perform(record, method)
6
+ record.send(method)
7
+ end
8
+ end
9
+ end
@@ -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,11 @@
1
+ require 'rails'
2
+
3
+ module AlgoliaSearch
4
+ class Railtie < Rails::Railtie
5
+ rake_tasks do
6
+ load "algoliasearch/tasks/algoliasearch.rake"
7
+ end
8
+ end
9
+ class Engine < Rails::Engine
10
+ end
11
+ 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
+
@@ -0,0 +1,3 @@
1
+ module AlgoliaSearch
2
+ VERSION = '2.1.4'
3
+ end