From be3b62ed871f170f748db84aac6d7de2d38de0f1 Mon Sep 17 00:00:00 2001 From: Niklaus Giger Date: Wed, 8 Jul 2015 15:48:03 +0200 Subject: [PATCH] Added excipiens and more_info --- src/model/activeagent.rb | 9 +++++++-- src/model/composition.rb | 15 +++++++++++---- src/model/substance.rb | 3 ++- test/test_model/composition.rb | 27 +++++++++++++++++++++++++-- test/test_model/substance.rb | 8 ++++++++ 5 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/model/activeagent.rb b/src/model/activeagent.rb index c9127d321..b7ade9844 100644 --- a/src/model/activeagent.rb +++ b/src/model/activeagent.rb @@ -12,7 +12,7 @@ class ActiveAgentCommon attr_accessor :substance attr_accessor :chemical_substance, :equivalent_substance attr_accessor :dose, :chemical_dose, :equivalent_dose, :sequence - attr_accessor :spagyric_dose, :spagyric_type, :composition + attr_accessor :spagyric_dose, :spagyric_type, :composition, :more_info, :is_active_agent class << self include AccessorCheckMethod end @@ -26,13 +26,18 @@ class << self :sequence => 'ODDB::Sequence', } define_check_class_methods check_class_list - def initialize(substance_name) + def initialize(substance_name, is_active_agent = true) super() @substance_name = substance_name + @is_active_agent = is_active_agent end def init(app) self.substance = app.substance(@substance_name) end + def is_active_agent + return @is_active_agent unless @is_active_agent + true + end def checkout if(@substance.respond_to?(:remove_sequence)) @substance.remove_sequence(@sequence) diff --git a/src/model/composition.rb b/src/model/composition.rb index aa05e7f88..915b74559 100644 --- a/src/model/composition.rb +++ b/src/model/composition.rb @@ -5,18 +5,24 @@ require 'util/persistence' require 'model/activeagent' +require 'model/substance' module ODDB class Composition include Persistence include Comparable attr_accessor :sequence, :source, :label - attr_reader :galenic_form, :active_agents + attr_reader :galenic_form, :active_agents, :excipiens def initialize + @excipiens = nil @active_agents = [] @parts = [] super end + def add_excipiens(substance) + raise "can only add a substance as excipiens" unless substance.is_a?(ODDB::Substance) + @excipiens = substance + end def init(app) @pointer.append(@oid) end @@ -31,11 +37,11 @@ def checkout } @active_agents.odba_delete end - def create_active_agent(substance_name) + def create_active_agent(substance_name, is_active_agent = true) active = active_agent(substance_name) return active unless active.nil? - active = ActiveAgent.new(substance_name) - active.composition = self + active = ActiveAgent.new(substance_name, is_active_agent) + composition = self active.sequence = @sequence @active_agents.push(active) active @@ -71,6 +77,7 @@ def to_s if @galenic_form str = "%s: %s" % [@galenic_form, str] end + str = @label + ': ' + str if @label str end def *(factor) diff --git a/src/model/substance.rb b/src/model/substance.rb index ca399b1ef..2f7b6d7b6 100644 --- a/src/model/substance.rb +++ b/src/model/substance.rb @@ -15,11 +15,12 @@ class Substance include SequenceObserver ODBA_SERIALIZABLE = [ '@descriptions', '@synonyms' ] attr_reader :chemical_forms, :effective_form, :sequences - attr_accessor :swissmedic_code, :casrn + attr_accessor :swissmedic_code, :casrn, :more_info include Comparable include Language def initialize super() + @more_info = nil @sequences = [] @chemical_forms = [] end diff --git a/test/test_model/composition.rb b/test/test_model/composition.rb index 0cb304ecc..101a0445b 100644 --- a/test/test_model/composition.rb +++ b/test/test_model/composition.rb @@ -2,13 +2,14 @@ # encoding: utf-8 # ODDB::TestComposition -- oddb.org -- 20.04.2011 -- mhatakeyama@ywesee.com -#$: << File.expand_path('..', File.dirname(__FILE__)) +$: << File.expand_path('..', File.dirname(__FILE__)) $: << File.expand_path("../../src", File.dirname(__FILE__)) gem 'minitest' require 'minitest/autorun' require 'flexmock' require 'model/composition' +require 'stub/odba' module ODDB class TestComposition 123) @composition = ODDB::Composition.new + @tst_name = 'substance_name' end def test_init pointer = flexmock('pointer', :append => 'append') @@ -30,6 +32,11 @@ def test_active_agent__found @composition.instance_eval('@active_agents = [active_agent]') assert_equal(active_agent, @composition.active_agent('substance')) end + def test_active_agent__found_substance + active_agent = flexmock('active_agent', :same_as? => true, :is_active_agent => false) + @composition.instance_eval('@active_agents = [active_agent]') + assert_equal(active_agent, @composition.active_agent('substance')) + end def test_checkout active_agent = flexmock('active_agent', :checkout => 'checkout', @@ -40,7 +47,14 @@ def test_checkout assert_equal('odba_delete', @composition.checkout) end def test_create_active_agent - assert_kind_of(ODDB::ActiveAgent, @composition.create_active_agent('substance_name')) + result = @composition.create_active_agent('substance_name') + assert_kind_of(ODDB::ActiveAgent, result) + assert_equal(true, result.is_active_agent) + end + def test_create_substance + result = @composition.create_active_agent('substance_name', false) + assert_kind_of(ODDB::ActiveAgent, result) + assert_equal(false, result.is_active_agent) end def test_delete_active_agent active_agent = flexmock('active_agent', :same_as? => true) @@ -129,6 +143,15 @@ def test_replace_observer value = flexmock('value', :add_sequence => 'add_sequence') assert_equal(value, @composition.instance_eval('replace_observer(target, value)')) end + def test_active_more_info + tst = 'more_info' + active = @composition.create_active_agent('substance') + assert_equal(ODDB::ActiveAgent, active.class) + active.more_info = tst + assert_equal(tst, active.more_info) + active.more_info = nil + assert_equal(nil, active.more_info) + end end end diff --git a/test/test_model/substance.rb b/test/test_model/substance.rb index c67a73e02..c23b8a642 100644 --- a/test/test_model/substance.rb +++ b/test/test_model/substance.rb @@ -29,6 +29,14 @@ def teardown def test_initialize refute_nil(@substance.oid) end + def test_add_more_info + tstLabel = 'conserv.' + @substance.more_info = tstLabel + assert_equal(tstLabel, @substance.more_info) + end + def test_is_active_agent_true + assert_equal(false, @substance.is_active_agent) + end def test_add_chemical_form form1 = flexmock 'chemical form' @substance.add_chemical_form form1