adminos 1.0.0.pre.rc.2 → 1.0.0.pre.rc.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -3
  3. data/README.md +26 -0
  4. data/adminos.gemspec +2 -2
  5. data/app/inputs/cropp_input.rb +13 -1
  6. data/app/inputs/filter_inputs/boolean_input.rb +18 -0
  7. data/app/inputs/filter_inputs/date_range_input.rb +36 -0
  8. data/app/inputs/filter_inputs/numeric_input.rb +40 -0
  9. data/app/inputs/filter_inputs/string_input.rb +40 -0
  10. data/lib/adminos.rb +23 -3
  11. data/lib/adminos/configuration.rb +9 -0
  12. data/lib/adminos/controllers/filters.rb +20 -0
  13. data/lib/adminos/controllers/resource.rb +18 -11
  14. data/lib/adminos/extensions/simple_form.rb +12 -0
  15. data/lib/adminos/features/search/elastic.rb +46 -0
  16. data/lib/adminos/features/search/pg_search.rb +49 -0
  17. data/lib/adminos/filters/forms.rb +55 -0
  18. data/lib/adminos/form_builder.rb +11 -0
  19. data/lib/adminos/helpers/models/searchable.rb +9 -0
  20. data/lib/adminos/helpers/view.rb +35 -0
  21. data/lib/generators/adminos/adminos_generator.rb +10 -7
  22. data/lib/generators/adminos/feedback_generator.rb +39 -0
  23. data/lib/generators/adminos/i18n_generator.rb +16 -4
  24. data/lib/generators/adminos/install_generator.rb +22 -0
  25. data/lib/generators/adminos/profile_generator.rb +34 -0
  26. data/lib/generators/adminos/search_generator.rb +38 -0
  27. data/lib/generators/adminos/two_factor_auth_generator.rb +81 -0
  28. data/lib/generators/templates/adminos/fields.slim +1 -1
  29. data/lib/generators/templates/adminos/locales/locale_fields.slim +7 -4
  30. data/lib/generators/templates/adminos/locales/model.rb.erb +2 -3
  31. data/lib/generators/templates/ci/.gitlab-ci.yml +1 -1
  32. data/lib/generators/templates/feedback/auto/app/controllers/admin/feedbacks_controller.rb +17 -0
  33. data/lib/generators/templates/feedback/auto/app/controllers/feedbacks_controller.rb +11 -0
  34. data/lib/generators/templates/feedback/auto/app/models/feedback.rb +6 -0
  35. data/lib/generators/templates/feedback/auto/app/views/admin/feedbacks/_fields.slim +5 -0
  36. data/lib/generators/templates/feedback/auto/app/views/admin/feedbacks/index.slim +28 -0
  37. data/lib/generators/templates/feedback/feedbacks_migration.rb +13 -0
  38. data/lib/generators/templates/field/locales/locale_fields.slim +1 -1
  39. data/lib/generators/templates/field/locales/model.rb.erb +2 -3
  40. data/lib/generators/templates/i18n/Gemfile +6 -1
  41. data/lib/generators/templates/i18n/auto/app/validators/locale_validator.rb +5 -1
  42. data/lib/generators/templates/i18n/auto/app/views/admin/base/_pills.slim +1 -5
  43. data/lib/generators/templates/i18n/auto/app/views/admin/pages/_locale_fields.slim +5 -5
  44. data/lib/generators/templates/i18n/auto/config/initializers/mobility.rb +92 -0
  45. data/lib/generators/templates/i18n/page.rb +2 -2
  46. data/lib/generators/templates/install/Gemfile +3 -5
  47. data/lib/generators/templates/install/README.md +22 -0
  48. data/lib/generators/templates/install/auto/Capfile +12 -2
  49. data/lib/generators/templates/install/auto/app/views/admin/base/_form.slim +1 -1
  50. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_collection_header.slim +2 -0
  51. data/lib/generators/templates/install/auto/app/views/shared/helpers/admin/_object_link_new.slim +1 -1
  52. data/lib/generators/templates/install/auto/config/deploy/staging.rb +15 -10
  53. data/lib/generators/templates/install/auto/config/deploy/{shared → templates}/database.yml.erb +1 -1
  54. data/lib/generators/templates/install/auto/config/deploy/templates/nginx_conf.erb +96 -0
  55. data/lib/generators/templates/install/auto/config/deploy/templates/puma.rb.erb +52 -0
  56. data/lib/generators/templates/install/auto/config/environments/staging.rb +1 -1
  57. data/lib/generators/templates/install/auto/config/initializers/adminos.rb +3 -0
  58. data/lib/generators/templates/install/auto/config/locales/adminos.ru.yml +18 -0
  59. data/lib/generators/templates/install/auto/config/schedule.rb +0 -0
  60. data/lib/generators/templates/install/auto/config/systemd/puma.service.erb +19 -0
  61. data/lib/generators/templates/install/auto/config/systemd/sidekiq.service.erb +21 -0
  62. data/lib/generators/templates/install/auto/lib/capistrano/{template.rb → smart_templates.rb} +17 -3
  63. data/lib/generators/templates/install/auto/lib/capistrano/tasks/setup_config.cap +27 -20
  64. data/lib/generators/templates/install/deploy.rb.erb +13 -12
  65. data/lib/generators/templates/profile/auto/app/controllers/admin/profiles_controller.rb +26 -0
  66. data/lib/generators/templates/profile/auto/app/views/admin/profiles/edit.slim +17 -0
  67. data/lib/generators/templates/two_facto_auth/Gemfile +1 -0
  68. data/lib/generators/templates/two_facto_auth/auto/app/controllers/concerns/authenticates_with_two_factor.rb +36 -0
  69. data/lib/generators/templates/two_facto_auth/auto/app/controllers/users/sessions_controller.rb +5 -0
  70. data/lib/generators/templates/two_facto_auth/auto/app/views/admin/profiles/_2fa.slim +24 -0
  71. data/lib/generators/templates/two_facto_auth/auto/app/views/devise/sessions/two_factor.slim +15 -0
  72. data/spec/lib/generators/adminos/feedback_generator_rspec.rb +50 -0
  73. data/spec/lib/generators/adminos/install_generator_rspec.rb +6 -7
  74. data/spec/lib/generators/adminos/profile_generator_rspec.rb +33 -0
  75. data/spec/lib/generators/adminos/search_generator.rb +20 -0
  76. data/spec/lib/generators/adminos/two_factor_auth_generator_rspec.rb +61 -0
  77. data/spec/spec_helper.rb +4 -0
  78. data/spec/support/shared/generator.rb +1 -1
  79. metadata +55 -22
  80. data/bin/rspec +0 -29
  81. data/lib/adminos/extensions/globalize_actiontext.rb +0 -28
  82. data/lib/adminos/extensions/globalize_fields.rb +0 -19
  83. data/lib/generators/templates/adminos/locales/migration.rb.erb +0 -18
  84. data/lib/generators/templates/field/locales/migration.rb.erb +0 -13
  85. data/lib/generators/templates/i18n/add_translation_table_to_page.rb +0 -15
  86. data/lib/generators/templates/i18n/auto/config/initializers/globalize_fields.rb +0 -1
  87. data/lib/generators/templates/install/auto/config/deploy/shared/nginx.conf.erb +0 -28
  88. data/lib/generators/templates/install/auto/config/deploy/shared/unicorn.rb.erb +0 -35
  89. data/lib/generators/templates/install/auto/lib/capistrano/substitute_strings.rb +0 -12
  90. data/package-lock.json +0 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1dd7956b8e247ace0302f2da00df9bd1a437de8b0ed52bc1e5bb575fe4889fcc
4
- data.tar.gz: 2980ad30232cc36f622c1059c6c77e0273500a6ba53cd9513e4c66e10aedd012
3
+ metadata.gz: 8b5e4c3f3ca3f62630cea3a1f944cdbfc825974f295b1e056ad9e27fc571b59f
4
+ data.tar.gz: 58829a898a9194f9d3836e5743716f581e0be4cd61c7425da5942b3ffa94d461
5
5
  SHA512:
6
- metadata.gz: 7271cb01c26fc3fc4471fffa46ee1250934f85872b2438eb7d590d13334585ca78a1347968254913e0a00383e9ee0a90041b46e33b046149f326c75b509750cc
7
- data.tar.gz: 50b733a689694add1c82c11b26eadb3fc8abf3a7212fe1bca1dc22ffa8395d9335b7c4feb073a5c380748dd4db6782113c9d1091d1383b4bf2ca3a23c6fc5ec2
6
+ metadata.gz: c2fbcdb16cc34d96aa89f42e1b8bc8d15bebacfcbdbd88821560317f6682f694baa360597f3b1f3858b277d2e5b2c59415aa33722fc9e6218ff7dce3d10fc728
7
+ data.tar.gz: c7b3733876ea14ee809f01b64d94781c8f239830f4261ea3cc83d096f5e0ca7eefd84ca6ea1a43fd04eeb9ff4d4d60fa039141954cd44141ad8d3cfb148a6a17
data/Gemfile CHANGED
@@ -18,8 +18,7 @@ group :development do
18
18
  end
19
19
 
20
20
  gem 'guard-minitest', '~> 2.4'
21
- gem 'globalize'
22
21
  gem 'friendly_id'
23
22
  gem 'activerecord-nulldb-adapter', git: 'git://github.com/nulldb/nulldb.git'
24
- gem 'sqlite3'
25
- gem 'database_cleaner'
23
+ gem 'sqlite3', '~> 1.3.6'
24
+ gem 'database_cleaner'
data/README.md CHANGED
@@ -51,6 +51,32 @@ If no need in SEO fields, switch it off using `--no-seo`.
51
51
  $ rails g adminos Model --no-seo
52
52
 
53
53
  ## Features
54
+ ### Filters
55
+
56
+ To add filtering by any attributes you need to add the required filters in the controller. Below is an example.
57
+
58
+ ```ruby
59
+ class Admin::ProductsController < Admin::BaseController
60
+ add_filter :name
61
+ add_filter :price
62
+ add_filter :published
63
+
64
+ #some code
65
+ end
66
+ ```
67
+
68
+ ### Search
69
+
70
+ By default, search is enabled only on user models.
71
+
72
+ To add a search, run the following generator.
73
+
74
+ ```
75
+ rails generate adminos:search ModelName
76
+ ```
77
+
78
+ You can use search engines such as ElasticSearch or PgSearch. By default, PgSearch is used if you did not specify the --search = elastic flag when installing adminos.
79
+
54
80
  ### Cropped
55
81
  model
56
82
  ```ruby
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |gem|
2
2
  gem.name = 'adminos'
3
- gem.version = '1.0.0-rc.2'
3
+ gem.version = '1.0.0-rc.3'
4
4
  gem.authors = ['RavWar', 'milushov', 'abuhtoyarov', 'SiebenSieben']
5
5
  gem.email = ['studio@molinos.ru']
6
6
  gem.homepage = 'https://gitlab.molinos.ru/global/adminos'
@@ -22,11 +22,11 @@ Gem::Specification.new do |gem|
22
22
  gem.add_dependency 'babosa'
23
23
  gem.add_dependency 'simple_form'
24
24
  gem.add_dependency 'kaminari'
25
- gem.add_dependency 'russian'
26
25
  gem.add_dependency 'devise'
27
26
  gem.add_dependency 'cancancan'
28
27
  gem.add_dependency 'cocoon'
29
28
  gem.add_dependency 'awesome_nested_set'
29
+ gem.add_dependency 'ransack'
30
30
 
31
31
  gem.add_development_dependency 'bundler', '~> 1.3'
32
32
  gem.add_development_dependency 'm'
@@ -23,13 +23,25 @@ class CroppInput < SimpleForm::Inputs::Base
23
23
 
24
24
  aspect_ratio = input_html_options.delete(:aspect_ratio) || '16/9'
25
25
  aspect_ratio = aspect_ratio.split('/').map(&:to_f)
26
- aspect_ratio = aspect_ratio[0]/aspect_ratio[1]
26
+ aspect_ratio = aspect_ratio[0] / aspect_ratio[1]
27
27
 
28
28
  out << %{<div class="row"><div class="col-md-8"><div class="img-container">}
29
29
 
30
30
  out << template.image_tag(object.send(attribute_name), data: { aspect_ratio: aspect_ratio, preview: ".#{@version}_#{attribute_name}_preview", toggle: 'cropp', coord: @coord_attribute })
31
31
 
32
32
  out << %{</div></div><div class="col-md-4">}
33
+ out << %{<div class="cropper-dimensions">}
34
+ out << %{<div class="field">}
35
+ out << template.label_tag(:width, 'Ширина', class: 'control-label')
36
+ out << template.number_field_tag(:width, nil, class: 'form-control')
37
+ out << %{</div>}
38
+ out << %{<div class="field">}
39
+
40
+ out << template.label_tag(:height, 'Высота', class: 'control-label')
41
+ out << template.number_field_tag(:height, nil, class: 'form-control')
42
+ out << %{</div>}
43
+
44
+ out << %{</div>}
33
45
  out << %{<div class="docs-preview clearfix">}
34
46
  out << %{<div class="img-preview preview-lg #{@version}_#{attribute_name}_preview"></div>}
35
47
  out << cropped
@@ -0,0 +1,18 @@
1
+ module FilterInputs
2
+ class BooleanInput < SimpleForm::Inputs::CollectionSelectInput
3
+ def input(wrapper_options = nil)
4
+ label_method, value_method = detect_collection_methods
5
+
6
+ merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
7
+
8
+ @builder.collection_select(
9
+ filter_attribute_name, collection, value_method, label_method,
10
+ input_options, merged_input_options
11
+ )
12
+ end
13
+
14
+ def filter_attribute_name
15
+ "#{attribute_name}_eq"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,36 @@
1
+ module FilterInputs
2
+ class DateRangeInput < SimpleForm::Inputs::StringInput
3
+ def input(wrapper_options = nil)
4
+ @wrapper_options = wrapper_options
5
+ out = []
6
+
7
+ out << input_html
8
+ out.join.html_safe
9
+ end
10
+
11
+ def input_html
12
+ merged_input_options = merge_wrapper_options(input_html_options, @wrapper_options)
13
+ [
14
+ @builder.text_field(gt_input_name, merged_input_options.merge(placeholder: gt_input_placeholder, class: 'date-picker form-control')),
15
+ @builder.text_field(lt_input_name, merged_input_options.merge(placeholder: lt_input_placeholder, class: 'date-picker form-control'))
16
+ ].join("\n").html_safe
17
+ end
18
+
19
+ def gt_input_name
20
+ "#{attribute_name}_gteq"
21
+ end
22
+ alias :input_name :gt_input_name
23
+
24
+ def lt_input_name
25
+ "#{attribute_name}_lteq"
26
+ end
27
+
28
+ def gt_input_placeholder
29
+ 'От'
30
+ end
31
+
32
+ def lt_input_placeholder
33
+ 'До'
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,40 @@
1
+ module FilterInputs
2
+ class NumericInput < SimpleForm::Inputs::StringInput
3
+ def input(wrapper_options = nil)
4
+ @wrapper_options = wrapper_options
5
+ out = []
6
+ out << select_html
7
+ out << input_html
8
+ out.join.html_safe
9
+ end
10
+
11
+ def select_html
12
+ template.select_tag '', template.options_for_select(filter_options, current_filter), class: 'select_filter form-control'
13
+ end
14
+
15
+ def input_html
16
+ merged_input_options = merge_wrapper_options(input_html_options, @wrapper_options)
17
+ @builder.text_field current_filter, merged_input_options.merge(class: 'form-control')
18
+ end
19
+
20
+ def current_filter
21
+ @current_filter ||= begin
22
+ attributes = filters.map { |f| "#{attribute_name}_#{f}" }
23
+ attributes.detect { |m| object.public_send m } || attributes.first
24
+ end
25
+ end
26
+
27
+ def label_html
28
+ end
29
+
30
+ def filter_options
31
+ filters.map do |filter|
32
+ [filter, "#{attribute_name}_#{filter}"]
33
+ end
34
+ end
35
+
36
+ def filters
37
+ %w(eq gt lt)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ module FilterInputs
2
+ class StringInput < SimpleForm::Inputs::StringInput
3
+ def input(wrapper_options = nil)
4
+ @wrapper_options = wrapper_options
5
+ out = []
6
+ out << select_html
7
+ out << input_html
8
+ out.join.html_safe
9
+ end
10
+
11
+ def select_html
12
+ template.select_tag '', template.options_for_select(filter_options, current_filter), class: 'select_filter form-control'
13
+ end
14
+
15
+ def input_html
16
+ merged_input_options = merge_wrapper_options(input_html_options, @wrapper_options)
17
+ @builder.text_field current_filter, merged_input_options.merge(class: 'form-control')
18
+ end
19
+
20
+ def current_filter
21
+ @current_filter ||= begin
22
+ attributes = filters.map { |f| "#{attribute_name}_#{f}" }
23
+ attributes.detect { |m| object.public_send m } || attributes.first
24
+ end
25
+ end
26
+
27
+ def label_html
28
+ end
29
+
30
+ def filter_options
31
+ filters.map do |filter|
32
+ [filter, "#{attribute_name}_#{filter}"]
33
+ end
34
+ end
35
+
36
+ def filters
37
+ %w(cont eq start end)
38
+ end
39
+ end
40
+ end
@@ -3,17 +3,38 @@ require 'rails'
3
3
  require 'jquery-fileupload-rails'
4
4
  require 'dotenv-rails'
5
5
  require 'babosa'
6
- require 'russian'
7
6
  require 'devise'
8
7
  require 'cancancan'
8
+ require 'ransack'
9
9
  require 'cocoon'
10
+ require 'simple_form'
10
11
 
11
12
  module Adminos
13
+
14
+ autoload :FormBuilder, 'adminos/form_builder'
15
+
16
+ class << self
17
+ attr_writer :configuration
18
+ end
19
+
20
+ def self.configuration
21
+ @configuration ||= Configuration.new
22
+ end
23
+
24
+ def self.reset
25
+ @configuration = Configuration.new
26
+ end
27
+
28
+ def self.configure
29
+ yield(configuration)
30
+ end
31
+
12
32
  Helpers = Module.new
13
33
  NestedSet = Module.new
14
34
  Controllers = Module.new
15
35
  StatefulLink = Module.new
16
36
 
37
+
17
38
  Path.require_tree 'adminos', except: %w[generators operations]
18
39
 
19
40
  class Engine < ::Rails::Engine
@@ -26,6 +47,7 @@ module Adminos
26
47
  initializer 'adminos.controller_helpers' do
27
48
  ActionController::Base.send :include, Controllers::Helpers
28
49
  ActionController::Base.send :include, Controllers::Resource
50
+ ActionController::Base.send :include, Controllers::Filters
29
51
  end
30
52
 
31
53
  initializer 'adminos.stateful_link' do
@@ -38,5 +60,3 @@ module Adminos
38
60
  end
39
61
  end
40
62
  end
41
-
42
- require 'adminos/extensions/nested_set'
@@ -0,0 +1,9 @@
1
+ module Adminos
2
+ class Configuration
3
+ attr_accessor :search_engine
4
+
5
+ def initialize
6
+ @search_engine = Adminos::Search::PgSearch
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,20 @@
1
+ module Adminos::Controllers::Filters
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ helper_method :filters
6
+ end
7
+
8
+ class_methods do
9
+ attr_reader :filters
10
+
11
+ def add_filter(attribute, *args)
12
+ options = args.extract_options!
13
+ (@filters ||= {})[attribute.to_sym] = options
14
+ end
15
+ end
16
+
17
+ def filters
18
+ self.class.filters
19
+ end
20
+ end
@@ -19,7 +19,7 @@ module Adminos::Controllers::Resource
19
19
  with_move_to = options.delete(:with_move_to)
20
20
  with_apply_sortable_order = options.delete(:with_apply_sortable_order)
21
21
 
22
- helper_method :resource, :collection, :resource_class, :resource_params
22
+ helper_method :resource, :collection, :resource_class, :resource_params, :filter
23
23
  helper_method(:parent_resource) if with_parent_resource
24
24
 
25
25
  define_method :create do
@@ -80,11 +80,15 @@ module Adminos::Controllers::Resource
80
80
  if with_parent_resource
81
81
  parent_resource.send(self.resource_as_association)
82
82
  elsif filter_by_locale
83
- resource_class.with_translations(I18n.locale)
83
+ Mobility.with_locale(I18n.locale) do
84
+ resource_class
85
+ end
84
86
  else
85
87
  resource_class
86
88
  end
87
89
 
90
+ collection = collection.search_by(params[:query]) if params[:query].present?
91
+
88
92
  @collection =
89
93
  if collection_scope.is_a?(Array)
90
94
  collection_scope.inject(collection) do |collection, method|
@@ -93,12 +97,19 @@ module Adminos::Controllers::Resource
93
97
  else
94
98
  collection.send(collection_scope)
95
99
  end
100
+
101
+ @collection = @collection.ransack(params[:q]).result if params[:q].present?
102
+ @collection
96
103
  end
97
104
 
98
105
  define_method :build_resource do
99
106
  self.resource_class_scope.new(parameters)
100
107
  end
101
108
 
109
+ define_method :filter do
110
+ @collection.ransack(params[:q])
111
+ end
112
+
102
113
  define_method :parameters do
103
114
  if action_name == ('create') || action_name == ('update')
104
115
  strong_params
@@ -121,17 +132,13 @@ module Adminos::Controllers::Resource
121
132
 
122
133
  _attribute_names = self.resource_class_scope.attribute_names + ids_attributes + rich_text_attributes
123
134
 
124
- if params[resource_params][:translations_attributes]
125
- _translated_attributes = resource_class.translated_attribute_names
126
- attrs = _attribute_names + _translated_attributes
127
- attrs.push(translations_attributes: _translated_attributes + [:id, :locale]) unless _translated_attributes.blank?
128
-
129
- result = params.require(resource_params).permit(attrs)
130
- else
131
- result = params.require(resource_params).permit(*_attribute_names)
135
+ if resource_class.respond_to?(:translated_attribute_names)
136
+ _attribute_names += resource_class.translated_attribute_names.map do |attr|
137
+ I18n.available_locales.map { |locale| "#{attr}_#{Mobility.normalize_locale(locale)}" }
138
+ end.flatten
132
139
  end
133
140
 
134
- result
141
+ params.require(resource_params).permit(*_attribute_names)
135
142
  end
136
143
 
137
144
  define_method :find_resource do
@@ -0,0 +1,12 @@
1
+ module Adminos
2
+ module SimpleFormExtraBase
3
+ # Find reflection name when available, otherwise use attribute
4
+ def reflection_or_attribute_name
5
+ @reflection_or_attribute_name ||= reflection ? reflection.name : attribute_name
6
+ @reflection_or_attribute_name.to_s.gsub(/_(#{I18n.available_locales.join('|')})/, '')
7
+ end
8
+ end
9
+ end
10
+
11
+
12
+ SimpleForm::Inputs::Base.prepend(Adminos::SimpleFormExtraBase)
@@ -0,0 +1,46 @@
1
+ module Adminos
2
+ module Search
3
+ module Elastic
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ searchkick **searchkick_options
8
+
9
+ def search_data
10
+ data = respond_to?(:to_hash) ? to_hash : serializable_hash
11
+ data.delete("id")
12
+ data.delete("_id")
13
+ data.delete("_type")
14
+ data.merge!(actiontext_attributes)
15
+
16
+ data
17
+ end
18
+
19
+ def actiontext_attributes
20
+ reflect_has_one = self.class.reflect_on_all_associations(:has_one)
21
+ rich_text_attributes = reflect_has_one.map(&:name).map { |name| name if name.to_s.include?('rich_text_') }.compact
22
+
23
+ rich_text_attributes.inject({}) do |memo, attr|
24
+ memo[attr] = public_send(attr).to_plain_text
25
+ memo
26
+ end
27
+ end
28
+ end
29
+
30
+ class_methods do
31
+ def search_by(q = nil, *args)
32
+ options = args.extract_options!
33
+ options.merge!(load: false)
34
+
35
+ result_ids = self.search(q, options).results.map(&:id)
36
+
37
+ where(id: result_ids)
38
+ end
39
+
40
+ def searchkick_options
41
+ {}
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end