rubychem 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,8 +3,8 @@
3
3
  require 'rubygems'
4
4
  require 'benchmark'
5
5
 
6
- load 'rubychem.rb'
7
- load 'comments.rb'
6
+ load 'rubychem/molecule.rb'
7
+ load 'rubychem/comments.rb'
8
8
 
9
9
 
10
10
  iterations = 10000
@@ -1,62 +1,2 @@
1
- module RubyChem
2
- class Chemical
3
-
4
- MASSES = { :H => 1.01, :He => 4.00, :Li => 6.94, :Be => 9.01, :B => 10.81, :C => 12.01, :N => 14.01, :F => 19.00, :Ne => 20.18, :S => 32.01, :O => 15.99,
5
- :Na => 22.99, :Mg => 24.31, :Al => 26.98, :Si => 28.09, :P => 30.97, :Cl => 35.45, :Ar => 39.95, :K => 39.1, :Ca => 40.08, :Sc => 44.96, :Ti => 47.88, :V => 50.94,
6
- :Cr => 52.00, :Mn => 54.94, :Fe => 55.85, :Co => 58.93, :Ni => 58.69, :Cu => 63.55, :Zn => 65.39, :Ga => 69.72, :Ge=> 72.61, :As => 74.92, :Se => 78.96,
7
- :Br => 79.90, :Kr => 83.80, :Rb => 85.47, :Sr => 87.62, :Y => 88.91, :Zr => 91.22, :Nb => 92.91, :Mo => 95.94, :Te => 98, :Ru => 101.07, :Rh => 102.91,
8
- :Pd => 106.42, :Ag => 107.87, :Cd => 112.41, :In => 114.82, :Sn => 118.71, :Sb => 121.76, :Te => 127.6, :I => 126.9, :Xe => 131.29, :Cs => 132.9, :Ba => 137.3,
9
- :La => 138.9, :Hf => 178.5, :Ta => 180.9, :W => 183.9, :Re => 186.2, :Os => 190.2, :Ir => 192.2, :Pt => 195.1, :Au => 197.0, :Hg => 200.6, :Ti => 204.4,
10
- :Pb => 207.2, :Bi => 209, :Po => 209, :At => 210, :Rn => 222, :Fr => 223, :Ra => 226, :Ac => 227, :Rf => 261, :Db => 262, :Sg => 263, :Bh => 264, :Hs => 265,
11
- :Mt => 268, :Ds => 271, :Rg => 272 }
12
-
13
- attr_accessor :chem_species, :mm
14
-
15
- def initialize(formula)
16
- if formula.scan(/\d+$/) == []
17
- x = formula.gsub(/$/, '1').scan(/[A-za-z]*\d+/)
18
- speciate(x)
19
- else
20
- x = formula.scan(/[A-za-z]*\d+/)
21
- speciate(x)
22
- end
23
- end
24
-
25
- private
26
-
27
- def speciate(x)
28
- @chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
29
- @chem_species.map! {|chem| chem.scan /[A-Z]+|\d+/i }
30
- atom_masses = @chem_species.map { |(elem, coeff)| MASSES[elem.to_sym] * (coeff || 1).to_f }
31
- x = atom_masses.map { |int| int.to_f }
32
- @mm = x.inject(0) { |s,v| s+= v }
33
- end
34
- end
35
-
36
- class BalanceChem
37
- attr_accessor :balanced, :lefteq, :righteq, :leftfw, :rightfw, :count
38
-
39
- ##
40
- # Checks if two formulas are balanced.
41
- #
42
- def initialize(lefteq, righteq)
43
- @lefteq = lefteq
44
- @righteq = righteq
45
- @balanced = ( RubyChem::Chemical.new(@lefteq).mm - RubyChem::Chemical.new(@righteq).mm ).abs < 0.00001
46
- end
47
-
48
- def balanceit
49
- @count = 0
50
- @leftfw = @leftfw.fw
51
- @rightfw = @rightfw.fw
52
- until @balanced == true
53
- @rightfw = @rightfw * 2
54
- @balanced = (@leftfw - @rightfw).abs < 0.00001
55
- @count += 1
56
- end
57
- puts "#{@lefteq} (#{@leftfw}) -> #{@righteq} (#{@rightfw}) is a balanced equation; #{@count} iterations"
58
- end
59
-
60
-
61
- end
62
- end
1
+ load 'rubychem/molecule.rb'
2
+ load 'rubychem/valence.rb'
@@ -0,0 +1,62 @@
1
+ module RubyChem
2
+ class Chemical
3
+
4
+ MASSES = { :H => 1.01, :He => 4.00, :Li => 6.94, :Be => 9.01, :B => 10.81, :C => 12.01, :N => 14.01, :F => 19.00, :Ne => 20.18, :S => 32.01, :O => 15.99,
5
+ :Na => 22.99, :Mg => 24.31, :Al => 26.98, :Si => 28.09, :P => 30.97, :Cl => 35.45, :Ar => 39.95, :K => 39.1, :Ca => 40.08, :Sc => 44.96, :Ti => 47.88, :V => 50.94,
6
+ :Cr => 52.00, :Mn => 54.94, :Fe => 55.85, :Co => 58.93, :Ni => 58.69, :Cu => 63.55, :Zn => 65.39, :Ga => 69.72, :Ge=> 72.61, :As => 74.92, :Se => 78.96,
7
+ :Br => 79.90, :Kr => 83.80, :Rb => 85.47, :Sr => 87.62, :Y => 88.91, :Zr => 91.22, :Nb => 92.91, :Mo => 95.94, :Te => 98, :Ru => 101.07, :Rh => 102.91,
8
+ :Pd => 106.42, :Ag => 107.87, :Cd => 112.41, :In => 114.82, :Sn => 118.71, :Sb => 121.76, :Te => 127.6, :I => 126.9, :Xe => 131.29, :Cs => 132.9, :Ba => 137.3,
9
+ :La => 138.9, :Hf => 178.5, :Ta => 180.9, :W => 183.9, :Re => 186.2, :Os => 190.2, :Ir => 192.2, :Pt => 195.1, :Au => 197.0, :Hg => 200.6, :Ti => 204.4,
10
+ :Pb => 207.2, :Bi => 209, :Po => 209, :At => 210, :Rn => 222, :Fr => 223, :Ra => 226, :Ac => 227, :Rf => 261, :Db => 262, :Sg => 263, :Bh => 264, :Hs => 265,
11
+ :Mt => 268, :Ds => 271, :Rg => 272 }
12
+
13
+ attr_accessor :chem_species, :mm
14
+
15
+ def initialize(formula)
16
+ if formula.scan(/\d+$/) == []
17
+ x = formula.gsub(/$/, '1').scan(/[A-za-z]*\d+/)
18
+ speciate(x)
19
+ else
20
+ x = formula.scan(/[A-za-z]*\d+/)
21
+ speciate(x)
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def speciate(x)
28
+ @chem_species = x.map { |chem| chem.scan(/[A-Z][^A-Z]*/) }.flatten
29
+ @chem_species.map! {|chem| chem.scan /[A-Z]+|\d+/i }
30
+ atom_masses = @chem_species.map { |(elem, coeff)| MASSES[elem.to_sym] * (coeff || 1).to_f }
31
+ x = atom_masses.map { |int| int.to_f }
32
+ @mm = x.inject(0) { |s,v| s+= v }
33
+ end
34
+ end
35
+
36
+ class BalanceChem
37
+ attr_accessor :balanced, :lefteq, :righteq, :leftfw, :rightfw, :count
38
+
39
+ ##
40
+ # Checks if two formulas are balanced.
41
+ #
42
+ def initialize(lefteq, righteq)
43
+ @lefteq = lefteq
44
+ @righteq = righteq
45
+ @balanced = ( RubyChem::Chemical.new(@lefteq).mm - RubyChem::Chemical.new(@righteq).mm ).abs < 0.00001
46
+ end
47
+
48
+ def balanceit
49
+ @count = 0
50
+ @leftfw = @leftfw.fw
51
+ @rightfw = @rightfw.fw
52
+ until @balanced == true
53
+ @rightfw = @rightfw * 2
54
+ @balanced = (@leftfw - @rightfw).abs < 0.00001
55
+ @count += 1
56
+ end
57
+ puts "#{@lefteq} (#{@leftfw}) -> #{@righteq} (#{@rightfw}) is a balanced equation; #{@count} iterations"
58
+ end
59
+
60
+
61
+ end
62
+ end
File without changes
@@ -1,3 +1,3 @@
1
1
  module Rubychem
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubychem
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-14 00:00:00.000000000Z
12
+ date: 2011-11-15 00:00:00.000000000Z
13
13
  dependencies: []
14
14
  description: This is an open source library of chemistry, goodies. I'm dedicating
15
15
  this code to my major professor Arthur Brecher and Graduate PI Dr. Rogers of Bowling
@@ -34,11 +34,13 @@ files:
34
34
  - features/user_submits_compound.feature
35
35
  - lib/.DS_Store
36
36
  - lib/benchmark.rb
37
- - lib/comments.rb
38
37
  - lib/rubychem.rb
38
+ - lib/rubychem/comments.rb
39
+ - lib/rubychem/molecule.rb
40
+ - lib/rubychem/valence.rb
39
41
  - lib/rubychem/version.rb
40
42
  - lib/rubychem_rspec.rb
41
- - lib/valence.rb
43
+ - rubychem-1.0.1.gem
42
44
  - rubychem.gemspec
43
45
  - spec/rubychem/ruby_chem_spec.rb
44
46
  - spec/spec_helper.rb