Class: AsciiChem::Transform::ReactionBuilder
- Inherits:
-
Object
- Object
- AsciiChem::Transform::ReactionBuilder
- Defined in:
- lib/asciichem/transform.rb
Overview
Builds a Reaction, mapping the arrow hash into arrow kind and conditions.
Constant Summary collapse
- ARROW_KINDS =
{ '<=>' => :equilibrium, '<->' => :resonance, '->' => :forward, '<-' => :reverse }.freeze
Instance Method Summary collapse
- #as_terms(side) ⇒ Object
- #build ⇒ Object
- #condition_text(node) ⇒ Object
- #conditions ⇒ Object
-
#initialize(reactants, arrow, products) ⇒ ReactionBuilder
constructor
A new instance of ReactionBuilder.
- #kind ⇒ Object
Constructor Details
#initialize(reactants, arrow, products) ⇒ ReactionBuilder
Returns a new instance of ReactionBuilder.
419 420 421 422 423 |
# File 'lib/asciichem/transform.rb', line 419 def initialize(reactants, arrow, products) @reactants = reactants @arrow = arrow @products = products end |
Instance Method Details
#as_terms(side) ⇒ Object
453 454 455 456 457 458 459 |
# File 'lib/asciichem/transform.rb', line 453 def as_terms(side) case side when Array then side when nil then [] else [side] end end |
#build ⇒ Object
425 426 427 428 429 430 431 432 |
# File 'lib/asciichem/transform.rb', line 425 def build Model::Reaction.new( reactants: as_terms(@reactants), products: as_terms(@products), arrow: kind, conditions: conditions ) end |
#condition_text(node) ⇒ Object
446 447 448 449 450 451 |
# File 'lib/asciichem/transform.rb', line 446 def condition_text(node) return nil if node.nil? text = node.is_a?(Hash) ? node[:text] : node text&.to_s end |
#conditions ⇒ Object
438 439 440 441 442 443 444 |
# File 'lib/asciichem/transform.rb', line 438 def conditions above = condition_text(@arrow[:above]) below = condition_text(@arrow[:below]) return nil unless above || below Model::Reaction::Conditions.new(above: above, below: below) end |
#kind ⇒ Object
434 435 436 |
# File 'lib/asciichem/transform.rb', line 434 def kind ARROW_KINDS.fetch(@arrow[:kind].to_s, :forward) end |