module Molecule::Helper

Public Instance Methods

default_molecule_name() click to toggle source
# File lib/molecule/helper.rb, line 59
def default_molecule_name
  "#{controller_name}_#{action_name}"
end
molecule_asset_contents(molecule_name, asset_group, asset_type) click to toggle source
# File lib/molecule/helper.rb, line 36
def molecule_asset_contents molecule_name, asset_group, asset_type
  ::File.read(abolute_asset_path(molecule_name, asset_group, asset_type)).html_safe
end
molecule_defer_script(molecule_name = default_molecule_name) click to toggle source
# File lib/molecule/helper.rb, line 23
def molecule_defer_script molecule_name = default_molecule_name
  relative_link = molecule_relative_path(molecule_name, 'defer', 'scripts')
  content_tag(:script, '', {defer: :defer, src: relative_link}).html_safe
end
molecule_defer_style(molecule_name = default_molecule_name) click to toggle source
# File lib/molecule/helper.rb, line 16
def molecule_defer_style molecule_name = default_molecule_name
  relative_link = molecule_relative_path(molecule_name, 'defer', 'styles')
  content_tag(:noscript, class: 'defered-style') do
    content_tag(:link, '', {rel: :stylesheet, type: 'text/css', href: relative_link}).html_safe
  end.html_safe
end
molecule_inject_script_name(molecule_name = default_molecule_name) click to toggle source
# File lib/molecule/helper.rb, line 28
def molecule_inject_script_name molecule_name = default_molecule_name
  relative_link = molecule_relative_path(molecule_name, 'defer', 'scripts')
  content_tag(:script, "window.script_name='#{relative_link}';".html_safe).html_safe
rescue
  Rails.logger.warn "no inline script name for '#{molecule_name}'"
  ''
end
molecule_inline_script(molecule_name = default_molecule_name) click to toggle source
# File lib/molecule/helper.rb, line 9
def molecule_inline_script molecule_name = default_molecule_name
  content_tag(:script, molecule_asset_contents(molecule_name, 'inline', 'scripts')).html_safe
rescue
  Rails.logger.warn "no inline script for '#{molecule_name}'"
  ''
end
molecule_inline_sprite(molecule_name = default_molecule_name) click to toggle source
# File lib/molecule/helper.rb, line 45
def molecule_inline_sprite molecule_name = default_molecule_name
  manifest_path = Rails.root.join('public', 'manifests', "#{molecule_name}/icons-inline.json")

  unless ::File.exists?(manifest_path)
    Rails.logger.warn("asset manifest not found: '#{manifest_path}'")
    return ''
  end

  manifest = ::File.read(manifest_path)
  json = JSON.parse(manifest);
  asset_path = Rails.root.join('public', 'assets', 'svg', json["#{molecule_name}.svg"])
  ::File.read(asset_path).html_safe
end
molecule_inline_style(molecule_name = default_molecule_name) click to toggle source
# File lib/molecule/helper.rb, line 5
def molecule_inline_style molecule_name = default_molecule_name
  content_tag(:style, molecule_asset_contents(molecule_name, 'inline', 'styles')).html_safe
end
molecule_relative_path(molecule_name, asset_group, asset_type) click to toggle source
# File lib/molecule/helper.rb, line 40
def molecule_relative_path molecule_name, asset_group, asset_type
  suffix, asset = find_asset(molecule_name, asset_group, asset_type)
  "/assets/#{suffix}/#{asset}"
end

Private Instance Methods

abolute_asset_path(molecule_name, asset_group, asset_type) click to toggle source
# File lib/molecule/helper.rb, line 75
def abolute_asset_path molecule_name, asset_group, asset_type
  suffix, asset = find_asset(molecule_name, asset_group, asset_type)
  Rails.root.join('public', 'assets', suffix, asset)
end
find_asset(molecule_name, asset_group, asset_type) click to toggle source
# File lib/molecule/helper.rb, line 67
def find_asset molecule_name, asset_group, asset_type
  config = load_manifest(molecule_name, asset_group, asset_type)
  suffix = suffix_for_type(asset_type)
  asset_slug = "#{molecule_name}-#{asset_type}-#{asset_group}.#{suffix}"
  asset = config[asset_slug]
  return suffix, asset
end
load_manifest(molecule_name, asset_group, asset_type) click to toggle source
# File lib/molecule/helper.rb, line 91
def load_manifest molecule_name, asset_group, asset_type
  manifest = ::File.read(manifest_path(molecule_name, asset_group, asset_type))
  JSON.parse(manifest);
end
manifest_path(molecule_name, asset_group, asset_type) click to toggle source
# File lib/molecule/helper.rb, line 96
def manifest_path molecule_name, asset_group, asset_type
  Rails.root.join('public', 'manifests', "#{molecule_name}/#{asset_type}-#{asset_group}.json")
end
suffix_for_type(asset_type) click to toggle source
# File lib/molecule/helper.rb, line 80
def suffix_for_type asset_type
  case asset_type
    when 'scripts'
      'js'
    when 'styles'
      'css'
    else
      raise "unknown asset type: #{asset_type}"
  end
end