module Card::Set::Format::AbstractFormat

AbstractFormat manages the DSL for defining {#view views}.

Whenever you create a {Format format} block in a {Cardio::Set set module}, you create a format module that is extended with AbstractFormat.

Public Instance Methods

before(view, &block) click to toggle source

define code to be executed before a view is rendered

# File lib/card/set/format/abstract_format.rb, line 108
def before view, &block
  define_method "_before_#{view}", &block
end
set_module() click to toggle source

@return constant for set module (without format)

# File lib/card/set/format/abstract_format.rb, line 138
def set_module
  Card.const_get name.split("::")[0..-2].join("::")
end
setting(name) click to toggle source

Defines a setting method that can be used in all formats. Example:

format do
  setting :cols
  cols 5, 7

  view :some_view do
    cols  # => [5, 7]
  end
end

@param name [Symbol] name of setting. should be available method name

# File lib/card/set/format/abstract_format.rb, line 124
def setting name
  Card::Set::Format::AbstractFormat.send :define_method, name do |*args|
    define_method name do
      args
    end
  end
end
source_location() click to toggle source

file location where set mod is stored

# File lib/card/set/format/abstract_format.rb, line 133
def source_location
  set_module.source_location
end
view(viewname, *args, &block) click to toggle source

Views are the primary way that both sharks and monkeys interact with cards. Sharks select views to use in nests. Monkeys can define and tweak those views. These docs will introduce the basics of view definition.

## Sample view definitions

Here is a very simple view that just defines a label for the card(its name):

view :label do
  card.name
end

View definitions can take the following forms:

view :viewname[, option_hash][, &block]          # standard
view :viewname, alias_to_viewname[, option_hash] # aliasing

## View definition options

  • :alias_to [Symbol] name of view to which this view should be aliased. View must already be defined in self or specified mod.

  • :async render view asynchronously by first rendering a card placeholder and then completing a request. Only applies to HtmlFormat

  • :cache directs how to handle caching for this view. Supported values:

    * *:default* - (default) do not independently cache this view. However, if
      this view is rendered by another view of the same card, and that view is
      cached, it's ok to cache it.
    * *:yes* - cache this view whenever it's safe to do so. Do NOT start
      a new caching when this view is rendered inside another view of the same
      card. And do NOT include
      nested cards in your cache. (Instead, stub them and process them
      separately)
    * *:always* - cache even when rendered within another cached view
    * *:deep* cache this view and include nested cards
    * *:never* - don't ever cache this view, even if it's rendered by another
      view of the same card. Frequently used to prevent caching problems, when
      dynamic context (eg params) can alter the view.

    You should certainly {Card::View::Cache learn more about caching} if you want to develop mods that are safe in a caching environment.

  • :expire handles cache expiration. (can only apply when cache setting is

    yes, always, or deep)
    
    * *:hour* - expire when the hour next changes
    * *:day* - expire when the day next changes
    * *:week* - expire when the week next changes
    * *:month* - expire when the month next changes
  • :compact [True/False]. Is view acceptable for rendering inside ‘compact` view? Default is false.

  • :denial [Symbol]. View to render if permission is denied. Value can be any viewname. Default is ‘:denial`. `:blank` is a common alternative.

  • :perms restricts view permissions. Supported values:

    * *:create*, *:read* (default), *:update*, *:delete* - only users with the
      given permission for the card viewed.
    * *:none* - no permission check; anyone can view
    * a format method name.  Eg `perms: :is_my_view_ok?`
  • :template [Symbol] view is defined in a template. Currently ‘:haml` is the only supported value. See {HamlViews}

  • :unknown [True/False, Symbol]. Configures handling of “unknown” cards. (See {Set::All::States card states}). Supported values:

    * *true* render view even if card is unknown
    * *false* default unknown handling (depends on context, create permissions,
      etc)
    * a *Symbol*: name of view to render
  • :wrap wrap view dynamically. Value is Symbol for wrapper or Hash with wrappers and wrapper options. See {Wrapper}

# File lib/card/set/format/abstract_format.rb, line 94
def view viewname, *args, &block
  def_opts = process_view_opts viewname, args
  define_view_method viewname, def_opts, &block
end
view_for_override(viewname) click to toggle source

simple placeholder for views designed to be overridden elsewhere

# File lib/card/set/format/abstract_format.rb, line 100
def view_for_override viewname
  # LOCALIZE
  view viewname do
    "override '#{viewname}' view"
  end
end