Class: LcpRuby::Search::ParameterDefinition

Inherits:
Object
  • Object
show all
Defined in:
lib/lcp_ruby/search/parameter_definition.rb

Constant Summary collapse

VALID_TYPES =
%w[enum_select association_select boolean_select number_range date_range].freeze
SELECT_TYPES =
%w[enum_select association_select boolean_select].freeze
RANGE_TYPES =
%w[number_range date_range].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name:, type:, field:, model: nil, options: nil, label_key: nil, visible_when: nil, search: nil, min_query_length: nil, per_page: nil, label_method: nil, include_blank: nil, col_span: nil) ⇒ ParameterDefinition

Returns a new instance of ParameterDefinition.



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 13

def initialize(name:, type:, field:, model: nil, options: nil, label_key: nil,
               visible_when: nil, search: nil, min_query_length: nil, per_page: nil,
               label_method: nil, include_blank: nil, col_span: nil)
  @name = name.to_s
  @type = type.to_s
  @field = field.to_s
  @model = model&.to_s
  @options = options
  @label_key = label_key&.to_s
  @visible_when = visible_when
  @search = search
  @min_query_length = min_query_length
  @per_page = per_page
  @label_method = label_method&.to_s
  @include_blank = include_blank
  @col_span = col_span

  validate!
end

Instance Attribute Details

#col_spanObject (readonly)

Returns the value of attribute col_span.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def col_span
  @col_span
end

#fieldObject (readonly)

Returns the value of attribute field.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def field
  @field
end

#include_blankObject (readonly)

Returns the value of attribute include_blank.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def include_blank
  @include_blank
end

#label_keyObject (readonly)

Returns the value of attribute label_key.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def label_key
  @label_key
end

#label_methodObject (readonly)

Returns the value of attribute label_method.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def label_method
  @label_method
end

#min_query_lengthObject (readonly)

Returns the value of attribute min_query_length.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def min_query_length
  @min_query_length
end

#modelObject (readonly)

Returns the value of attribute model.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def model
  @model
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def name
  @name
end

#optionsObject (readonly)

Returns the value of attribute options.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def options
  @options
end

#per_pageObject (readonly)

Returns the value of attribute per_page.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def per_page
  @per_page
end

#searchObject (readonly)

Returns the value of attribute search.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def search
  @search
end

#typeObject (readonly)

Returns the value of attribute type.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def type
  @type
end

#visible_whenObject (readonly)

Returns the value of attribute visible_when.



9
10
11
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 9

def visible_when
  @visible_when
end

Class Method Details

.from_hash(hash) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 33

def self.from_hash(hash)
  hash = HashUtils.stringify_deep(hash)
  new(
    name: hash["name"],
    type: hash["type"],
    field: hash["field"],
    model: hash["model"],
    options: hash["options"],
    label_key: hash["label_key"],
    visible_when: hash["visible_when"],
    search: hash["search"],
    min_query_length: hash["min_query_length"],
    per_page: hash["per_page"],
    label_method: hash["label_method"],
    include_blank: hash["include_blank"],
    col_span: hash["col_span"]
  )
end

Instance Method Details

#association_select?Boolean

Returns:

  • (Boolean)


64
65
66
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 64

def association_select?
  @type == "association_select"
end

#auto_derive_options(model_definition) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 142

def auto_derive_options(model_definition)
  if enum_select?
    if @options.present?
      @options.map { |opt| [ opt.to_s.humanize, opt.to_s ] }
    else
      field_def = model_definition.fields.find { |f| f.name == @field }
      return [] unless field_def&.enum?

      model_name = model_definition.name
      field_def.enum_value_names.map { |val|
        [ field_def.enum_label_for(val, model_name: model_name), val ]
      }
    end
  elsif boolean_select?
    [
      [ I18n.t("lcp_ruby.parameters.boolean.yes", default: "Yes"), "true" ],
      [ I18n.t("lcp_ruby.parameters.boolean.no", default: "No"), "false" ]
    ]
  else
    []
  end
end

#blank_labelObject



97
98
99
100
101
102
103
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 97

def blank_label
  case @include_blank
  when false then nil
  when String then @include_blank
  else I18n.t("lcp_ruby.parameters.all", default: "All")
  end
end

#boolean_select?Boolean

Returns:

  • (Boolean)


68
69
70
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 68

def boolean_select?
  @type == "boolean_select"
end

#date_range?Boolean

Returns:

  • (Boolean)


76
77
78
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 76

def date_range?
  @type == "date_range"
end

#effective_col_span(grid_columns) ⇒ Object



84
85
86
87
88
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 84

def effective_col_span(grid_columns)
  return @col_span if @col_span
  return 2 if range_type? && grid_columns >= 2
  nil
end

#enum_select?Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 60

def enum_select?
  @type == "enum_select"
end

#labelObject



134
135
136
137
138
139
140
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 134

def label
  if @label_key.present?
    I18n.t(@label_key, default: @name.humanize)
  else
    I18n.t("lcp_ruby.parameters.#{@name}", default: @name.humanize)
  end
end

#number_range?Boolean

Returns:

  • (Boolean)


72
73
74
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 72

def number_range?
  @type == "number_range"
end

#range_type?Boolean

Returns:

  • (Boolean)


56
57
58
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 56

def range_type?
  RANGE_TYPES.include?(@type)
end

#ransack_param_keysObject



114
115
116
117
118
119
120
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 114

def ransack_param_keys
  if range_type?
    [ "#{@field}_gteq", "#{@field}_lteq" ]
  else
    [ "#{@field}_eq" ]
  end
end

#read_current_value(params_f) ⇒ Object



122
123
124
125
126
127
128
129
130
131
132
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 122

def read_current_value(params_f)
  return nil if params_f.blank?

  if range_type?
    from_val = params_f["#{@field}_gteq"]
    to_val = params_f["#{@field}_lteq"]
    (from_val.present? || to_val.present?) ? { from: from_val, to: to_val } : nil
  else
    params_f["#{@field}_eq"]
  end
end

#remote_search?Boolean

Returns:

  • (Boolean)


80
81
82
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 80

def remote_search?
  !!@search
end

#select_type?Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 52

def select_type?
  SELECT_TYPES.include?(@type)
end

#to_input_optionsObject



105
106
107
108
109
110
111
112
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 105

def to_input_options
  opts = {}
  opts["search"] = true if @search
  opts["label_method"] = @label_method if @label_method.present?
  opts["per_page"] = @per_page if @per_page
  opts["min_query_length"] = @min_query_length if @min_query_length
  opts
end

#visible_for_user?(user) ⇒ Boolean

Returns:

  • (Boolean)


90
91
92
93
94
95
# File 'lib/lcp_ruby/search/parameter_definition.rb', line 90

def visible_for_user?(user)
  return true unless @visible_when.is_a?(Hash) && @visible_when["role"].present?
  return false unless user

  (LcpRuby.user_roles(user) & Array(@visible_when["role"]).map(&:to_s)).any?
end