Class: Debci::Admin

Inherits:
App
  • Object
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 App

#authenticate!, #forbidden, #get_page_params, get_page_range, #get_page_range, #logged_in?, #logging_in?, #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



129
130
131
# File 'lib/debci/admin.rb', line 129

def current_model
  @current_model ||= current_model_info.ar_class
end

#current_model_infoObject



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

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

#current_model_nameObject



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

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

#current_objectObject



137
138
139
140
141
# File 'lib/debci/admin.rb', line 137

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

#fieldsObject



143
144
145
# File 'lib/debci/admin.rb', line 143

def fields
  @fields ||= current_model_info.fields
end

#format(field, value) ⇒ Object



147
148
149
150
151
152
153
154
155
# File 'lib/debci/admin.rb', line 147

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



133
134
135
# File 'lib/debci/admin.rb', line 133

def order
  current_model_info.order || :id
end

#parse(field, value) ⇒ Object



157
158
159
160
161
162
163
164
# File 'lib/debci/admin.rb', line 157

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



166
167
168
169
170
171
172
173
174
175
# File 'lib/debci/admin.rb', line 166

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

#read_object(object, params, read_only_fields) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/debci/admin.rb', line 108

def read_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.attributes = data
  object
end

#read_only_fieldsObject



181
182
183
184
185
186
187
188
189
190
# File 'lib/debci/admin.rb', line 181

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

#search_fieldsObject



192
193
194
# File 'lib/debci/admin.rb', line 192

def search_fields
  @search_fields ||= current_model_info.search_fields
end

#select_fieldsObject



177
178
179
# File 'lib/debci/admin.rb', line 177

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