Class: Code::Object::Code
Constant Summary collapse
- CLASS_DOCUMENTATION =
{ name: "Code", description: "stores parsed source code for later evaluation.", examples: [ "Code", "Code.evaluate(\"1 + 2\")", "Code.new(\"1 + 2\").evaluate" ] }.freeze
- CLASS_FUNCTIONS =
{ "evaluate" => { name: "evaluate", description: "evaluates source code and returns the result.", examples: [ "Code.evaluate(\"1\")", "Code.evaluate(\"1 + 2\")", "Code.evaluate(\"[1, 2].size\")" ] } }.freeze
- INSTANCE_FUNCTIONS =
{ "evaluate" => { name: "evaluate", description: "evaluates stored source code and returns the result.", examples: [ "Code(\"1\").evaluate", "Code(\"1 + 2\").evaluate", "Code(\"[1, 2].size\").evaluate" ] } }.freeze
Class Method Summary collapse
- .call(**args) ⇒ Object
- .code_evaluate(*args, **globals) ⇒ Object
- .function_documentation(scope) ⇒ Object
Instance Method Summary collapse
- #call(**args) ⇒ Object
- #code_deep_duplicate ⇒ Object
- #code_evaluate(**globals) ⇒ Object
-
#initialize(*args, **_kargs, &_block) ⇒ Code
constructor
A new instance of Code.
Constructor Details
Class Method Details
.call(**args) ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/code/object/code.rb', line 56 def self.call(**args) code_operator = args.fetch(:operator, nil).to_code globals = multi_fetch(args, *GLOBALS) case code_operator.to_s when "evaluate" sig(args) { Object } code_evaluate(*args.fetch(:arguments, []).to_code.raw, **globals) else super end end |
.code_evaluate(*args, **globals) ⇒ Object
50 51 52 53 54 |
# File 'lib/code/object/code.rb', line 50 def self.code_evaluate(*args, **globals) code_args = args.to_code new(*code_args.raw).code_evaluate(**globals) end |
.function_documentation(scope) ⇒ Object
38 39 40 41 42 43 |
# File 'lib/code/object/code.rb', line 38 def self.function_documentation(scope) return INSTANCE_FUNCTIONS if scope == :instance return CLASS_FUNCTIONS if scope == :class {} end |
Instance Method Details
#call(**args) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/code/object/code.rb', line 69 def call(**args) code_operator = args.fetch(:operator, nil).to_code globals = multi_fetch(args, *GLOBALS) case code_operator.to_s when "evaluate" sig(args) code_evaluate(**globals) else super end end |
#code_deep_duplicate ⇒ Object
86 87 88 |
# File 'lib/code/object/code.rb', line 86 def code_deep_duplicate self.class.new(raw) end |
#code_evaluate(**globals) ⇒ Object
82 83 84 |
# File 'lib/code/object/code.rb', line 82 def code_evaluate(**globals) raw.evaluate(**globals) end |