Class: Liquidscript::ICR::Set
- Includes:
- Representable
- Defined in:
- lib/liquidscript/icr/set.rb
Overview
Represents a set of instruction codes. Can contain metadata about the set, like whether or not it can be inlined, if a new context needs to be applied, etc.
Instance Attribute Summary collapse
-
#metadata ⇒ Hash
readonly
The metadata that is applied to the set.
Attributes inherited from Code
Instance Method Summary collapse
-
#[](key) ⇒ Object
Access either the metadata or the codes.
-
#[]=(key, value) ⇒ Object
Sets something from the metadata.
-
#add(action, *arguments) ⇒ Object
Adds a code to the code list.
-
#codes ⇒ Array<Code>
Outputs the codes in this set.
- #context ⇒ Object
- #context=(new_context) ⇒ Object
-
#initialize ⇒ Set
constructor
Initialize the set.
-
#locals ⇒ Array<Symbol>
A list of all the local variables in the current scope.
-
#method_missing(method, *args, &block) ⇒ Object
For methods that we don’t respond to, send them to the interal array.
-
#parameters ⇒ Array<Symbol>
A list of components (or arguments) that are in the current scope.
-
#respond_to_missing?(method, include_private = false) ⇒ Boolean
Tells ruby that we respond to some methods.
-
#to_a ⇒ Array
Turns the set into an array.
-
#variables ⇒ Array<Symbol>
A list of all variables in the current scope.
Methods included from Representable
Constructor Details
#initialize ⇒ Set
Initialize the set.
18 19 20 21 22 |
# File 'lib/liquidscript/icr/set.rb', line 18 def initialize @metadata = {} @code = [] @action = :exec end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, &block) ⇒ Object
For methods that we don’t respond to, send them to the interal array.
141 142 143 |
# File 'lib/liquidscript/icr/set.rb', line 141 def method_missing(method, *args, &block) @code.public_send(method, *args, &block) end |
Instance Attribute Details
#metadata ⇒ Hash (readonly)
The metadata that is applied to the set.
13 14 15 |
# File 'lib/liquidscript/icr/set.rb', line 13 def @metadata end |
Instance Method Details
#[](key) ⇒ Object
Access either the metadata or the codes. If the accessor is a Symbol, it access the metadata; if it the accessor is a Numeric, it access the codes.
105 106 107 108 109 110 111 |
# File 'lib/liquidscript/icr/set.rb', line 105 def [](key) if key.is_a? Numeric @code[key] else @metadata[key] end end |
#[]=(key, value) ⇒ Object
Sets something from the metadata. Unlike the accessor, it does not distinguish between Numeric and Symbol keys.
120 121 122 |
# File 'lib/liquidscript/icr/set.rb', line 120 def []=(key, value) @metadata[key] = value end |
#add(action, *arguments) ⇒ Object
Adds a code to the code list. This is just a convienince method.
42 43 44 |
# File 'lib/liquidscript/icr/set.rb', line 42 def add(action, *arguments) @code << Code.new(action, arguments) end |
#codes ⇒ Array<Code>
Outputs the codes in this set.
94 95 96 |
# File 'lib/liquidscript/icr/set.rb', line 94 def codes @code end |
#context ⇒ Object
25 26 27 28 29 |
# File 'lib/liquidscript/icr/set.rb', line 25 def context @metadata.fetch(:context) do @metadata.fetch(:parent).context end end |
#context=(new_context) ⇒ Object
32 33 34 |
# File 'lib/liquidscript/icr/set.rb', line 32 def context=(new_context) @metadata[:context] = new_context end |
#locals ⇒ Array<Symbol>
A list of all the local variables in the current scope. Local variables are defined as variables that were a) not passed in by function execution as arguments and b) are set within the current context.
53 54 55 |
# File 'lib/liquidscript/icr/set.rb', line 53 def locals variables - parameters end |
#parameters ⇒ Array<Symbol>
A list of components (or arguments) that are in the current scope. Defined as variables that were passed in by function execution as arguments.
63 64 65 |
# File 'lib/liquidscript/icr/set.rb', line 63 def parameters context.parameters.map(&:name) end |
#respond_to_missing?(method, include_private = false) ⇒ Boolean
Tells ruby that we respond to some methods. Passes the method name to the internal array, asking if it responds to it.
133 134 135 |
# File 'lib/liquidscript/icr/set.rb', line 133 def respond_to_missing?(method, include_private = false) @code.respond_to?(method, include_private) end |
#to_a ⇒ Array
Turns the set into an array. Includes the metadata information and the actual internal array. Note that this is not the array used in #method_missing - that actually operates on the internal array.
83 84 85 86 87 88 89 |
# File 'lib/liquidscript/icr/set.rb', line 83 def to_a [ @action, *@metadata.to_a.map { |(m, i)| [:"_#{m}", i] }, *@code ] end |
#variables ⇒ Array<Symbol>
A list of all variables in the current scope.
71 72 73 |
# File 'lib/liquidscript/icr/set.rb', line 71 def variables context.variables.keys - context.allowed_variables end |