Class: Codily::Elements::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/codily/elements/base.rb

Direct Known Subclasses

Service, ServiceBelonggingBase

Defined Under Namespace

Classes: AlreadyDefined

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(root, obj, &block) ⇒ Base

Returns a new instance of Base.



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/codily/elements/base.rb', line 42

def initialize(root, obj, &block)
  @root = root

  case obj
  when Hash
    @hash = obj
  when Fastly::Base
    @fastly_obj = obj
    @hash = Utils.symbolize_keys(obj.as_hash)

    @hash.delete :id
    @hash.each_key do |k|
      @hash.delete k if @hash[k].nil?
    end
  else
    raise TypeError
  end

  instance_eval(&block) if block

  setup
end

Instance Attribute Details

#fastly_objObject

Returns the value of attribute fastly_obj.



66
67
68
# File 'lib/codily/elements/base.rb', line 66

def fastly_obj
  @fastly_obj
end

#rootObject (readonly)

Returns the value of attribute root.



65
66
67
# File 'lib/codily/elements/base.rb', line 65

def root
  @root
end

Class Method Details

.def_attr(*attrs) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/codily/elements/base.rb', line 26

def self.def_attr(*attrs)
  attrs.each do |attr|
    define_method(attr) do |obj = nil|
      getset attr, obj
    end
  end
end

.defaults(kv = nil) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/codily/elements/base.rb', line 34

def self.defaults(kv = nil)
  if kv
    @defaults = defaults.merge(kv)
  else
    @defaults ||= {}
  end
end

.name_for_attrObject



22
23
24
# File 'lib/codily/elements/base.rb', line 22

def self.name_for_attr
  @attr_name ||= self.name.split('::').last.gsub(/[A-Z]/, '_\0').gsub(/^_/, '').downcase
end

.parent_classObject



9
10
11
# File 'lib/codily/elements/base.rb', line 9

def self.parent_class
  nil
end

.pathObject



13
14
15
16
17
18
19
20
# File 'lib/codily/elements/base.rb', line 13

def self.path
  @path ||= [].tap do |path|
    ptr = self
    while ptr = ptr.parent_class
      path.unshift ptr
    end
  end
end

Instance Method Details

#as_dsl_hashObject



114
115
116
117
118
# File 'lib/codily/elements/base.rb', line 114

def as_dsl_hash
  as_hash.tap do |x|
    x.delete :name
  end
end

#as_hashObject



110
111
112
# File 'lib/codily/elements/base.rb', line 110

def as_hash
  self.class.defaults.merge @hash
end

#dsl_argsObject



102
103
104
# File 'lib/codily/elements/base.rb', line 102

def dsl_args
  [name]
end

#idObject



94
95
96
# File 'lib/codily/elements/base.rb', line 94

def id
  fastly_obj && fastly_obj.respond_to?(:id) ? fastly_obj.id : nil
end

#inspectObject



68
69
70
# File 'lib/codily/elements/base.rb', line 68

def inspect
  "#<#{self.class}:#{self.key.inspect}/#{Hash[self.as_hash.to_a.sort_by{ |_| _.first.to_s }]}>"
end

#keyObject



106
107
108
# File 'lib/codily/elements/base.rb', line 106

def key
  name
end

#name(str = nil) ⇒ Object



98
99
100
# File 'lib/codily/elements/base.rb', line 98

def name(str = nil)
  getset :name, str
end

#parentObject



80
81
82
83
# File 'lib/codily/elements/base.rb', line 80

def parent
  return nil if parent_class.nil?
  root.list_element(parent_class)[parent_key] or raise '[bug?] no parent element'
end

#parent_classObject



72
73
74
# File 'lib/codily/elements/base.rb', line 72

def parent_class
  self.class.parent_class
end

#parent_keyObject



76
77
78
# File 'lib/codily/elements/base.rb', line 76

def parent_key
  nil
end

#parentsObject



85
86
87
88
89
90
91
92
# File 'lib/codily/elements/base.rb', line 85

def parents
  parents = []
  ptr = self
  while ptr = ptr.parent
    parents.unshift ptr
  end
  return parents
end