mspire 0.7.10 → 0.7.11

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.10
1
+ 0.7.11
@@ -23,6 +23,15 @@ module Mspire
23
23
  end
24
24
  end
25
25
 
26
+ # returns a new formula object where all the atoms have been added up
27
+ def +(*others)
28
+ new_form = self.dup
29
+ others.each do |form|
30
+ new_form.merge!(form) {|key, oldval, newval| new_form[key] = oldval+newval }
31
+ end
32
+ new_form
33
+ end
34
+
26
35
  def self.from_aaseq(aaseq)
27
36
  hash = aaseq.each_char.inject({}) do |hash,aa|
28
37
  hash.merge(Mspire::Isotope::AA::FORMULAS[aa]) {|h,o,n| (o ? o : 0) +n }
@@ -38,5 +47,22 @@ module Mspire
38
47
  mss - (Mspire::Mass::ELECTRON * charge)
39
48
  end
40
49
 
50
+ def to_s(alphabetize=true)
51
+ h = alphabetize ? self.sort : self
52
+ h.flat_map {|k,v|
53
+ [k.capitalize, v > 1 ? v : '']
54
+ }.join
55
+ end
56
+
57
+ def to_hash
58
+ Hash[ self ]
59
+ end
60
+
61
+ alias_method :old_equal, '=='.to_sym
62
+
63
+ def ==(other)
64
+ old_equal(other) && self.charge == other.charge
65
+ end
66
+
41
67
  end
42
68
  end
@@ -7,17 +7,47 @@ describe Mspire::MolecularFormula do
7
7
  it 'can be initialized with a String or Hash' do
8
8
  data = {h: 22, c: 12, n: 1, o: 3, s: 2}
9
9
  mf = Mspire::MolecularFormula.new "H22BeC12N1O3S2Li2"
10
- mf.should == {:h=>22, :be=>1, :c=>12, :n=>1, :o=>3, :s=>2, :li=>2}
10
+ mf.to_hash.should == {:h=>22, :be=>1, :c=>12, :n=>1, :o=>3, :s=>2, :li=>2}
11
11
  mf = Mspire::MolecularFormula.new(data)
12
- mf.should == data
12
+ mf.to_hash.should == data
13
+ end
14
+
15
+ it 'can be initialized with charge, too' do
16
+ mf = Mspire::MolecularFormula.new "H22BeC12N1O3S2Li2", 2
17
+ mf.to_hash.should == {:h=>22, :be=>1, :c=>12, :n=>1, :o=>3, :s=>2, :li=>2}
18
+ mf.charge.should == 2
13
19
  end
14
20
 
15
21
  it 'expects properly capitalized abbreviations' do
16
- Mspire::MolecularFormula.new('Ni7Se3').should == {:ni=>7, :se=>3}
22
+ Mspire::MolecularFormula.new('Ni7Se3').to_hash.should == {:ni=>7, :se=>3}
17
23
  # there is no such thing as the E element, so this is going to get the
18
24
  # user in trouble. However, this is the proper interpretation of the
19
25
  # formula.
20
- Mspire::MolecularFormula.new('Ni7SE3').should == {:ni=>7, :s=>1, :e=>3}
26
+ Mspire::MolecularFormula.new('Ni7SE3').to_hash.should == {:ni=>7, :s=>1, :e=>3}
27
+ end
28
+
29
+ describe 'an object' do
30
+
31
+ subject {
32
+ data = {h: 22, c: 12, n: 1, o: 3, s: 2, be: 1}
33
+ Mspire::MolecularFormula.new(data)
34
+ }
35
+
36
+ it 'the string output is a standard molecular formula' do
37
+ subject.to_s.should == "BeC12H22NO3S2"
38
+ end
39
+
40
+ it 'can be converted to a hash' do
41
+ subject.to_hash.should == {h: 22, c: 12, n: 1, o: 3, s: 2, be: 1}
42
+ end
43
+
44
+ it 'is only equal if the charge is equal' do
45
+ another = subject.dup
46
+ another.should == subject
47
+ another.charge = 2
48
+ another.should_not == subject
49
+ end
50
+
21
51
  end
22
52
 
23
53
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mspire
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.10
4
+ version: 0.7.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: