Class: Cubicle::DataLevel

Inherits:
OrderedHash
  • Object
show all
Defined in:
lib/cubicle/data_level.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = "Unknown Level", initial_data = {}) ⇒ DataLevel

Returns a new instance of DataLevel.



4
5
6
7
# File 'lib/cubicle/data_level.rb', line 4

def initialize(name = "Unknown Level", initial_data = {})
  @name = name
  merge!(initial_data.stringify_keys)
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(sym, *args, &block) ⇒ Object



52
53
54
55
56
# File 'lib/cubicle/data_level.rb', line 52

def method_missing(sym,*args,&block)
  return self[sym.to_s[0..-2]] = args[0] if sym.to_s =~ /.*=$/
  return self[sym] if self.keys.include?(sym.to_s)
  missing_member_default
end

Instance Attribute Details

#missing_member_defaultObject

Returns the value of attribute missing_member_default.



10
11
12
# File 'lib/cubicle/data_level.rb', line 10

def missing_member_default
  @missing_member_default
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/cubicle/data_level.rb', line 9

def name
  @name
end

Instance Method Details

#[](key) ⇒ Object



14
15
16
17
18
# File 'lib/cubicle/data_level.rb', line 14

def [](key)
  key = key.to_s
  self[key] = [] unless self.keys.include?(key)
  super(key)
end

#[]=(key, val) ⇒ Object



20
21
22
# File 'lib/cubicle/data_level.rb', line 20

def []=(key,val)
  super(key.to_s,val)
end

#flatten(member_name = nil, opts = {}, &block) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/cubicle/data_level.rb', line 28

def flatten(member_name = nil, opts={}, &block)

  default_val = opts[:default] || @missing_member_default || 0

  self.inject([]) do |output, (key, data)|
    data.inject(output) do |flattened, value|
      value.missing_member_default = default_val if value.respond_to?(:missing_member_default)

      if block_given?
        flat_val = block.arity == 1 ? (yield value) : (value.instance_eval(&block))
      end
      flat_val ||= value[member_name] if member_name && value.include?(member_name)
      flat_val ||= default_val
      flattened << flat_val
    end
  end

end

#include?(key) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/cubicle/data_level.rb', line 24

def include?(key)
  super(key.to_s)
end

#leaf_level?Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/cubicle/data_level.rb', line 47

def leaf_level?
  return self.length < 1 ||
          !self[self.keys[0]].is_a?(Cubicle::DataLevel)
end