Module: Alchemy::ResourcesHelper

Included in:
Admin::ResourcesController
Defined in:
lib/alchemy/resources_helper.rb

Instance Method Summary collapse

Instance Method Details

#contains_relations?Boolean

Returns true if the resource contains any relations

Returns:

  • (Boolean)


113
114
115
# File 'lib/alchemy/resources_helper.rb', line 113

def contains_relations?
  resource_handler.resource_relations.present?
end

#edit_resource_path(resource = nil, options = {}) ⇒ Object



46
47
48
49
# File 'lib/alchemy/resources_helper.rb', line 46

def edit_resource_path(resource=nil, options={})
  path_segments = (resource_scope + [resource] or resource_handler.resource_array)
  edit_polymorphic_path path_segments, options
end

#new_resource_path(options = {}) ⇒ Object



42
43
44
# File 'lib/alchemy/resources_helper.rb', line 42

def new_resource_path(options={})
  new_polymorphic_path (resource_scope + [resource_handler.resource_name]), options
end

#render_attribute(resource, attribute, options = {}) ⇒ String

Returns the value from resource attribute

If the attribute has a relation, the related object’s attribute value will be returned.

The output will be truncated after 50 chars.

Parameters:

  • resource (Alchemy::Resource)
  • attribute (Hash)
  • options (Hash) (defaults to: {})

    a customizable set of options

Options Hash (options):

  • :truncate (Hash) — default: 50

    The length of the value returned.

Returns:

  • (String)


71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/alchemy/resources_helper.rb', line 71

def render_attribute(resource, attribute, options={})
  options.reverse_merge!(truncate: 50)
  value = resource.send(attribute[:name])
  if (relation = attribute[:relation]) && value.present?
    record = relation[:model_association].klass.find(value)
    value = record.send(relation[:attr_method])
  elsif attribute[:type] == :datetime && value.present?
    value = l(value)
  end
  value.to_s.truncate(options[:truncate])
rescue ActiveRecord::RecordNotFound => e
  warning e
  _t(:not_found)
end

#resource_attribute_field_options(attribute) ⇒ Object

Returns a options hash for simple_form input fields.



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/alchemy/resources_helper.rb', line 87

def resource_attribute_field_options(attribute)
  options = {hint: resource_handler.help_text_for(attribute)}
  case attribute[:type].to_s
  when 'boolean'
    options
  when 'date', 'datetime'
    options.merge as: 'string',
      input_html: {
        type: 'date',
        value: l(resource_instance_variable.send(attribute[:name]) || Time.now, format: :datepicker)
      }
  when 'time'
    options.merge(as: 'time')
  when 'text'
    options.merge(as: 'text', input_html: {rows: 4})
  else
    options.merge(as: 'string')
  end
end

#resource_instance_variableObject



14
15
16
# File 'lib/alchemy/resources_helper.rb', line 14

def resource_instance_variable
  instance_variable_get("@#{resource_handler.resource_name}")
end

#resource_modelObject



55
56
57
# File 'lib/alchemy/resources_helper.rb', line 55

def resource_model
  resource_handler.model
end

#resource_nameObject



51
52
53
# File 'lib/alchemy/resources_helper.rb', line 51

def resource_name
  resource_handler.resource_name
end

#resource_path(resource = resource_handler.resource_name, options = {}) ⇒ Object



38
39
40
# File 'lib/alchemy/resources_helper.rb', line 38

def resource_path(resource=resource_handler.resource_name, options={})
  resources_path(resource, options)
end

#resource_relations_namesObject

Returns an array of all resource_relations names



118
119
120
# File 'lib/alchemy/resources_helper.rb', line 118

def resource_relations_names
  resource_handler.resource_relations.collect { |k, v| v[:name].to_sym }
end

#resource_scopeObject



30
31
32
# File 'lib/alchemy/resources_helper.rb', line 30

def resource_scope
  @_resource_scope ||= [resource_url_proxy].concat(resource_handler.namespace_for_scope)
end

#resource_url_proxyObject



22
23
24
25
26
27
28
# File 'lib/alchemy/resources_helper.rb', line 22

def resource_url_proxy
  if resource_handler.in_engine?
    eval(resource_handler.engine_name)
  else
    main_app
  end
end

#resource_window_sizeObject

Alchemy::ResourceHelper

Used to DRY up resource like structures in Alchemy’s admin backend in combination with Alchemy::Resource

See Alchemy::Resource for examples how to initialize a resource_handler



10
11
12
# File 'lib/alchemy/resources_helper.rb', line 10

def resource_window_size
  @resource_window_size ||= "420x#{100 + resource_handler.attributes.length * 40}"
end

#resources_headerObject

Renders the human model name with a count as h1 header



108
109
110
# File 'lib/alchemy/resources_helper.rb', line 108

def resources_header
   :h1, "#{resources_instance_variable.total_count} #{resource_model.model_name.human(count: resources_instance_variable.total_count)}", class: 'resources-header'
end

#resources_instance_variableObject



18
19
20
# File 'lib/alchemy/resources_helper.rb', line 18

def resources_instance_variable
  instance_variable_get("@#{resource_handler.resources_name}")
end

#resources_path(resource_or_name = resource_handler.resources_name, options = {}) ⇒ Object



34
35
36
# File 'lib/alchemy/resources_helper.rb', line 34

def resources_path(resource_or_name=resource_handler.resources_name, options={})
  polymorphic_path (resource_scope + [resource_or_name]), options
end

#sortable_resource_header_column(attribute) ⇒ Object

Returns the attribute’s column for sorting

If the attribute contains a resource_relation, then the table and column for related model will be returned.



126
127
128
129
130
131
132
# File 'lib/alchemy/resources_helper.rb', line 126

def sortable_resource_header_column(attribute)
  if relation = attribute[:relation]
    "#{relation[:model_association].table_name}.#{relation[:attr_method]}"
  else
    attribute[:name]
  end
end