Class: RXSD::ClassBuilder
- Inherits:
-
Object
- Object
- RXSD::ClassBuilder
- Defined in:
- lib/rxsd/builder.rb
Overview
Base interface and helper methods to build classes in various formats from xsd schemas
Direct Known Subclasses
Instance Attribute Summary collapse
-
#associated_builder ⇒ Object
class builder corresponding to associated type where approprate.
-
#attribute_builders ⇒ Object
array of class builders for all attributes.
-
#attribute_name ⇒ Object
name of the attribute which this class represents, for use in accessor construction.
-
#base_builder ⇒ Object
class builder corresponding to base type where approprate.
-
#klass ⇒ Object
actual class built.
-
#klass_name ⇒ Object
name of class to build.
Instance Method Summary collapse
-
#associated(builders = []) ⇒ Object
Helper method to get all associated class builders.
-
#base=(base) ⇒ Object
Set base builder.
-
#clone(cloned = {}) ⇒ Object
Perform a deep copy of builder.
-
#initialize(args = {}) ⇒ ClassBuilder
constructor
Create a new class builder w/ specified args.
Constructor Details
#initialize(args = {}) ⇒ ClassBuilder
Create a new class builder w/ specified args.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/rxsd/builder.rb', line 31 def initialize(args = {}) @klass = @klass_name = @attribute_name = @associated_builder = @base_builder = nil if args.has_key? :builder @klass = args[:builder].klass @klass_name = args[:builder].klass_name @associated_builder = args[:builder].associated_builder @base_builder = args[:builder].base_builder @attribute_builders = args[:builder].attribute_builders @attribute_name = args[:builder].attribute_name else @klass = args[:klass] @klass_name = args[:klass_name] if args.has_key? :base_builder @base_builder = args[:base_builder] elsif args.has_key?(:base) && !args[:base].nil? @base_builder = ClassBuilder.new :klass => args[:base] end @attribute_builders = [] end end |
Instance Attribute Details
#associated_builder ⇒ Object
class builder corresponding to associated type where approprate
19 20 21 |
# File 'lib/rxsd/builder.rb', line 19 def associated_builder @associated_builder end |
#attribute_builders ⇒ Object
array of class builders for all attributes
25 26 27 |
# File 'lib/rxsd/builder.rb', line 25 def attribute_builders @attribute_builders end |
#attribute_name ⇒ Object
name of the attribute which this class represents, for use in accessor construction
28 29 30 |
# File 'lib/rxsd/builder.rb', line 28 def attribute_name @attribute_name end |
#base_builder ⇒ Object
class builder corresponding to base type where approprate
22 23 24 |
# File 'lib/rxsd/builder.rb', line 22 def base_builder @base_builder end |
#klass ⇒ Object
actual class built
13 14 15 |
# File 'lib/rxsd/builder.rb', line 13 def klass @klass end |
#klass_name ⇒ Object
name of class to build
16 17 18 |
# File 'lib/rxsd/builder.rb', line 16 def klass_name @klass_name end |
Instance Method Details
#associated(builders = []) ⇒ Object
Helper method to get all associated class builders
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/rxsd/builder.rb', line 81 def associated(builders = []) unless @base_builder.nil? || builders.include?(@base_builder) builders.push @base_builder builders = @base_builder.associated(builders) end unless @associated_builder.nil? || builders.include?(@associated_builder) builders.push @associated_builder builders = @associated_builder.associated(builders) end @attribute_builders.each { |ab| unless ab.nil? || builders.include?(ab) builders.push ab builders = ab.associated(builders) end } return builders end |
#base=(base) ⇒ Object
Set base builder
58 59 60 |
# File 'lib/rxsd/builder.rb', line 58 def base=(base) @base_builder = ClassBuilder.new :klass => base end |
#clone(cloned = {}) ⇒ Object
Perform a deep copy of builder. cloned param is used internally and should not be set by invoker.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rxsd/builder.rb', line 64 def clone(cloned = {}) return cloned[self] if cloned.has_key? self cb = ClassBuilder.new cloned[self] = cb cb.klass = @klass cb.klass_name = @klass_name cb.attribute_name = @attribute_name cb.associated_builder = @associated_builder.clone(cloned) unless @associated_builder.nil? cb.base_builder = @base_builder.clone(cloned) unless @base_builder.nil? @attribute_builders.each { |ab| cb.attribute_builders.push ab.clone(cloned) unless ab.nil? } return cb end |