Class: Tengine::Core::Event::Finder

Inherits:
Object
  • Object
show all
Includes:
SelectableAttr::Base
Defined in:
lib/tengine/core/event/finder.rb

Constant Summary collapse

ATTRIBUTE_NAMES =
[
  :event_type_name,
  :key,
  :source_name,
  :occurred_at_start,
  :occurred_at_end,
  :level_ids,
  :confirmed,
  :sender_name,
  :properties,
  :refresh_interval, # 更新間隔
].freeze

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) ⇒ Finder

Returns a new instance of Finder.



26
27
28
29
30
31
32
33
# File 'lib/tengine/core/event/finder.rb', line 26

def initialize(attrs = {})
  attrs = {
    :level_ids => default_level_ids
  }.update(attrs || {})
  attrs.each do |attr, v|
    send("#{attr}=", v) unless v.blank?
  end
end

Instance Method Details

#attributesObject



35
36
37
# File 'lib/tengine/core/event/finder.rb', line 35

def attributes
  ATTRIBUTE_NAMES.inject({}){|d, name| d[name] = send(name); d}
end

#default_level_idsObject

デフォルトでは通知レベルがすべて選択された状態にする



40
41
42
43
44
45
46
# File 'lib/tengine/core/event/finder.rb', line 40

def default_level_ids
  result = []
  Tengine::Core::Event.level_entries.each do |entry|
    result << entry.id
  end
  return result
end

#paginate(page = nil) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/tengine/core/event/finder.rb', line 48

def paginate(page = nil)
  result = scope(Tengine::Core::Event)
  if page || result.respond_to?(:page)
    result = result.page(page)
  end
  result
end

#scope(criteria) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/tengine/core/event/finder.rb', line 56

def scope(criteria)
  result = criteria
  result = result.where(:event_type_name => str_or_regexp(event_type_name)) if event_type_name
  result = result.where(:key => key)  if key
  result = result.where(:source_name => str_or_regexp(source_name)) if source_name
  result = result.where(:occurred_at.gte => occurred_at_start) if occurred_at_start
  result = result.where(:occurred_at.lte =>  occurred_at_end) if occurred_at_end
  result = result.any_in(:level => level_ids) if level_ids
  result = result.where(:confirmed => confirmed) if confirmed
  result = result.where(:sender_name => str_or_regexp(sender_name)) if sender_name
  result = result.where(:properties => properties) if properties
  # ソート
  result = result.desc(:occurred_at)
  result
end