Module: Omniboard::Property::PropertyClassMethods

Defined in:
lib/omniboard/property.rb

Instance Method Summary collapse

Instance Method Details

#block_property(p) ⇒ Object

Block properties can also take non-block arguments



34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/omniboard/property.rb', line 34

def block_property p
  define_method(p) do |*args, &blck|
    ivar = "@#{p}"
    if blck
      instance_variable_set(ivar, blck)
    elsif args.size == 1
      instance_variable_set(ivar, args.first)
    elsif args.empty?
      instance_variable_get(ivar)
    else
      raise ArgumentError, "wrong number of arguments (#{args.size} for 0,1)"
    end
  end
end

#property(p, allowed_values: nil, munge: nil) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/omniboard/property.rb', line 3

def property p, allowed_values: nil, munge: nil
  define_method(p) do |*args|
    ivar = "@#{p}"
    if args.empty?
      instance_variable_get(ivar)
    elsif args.size == 1
      # Set values!
      new_value = args.first
      if allowed_values && !new_value.nil? && !allowed_values.include?(new_value)
        raise(ArgumentError, "attempted to set property #{p} to forbidden value #{new_value.inspect}")
      else
        if new_value # Only run munge for non-nil values
          case munge
          when Symbol
            new_value = new_value.send(munge)
          when Proc
            new_value = munge[new_value]
          when nil
          else
            raise ArgumentError, "Property munge must be a symbol or a block - you supplied a #{munge.class}."
          end
        end
        instance_variable_set(ivar, new_value)
      end
    else
      raise ArgumentError, "wrong number of arguments (#{args.size} for 0,1)"
    end
  end
end