view · edit · sidebar · attach · print · history

20100915 update-limitation-text

<< Masa.20100916-understand-limitation-process | 2010 | Masa.20100914-test-import_gkv >>


  1. de.oddb.org ODDB::Import::Pharma24
  2. Search limitation_text process
  3. Try again
  4. Interim Summary

Goal
  • Ticket 242 / 50%
    • To understand limitation_text process / 80%
Milestones
  1. BraSt
  2. Search limitation process
Summary
Commits
ToDo Tomorrow
  1. Dimdi-Import-Error.
Keep in Mind
Attached Files

de.oddb.org ODDB::Import::Pharma24

We got an error mail

Wed Sep 15 02:03:12 2010: de.oddb.org  ODDB::Import::Pharma24#import
Mechanize::RedirectLimitReachedError
Maximum redirect limit (20) reached
/usr/lib64/ruby/gems/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:605:in `fetch_page'
/usr/lib64/ruby/gems/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:611:in `fetch_page'
/usr/lib64/ruby/gems/1.8/gems/mechanize-1.0.0/lib/mechanize.rb:259:in `get'
/var/www/de.oddb.org/lib/oddb/import/pharma24.rb:132:in `search'
/var/www/de.oddb.org/lib/oddb/import/pharma24.rb:160:in `update_package'
/var/www/de.oddb.org/lib/oddb/import/pharma24.rb:20:in `import'
/var/www/de.oddb.org/lib/oddb/util/updater.rb:158:in `update_prices'
/var/www/de.oddb.org/lib/oddb/util/updater.rb:117:in `call'
/var/www/de.oddb.org/lib/oddb/util/updater.rb:117:in `_reported_import'
/var/www/de.oddb.org/lib/oddb/util/updater.rb:157:in `update_prices'
/var/www/de.oddb.org/jobs/import_pharma24:12
/var/www/de.oddb.org/lib/oddb/util/job.rb:16:in `call'
/var/www/de.oddb.org/lib/oddb/util/job.rb:16:in `run'
/var/www/de.oddb.org/jobs/import_pharma24:11
Checked     1 Packages
Updated     0 Packages
Created     0 Companies

Search limitation_text process

Davatz-san Mail

  1. Ticket 242, Comment 9
  2. Ticket 242, Comment 9 - V1.1
  3. Ticket 242, Comment 9 - V1.2
  4. Re: Ticket 242, Comment 9 - notification Mail
If you search for the products you will find, that the mentioned products in above ticket to not contain an "L" in the search result. 
There should be an "L" (for Limitation) and there should also be some text there when you click on the "L" - as for example here:

 http://ch.oddb.org/de/gcc/resolve/pointer/%253A%2521registration%252C46928%2521sequence%252C01%2521package%252C016%2521sl_entry%2521limitation_text.

All of the Limitations mentioned in Ticket 242 comment 9 are probably assigned in the XML via the IT-Code and not via the package Tag.

There are three levels of Limitation-assignment:

1. IT (Index Therapeuticus) - I guess not yet implemented
2. Präparat (Produkt) - Implemented
3. Packung (Package) - Implemented

So we need to figure out a way how to show the Limitations belonging to the IT-Code and not to the package. 
The Limitations on the IT-Level also have to go into the file oddb.csv.

The Limitations belonging to IT-Codes (1) are all found in the file:

       ItCodes.xml

I guess we do not import that yet but I can not confirm that. Also see:

       ./test/test_plugin/bsv_xml.rb

Test

masa@masa ~/ywesee/oddb.org $ ruby test/test_plugin/bsv_xml.rb 
test/test_plugin/bsv_xml.rb:905: warning: parenthesize argument(s) for future version
test/test_plugin/bsv_xml.rb:15: warning: already initialized constant MEDDATA_SERVER
Loaded suite test/test_plugin/bsv_xml
Started
!!!!! DEPRECATION NOTICE !!!!!
The WWW constant is deprecated, please switch to the new top-level Mechanize
constant.  WWW will be removed in Mechanize version 2.0

You've referenced the WWW constant from test/test_plugin/bsv_xml.rb:684:in `test_download', please
switch the "WWW" to "Mechanize".  Thanks!

Sincerely,

  Pew Pew Pew

FE.......
Finished in 0.0777340000000001 seconds.

  1) Failure:
test_download(ODDB::TestBsvXmlPlugin) [test/test_plugin/bsv_xml.rb:688]:
Exception raised:
Class: <Errno::ENOENT>
Message: <"No such file or directory - /home/masa/ywesee/oddb.org/test/data/xml/XMLPublications.zip">
---Backtrace---
/usr/lib64/ruby/1.8/fileutils.rb:1200:in `stat'
/usr/lib64/ruby/1.8/fileutils.rb:1200:in `lstat'
/usr/lib64/ruby/1.8/fileutils.rb:1178:in `stat'
/usr/lib64/ruby/1.8/fileutils.rb:1260:in `copy_file'
/usr/lib64/ruby/1.8/fileutils.rb:463:in `copy_file'
/usr/lib64/ruby/1.8/fileutils.rb:383:in `cp'
/usr/lib64/ruby/1.8/fileutils.rb:1395:in `fu_each_src_dest'
/usr/lib64/ruby/1.8/fileutils.rb:1411:in `fu_each_src_dest0'
/usr/lib64/ruby/1.8/fileutils.rb:1393:in `fu_each_src_dest'
/usr/lib64/ruby/1.8/fileutils.rb:382:in `cp'
test/test_plugin/bsv_xml.rb:680:in `test_download'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/expectation.rb:78:in `call'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/expectation.rb:78:in `return_value'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/expectation.rb:59:in `verify_call'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/expectation_director.rb:42:in `call'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/core.rb:101:in `method_missing'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/core.rb:191:in `flexmock_wrap'
/usr/lib64/ruby/gems/1.8/gems/flexmock-0.8.6/lib/flexmock/core.rb:98:in `method_missing'
/home/masa/ywesee/oddb.org/src/plugin/bsv_xml.rb:655:in `download_to'
test/test_plugin/bsv_xml.rb:689:in `test_download'
test/test_plugin/bsv_xml.rb:688:in `test_download'
---------------

  2) Error:
test_update_it_codes(ODDB::TestBsvXmlPlugin):
Zip::ZipError: File /home/masa/ywesee/oddb.org/test/data/xml/XMLPublications.zip not found
    /usr/lib64/ruby/gems/1.8/gems/rubyzip-0.9.4/lib/zip/zip.rb:1396:in `initialize'
    /usr/lib64/ruby/gems/1.8/gems/rubyzip-0.9.4/lib/zip/zip.rb:1410:in `new'
    /usr/lib64/ruby/gems/1.8/gems/rubyzip-0.9.4/lib/zip/zip.rb:1410:in `open'
    test/test_plugin/bsv_xml.rb:701:in `test_update_it_codes'

9 tests, 64 assertions, 1 failures, 1 errors

BraSt

  • There seem to be several processes regarding limitation_text
  • I have to understand 1. save process 2. read process
    • When it is saved, when it is readed and shown
    • There are expected to be several parts in the source code
  • Anyway, I should do one by one search from grep search result
    • I will expect some ideas to come during that process
  • First, I should focus on the search result of drugs from the top page
    • This must be a base point

Confirm the result yesterday again

src/model/package.rb

    def limitation_text
#     @sl_entry.limitation_text unless @sl_entry.nil?
    end

Result

  • "L" disappears

BraSt

  • The limitation text information must be saved in @sl_entry object (=SlEntry class)
  • What class is the limitation_text return value?

Check the limitation_text class

    def limitation_text
p @sl_entry.limitation_text.class unless @sl_entry.nil?
      @sl_entry.limitation_text unless @sl_entry.nil?
    end

Result

ODDB::LimitationText
NilClass
ODDB::LimitationText
ODDB::LimitationText
ODDB::LimitationText
NilClass

Therefore

  • @sl_entry.limitation_text = ODDB::LimitationText

BraSt

  • I may find the limitation text process if I trance ODDB::LimitationText

Look for ODDB::LimitationText class

masa@masa ~/ywesee/oddb.org $ grep -r "class LimitationText" src
src/model/limitationtext.rb:    class LimitationText
src/state/drugs/limitationtext.rb:class LimitationText < State::Drugs::Global
src/state/drugs/limitationtexts.rb:class LimitationTexts < Global
src/state/migel/limitationtext.rb:class LimitationText < State::Migel::Global
src/view/drugs/limitationtext.rb:class LimitationTextInnerComposite < HtmlGrid::Composite
src/view/drugs/limitationtext.rb:class LimitationTextComposite < HtmlGrid::Composite
src/view/drugs/limitationtext.rb:class LimitationText < PrivateTemplate
src/view/drugs/limitationtexts.rb:class LimitationTextList < HtmlGrid::List
src/view/drugs/limitationtexts.rb:class LimitationTextsComposite < HtmlGrid::Composite
src/view/drugs/limitationtexts.rb:class LimitationTexts < ResultTemplate
src/view/migel/limitationtext.rb:class LimitationTextInnerComposite < View::Drugs::LimitationTextInnerComposite
src/view/migel/limitationtext.rb:class LimitationTextComposite < HtmlGrid::Composite
src/view/migel/limitationtext.rb:class LimitationText < View::PrivateTemplate

Notes

  • So many LimitationText classes!!

Anyway, check them one by one

src/model/limitationtext.rb

#!/usr/bin/env ruby
# LimitationText -- oddb -- 10.11.2003 -- mhuggler@ywesee.com

require 'util/language'

module ODDB
  class LimitationText
    include SimpleLanguage
    ODBA_SERIALIZABLE = [ '@descriptions' ]
    attr_accessor :code, :type, :niveau, :value, :valid_from
  end
end

Notes

  • LimitationText class includes SimpleLanguage module
  • SimpleLanguage module includes Persistence module
  • Persistence module includes PersistenceMethods module and ODBA::Persistable module

BraSt

  • What is the functions of Persistence module? Is it for Persist Object? to save objects using ODBA?
  • I have to understand it in the future

Experiment

    def limitation_text
print @sl_entry.limitation_text.pretty_inspect, "\n" if @sl_entry.limitation_text.class == ODDB::LimitationText
      @sl_entry.limitation_text unless @sl_entry.nil?

Result

#<ODDB::LimitationText:0x7f93201c8508
 @descriptions=
  {"it"=>
    #<ODDB::Text::Chapter:0x7f93201c83a0
     @heading="",
     @sections=
      [#<ODDB::Text::Section:0x7f93201c82d8
        @paragraphs=
         [#<ODDB::Text::Paragraph:0x7f93201c8210
           @format=
            #<ODDB::Text::Format:0x7f93201c8170
             @end=-1,
             @start=58,
             @values=[]>,
           @formats=
            [#<ODDB::Text::Format:0x7f93201c8008
              @end=16,
              @start=0,
              @values=[]>,
             #<ODDB::Text::Format:0x7f93201c7f90
              @end=20,
              @start=17,
              @values=[:bold]>,
             #<ODDB::Text::Format:0x7f93201c7ef0
              @end=27,
              @start=21,
              @values=[]>,
             #<ODDB::Text::Format:0x7f93201c7e78
              @end=57,
              @start=28,
              @values=[:bold]>,
             #<ODDB::Text::Format:0x7f93201c8170
              @end=-1,
              @start=58,
              @values=[]>],
           @preformatted=false,
           @raw_txt=nil,
           @text=
            u"Ammessi in totale 120 punti. Iniectabilia sine limitatione">],
        @subheading="01.04.10.: S\303\251datifs-tranquillisants simples\n">]>,
   "de"=>
    #<ODDB::Text::Chapter:0x7f93201c7518
     @heading="",
     @sections=
      [#<ODDB::Text::Section:0x7f93201c7450
        @paragraphs=
         [#<ODDB::Text::Paragraph:0x7f93201c73b0
           @format=
            #<ODDB::Text::Format:0x7f93201c7360
             @end=-1,
             @start=63,
             @values=[]>,
           @formats=
            [#<ODDB::Text::Format:0x7f93201c72c0
              @end=20,
              @start=0,
              @values=[]>,
             #<ODDB::Text::Format:0x7f93201c7220
              @end=24,
              @start=21,
              @values=[:bold]>,
             #<ODDB::Text::Format:0x7f93201c7180
              @end=32,
              @start=25,
              @values=[]>,
             #<ODDB::Text::Format:0x7f93201c7068
              @end=62,
              @start=33,
              @values=[:bold]>,
             #<ODDB::Text::Format:0x7f93201c7360
              @end=-1,
              @start=63,
              @values=[]>],
           @preformatted=false,
           @raw_txt=nil,
           @text=
            u"Gesamthaft zugelassen 120 Punkte. Iniectabilia sine limitatione">],
        @subheading="01.04.10.: Einfache Sedativa/Tranquillantia\n">]>,
   "fr"=>
    #<ODDB::Text::Chapter:0x7f93201c7b08
     @heading="",
     @sections=
      [#<ODDB::Text::Section:0x7f93201c7a90
        @paragraphs=
         [#<ODDB::Text::Paragraph:0x7f93201c7a18
           @format=
            #<ODDB::Text::Format:0x7f93201c79c8
             @end=-1,
             @start=75,
             @values=[]>,
           @formats=
            [#<ODDB::Text::Format:0x7f93201c78d8
              @end=32,
              @start=0,
              @values=[]>,
             #<ODDB::Text::Format:0x7f93201c7860
              @end=36,
              @start=33,
              @values=[:bold]>,
             #<ODDB::Text::Format:0x7f93201c77e8
              @end=44,
              @start=37,
              @values=[]>,
             #<ODDB::Text::Format:0x7f93201c7770
              @end=74,
              @start=45,
              @values=[:bold]>,
             #<ODDB::Text::Format:0x7f93201c79c8
              @end=-1,
              @start=75,
              @values=[]>],
           @preformatted=false,
           @raw_txt=nil,
           @text=
            u"Prescription limit\303\251e au maximum \303\240 120 points. Iniectabilia sine limitatione">],
        @subheading="01.04.10.: S\303\251datifs-tranquillisants simples\n">]>},
 @odba_id=10899115,
 @odba_observers=[],
 @odba_persistent=true,
 @oid=10899115,
 @pointer=
  #<ODDB::Persistence::Pointer:0x7f93201c6ca8
   @directions=
    [["registration", "38294"],
     [:sequence, "01"],
     [:package, "016"],
     [:sl_entry],
     [:limitation_text]]>,
 @revision=Fri Apr 03 14:26:11 +0200 2009>

#<ODDB::LimitationText:0x7f93201007d8
 @odba_class=nil,
 @odba_container=nil,
 @odba_id=23135746,
 @receiver=nil,
 @receiver_loaded=nil>

Analyze

  • ODDB::Limitation@description is mainly @description, wihch is hash structure for each language, key = [it, de, fr]
  • ODDB::Limitation object seems to have different instance variables depending on a situation
  • @description hash variables look classes of ODDB::Text module, Chapter, Section, Paragraph, Format
  • Paragraph@text has a string information when we click "L" letter in the search result page

Experiment

src/model/slentry.rb

    def create_limitation_text
p "getin ODDB::SlEntry#create_limitation_text"
      @limitation_text = LimitationText.new
    end

Result

  • Nothing happened

Experiment

module ODDB
  class SlEntry
    include Persistence
    attr_accessor :limitation, :limitation_points
    attr_accessor :introduction_date, :bsv_dossier, :status, :type,
                  :valid_from, :valid_until
    attr_reader :limitation_text
    def create_limitation_text
p "getin ODDB::SlEntry#create_limitation_text"
      @limitation_text = LimitationText.new
    end
    def delete_limitation_text
p "getin ODDB::SlEntry#delete_limitation_text"
      @limitation_text = nil
      self.odba_isolated_store
      nil
    end
    def pointer_descr
p "getin ODDB::SlEntry#pointer"
      :sl_entry
    end
    private
    def adjust_types(values, app=nil)
p "getin ODDB::SlEntry#adjust_types"
      values = values.dup
      values.each { |key, value|
        case(key)
        when :introduction_date
          values[key] = if (value.is_a? Date)
            value
          else
            Date.parse(value.tr('.', '-'))
          end
        when :limitation
          values[key] = ([true, 'true', 'Y'].include? value) ? true : false
        when :limitation_points
          points = value.to_i
          values[key] = (points > 0) ? points : nil
        end unless value.nil?
      }
    end
  end
end

Result

  • Nothing happened

BraSt

  • ODDB::LimitationText instance seems to be created NOT via ODDB::SlEntry and ODDB::Package classes
  • I have to check ODDB::LimitationText but there is no method defined in src/model/limitationtext.rb.
  • Should I check ODDB::SimpleLanguage module and ODDB::Persistence module...

grep search description

masa@masa ~/ywesee/oddb.org $ grep -r "descriptions" src
src/model/analysis/position.rb:                 ODBA_SERIALIZABLE = ['@descriptions', '@lab_areas']
src/model/atcclass.rb:          ODBA_SERIALIZABLE = [ '@descriptions' ]
src/model/atcclass.rb:          attr_writer :sequences, :descriptions
src/model/commercial_form.rb:           ODBA_SERIALIZABLE = [ '@descriptions', '@synonyms' ]
src/model/commercial_form.rb:    odba_index :name, 'all_descriptions'
src/model/commercial_form.rb:                   self.synonyms += other.all_descriptions - self.all_descriptions
src/model/galenicform.rb:               ODBA_SERIALIZABLE = [ '@descriptions', '@synonyms' ]
src/model/galenicform.rb:    odba_index :name, 'all_descriptions'
src/model/galenicform.rb:                       self.synonyms += other.all_descriptions - self.all_descriptions
src/model/galenicgroup.rb:              ODBA_SERIALIZABLE = [ '@descriptions' ]
src/model/index_therapeuticus.rb:    ODBA_SERIALIZABLE = ['@descriptions']
src/model/indication.rb:                ODBA_SERIALIZABLE = [ '@descriptions', '@synonyms' ]
src/model/indication.rb:        ODDB.search_term(self.all_descriptions.join(" "))
src/model/indication.rb:      self.synonyms.concat(other.all_descriptions - all_descriptions).uniq!
src/model/limitationtext.rb:            ODBA_SERIALIZABLE = [ '@descriptions' ]
src/model/migel/group.rb:                       ODBA_SERIALIZABLE = ['@descriptions']
src/model/migel/product.rb:                     ODBA_SERIALIZABLE = ['@descriptions']
src/model/migel/subgroup.rb:                    ODBA_SERIALIZABLE = ['@descriptions']
src/model/minifi.rb:    ODBA_SERIALIZABLE = [ '@descriptions' ]
src/model/orphan.rb:      if desc = descriptions.sort.first
src/model/patinfo.rb:      @descriptions.odba_store
src/model/substance.rb:         ODBA_SERIALIZABLE = [ '@descriptions', '@connection_keys', '@synonyms' ]
src/model/substance.rb:                 other.descriptions.dup.each { |key, value|
src/model/substance.rb:                         unless(self.descriptions.has_key?(key))
src/model/substance.rb:                                 self.descriptions.update_values( { key => value } )
src/model/substance.rb:                         + other.descriptions.values - self.descriptions.values
src/model/substance.rb:                 # First call to descriptions should go to lazy-initialisator
src/model/substance.rb:                 if(lt = self.descriptions['lt']) && !lt.empty?
src/model/substance.rb:                         @descriptions['en'].to_s
src/model/substance.rb:      self.descriptions.values + self.synonyms
src/model/substance.rb:                 keys = self.descriptions.values + self.connection_keys \
src/model/substance.rb:                 keys = (@connection_keys || []) + self.descriptions.values \
src/model/text.rb:                      ODBA_SERIALIZABLE = [ '@descriptions' ]
src/plugin/bsv_xml.rb:          @descriptions = {}
src/plugin/bsv_xml.rb:          @it_descriptions = {}
src/plugin/bsv_xml.rb:                subheading = if @it_descriptions
src/plugin/bsv_xml.rb:                               [@itcode, @it_descriptions[key]].compact.join(': ')
src/plugin/bsv_xml.rb:          elsif @it_descriptions
src/plugin/bsv_xml.rb:            @it_descriptions[key] = @text
src/plugin/bsv_xml.rb:            @descriptions[key] ||= @text
src/plugin/bsv_xml.rb:          @it_descriptions = nil
src/plugin/who.rb:        sprintf("Updated  %3i English descriptions", @created),
src/state/drugs/fachinfo.rb:      doc = @model.descriptions.fetch(lang.to_s) {
src/util/language.rb:                   descriptions[key.to_s] || descriptions.first
src/util/language.rb:           def descriptions
src/util/language.rb:                   @descriptions ||= Descriptions.new
src/util/language.rb:                   descriptions.has_value?(description)
src/util/language.rb:                   descriptions.values.any? { |desc| pattern.match(desc) }
src/util/language.rb:      if descriptions.empty?
src/util/language.rb:        descriptions.first.to_s
src/util/language.rb:                   descriptions.update_values(descr)
src/util/language.rb:           def all_descriptions
src/util/language.rb:                   self.synonyms + self.descriptions.values
src/util/oddbapp.rb:                            atc_class.descriptions = atc.descriptions unless(atc.nil?)
src/util/oddbapp.rb:                args = form.descriptions
src/view/companies/fipi_overview.rb:       && (lang = info.descriptions[language.to_s]) \

Look at src/plugin/bsv_xml.rb

Check

  1. src/model/package.rb: def limitation_text called
  2. src/model/sequence.rb: def limitation_text not called
  3. src/view/additional_information.rb: def limitation_text(model, session=@session) called
  4. src/view/analysis/position.rb: def limitation_text(model) not called
  5. src/view/drugs/csv_result.rb: def limitation_text(pack) not called
  6. src/view/drugs/package.rb: def limitation_text(model, session=@session) not called
  7. src/view/migel/group.rb: def limitation_text(model) not called
  8. src/view/migel/product.rb: def limitation_text(model) not called
  9. src/view/migel/result.rb: def limitation_text(model) not called
  10. src/view/migel/subgroup.rb: def limitation_text(model) not called

BraSt

  • Next focus on src/view/additional_information.rb

Experiment

src/view/additional_information.rb

      def limitation_text(model, session=@session)
p model.limitation_text
        if(sltxt = model.limitation_text)
          limitation_link(sltxt)
        end
      end

Result

#<ODBA::Stub:69849760326860#10899115 @odba_class= @odba_container=69849760326980#702814>
nil
#<ODBA::Stub:69849760073220#23135746 @odba_class=ODDB::LimitationText @odba_container=69849760075500#23135745>
#<ODBA::Stub:69849759964480#24323050 @odba_class= @odba_container=69849759965600#24323049>
#<ODBA::Stub:69849759857060#10899116 @odba_class= @odba_container=69849759857160#702818>
nil

Backtrace from src/model/package.rb

/home/masa/ywesee/oddb.org/src/model/package.rb:236:in `limitation_text'
/usr/lib64/ruby/site_ruby/1.8/odba/stub.rb:112:in `send'
/usr/lib64/ruby/site_ruby/1.8/odba/stub.rb:112:in `method_missing'
/home/masa/ywesee/oddb.org/src/view/additional_information.rb:222:in `limitation_text'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:66:in `send'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:66:in `create'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:280:in `compose_component'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:209:in `_compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `each'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `_compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:67:in `compose_list'
/home/masa/ywesee/oddb.org/src/model/dose.rb:117:in `each_with_index'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:65:in `each'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:65:in `each_with_index'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:65:in `compose_list'
/home/masa/ywesee/oddb.org/src/view/drugs/resultlist.rb:222:in `compose_list'
/home/masa/ywesee/oddb.org/src/model/search_result.rb:120:in `each'
/home/masa/ywesee/oddb.org/src/model/search_result.rb:120:in `each'
/home/masa/ywesee/oddb.org/src/view/drugs/resultlist.rb:217:in `compose_list'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:54:in `compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:55:in `init'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/list.rb:129:in `init'
/home/masa/ywesee/oddb.org/src/view/drugs/resultlist.rb:191:in `init'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/component.rb:138:in `initialize'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:59:in `new'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:59:in `create'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:280:in `compose_component'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:209:in `compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `each'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:55:in `init'
/home/masa/ywesee/oddb.org/src/view/drugs/result.rb:116:in `init'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/component.rb:138:in `initialize'
/home/masa/ywesee/oddb.org/src/view/publictemplate.rb:53:in `new'
/home/masa/ywesee/oddb.org/src/view/publictemplate.rb:53:in `content'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:66:in `send'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:66:in `create'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:280:in `compose_component'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:209:in `compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `each'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:203:in `compose'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/composite.rb:55:in `init'
/home/masa/ywesee/oddb.org/src/view/publictemplate.rb:50:in `init'
/home/masa/ywesee/oddb.org/src/view/resulttemplate.rb:28:in `init'
/usr/lib64/ruby/site_ruby/1.8/htmlgrid/component.rb:138:in `initialize'
/usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:269:in `new'
/usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:269:in `view'
/usr/lib64/ruby/site_ruby/1.8/sbsm/state.rb:189:in `to_html'
/usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:490:in `to_html'
/usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:171:in `drb_process'
/usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:169:in `synchronize'
/usr/lib64/ruby/site_ruby/1.8/sbsm/session.rb:169:in `drb_process'
/usr/lib64/ruby/1.8/drb/drb.rb:1556:in `__send__'
/usr/lib64/ruby/1.8/drb/drb.rb:1556:in `perform_without_block'
/usr/lib64/ruby/1.8/drb/drb.rb:1516:in `perform'
/usr/lib64/ruby/1.8/drb/drb.rb:1590:in `main_loop'
/usr/lib64/ruby/1.8/drb/drb.rb:1586:in `loop'
/usr/lib64/ruby/1.8/drb/drb.rb:1586:in `main_loop'
/usr/lib64/ruby/1.8/drb/drb.rb:1582:in `start'
/usr/lib64/ruby/1.8/drb/drb.rb:1582:in `main_loop'
/usr/lib64/ruby/1.8/drb/drb.rb:1431:in `run'
/usr/lib64/ruby/1.8/drb/drb.rb:1428:in `start'
/usr/lib64/ruby/1.8/drb/drb.rb:1428:in `run'
/usr/lib64/ruby/1.8/drb/drb.rb:1348:in `initialize'
/usr/lib64/ruby/1.8/drb/drb.rb:1628:in `new'
/usr/lib64/ruby/1.8/drb/drb.rb:1628:in `start_service'
bin/oddbd:38

Try Again

src/model/package.rb

    def limitation_text
p @sl_entry.class
      @sl_entry.limitation_text unless @sl_entry.nil?
    end

Result

ODDB::SlEntry
ODDB::SlEntry
ODDB::SlEntry
ODDB::SlEntry
ODDB::SlEntry
ODDB::SlEntry

src/model/slentry.rb

    def initialize
p "0"
    end
    def create_limitation_text
p "1"
      @limitation_text = LimitationText.new
    end
    def delete_limitation_text
p "2"
      @limitation_text = nil
      self.odba_isolated_store
      nil
    end
    def pointer_descr
p "3"
      :sl_entry
    end
    private
    def adjust_types(values, app=nil)
p "4"

Result

  • Nothing is outputted

Qeustion

  • When is ODDB::SlEntry instance created?

Experiment

src/util/persistence.rb

  module Persistence
    include PersistenceMethods
    include ODBA::Persistable
    ODBA_PREDEFINE_SERIALIZABLE = ['@data_origins']
    odba_index :pointer
    def initialize(*args)
p self.class

Result

ODDB::AtcClass

Qeustion

  • When is ODDB::SlEntry instance created?

Read code

src/model/slentry.rb

module ODDB
  class SlEntry
    include Persistence
    attr_accessor :limitation, :limitation_points
    attr_accessor :introduction_date, :bsv_dossier, :status, :type,
                  :valid_from, :valid_until
    attr_reader :limitation_text
    def create_limitation_text
p "1"
      @limitation_text = LimitationText.new
    end
    def delete_limitation_text
p "2"
      @limitation_text = nil
      self.odba_isolated_store
      nil
    end

Consideration

  • 1 and 2 are NOT outputted, so create_limitation_text and delete_limitation_text are NOT called.
  • limitation_text is set as attr_reader but if LimitationText class has a accessor it is possible to access directly instance variables of LimitationText class.
    • see an example below
  • If many accessors are defined and they are accessed from the other classes, debug will be difficult
    • because it will become difficult to search the point where the data changes
    • It is a similar reason ought not to use global variables

Example

class AAA
  attr_accessor :test
end

class TEST
  attr_reader :test
  def initialize
    @test = AAA.new
  end
end

test = TEST.new
test.test.test = 100
p test.test.test      #=> 100

Hypothesis

  • The instance variables of LimitationText class are directly accessed from the other class

Experiment src/model/package.rb

    def limitation_text
p @sl_entry.limitation_text.class.to_s + ": [" + @sl_entry.limitation_text.instance_variables.join(", ").to_s + "]" unless @sl_entry.nil?
      @sl_entry.limitation_text unless @sl_entry.nil?
    end

Result

"ODDB::LimitationText: [@odba_persistent, @descriptions, @revision, @pointer, @odba_id, @odba_observers, @oid]"
"NilClass: []"
"ODDB::LimitationText: [@odba_container, @receiver_loaded, @odba_id, @odba_class]"
"ODDB::LimitationText: [@descriptions, @odba_persistent, @revision, @pointer, @odba_id, @odba_observers, @oid]"
"ODDB::LimitationText: [@odba_persistent, @descriptions, @revision, @pointer, @odba_id, @odba_observers, @oid]"
"NilClass: []"

BraSt

  • This result might become a hint to access the limitation text process
  • It makes me confused that there are different instance variables listed up even if it is the same class, => think why?
    • This may be cased by calling different methods, which may mean that LimitationText class is used in different processes (contexts)
    • See an example below

Example

class TEST
  def method1
    @var1 = 100
  end
  def method2
    @var2 = 200
  end
end

test = TEST.new
test.method1
p test.instance_variables
test = TEST.new
test.method2
p test.instance_variables

Result

masa@masa ~/work $ ruby test.rb 
["@var1"]
["@var2"]

Interim Summary

  • I have not found where (when) LimitationText instance is created yet
  • It means that I do not understand where (when) limitation text data is saved
  • The process where LimitationText class is related are a littile bit complicated
  • (Probably) the instance variables of LimitationText class are directly accessed from the other classes
  • This makes me difficult to search the limitation text process
  • (Probably) the LimitationText class is used for different processes (contexts)
view · edit · sidebar · attach · print · history
Page last modified on July 13, 2011, at 12:00 PM