Class: Vedeu::Menus::DSL

Inherits:
Object
  • Object
show all
Includes:
DSL
Defined in:
lib/vedeu/menus/dsl.rb

Overview

Provides the mechanism to create menus within client applications and use events to drive them.

Instance Attribute Summary

Attributes included from DSL

#client, #model

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DSL

#attributes, #initialize, #method_missing, #name

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class Vedeu::DSL

Class Method Details

.client(&block) ⇒ Object (private)

Returns the client object which called the DSL method.

Parameters:

  • block (Proc)

Returns:

  • (Object)


55
56
57
# File 'lib/vedeu/menus/dsl.rb', line 55

def client(&block)
  eval('self', block.binding)
end

Register a menu by name which will display a collection of items for your users to select; and provide interactivity within your application.

Examples:

Vedeu.menu :my_interface do
  items [:item_1, :item_2, :item_3]
  # ...
end

Vedeu.menu do
  name :menus_must_have_a_name
  items Track.all_my_favourites
  # ...
end

Parameters:

  • name (NilClass|Symbol|String)

    The name of the model or target model to act upon. May default to ‘Vedeu.focus`.

  • block (Proc)

Returns:

  • (API::Menu)

Raises:



40
41
42
43
44
45
46
47
# File 'lib/vedeu/menus/dsl.rb', line 40

def menu(name, &block)
  raise Vedeu::Error::MissingRequired unless name
  raise Vedeu::Error::RequiresBlock unless block_given?

  attributes = { client: client(&block), name: name }

  Vedeu::Menus::Menu.build(attributes, &block).store
end

Instance Method Details

#item(element) ⇒ Array Also known as: item=

Add an individual item to the menu.

Parameters:

  • element (Object)

    An object you wish to add to the collection.

    Vedeu.menu :my_menu do

    item SomeClass.new
    item SomeClass.new
    

    end

Returns:

  • (Array)


72
73
74
# File 'lib/vedeu/menus/dsl.rb', line 72

def item(element)
  model.collection << element
end

#items(collection = []) ⇒ Array Also known as: items=

Define the items for the menu. Most powerful when used with one of your model classes.

In the :my_playlist example below, your ‘Track` model may return a collection of tracks to populate the menu.

Vedeu.menu :my_menu do
  items [:item_1, :item_2, :item_3]
end

Vedeu.menu :my_playlist do
  items Track.all_my_favourites
end

Parameters:

  • collection (Array<Object>) (defaults to: [])

    A collection of objects which make up the menu items.

Returns:

  • (Array)


94
95
96
# File 'lib/vedeu/menus/dsl.rb', line 94

def items(collection = [])
  model.collection = collection
end