Module: NeedsResources::ResourceType

Defined in:
lib/needs_resources/resource_type.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.childrenObject



39
40
41
# File 'lib/needs_resources/resource_type.rb', line 39

def self.children
  @children ||= {}
end

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/needs_resources/resource_type.rb', line 4

def self.included(base)
  children[underscore(base.name)] = base

  base.instance_eval do
    def attr(*names)
      options = names.last.is_a?(Hash) ? names.pop : {}
      names.flatten.each do |n|
        attributes[n.to_sym] = options
        attr_reader n
      end
    end

    def provide_top_level_instance(name=nil, args={})
      name ||= ResourceType.underscore(self.name)
      TopLevelResources.instance.add_default(name, args)
    end

    def attributes
      @attributes ||= {}
    end
  end

  base.attr :name, :required => true
end

.underscore(name) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/needs_resources/resource_type.rb', line 29

def self.underscore(name)
  name = name.to_s.dup
  name.gsub!(/^.*::/, '')
  name.gsub!(/([A-Z]+)([A-Z][a-z])/,'\1_\2')
  name.gsub!(/([a-z\d])([A-Z])/,'\1_\2')
  name.tr!("-", "_")
  name.downcase!
  name
end

Instance Method Details

#initialize(args = {}) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/needs_resources/resource_type.rb', line 43

def initialize(args={})
  args = args.dup
  self.class.attributes.each do |name, options|
    value = args.delete(name.to_s) || args.delete(name.to_sym) || options[:default]
    if options[:required] && value.nil?
      raise RequiredAttributeError.new(self, name)
    end
    instance_variable_set "@#{name}", value
  end
  args.each do |k, v|
    warn "Invalid initializer argument (#{k.inspect}) for class #{self}"
  end
end