Sha256: d74f15afa56d4a38c6c2c405a91e97d7d3d512cbcfac6f0a5488546d67a2aa8e

Contents?: true

Size: 1.59 KB

Versions: 6

Compression:

Stored size: 1.59 KB

Contents

class BlockService
  def self.block_names(path:)
    form_views(path: path).map do |view|
      filename = File.basename(view, '.html.erb')

      # Removes leading _ if exists
      filename.sub!(/^_/, '')
    end
  end

  def self.form_view(name, path:)
    view_by_name(name, form_view_paths(path))
  end

  def self.frontend_view(name, path:)
    view_by_name(name, frontend_view_paths(path))
  end

  def self.frontend_views(path:)
    views(frontend_view_paths(path))
  end

  def self.form_views(path:)
    views(form_view_paths(path))
  end

  private

  # Looks for a block view by its name.
  #
  # It will first search in a specified path and will fallback to the default path
  # An exception will be raised if the view is nowhere to be found
  def self.view_by_name(name, paths)
    views = views(paths)
    view = views.find { |view| view.include?("/_#{name}.html.erb") }

    unless view
      prefixes = paths.map { |path| path.split('app/views/').last }
      raise ActionView::MissingTemplate.new(paths, name, prefixes, true, "headmin") unless view
    end

    view
  end

  def self.form_view_paths(path)
    [app_view_path(path), app_view_path('admin/blocks')].uniq
  end

  def self.frontend_view_paths(path)
    [app_view_path(path), app_view_path('website/blocks')].uniq
  end

  def self.app_view_path(path)
    base_path = 'app/views'
    [base_path, path].join('/')
  end

  def self.views(paths)
    paths.map { |path| views_in_path(path) }.flatten
  end

  def self.views_in_path(path)
    files = Dir.glob("#{path}/*")
    files.map do |file|
      file.split('app/views/').last
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
headmin-0.2.5 app/services/block_service.rb
headmin-0.2.4 app/services/block_service.rb
headmin-0.2.3 app/services/block_service.rb
headmin-0.2.2 app/services/block_service.rb
headmin-0.2.1 app/services/block_service.rb
headmin-0.2.0 app/services/block_service.rb