Class: Workarea::Search::Admin

Inherits:
Object
  • Object
show all
Includes:
Elasticsearch::Document
Defined in:
app/models/workarea/search/admin.rb,
app/models/workarea/search/admin/user.rb,
app/models/workarea/search/admin/order.rb,
app/models/workarea/search/admin/content.rb,
app/models/workarea/search/admin/release.rb,
app/models/workarea/search/admin/segment.rb,
app/models/workarea/search/admin/navigation.rb,
app/models/workarea/search/admin/releasable.rb,
app/models/workarea/search/admin/pricing_sku.rb,
app/models/workarea/search/admin/content_page.rb,
app/models/workarea/search/admin/content_asset.rb,
app/models/workarea/search/admin/inventory_sku.rb,
app/models/workarea/search/admin/catalog_product.rb,
app/models/workarea/search/admin/fulfillment_sku.rb,
app/models/workarea/search/admin/navigation_menu.rb,
app/models/workarea/search/admin/catalog_category.rb,
app/models/workarea/search/admin/pricing_discount.rb,
app/models/workarea/search/admin/payment_transaction.rb

Defined Under Namespace

Modules: Releasable Classes: CatalogCategory, CatalogProduct, Content, ContentAsset, ContentPage, FulfillmentSku, InventorySku, Navigation, NavigationMenu, Order, PaymentTransaction, PricingDiscount, PricingSku, Release, Segment, User

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Elasticsearch::Document

all, #as_bulk_document, current_index_prefix, #destroy, #initialize, #save

Class Method Details

.for(model) ⇒ Object



31
32
33
34
35
36
# File 'app/models/workarea/search/admin.rb', line 31

def self.for(model)
  subclass = model.model_name.singular_route_key.camelize
  "Workarea::Search::Admin::#{subclass}".constantize.new(model)
rescue NameError
  nil
end

.jump_to(params, size = Workarea.config.default_admin_jump_to_result_count) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/models/workarea/search/admin.rb', line 6

def self.jump_to(params, size = Workarea.config.default_admin_jump_to_result_count)
  query = {
    query: {
      match_phrase_prefix: {
        jump_to_search_text: {
          query: params[:q],
          max_expansions: 10
        }
      }
    },
    size: size,
    sort: [{ jump_to_position: :asc }]
  }

  search(query)['hits']['hits'].map do |result|
    {
      label: result['_source']['jump_to_text'],
      type: result['_source']['facets']['type'],
      model_class: result['_source']['model_class'],
      route_helper: result['_source']['jump_to_route_helper'],
      to_param: result['_source']['jump_to_param']
    }
  end
end

Instance Method Details

#as_documentObject



114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'app/models/workarea/search/admin.rb', line 114

def as_document
  {
    id: id,
    name: name,
    facets: facets,
    created_at: created_at,
    updated_at: updated_at,
    keywords: sanitized_keywords,
    search_text: search_text,
    jump_to_text: jump_to_text,
    jump_to_search_text: jump_to_search_text,
    jump_to_position: jump_to_position,
    jump_to_route_helper: jump_to_route_helper,
    jump_to_param: jump_to_param,
    releasable: releasable?
  }
end

#created_atObject



102
103
104
# File 'app/models/workarea/search/admin.rb', line 102

def created_at
  model.created_at
end

#facetsObject



76
77
78
79
80
# File 'app/models/workarea/search/admin.rb', line 76

def facets
  base = { status: status, type: type }
  base[:tags] = model.tags if model.respond_to?(:tags)
  base
end

#idObject



48
49
50
# File 'app/models/workarea/search/admin.rb', line 48

def id
  "#{type}-#{model.id}"
end

#jump_to_paramObject



98
99
100
# File 'app/models/workarea/search/admin.rb', line 98

def jump_to_param
  model.to_param
end

#jump_to_positionObject



90
91
92
# File 'app/models/workarea/search/admin.rb', line 90

def jump_to_position
  999
end

#jump_to_route_helperObject



94
95
96
# File 'app/models/workarea/search/admin.rb', line 94

def jump_to_route_helper
  "#{model.model_name.singular_route_key}_path"
end

#jump_to_search_textObject



86
87
88
# File 'app/models/workarea/search/admin.rb', line 86

def jump_to_search_text
  search_text
end

#jump_to_textObject



82
83
84
# File 'app/models/workarea/search/admin.rb', line 82

def jump_to_text
  name
end

#keywordsObject



68
69
70
# File 'app/models/workarea/search/admin.rb', line 68

def keywords
  [model.id, *model.try(:tags)]
end

#nameObject



52
53
54
# File 'app/models/workarea/search/admin.rb', line 52

def name
  model.name
end

#releasable?Boolean

Returns:

  • (Boolean)


110
111
112
# File 'app/models/workarea/search/admin.rb', line 110

def releasable?
  model.is_a?(Workarea::Releasable)
end

#sanitized_keywordsObject



72
73
74
# File 'app/models/workarea/search/admin.rb', line 72

def sanitized_keywords
  keywords.reject(&:blank?).map(&:to_s).map(&:downcase).map(&:strip)
end

#search_textObject

Raises:

  • (NotImplementedError)


64
65
66
# File 'app/models/workarea/search/admin.rb', line 64

def search_text
  raise(NotImplementedError, "#{self.class} must implement #search_text")
end

#should_be_indexed?Boolean

Allows subclass instances to specify whether they should be included in the Admin index. For example, allow system Content to be included, but not Content that belongs to a model.

Returns:

  • (Boolean)


44
45
46
# File 'app/models/workarea/search/admin.rb', line 44

def should_be_indexed?
  true
end

#statusObject



60
61
62
# File 'app/models/workarea/search/admin.rb', line 60

def status
  nil
end

#typeObject



56
57
58
# File 'app/models/workarea/search/admin.rb', line 56

def type
  model.class.name.demodulize.underscore
end

#updated_atObject



106
107
108
# File 'app/models/workarea/search/admin.rb', line 106

def updated_at
  model.updated_at
end