Module: Enterprisifier::Marshalling::SchemaComposition::ClassMethods

Defined in:
lib/enterprisifier/marshalling/schema_composition.rb

Overview

InstanceMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 80

def self.extended(base)
  base.class_eval "    attr_accessor :parent\n    class_inheritable_accessor :instance\n    class_inheritable_array :composition\n    write_inheritable_array :composition, []\n\n    class << self\n      private :new\n      delegate :reify, :to => :instance\n    end\n\n    def self.\#{base.base_name.to_s.underscore}(*args, &block)\n      self.instance = build(*args, &block)\n    end\n  EOM\nend\n"

Instance Method Details

#base_nameObject



119
120
121
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 119

def base_name
  name.demodulize.to_sym
end

#build(*args, &block) ⇒ Object



102
103
104
105
106
107
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 102

def build(*args, &block)
  new(*args).tap do |i|
    i.evaluate(block)
    i.reify_self if i.respond_to?(:reify_self, true)
  end
end

#build_with_parent(parent, *args, &block) ⇒ Object



109
110
111
112
113
114
115
116
117
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 109

def build_with_parent(parent, *args, &block)
  new(*args) do |i|
    i.parent = parent
    i
  end.tap do |i|
    i.evaluate(block)
    i.reify_self if i.respond_to?(:reify_self, true)
  end
end

#composed_of(*schema_elements) ⇒ Object



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 147

def composed_of(*schema_elements)
  write_inheritable_array :composition, schema_elements
  schema_elements.each do |se|
    class_eval "      attr_accessor \#{se.to_s.underscore.pluralize.inspect}\n\n      def \#{se.to_s.underscore}(*args, &block)\n        builder = ::Enterprisifier::Marshalling::SchemaComposition.schema_elements[\#{se.inspect}]\n        builder.build_with_parent(self, *args, &block).tap do |def_i|\n          (self.\#{se.to_s.underscore.pluralize} ||= []) << def_i\n          definition_changed(\#{se.to_s.underscore.to_sym.inspect}, def_i) if respond_to?(:definition_changed, true)\n        end\n      end\n\n      class << self\n        delegate \#{se.to_s.underscore.inspect}, :to => :instance\n      end\n    EOM\n  end\nend\n"

#is_referable?Boolean



98
99
100
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 98

def is_referable?
  false
end

#macros(*args) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 131

def macros(*args)
  options = args.extract_options!
  args.each do |m|
    class_eval "    def \#{m}(val = nil)\n      return @\#{m} unless val\n      \#{if options[:allow_multiple]\n          \"(@\#{m.to_s.pluralize} ||= []) << val\"\n        else\n          \"@\#{m.to_s.pluralize} = val\"\n        end}\n    end\n    EOM\n  end\nend\n"

#namespace(ns_settings = nil) ⇒ Object



123
124
125
126
127
128
129
# File 'lib/enterprisifier/marshalling/schema_composition.rb', line 123

def namespace(ns_settings = nil)
  if ns_settings
    @namespace = Enterprisifier::Marshalling::Namespace.new(*(ns_settings.to_a.first))
  else
    @namespace
  end
end