Class: Origen::SubBlocks::Placeholder
- Inherits:
-
Object
- Object
- Origen::SubBlocks::Placeholder
show all
- Defined in:
- lib/origen/sub_blocks.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(owner, name, attributes) ⇒ Placeholder
Returns a new instance of Placeholder.
473
474
475
476
477
|
# File 'lib/origen/sub_blocks.rb', line 473
def initialize(owner, name, attributes)
@owner = owner
@name = name
@attributes = attributes
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
504
505
506
|
# File 'lib/origen/sub_blocks.rb', line 504
def method_missing(method, *args, &block)
materialize.send(method, *args, &block)
end
|
Instance Attribute Details
#attributes ⇒ Object
Returns the value of attribute attributes.
471
472
473
|
# File 'lib/origen/sub_blocks.rb', line 471
def attributes
@attributes
end
|
Returns the value of attribute name.
471
472
473
|
# File 'lib/origen/sub_blocks.rb', line 471
def name
@name
end
|
Returns the value of attribute owner.
471
472
473
|
# File 'lib/origen/sub_blocks.rb', line 471
def owner
@owner
end
|
Instance Method Details
#==(obj) ⇒ Object
Also known as:
equal?
527
528
529
530
531
532
533
|
# File 'lib/origen/sub_blocks.rb', line 527
def ==(obj)
if obj.is_a?(Placeholder)
materialize == obj.materialize
else
materialize == obj
end
end
|
#add_attributes(attrs) ⇒ Object
479
480
481
|
# File 'lib/origen/sub_blocks.rb', line 479
def add_attributes(attrs)
@attributes = @attributes.merge(attrs)
end
|
Make this appear like a sub-block to any application code
484
485
486
|
# File 'lib/origen/sub_blocks.rb', line 484
def class
klass
end
|
540
541
542
|
# File 'lib/origen/sub_blocks.rb', line 540
def clone
materialize.clone
end
|
544
545
546
|
# File 'lib/origen/sub_blocks.rb', line 544
def dup
materialize.dup
end
|
536
537
538
|
# File 'lib/origen/sub_blocks.rb', line 536
def freeze
materialize.freeze
end
|
Make it look like a sub-block in the console to avoid confusion
500
501
502
|
# File 'lib/origen/sub_blocks.rb', line 500
def inspect
"<SubBlock: #{name}>"
end
|
#is_a?(klass) ⇒ Boolean
Make this appear like a sub-block to any application code
489
490
491
492
493
494
495
496
497
|
# File 'lib/origen/sub_blocks.rb', line 489
def is_a?(klass)
return false if klass == Hash || klass == Array
klass == self.klass || klass == Placeholder
end
|
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
|
# File 'lib/origen/sub_blocks.rb', line 552
def klass
@klass ||= begin
class_name = attributes.delete(:class_name)
tmp_class = nil
if class_name
begin
tmp_class = "::#{owner.namespace}::#{class_name}"
klass = eval(tmp_class)
rescue NameError => e
raise if e.message !~ /^uninitialized constant (.*)$/ || tmp_class !~ /#{Regexp.last_match(1)}/
begin
tmp_class = "::#{class_name}"
klass = eval(tmp_class)
rescue NameError => e
raise if e.message !~ /^uninitialized constant (.*)$/ || tmp_class !~ /#{Regexp.last_match(1)}/
begin
tmp_class = "#{owner.class}::#{class_name}"
klass = eval(tmp_class)
rescue NameError => e
raise if e.message !~ /^uninitialized constant (.*)$/ || tmp_class !~ /#{Regexp.last_match(1)}/
puts "Could not find class: #{class_name}"
raise 'Unknown sub block class!'
end
end
end
else
klass = Origen::SubBlock
end
unless klass.respond_to?(:includes_origen_model)
puts 'Any class which is to be instantiated as a sub_block must include Origen::Model,'
puts "add this to #{klass}:"
puts ''
puts ' include Origen::Model'
puts ''
fail 'Sub block does not include Origen::Model!'
end
klass
end
end
|
#materialize ⇒ Object
512
513
514
515
516
517
518
519
520
521
522
523
524
525
|
# File 'lib/origen/sub_blocks.rb', line 512
def materialize
block = nil
file = attributes.delete(:file)
load_block = attributes.delete(:load_block)
dir = attributes.delete(:dir) || owner.send(:export_dir)
block = owner.send(:instantiate_sub_block, name, klass, attributes)
if file
require File.join(dir, file)
block.extend owner.send(:export_module_names_from_path, file).join('::').constantize
end
block.load_block(load_block) if load_block
block.owner = owner
block
end
|
#respond_to?(method, include_private = false) ⇒ Boolean
508
509
510
|
# File 'lib/origen/sub_blocks.rb', line 508
def respond_to?(method, include_private = false)
materialize.respond_to?(method, include_private)
end
|
#to_json(*args) ⇒ Object
548
549
550
|
# File 'lib/origen/sub_blocks.rb', line 548
def to_json(*args)
materialize.to_json(*args)
end
|