Class: Debci::Admin

Inherits:
AuthApp show all
Includes:
HTMLHelpers
Defined in:
lib/debci/admin.rb

Defined Under Namespace

Classes: Model

Constant Summary

Constants included from HTMLHelpers

HTMLHelpers::ICONS

Class Method Summary collapse

Instance Method Summary collapse

Methods included from HTMLHelpers

#ansi_to_html, #expand_pin_packages, #expand_url, #file_link, #history_url, #icon, #package_url, #pkg_history_url, #title_test_trigger_pin

Methods inherited from AuthApp

#authenticate!, #forbidden

Methods inherited from App

#get_page_params, get_page_range, #get_page_range, #pagination_params, #refresh!

Class Method Details

.model(name, **opts) ⇒ Object



16
17
18
19
20
21
22
# File 'lib/debci/admin.rb', line 16

def self.model(name, **opts)
  model = Model.new(name)
  opts.each do |k, v|
    model.send("#{k}=", v)
  end
  settings.models[name] = model
end

Instance Method Details

#current_modelObject



122
123
124
# File 'lib/debci/admin.rb', line 122

def current_model
  @current_model ||= current_model_info.ar_class
end

#current_model_infoObject



118
119
120
# File 'lib/debci/admin.rb', line 118

def current_model_info
  @current_model_info ||= settings.models[params[:model].to_sym]
end

#current_model_nameObject



114
115
116
# File 'lib/debci/admin.rb', line 114

def current_model_name
  @current_model_name ||= params[:model]
end

#current_objectObject



130
131
132
133
134
# File 'lib/debci/admin.rb', line 130

def current_object
  @current_object ||= current_model.find(params[:id])
rescue ActiveRecord::RecordNotFound
  halt 404
end

#fieldsObject



136
137
138
# File 'lib/debci/admin.rb', line 136

def fields
  @fields ||= current_model_info.fields
end

#format(field, value) ⇒ Object



140
141
142
143
144
145
146
147
148
# File 'lib/debci/admin.rb', line 140

def format(field, value)
  return value unless current_model_info.formatters

  field = field.to_sym
  formatter = current_model_info.formatters[field]
  return value unless formatter

  instance_exec(value, &formatter)
end

#orderObject



126
127
128
# File 'lib/debci/admin.rb', line 126

def order
  current_model_info.order || :id
end

#parse(field, value) ⇒ Object



150
151
152
153
154
155
156
157
# File 'lib/debci/admin.rb', line 150

def parse(field, value)
  return value unless current_model_info.parsers

  parser = current_model_info.parsers[field]
  return value unless parser

  instance_exec(value, &parser)
end

#parse_size(str) ⇒ Object



159
160
161
162
163
164
165
166
167
168
# File 'lib/debci/admin.rb', line 159

def parse_size(str)
  n = str.to_i
  case str
  when /mb$/i
    n *= 1.megabyte
  when /gb$/i
    n *= 1.gigabyte
  end
  n
end

#read_only_fieldsObject



174
175
176
177
178
179
180
181
182
183
# File 'lib/debci/admin.rb', line 174

def read_only_fields
  @read_only_fields ||=
    if current_model_info.read_only_fields
      current_model_info.read_only_fields
    elsif current_model_info.edit_fields
      current_model_info.fields - current_model_info.edit_fields
    else
      []
    end
end

#save_object(object, params, read_only_fields) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/debci/admin.rb', line 102

def save_object(object, params, read_only_fields)
  data = params.reject do |key, _value|
    [:model, :id].include?(key.to_sym) || read_only_fields.include?(key.to_sym)
  end
  data.each_key do |f|
    column = current_model.columns_hash[f]
    data[f] = nil if column.null && data[f].blank?
    data[f] = parse(f.to_sym, data[f]) if data[f]
  end
  object.update!(data) # FIXME: handle validation failures
end

#search_fieldsObject



185
186
187
# File 'lib/debci/admin.rb', line 185

def search_fields
  @search_fields ||= current_model_info.search_fields
end

#select_fieldsObject



170
171
172
# File 'lib/debci/admin.rb', line 170

def select_fields
  @select_fields ||= current_model_info.select_fields || []
end