eulim 0.0.4 → 0.0.5
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.
- checksums.yaml +4 -4
 - data/README.md +8 -4
 - data/lib/eulim/chemistry/compound.rb +47 -7
 - data/lib/eulim/chemistry/element.rb +5 -0
 - data/lib/eulim/version.rb +1 -1
 - metadata +2 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 848f2bdad4e29272b0fa072940779da4fa423ef7
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: aa8f97a80023676fb7f984343949b033c02b2773
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 55336a3b7f9db14cdddbe750e65871fb2f1c9982a82917a09f8f51f87da17875e97f21a5c89d7db8b019e5bb33c8be202f5bb31a2df950828a7296e92019b3d1
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 3a127b106a946e0f3a8f16b6e11948a8f0b8006577db9bd41b90cb8490acea3f91ce28170c2ea892675dd76fce4d9156db73e8f9ec5619951eb7a7e3f6079745
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -39,13 +39,17 @@ Or install it yourself as: 
     | 
|
| 
       39 
39 
     | 
    
         
             
            ## Usage
         
     | 
| 
       40 
40 
     | 
    
         | 
| 
       41 
41 
     | 
    
         
             
            	$ Eulim::Chemistry::Element.get_by_symbol("H")
         
     | 
| 
       42 
     | 
    
         
            -
            	=> #<Eulim::Chemistry::Element: 
     | 
| 
      
 42 
     | 
    
         
            +
            	=> #<Eulim::Chemistry::Element: @symbol="H", @name="Hydrogen", @atomic_number=1, @atomic_mass=1.008>
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
44 
     | 
    
         
             
            	$ Eulim::Chemistry::Element.get_by_atomic_number(12)
         
     | 
| 
       45 
     | 
    
         
            -
            	=> #<Eulim::Chemistry::Element: 
     | 
| 
      
 45 
     | 
    
         
            +
            	=> #<Eulim::Chemistry::Element: @symbol="Mg", @name="Magnesium", @atomic_number=12, @atomic_mass=24.305>
         
     | 
| 
       46 
46 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
            	$ Eulim::Chemistry::Compound. 
     | 
| 
       48 
     | 
    
         
            -
            	=>  
     | 
| 
      
 47 
     | 
    
         
            +
            	$ Eulim::Chemistry::Compound.new("CaCO3")
         
     | 
| 
      
 48 
     | 
    
         
            +
            	=> #<Eulim::Chemistry::Compound: @formula="CaCO3">
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            	$ Eulim::Chemistry::Compound.new("CaCO3").elements
         
     | 
| 
      
 51 
     | 
    
         
            +
            	=> [#<Eulim::Chemistry::Element: @symbol="Ca", @name="Calcium", @atomic_number=20, @atomic_mass=40.078>, #<Eulim::Chemistry::Element: @symbol="C", @name="Carbon", @atomic_number=6, @atomic_mass=12.0107>, #<Eulim::Chemistry::Element: @symbol="O", @name="Oxygen", @atomic_number=8, @atomic_mass=15.9996>]
         
     | 
| 
      
 52 
     | 
    
         
            +
            	
         
     | 
| 
       49 
53 
     | 
    
         
             
            ## Development
         
     | 
| 
       50 
54 
     | 
    
         | 
| 
       51 
55 
     | 
    
         
             
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         
     | 
| 
         @@ -1,16 +1,56 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Eulim::Chemistry
         
     | 
| 
       2 
2 
     | 
    
         
             
            	class Compound
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            		VALID_COMPOUND_REGEXP = /[A-Z][a-z]{0,2}\d*|\((?:[^()]*(?:\(.*\))?[^()]*)+\)\d*/
         
     | 
| 
      
 5 
     | 
    
         
            +
            		VAILD_ELEMENT_REGEXP = /[A-Z][a-z]{0,2}\d*/
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       3 
7 
     | 
    
         
             
            		def initialize(arg)
         
     | 
| 
       4 
8 
     | 
    
         
             
            			@formula = arg
         
     | 
| 
       5 
9 
     | 
    
         
             
            		end
         
     | 
| 
       6 
10 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
            		def  
     | 
| 
       8 
     | 
    
         
            -
            			 
     | 
| 
       9 
     | 
    
         
            -
            			 
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
      
 11 
     | 
    
         
            +
            		def molecular_mass
         
     | 
| 
      
 12 
     | 
    
         
            +
            			mass = 0
         
     | 
| 
      
 13 
     | 
    
         
            +
            			element_atom_count = get_element_atom_count
         
     | 
| 
      
 14 
     | 
    
         
            +
            			element_atom_count.each do |symbol, count|
         
     | 
| 
      
 15 
     | 
    
         
            +
            				mass += Element.get_by_symbol(symbol).atomic_mass * count
         
     | 
| 
       11 
16 
     | 
    
         
             
            			end
         
     | 
| 
       12 
     | 
    
         
            -
            			 
     | 
| 
      
 17 
     | 
    
         
            +
            			mass
         
     | 
| 
       13 
18 
     | 
    
         
             
            		end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            		private
         
     | 
| 
      
 21 
     | 
    
         
            +
            			def get_element_atom_count formula = @formula, group_multiplier = 1, result = {}, groups = []
         
     | 
| 
      
 22 
     | 
    
         
            +
            				formula
         
     | 
| 
      
 23 
     | 
    
         
            +
            				elements_n_groups = formula.scan VALID_COMPOUND_REGEXP
         
     | 
| 
      
 24 
     | 
    
         
            +
            				loop do
         
     | 
| 
      
 25 
     | 
    
         
            +
            					break if !elements_n_groups.last
         
     | 
| 
      
 26 
     | 
    
         
            +
            					elements = elements_n_groups.last.scan VAILD_ELEMENT_REGEXP
         
     | 
| 
      
 27 
     | 
    
         
            +
            					if elements.first === elements_n_groups.last
         
     | 
| 
      
 28 
     | 
    
         
            +
            						element_multipler = elements.first.match(/\d*$/).to_a.first.to_i
         
     | 
| 
      
 29 
     | 
    
         
            +
            						element_multipler = element_multipler > 0 ? element_multipler : 1
         
     | 
| 
      
 30 
     | 
    
         
            +
            						element_symbol = elements.first.match(/[A-Z][a-z]{0,2}/).to_a.first
         
     | 
| 
      
 31 
     | 
    
         
            +
            						if result[element_symbol]
         
     | 
| 
      
 32 
     | 
    
         
            +
            							result[element_symbol] += (element_multipler * group_multiplier)
         
     | 
| 
      
 33 
     | 
    
         
            +
            						else
         
     | 
| 
      
 34 
     | 
    
         
            +
            							result[element_symbol] = (element_multipler * group_multiplier)
         
     | 
| 
      
 35 
     | 
    
         
            +
            						end
         
     | 
| 
      
 36 
     | 
    
         
            +
            					else
         
     | 
| 
      
 37 
     | 
    
         
            +
            						groups << elements_n_groups.last
         
     | 
| 
      
 38 
     | 
    
         
            +
            					end
         
     | 
| 
      
 39 
     | 
    
         
            +
            					elements_n_groups.pop
         
     | 
| 
      
 40 
     | 
    
         
            +
            				end
         
     | 
| 
      
 41 
     | 
    
         
            +
            				loop do
         
     | 
| 
      
 42 
     | 
    
         
            +
            					break if !groups.last
         
     | 
| 
      
 43 
     | 
    
         
            +
            					group = groups.pop
         
     | 
| 
      
 44 
     | 
    
         
            +
            					grml = get_group_multiplier(group)
         
     | 
| 
      
 45 
     | 
    
         
            +
            					get_element_atom_count group[1..-(grml.to_s.length+1)], grml*group_multiplier, result, groups
         
     | 
| 
      
 46 
     | 
    
         
            +
            				end
         
     | 
| 
      
 47 
     | 
    
         
            +
            				result
         
     | 
| 
      
 48 
     | 
    
         
            +
            			end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            			def get_group_multiplier formula
         
     | 
| 
      
 51 
     | 
    
         
            +
            				group_multiplier = formula.scan(VALID_COMPOUND_REGEXP).first.match(/\d*$/).to_a.first.to_i
         
     | 
| 
      
 52 
     | 
    
         
            +
            				group_multiplier > 0 ? group_multiplier : 1
         
     | 
| 
      
 53 
     | 
    
         
            +
            			end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
       15 
55 
     | 
    
         
             
            	end
         
     | 
| 
       16 
     | 
    
         
            -
            end
         
     | 
| 
      
 56 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,6 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Eulim::Chemistry
         
     | 
| 
       2 
2 
     | 
    
         
             
            	class Element
         
     | 
| 
       3 
3 
     | 
    
         | 
| 
      
 4 
     | 
    
         
            +
            		VALID_SYMBOL_REGEXP = /[A-Z][a-z]{0,2}/
         
     | 
| 
      
 5 
     | 
    
         
            +
            		VALID_NAME_REGEXP = /[A-Z][a-z]+/
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            		attr_accessor :atomic_mass
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       4 
9 
     | 
    
         
             
            		@@elements = [
         
     | 
| 
       5 
10 
     | 
    
         
             
            			{ symbol:'H',		name: 'Hydrogen', 	atomic_number: 1,		atomic_mass: 1.0079 },
         
     | 
| 
       6 
11 
     | 
    
         
             
            			{ symbol:'He',	name: 'Helium', 		atomic_number: 2,		atomic_mass: 4.002602 },
         
     | 
    
        data/lib/eulim/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: eulim
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.5
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Syed Fazil Basheer
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2017-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2017-05-22 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: bundler
         
     |