Class: Seimi::Formula
- Inherits:
-
Object
show all
- Defined in:
- lib/seimi/formula.rb,
lib/seimi/formula/parser.rb
Defined Under Namespace
Classes: Component, Parser
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(source, composition, balance_composition, components, charge) ⇒ Formula
Returns a new instance of Formula.
21
22
23
24
25
26
27
|
# File 'lib/seimi/formula.rb', line 21
def initialize(source, composition, balance_composition, components, charge)
@source = source
@composition = composition
@balance_composition = balance_composition
@components = components
@charge = charge
end
|
Instance Attribute Details
#balance_composition ⇒ Object
Returns the value of attribute balance_composition.
15
16
17
|
# File 'lib/seimi/formula.rb', line 15
def balance_composition
@balance_composition
end
|
#charge ⇒ Object
Returns the value of attribute charge.
15
16
17
|
# File 'lib/seimi/formula.rb', line 15
def charge
@charge
end
|
#composition ⇒ Object
Returns the value of attribute composition.
15
16
17
|
# File 'lib/seimi/formula.rb', line 15
def composition
@composition
end
|
Class Method Details
.parse(source) ⇒ Object
17
18
19
|
# File 'lib/seimi/formula.rb', line 17
def self.parse(source)
Parser.new(source).parse
end
|
Instance Method Details
#breakdown ⇒ Object
33
34
35
36
37
|
# File 'lib/seimi/formula.rb', line 33
def breakdown
@components.map do |component|
[component.symbol, component.count, component.total_mass]
end
end
|
#charged? ⇒ Boolean
39
40
41
|
# File 'lib/seimi/formula.rb', line 39
def charged?
!charge.zero?
end
|
#molar_mass ⇒ Object
29
30
31
|
# File 'lib/seimi/formula.rb', line 29
def molar_mass
@components.sum(0.0) { |component| component.total_mass }
end
|
#to_kobun ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/seimi/formula.rb', line 47
def to_kobun
require_relative "kanji"
require_relative "sangi"
lines = ["〔#{self} 解剖の覚〕"]
@components.each do |component|
name = ELEMENTS.fetch(component.element).last
lines << "一、#{name}(#{component.symbol}) #{Kanji.decimal(component.total_mass, 3)} 匁掛ける#{Kanji.from_i(component.count)}つ"
end
lines << "電荷 #{Kanji.rational(charge)} に候" if charged?
lines << "〆て 分子の量 凡そ#{Kanji.decimal(molar_mass, 3)} に候"
lines << Sangi.render(molar_mass.round)
lines << "右の如く相違なく候 也"
lines.join("\n")
end
|
#to_s ⇒ Object
43
44
45
|
# File 'lib/seimi/formula.rb', line 43
def to_s
@source
end
|