Class: Cardiac::ResourceBuilder
- Defined in:
- lib/cardiac/resource/builder.rb
Direct Known Subclasses
Instance Method Summary collapse
-
#__extension_module__ ⇒ Object
Resolves this builder’s extension module, and extends the builder with it.
-
#__extensions__ ⇒ Object
Resolves this builder’s extensions.
-
#__subresource__ ⇒ Object
Resolves this builder to a subresource.
- #extending(*extensions, &extension_block) ⇒ Object
-
#initialize(base, *extensions, &extension_block) ⇒ ResourceBuilder
constructor
A new instance of ResourceBuilder.
-
#to_resource ⇒ Object
Returns a copy of our subresource.
Methods inherited from Proxy
Constructor Details
#initialize(base, *extensions, &extension_block) ⇒ ResourceBuilder
Returns a new instance of ResourceBuilder.
6 7 8 9 10 |
# File 'lib/cardiac/resource/builder.rb', line 6 def initialize base, *extensions, &extension_block raise ArgumentError unless Resource === base @base, @extensions, @extension_block = base, extensions, extension_block @extensions.compact! end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object (private)
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/cardiac/resource/builder.rb', line 56 def method_missing name, *args, &block name = name.to_sym # Always delegate builder methods. if check_builder_method? name build! name, *args, &block # Only delegate extension methods if the extension module has not been built yet. # This allows extensions to be removed by preventing method_missing from calling them. elsif @__extension_module__.nil? && check_extension_method?(name) #__extension_module__.instance_method(name).bind(self).call(*args, &block) __public_send__(name, *args, &block) || self # Otherwise, the method has not been implemented. else raise ::NotImplementedError, "#{name.inspect} is not implemented for this builder" end end |
Instance Method Details
#__extension_module__ ⇒ Object
Resolves this builder’s extension module, and extends the builder with it.
20 21 22 |
# File 'lib/cardiac/resource/builder.rb', line 20 def __extension_module__ @__extension_module__ ||= build_extensions_for_module!{|mod| __extend__ mod } end |
#__extensions__ ⇒ Object
Resolves this builder’s extensions.
25 26 27 28 29 30 |
# File 'lib/cardiac/resource/builder.rb', line 25 def __extensions__ @__extensions__ ||= @extensions.dup.tap do |exts| exts.unshift @base.__extension_module__ if @base.__extension_module__ exts.push ::Module.new(&@extension_block) if @extension_block end end |
#__subresource__ ⇒ Object
Resolves this builder to a subresource.
33 34 35 |
# File 'lib/cardiac/resource/builder.rb', line 33 def __subresource__ @__subresource__ ||= Subresource.new(@base.to_resource) end |
#extending(*extensions, &extension_block) ⇒ Object
37 38 39 |
# File 'lib/cardiac/resource/builder.rb', line 37 def extending(*extensions,&extension_block) extend! extensions, &extension_block end |
#to_resource ⇒ Object
Returns a copy of our subresource.
15 16 17 |
# File 'lib/cardiac/resource/builder.rb', line 15 def to_resource __subresource__.dup end |