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.
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