Module: Alchemy::ResourcesHelper

Includes:
Admin::ResourceName
Included in:
Admin::ResourcesController
Defined in:
app/helpers/alchemy/resources_helper.rb

Instance Method Summary collapse

Methods included from Admin::ResourceName

#controller_path_array, #resource_array, #resource_model_name, #resource_name, #resources_name

Instance Method Details

#contains_relations?Boolean

Returns true if the resource contains any relations



119
120
121
# File 'app/helpers/alchemy/resources_helper.rb', line 119

def contains_relations?
  resource_handler.resource_relations.present?
end

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



50
51
52
53
# File 'app/helpers/alchemy/resources_helper.rb', line 50

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

#new_resource_path(options = {}) ⇒ Object



46
47
48
# File 'app/helpers/alchemy/resources_helper.rb', line 46

def new_resource_path(options = {})
  new_polymorphic_path (resource_scope + [resource_handler.namespaced_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. Pass another number to truncate then and pass false to disable this completely.

Options Hash (options):

  • :truncate (Hash) — default: 50

    The length of the value returned.

  • :datetime_format (Hash) — default: alchemy.default

    The format of timestamps.

  • :time_format (Hash) — default: alchemy.time

    The format of time values.



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'app/helpers/alchemy/resources_helper.rb', line 74

def render_attribute(resource, attribute, options = {})
  attribute_value = resource.send(attribute[:name])
  if attribute[:relation]
    record = resource.send(attribute[:relation][:name])
    value = record.present? ? record.send(attribute[:relation][:attr_method]) : Alchemy.t(:not_found)
  elsif attribute_value && attribute[:type].to_s =~ /(date|time)/
    localization_format = if attribute[:type] == :datetime
      options[:datetime_format] || :"alchemy.default"
    elsif attribute[:type] == :date
      options[:date_format] || :"alchemy.default"
    else
      options[:time_format] || :"alchemy.time"
    end
    value = l(attribute_value, format: localization_format)
  elsif attribute[:type] == :boolean
    value = attribute_value ? '<alchemy-icon name="check"></alchemy-icon>'.html_safe : nil
  else
    value = attribute_value
  end

  options.reverse_merge!(truncate: 50)
  if options[:truncate]
    value.to_s.truncate(options.fetch(:truncate, 50))
  else
    value
  end
end

#resource_attribute_field_options(attribute) ⇒ Object

Returns a options hash for simple_form input fields.



103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'app/helpers/alchemy/resources_helper.rb', line 103

def resource_attribute_field_options(attribute)
  options = {hint: resource_handler.help_text_for(attribute)}
  input_type = attribute[:type].to_s
  case input_type
  when "boolean"
    options
  when "date", "time", "datetime"
    options.merge(as: input_type)
  when "text"
    options.merge(as: "text", input_html: {rows: 4})
  else
    options.merge(as: "string")
  end
end

#resource_has_tagsObject



128
129
130
# File 'app/helpers/alchemy/resources_helper.rb', line 128

def resource_has_tags
  resource_model.respond_to?(:tag_counts) && resource_model.tag_counts.any?
end

#resource_instance_variableObject



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

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

#resource_modelObject



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

def resource_model
  resource_handler.model
end

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



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

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

#resource_relations_namesObject

Returns an array of all resource_relations names



124
125
126
# File 'app/helpers/alchemy/resources_helper.rb', line 124

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

#resource_scopeObject



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

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

#resource_url_proxyObject



26
27
28
29
30
31
32
# File 'app/helpers/alchemy/resources_helper.rb', line 26

def resource_url_proxy
  if resource_handler.in_engine?
    eval(resource_handler.engine_name) # rubocop:disable Security/Eval
  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



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

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

#resources_instance_variableObject



22
23
24
# File 'app/helpers/alchemy/resources_helper.rb', line 22

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

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



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

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