<< | Index | >>
Plugin: ODDB::BsvXmlPlugin Error: NoMethodError Message: undefined method `empty?' for #<ODDB::LimitationText:0x0000000e23cf40> @report: {:name_base=>"Modasomil", :name_descr=>"Tabl 100 mg ", :swissmedic_no5_bag=>"55272", :deductible=>:deductible_g, :generic_type=>:unknown, :atc_class=>"N06BA07", :pharmacode_bag=>"4701604", :swissmedic_no5_oddb=>"55272", :swissmedic_no8_bag=>"55272007", :pharmacode_oddb=>"4701604"}
LimitationText includes SimpleLanguage
.
in @src/util/language.rb@@
def to_s if descriptions.empty? '' else descriptions.first.to_s end end
Atcclass model das SimpleLanguage::Descriptions as @descriptions.
check_class_list = { :code => "String", :sequences => "Array", :descriptions => "ODDB::SimpleLanguage::Descriptions", }
ch.oddb> atc_class('N06BA07') -> Modafinil ch.oddb> atc_class('N06BA07').descriptions -> {"de"=>"Modafinil", "en"=>"Modafinil"} ch.oddb> atc_class('N06BA07').descriptions.class -> ODDB::SimpleLanguage::Descriptions ch.oddb> atc_class('N06BA07').descriptions.empty? -> false
in src/plugin/bsv_xml.rb
def tag_end ... @lim_texts.each do |pac_ptr, lim_data| if (pac = pac_ptr.resolve(@app)) && (sl_entry = pac.sl_entry) && (sl_entry.respond_to?(:pointer)) sl_ptr = sl_entry.pointer txt_ptr = sl_ptr + :limitation_text if lim_data.empty? if sl_entry.limitation_text @deleted_limitation_texts += 1 @app.delete txt_ptr end else if sl_entry.limitation_text @updated_limitation_texts += 1 else @created_limitation_texts += 1 end
ch.oddb> packages.values.select{|pack|pack.sl_entry}.length -> 9361 ch.oddb> packages.values.select{|pack|pack.sl_entry and pack.sl_entry.is_a? ODDB::SlEntry}.length -> 9361
Following problem may be related with this error.
# In order to refresh limitation text old objects in ODBA cache # before updating. Otherwise, the link between sl_entry and # limitation_text may not produced even if there are both objects # in ODBA cache.
I found corrupted data in a SlEntry object.
ch.oddb> registration('55272').sequence('02').packages.values.first.limitation_text -> undefined method `empty?' for #<ODDB::LimitationText:0x000000120d0540> ch.oddb> registration('55272').sequence('02').packages.values.last.limitation_text -> [] ch.oddb>
in src/model/package.rb
def limitation_text @sl_entry.limitation_text if @sl_entry.respond_to?(:limitation_text) en
in src/util/language.rb
def to_s p descriptions.class p self.class if descriptions.nil? || descriptions.empty? '' else descriptions.first.to_s end end #=> ODDB::LimitationText ODDB::Fachinfo
Thin SlEntry object has Fachinfo
as limitation_text.
ch.oddb> registration('55272').sequence('02').packages.values.first.sl_entry.odba_id -> 25444845
Finaly, I deleted this unexpected value.
And updated to prevent this error SimpleLanguace module.
Some SlEntry have multi LimitationText as Array.
ch.oddb> packages.values.select{|pack|pack.limitation_text.is_a? Array}.length -> 2 ch.oddb> packages.values.select{|pack|pack.limitation_text.is_a? Array}.first.odba_id -> 241387 ch.oddb> packages.values.select{|pack|pack.limitation_text.is_a? Array}.last.odba_id -> 22749674
This Array data also were unexpected.
error in SBSM::Session#http_headers: /de/gcc/limitation_text/reg/55272/seq/02/pack/007 NoMethodError undefined method `pointer' for []:Array /path/to/ruby/lib/ruby/gems/1.9.1/gems/odba-1.0.8/lib/odba/stub.rb:112:in `method_missing' /var/ch.oddb.org/src/view/drugs/limitationtext.rb:37:in `limitation_text_title'
This LimitationText also has strange objects.
ch.oddb> ODBA.cache.fetch('241387').limitation_text.first -> #<ODDB::Registration:0x000000069fde30> ch.oddb> ODBA.cache.fetch('22749674').sl_entry.limitation_text -> []
in src/view/additional_information.rb
def compositions ... lang = @session.language parts = model.compositions.collect { |comp| part = '' if galform = comp.galenic_form and galform.respond_to?(lang.to_sym) part << galform.send(lang) << ': ' end if comp.active_agents.size > 1 part << @lookandfeel.lookup(:active_agents, model.active_agents.size) else part << comp.active_agents.first.to_s end } link.value = parts.join('<br/>') link ... end
These Package
Objects have empty \@parts
.
in src/model/package.rb
def compositions @parts.inject([]) { |comps, part| comps.push part.composition }.compact end
Part#compositions is empty.
ch.oddb> registration('60414').sequences.values.first.packages.values.first.parts.first.composition.class -> NilClass
There are related warnings in exporetr.
in src/util/exporter.rb
def report_dose_missing_list(list) log = Log.new(@@today) log.report = [ "Warning: Dose data (ODDB::Package.parts, Array of ODDB::Dose instances) is empty.", "Message: export_oddbdat succeeded but the following package(s) do not have Dose data.", "Package(s):", list.collect do |list| list[0].to_s + ", " + \ "http://#{SERVER_NAME}/de/gcc/show/reg/" + list[1].to_s + \ "/seq/" + list[2].to_s + "/pack/" + list[3].to_s + ".\n" end ].join("\n") log.notify("Warning Export: oddbdat") end
I updated addition_information view to display Sequence#composition instead of Part#compositions via Package#parts.