class Moonrope::DSL::StructureDSL

Attributes

conditions[RW]

@return [Array] conditions which should applied

groups[RW]

@return [Array] groups which should applied

options[RW]

@return [Hash] options

structure[R]

@return [Moonrope::Structure] the associated structure

Public Class Methods

new(structure) click to toggle source

Initialize a new StructureDSL

@param structure [Moonrope::Structure]

# File lib/moonrope/dsl/structure_dsl.rb, line 24
def initialize(structure)
  @structure = structure
  @options = {}
  @groups = []
  @conditions = []
end

Public Instance Methods

attribute(type, name, options_or_description = {}, options_if_description = {}) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 62
def attribute(type, name, options_or_description = {}, options_if_description = {})

  if options_or_description.is_a?(String)
    options_if_description[:description] = options_or_description
    options = options_if_description
  else
    options = options_or_description
  end

  attribute                   = StructureAttribute.new(type, name)
  attribute.description       = options[:description]
  attribute.structure         = options[:structure]
  attribute.structure_opts    = options[:structure_opts]
  attribute.value_type        = options[:type]
  attribute.source_attribute  = options[:source_attribute]
  attribute.value             = options[:value]
  attribute.example           = options[:eg] || options[:example]
  attribute.doc               = options[:doc]
  attribute.mutation          = options[:mutation]
  attribute.groups            = @groups
  attribute.conditions        = @conditions
  @structure.attributes[type] << attribute
end
basic(*args, &block) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 86
def basic(*args, &block)
  if block_given?
    @structure.basic = block
  else
    attribute(:basic, *args)
  end
end
condition(condition, description = nil, &block) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 48
def condition(condition, description = nil, &block)
  scope_dsl = self.class.new(@structure)
  if condition.is_a?(Hash) && condition.size == 1
    condition = {:authenticator => condition.first[0], :access_rule => condition.first[1]}
  elsif condition.is_a?(Symbol)
    condition = {:authenticator => :default, :access_rule => condition}
  else
    condition = {:block => condition, :description => description}
  end
  scope_dsl.conditions = [@conditions, condition].flatten
  scope_dsl.groups = @groups
  scope_dsl.instance_eval(&block)
end
expansion(name, *args, &block) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 102
def expansion(name, *args, &block)
  if block_given?
    if args[0].is_a?(String)
      attrs = args[1] || {}
      attrs[:description] = args[0]
    elsif args[0].is_a?(Hash)
      attrs = atrs[0]
    else
      attrs = {}
    end

    @structure.expansions[name] = attrs.merge({:block => block, :conditions => @conditions})
  else
    attribute(:expansion, name, *args)
  end
end
full(*args, &block) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 94
def full(*args, &block)
  if block_given?
    @structure.full = block
  else
    attribute(:full, *args)
  end
end
group(name, &block) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 41
def group(name, &block)
  scope_dsl = self.class.new(@structure)
  scope_dsl.groups = [@groups, name].flatten
  scope_dsl.conditions = @conditions
  scope_dsl.instance_eval(&block)
end
no_doc!() click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 31
def no_doc!
  @structure.doc = false
end
scope(options = {}, &block) click to toggle source
# File lib/moonrope/dsl/structure_dsl.rb, line 35
def scope(options = {}, &block)
  scope_dsl = self.class.new(@structure)
  scope_dsl.options = options
  scope_dsl.instance_eval(&block)
end