decko-commons/decko

View on GitHub
mod/monkey/set/all/view_viz.rb

Summary

Maintainability
A
0 mins
Test Coverage
format :html do
  view :views_by_format do
    accordion do
      views_by_format_hash.each_with_object([]) do |(format, views), array|
        context = format.to_name.key
        array << accordion_item(format, body: list_group(views), context: context)
      end
    end
  end

  view :views_by_name do
    views = methods.map do |method|
      Regexp.last_match(1) if method.to_s.match?(/^_view_(.+)$/)
    end.compact.sort
    list_group views
  end

  private

  def views_by_format_hash
    self.class.ancestors.each_with_object({}) do |format_class, hash|
      next unless (views = views_for_format_class format_class).present?

      format_class.name =~ /^Card(::Set)?::(.+?)$/ #::(\w+Format)
      hash[Regexp.last_match(2)] = views
    end
  end

  def views_for_format_class format_class
    format_class.instance_methods.map do |method|
      next unless method.to_s =~ /^_view_(.+)$/

      Regexp.last_match(1)
    end.compact
  end
end