caruby-tissue 1.5.2 → 1.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/History.md +6 -2
  2. data/examples/galena/README.md +9 -0
  3. data/examples/galena/lib/galena/tissue/migration/filter_shims.rb +14 -3
  4. data/examples/galena/lib/galena/tissue/migration/frozen_shims.rb +6 -3
  5. data/examples/galena/lib/galena/tissue/seed/defaults.rb +2 -2
  6. data/examples/{pcbin → psbin}/README.md +6 -5
  7. data/examples/psbin/conf/adjuvant_hormone_defaults.yaml +2 -0
  8. data/examples/psbin/conf/adjuvant_radiation_defaults.yaml +3 -0
  9. data/examples/{pcbin → psbin}/conf/biopsy_defaults.yaml +1 -1
  10. data/examples/{pcbin → psbin}/conf/biopsy_fields.yaml +0 -0
  11. data/examples/{pcbin → psbin}/conf/neoadjuvant_hormone_defaults.yaml +1 -0
  12. data/examples/{pcbin → psbin}/conf/neoadjuvant_radiation_defaults.yaml +1 -0
  13. data/examples/psbin/conf/patient_defaults.yaml +3 -0
  14. data/examples/{pcbin → psbin}/conf/patient_fields.yaml +0 -0
  15. data/examples/{pcbin → psbin}/conf/surgery_defaults.yaml +1 -0
  16. data/examples/{pcbin → psbin}/conf/surgery_fields.yaml +0 -0
  17. data/examples/{pcbin → psbin}/conf/t_stage_defaults.yaml +0 -0
  18. data/examples/{pcbin → psbin}/conf/t_stage_fields.yaml +0 -0
  19. data/examples/{pcbin → psbin}/conf/therapy_fields.yaml +0 -0
  20. data/examples/{pcbin → psbin}/data/adjuvant_hormone.csv +0 -0
  21. data/examples/{pcbin → psbin}/data/adjuvant_radiation.csv +0 -0
  22. data/examples/{pcbin → psbin}/data/biopsy.csv +0 -0
  23. data/examples/{pcbin → psbin}/data/neoadjuvant_hormone.csv +0 -0
  24. data/examples/{pcbin → psbin}/data/neoadjuvant_radiation.csv +0 -0
  25. data/examples/{pcbin → psbin}/data/patient.csv +0 -0
  26. data/examples/{pcbin → psbin}/data/surgery.csv +0 -0
  27. data/examples/{pcbin → psbin}/data/t_stage.csv +0 -0
  28. data/examples/{pcbin/lib/pcbin → psbin/lib/psbin}/biopsy_shims.rb +0 -0
  29. data/examples/{pcbin/lib/pcbin → psbin/lib/psbin}/surgery_shims.rb +0 -0
  30. data/lib/catissue/annotation/annotatable_class.rb +4 -4
  31. data/lib/catissue/annotation/annotation_class.rb +2 -2
  32. data/lib/catissue/annotation/annotation_module.rb +1 -1
  33. data/lib/catissue/cli/command.rb +3 -3
  34. data/lib/catissue/database.rb +31 -28
  35. data/lib/catissue/database/annotation/annotation_service.rb +2 -2
  36. data/lib/catissue/database/annotation/entity_facade.rb +1 -1
  37. data/lib/catissue/database/controlled_values.rb +2 -2
  38. data/lib/catissue/domain/abstract_specimen.rb +26 -24
  39. data/lib/catissue/domain/abstract_specimen_collection_group.rb +1 -1
  40. data/lib/catissue/domain/capacity.rb +1 -1
  41. data/lib/catissue/domain/collection_protocol.rb +11 -9
  42. data/lib/catissue/domain/collection_protocol_event.rb +4 -3
  43. data/lib/catissue/domain/collection_protocol_registration.rb +3 -2
  44. data/lib/catissue/domain/container.rb +4 -3
  45. data/lib/catissue/domain/container_type.rb +7 -6
  46. data/lib/catissue/domain/disposal_event_parameters.rb +1 -1
  47. data/lib/catissue/domain/order_details.rb +0 -1
  48. data/lib/catissue/domain/participant.rb +13 -12
  49. data/lib/catissue/domain/participant_medical_identifier.rb +3 -2
  50. data/lib/catissue/domain/site.rb +9 -7
  51. data/lib/catissue/domain/specimen.rb +45 -35
  52. data/lib/catissue/domain/specimen/pathology/prostate_specimen_gleason_score.rb +3 -2
  53. data/lib/catissue/domain/specimen/pathology/prostate_specimen_pathology_annotation.rb +3 -4
  54. data/lib/catissue/domain/specimen/pathology/specimen_additional_finding.rb +7 -5
  55. data/lib/catissue/domain/specimen/pathology/specimen_base_solid_tissue_pathology_annotation.rb +11 -11
  56. data/lib/catissue/domain/specimen/pathology/specimen_details.rb +4 -2
  57. data/lib/catissue/domain/specimen/pathology/specimen_histologic_grade.rb +4 -2
  58. data/lib/catissue/domain/specimen/pathology/specimen_histologic_type.rb +6 -6
  59. data/lib/catissue/domain/specimen/pathology/specimen_histologic_variant_type.rb +4 -2
  60. data/lib/catissue/domain/specimen/pathology/specimen_invasion.rb +4 -2
  61. data/lib/catissue/domain/specimen_array.rb +1 -1
  62. data/lib/catissue/domain/specimen_collection_group.rb +45 -39
  63. data/lib/catissue/domain/specimen_collection_group/pathology/base_pathology_annotation.rb +4 -4
  64. data/lib/catissue/domain/specimen_collection_group/pathology/base_solid_tissue_pathology_annotation.rb +4 -4
  65. data/lib/catissue/domain/specimen_protocol.rb +6 -4
  66. data/lib/catissue/domain/specimen_requirement.rb +15 -10
  67. data/lib/catissue/domain/storage_container.rb +1 -2
  68. data/lib/catissue/domain/storage_type.rb +1 -1
  69. data/lib/catissue/domain/user.rb +14 -15
  70. data/lib/catissue/extract/command.rb +1 -1
  71. data/lib/catissue/extract/delta.rb +15 -7
  72. data/lib/catissue/migration/migratable.rb +1 -1
  73. data/lib/catissue/migration/migrator.rb +2 -2
  74. data/lib/catissue/migration/shims.rb +3 -3
  75. data/lib/catissue/util/collectible.rb +2 -2
  76. data/lib/catissue/util/collectible_event_parameters.rb +2 -2
  77. data/lib/catissue/util/position.rb +3 -3
  78. data/lib/catissue/version.rb +1 -1
  79. data/test/lib/examples/galena/tissue/migration/seedify.rb +5 -5
  80. data/test/lib/examples/{pcbin → psbin}/migration_test.rb +9 -9
  81. metadata +32 -32
  82. data/examples/pcbin/conf/adjuvant_hormone_defaults.yaml +0 -1
  83. data/examples/pcbin/conf/adjuvant_radiation_defaults.yaml +0 -2
  84. data/examples/pcbin/conf/patient_defaults.yaml +0 -2
data/History.md CHANGED
@@ -1,6 +1,10 @@
1
1
  This history lists major release themes. See the GitHub Commits (https://github.com/caruby/tissue)
2
2
  for change details.
3
3
 
4
+ 1.5.3 / 2011-07-08
5
+ ------------------
6
+ * Clean up documentation.
7
+
4
8
  1.5.2 / 2011-07-06
5
9
  ------------------
6
10
  * Update embed to use the annotation hook attribute.
@@ -11,7 +15,7 @@ for change details.
11
15
 
12
16
  1.4.2 / 2011-05-04
13
17
  ------------------
14
- * Add registration and PCBIN examples.
18
+ * Add registration and PSBIN examples.
15
19
 
16
20
  1.4.1 / 2011-05-03
17
21
  ------------------
@@ -39,7 +43,7 @@ for change details.
39
43
 
40
44
  1.3.1 / 2011-02-18
41
45
  ------------------
42
- * Prostate Spore PCBIN DE support.
46
+ * Prostate Spore PSBIN DE support.
43
47
 
44
48
  1.2.3 / 2011-02-18
45
49
  ------------------
@@ -39,6 +39,14 @@ Each example has a field mapping configuration in the `conf/migration` directory
39
39
  For example, the `simple.csv` input file is migrated into caTissue using the
40
40
  `simple_migration.yaml` configuration file.
41
41
 
42
+ You can browse the source repository [example files](https://github.com/caruby/tissue/tree/master/examples/galena), where:
43
+
44
+ * `conf/migration` has the mapping configuration files
45
+
46
+ * `data` has the sample data
47
+
48
+ * `lib/galena/tissue/migration` has the shim code
49
+
42
50
  Migrate the Galena `simple` example as follows:
43
51
 
44
52
  1. Open a console in the copied Galena example location.
@@ -111,3 +119,4 @@ The following input fields are included in the examples:
111
119
  * <tt>Gleason</tt>: Specimen primary gleason score
112
120
  * <tt>Grade</tt>: Specimen histologic WHO grade
113
121
 
122
+ The fields listed are those used in the examples. caTissue supports any caTissue domain object.
@@ -1,29 +1,40 @@
1
1
  require 'uom'
2
2
 
3
3
  module CaTissue
4
- # Declares the classes modified for migration.
4
+ # Declare the classes modified for migration.
5
5
  shims Participant, TissueSpecimen, SpecimenCollectionGroup
6
6
 
7
7
  class Participant
8
8
  # Extracts the Participant first name from the +Initials+ input field.
9
9
  def migrate_first_name(value, row)
10
+ # The first initial is the first "name".
10
11
  value[0, 1]
11
12
  end
12
13
 
13
14
  # Extracts the Participant last name from the +Initials+ input field.
15
+ #
16
+ # @param [String] value the input initials field
17
+ # @param @param [{Symbol => Object}] row the input row field => value hash
14
18
  def migrate_last_name(value, row)
19
+ # The last initial is the last "name".
15
20
  value[-1, 1]
16
21
  end
17
22
  end
18
23
 
19
24
  class TissueSpecimen
20
25
  # Transforms the +Frozen?+ flag input field to the caTissue specimen type +Frozen Tissue+ value.
26
+ #
27
+ # @param [String] value the input specimen type field
28
+ # @param @param [{Symbol => Object}] row the input row field => value hash
21
29
  def migrate_specimen_type(value, row)
22
30
  value =~ /TRUE/i ? 'Frozen Tissue' : 'Fixed Tissue'
23
31
  end
24
32
 
25
33
  # Parses the source field as a UOM::Measurement if it is a string.
26
34
  # Otherwises, returns the source value.
35
+ #
36
+ # @param [String, Numeric] value the input quantity field
37
+ # @param @param [{Symbol => Object}] row the input row field => value hash
27
38
  def migrate_initial_quantity(value, row)
28
39
  # if value is not a string, then use it as is
29
40
  return value unless value.is_a?(String)
@@ -34,9 +45,9 @@ module CaTissue
34
45
  end
35
46
 
36
47
  class SpecimenCollectionGroup
37
- # Returns whether this SCG has a SPN.
48
+ # @return [Boolean] whether this SCG has a SPN
38
49
  def migration_valid?
39
- surgical_pathology_number
50
+ not surgical_pathology_number.nil?
40
51
  end
41
52
  end
42
53
  end
@@ -2,15 +2,18 @@
2
2
  require File.join(File.dirname(__FILE__), '..', 'seed', 'defaults')
3
3
 
4
4
  module CaTissue
5
- # Declares the classes modified for migration.
5
+ # Declare the classes modified for migration.
6
6
  shims TissueSpecimen, CollectionProtocolRegistration, StorageContainer
7
7
 
8
8
  class StorageContainer
9
9
  # Creates the migrated box in the database, if necessary.
10
10
  #
11
- # @param (see CaRuby::Migratable#migrate)
11
+ # @param [{Symbol => Object}] row the input row field => value hash
12
+ # @param [<Resource>] migrated the migrated instances
12
13
  def migrate(row, migrated)
13
14
  super
15
+ # Fetch the box from the database, if it exists.
16
+ # Otherwise, create the box.
14
17
  find or create_galena_box
15
18
  end
16
19
 
@@ -31,7 +34,7 @@ module CaTissue
31
34
  # Add the box to the first open slot in the first unfilled rack in the freezer.
32
35
  frz << self
33
36
  logger.debug { "Placed the tissue box #{self} in freezer #{frz}." }
34
- logger.debug { "Creating the tissue box #{self}..." }
37
+ logger.debug { "Creating the tissue box #{self} in the database..." }
35
38
  create
36
39
  end
37
40
  end
@@ -16,8 +16,8 @@ module Galena
16
16
 
17
17
  # Pre-defined Galena example administrative objects. If the Galena example is already set up
18
18
  # in the caTissue database, then the default object secondary key attributes can be used as a
19
- # {CaRuby::Persistable#find} template to retrieve the existing objects. Otherwise, the Defaults
20
- # attributes can be created by calling {CaRuby::Persistable#create}.
19
+ # +CaRuby::Persistable.find+ template to retrieve the existing objects. Otherwise, the Defaults
20
+ # attributes can be created by calling +CaRuby::Persistable.create+.
21
21
  #
22
22
  # In a real-world use case, the administrative objects are typically built in the UI before-hand.
23
23
  # In that case, it is only necessary to define the object secondary key rather than content, e.g.:
@@ -1,11 +1,12 @@
1
- PCBIN caRuby Tissue example
1
+ PSBIN caRuby Tissue example
2
2
  ============================
3
3
 
4
4
  Synopsis
5
5
  --------
6
- This directory contains the caRuby Tissue example for the Prostate SPORE PCBIN initiative.
7
- The PCBIN initiative shares participant cancer center data in caTissue instances with common
8
- data elements. The official PCBIN import utility is a Java program which operates on a
6
+ This directory contains the caRuby Tissue example for the **P**rostate **S**PORE **B**io**I**nformatics **N**etwork
7
+ (PSBIN) initiative.
8
+ The PSBIN initiative shares participant cancer center data in caTissue instances with common
9
+ data elements. The official PSBIN import utility is a Java program which operates on a
9
10
  special-purpose input XML file and calls caRuby to create annotations. The example shown
10
11
  here is a caRuby Tissue Migrator import which operates on CSV files.
11
12
 
@@ -25,7 +26,7 @@ The migration input files are in the `data` directory. The input maps to caTissu
25
26
 
26
27
  Setup
27
28
  -----
28
- Configure caRuby and copy the PCBIN example as described in the Galena examples
29
+ Configure caRuby and copy the PSBIN example as described in the Galena examples
29
30
  [Setup](https://github.com/caruby/tissue/blob/master/examples/galena/README.md).
30
31
 
31
32
  Create a simple `Prostate SPORE` caTissue collection protocol in a test database.
@@ -0,0 +1,2 @@
1
+ Participant::Clinical::TreatmentAnnotation.agent: NOT SPECIFIED
2
+ Participant::Clinical::TreatmentAnnotation.other_agent: adjuvant Hormone Therapy; Not Specified
@@ -0,0 +1,3 @@
1
+ Participant::Clinical::RadRXAnnotation.agent: NOT SPECIFIED
2
+ Participant::Clinical::RadRXAnnotation.other_agent: adjuvant Radiation Therapy
3
+ Participant::Clinical::RadRXAnnotation.dose_units: Gy
@@ -1,3 +1,3 @@
1
- Participant::Clinical::NewDiagnosisHealthAnnotation.name_of_procedure: Biopsy of Prostate
1
+ Participant::Clinical::NewDiagnosisHealthAnnotation.name_of_procedure: Needle Biopsy of prostate
2
2
  SpecimenCollectionGroup.clinical_status: New Diagnosis
3
3
  SpecimenCollectionGroup.collection_status: Complete
File without changes
@@ -1 +1,2 @@
1
+ Participant::Clinical::TreatmentAnnotation.agent: NOT SPECIFIED
1
2
  Participant::Clinical::TreatmentAnnotation.other_agent: Neoadjuvant Hormone Therapy
@@ -1,2 +1,3 @@
1
+ Participant::Clinical::RadRXAnnotation.agent: NOT SPECIFIED
1
2
  Participant::Clinical::RadRXAnnotation.other_agent: Neoadjuvant Radiation Therapy
2
3
  Participant::Clinical::RadRXAnnotation.dose_units: Gy
@@ -0,0 +1,3 @@
1
+ Participant::Clinical::LabAnnotation.lab_test_name: 2857-1 ~ Prostate specific Ag - Serum/Plasma - Quantitative - Mass Concentration - Point in time
2
+ Participant::Clinical::LabAnnotation.other_lab_test_name: Pre-Treatment PSA
3
+ Participant::Clinical::LabAnnotation.result_units: ng/ml
File without changes
@@ -1,3 +1,4 @@
1
+ Participant::Clinical::TreatmentAnnotation.agent: NOT SPECIFIED
1
2
  Participant::Clinical::TreatmentAnnotation.other_agent: Radical Prostatectomy
2
3
  SpecimenCollectionGroup.clinical_status: Operative
3
4
  SpecimenCollectionGroup.collection_status: Complete
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -11,12 +11,12 @@ module CaTissue
11
11
  # annotation objects, or nil if this is not a primary annotation class
12
12
  attr_reader :entity_id
13
13
 
14
- # @return [Class] the {DEIntegration} proxy class (nil for 1.1 caTissue)
14
+ # @return [Class] the {Annotation::DEIntegration} proxy class (nil for 1.1 caTissue)
15
15
  def de_integration_proxy_class
16
16
  @de_integration_proxy_class or (superclass.de_integration_proxy_class if superclass < Annotatable)
17
17
  end
18
18
 
19
- # Adds {CaRuby::Domain::Metadata} and {AnnotatableClass} functionality to the given class.
19
+ # Adds +CaRuby::Domain::Metadata+ and {AnnotatableClass} functionality to the given class.
20
20
  #
21
21
  # @param [Class] the domain class to extend
22
22
  def self.extend_class(klass)
@@ -61,7 +61,7 @@ module CaTissue
61
61
  annotation_defined?(symbol)
62
62
  end
63
63
 
64
- # Refines the {CaRuby::Domain::Attributes#toxic_attributes} to exclude annotation attributes.
64
+ # Refines the +CaRuby::Domain::Attributes.toxic_attributes+ to exclude annotation attributes.
65
65
  #
66
66
  # @return [<Symbol>] the non-annotation unfetched attributes
67
67
  def toxic_attributes
@@ -90,7 +90,7 @@ module CaTissue
90
90
  end
91
91
  end
92
92
 
93
- # Filters {CaRuby::Domain::Attributes#loadable_attributes} to exclude the {#annotation_attributes}
93
+ # Filters +CaRuby::Domain::Attributes.loadable_attributes+ to exclude the {#annotation_attributes}
94
94
  # since annotation lazy-loading is not supported.
95
95
  #
96
96
  # @return (see CaRuby::Domain::Attributes#loadable_attributes)
@@ -52,7 +52,7 @@ module CaTissue
52
52
  @ann_attrs ||= domain_attributes.compose { |attr_md| attr_md.type < Annotation }
53
53
  end
54
54
 
55
- # Filters {CaRuby::Domain::Attributes#loadable_attributes} to exclude all references,
55
+ # Filters +CaRuby::Domain::Attributes.loadable_attributes+ to exclude all references,
56
56
  # since annotation lazy-loading is not supported.
57
57
  #
58
58
  # @return [Array] an empty array
@@ -73,7 +73,7 @@ module CaTissue
73
73
  not ref.nil?
74
74
  end
75
75
 
76
- # @return [Boolean] whether this annotation is neither a {#primary?} nor a #{secondary} annotation
76
+ # @return [Boolean] whether this annotation is neither a {#primary?} nor a {#secondary?} annotation
77
77
  def tertiary_annotation
78
78
  not (primary? or secondary?)
79
79
  end
@@ -15,7 +15,7 @@ module CaTissue
15
15
  # @return [Class] the hook-annotation association class, or nil for 1.1.x caTissue
16
16
  attr_reader :record_entry_class
17
17
 
18
- # @return [Symbol] the {#de_integration_proxy_class} hook writer method, or nil for 1.1.x caTissue
18
+ # @return [Symbol] the {Annotation::ProxyClass} hook writer method, or nil for 1.1.x caTissue
19
19
  attr_reader :record_entry_hook_writer
20
20
 
21
21
  # @param [AnnotationModule] mod the annotation module to build
@@ -6,7 +6,7 @@ begin
6
6
  rescue Exception => e
7
7
  logger.error("caTissue client load was unsuccessful - #{e}:\n#{e.backtrace.qp}")
8
8
  puts "caTissue client load was unsuccessful - #{e}."
9
- puts "See the log at #{CaRuby::Log.instance.file} for more information."
9
+ puts "See the log at #+CaRuby::Log.instance.file+ for more information."
10
10
  exit 1
11
11
  end
12
12
 
@@ -15,9 +15,9 @@ require 'catissue/version'
15
15
 
16
16
  module CaTissue
17
17
  module CLI
18
- # Augments {CaRuby::CLI::Command} with caTissue-specific command line option handlers.
18
+ # Augments +CaRuby::CLI::Command+ with caTissue-specific command line option handlers.
19
19
  class Command < CaRuby::CLI::Command
20
- # @see {CaRuby::CLI::Command#initialize}
20
+ # @see +CaRuby::CLI::Command.initialize+
21
21
  def initialize(specs=[])
22
22
  specs << VERSION_OPT
23
23
  super
@@ -7,17 +7,20 @@ require 'catissue/database/annotation/annotator'
7
7
  require 'catissue/util/collectible_event_parameters'
8
8
 
9
9
  module CaTissue
10
- # A CaTissue::Database mediates access to the caTissue database.
11
- # The CaRuby::Database functionality is preserved and not expanded, but this CaTissue::Database overrides
12
- # several base class private methods to enable alternate CaTissue-specific search strategies and work
13
- # around caTissue and caCORE bugs.
10
+ # A CaTissue: Database mediates access to the caTissue database.
11
+ # The superclass +CaRuby::Database+ functionality is preserved and not expanded, but this CaTissue
12
+ # Database implementation overrides several base class private methods to enable alternate
13
+ # caTissue-specific search strategies and work-arounds.
14
14
  class Database < CaRuby::Database
15
15
  include Singleton
16
16
 
17
- # return [CaRuby::SQLExecutor] a utility SQL executor
18
- attr_reader :executor, :access_properties
17
+ # @return [CaRuby::SQLExecutor] a utility SQL executor
18
+ attr_reader :executor
19
+
20
+ # @return [{Symbol => Object}] the server access properties
21
+ attr_reader :access_properties
19
22
 
20
- # Creates a new Database with the +catissuecore+ service and {CaTissue.access_properties}.
23
+ # Creates a new Database with the +catissuecore+ service.
21
24
  def initialize
22
25
  @access_properties = CaTissue.access_properties
23
26
  super(SVC_NAME, @access_properties)
@@ -29,7 +32,7 @@ module CaTissue
29
32
  @annotator ||= Annotator.new(self)
30
33
  end
31
34
 
32
- # If the given domain object is an {Annotation}, then this method returns the {AnnotationService}
35
+ # If the given domain object is an {Annotation}, then this method returns the {Annotation::AnnotationService}
33
36
  # for the object {AnnotationModule}, otherwise this method returns the standard {CaTissue::Database}
34
37
  # service.
35
38
  #
@@ -39,7 +42,7 @@ module CaTissue
39
42
  klass < Annotation ? klass.annotation_module.persistence_service : super
40
43
  end
41
44
 
42
- # Augments {CaRuby::Database#ensure_exists} to ensure that an {Annotation::Proxy} reference identifier
45
+ # Augments +CaRuby::Database.ensure_exists+ to ensure that an {Annotation::Proxy} reference identifier
43
46
  # reflects the hook identifier.
44
47
  #
45
48
  # @param (see CaRuby::Database::Writer#ensure_exists)
@@ -59,7 +62,7 @@ module CaTissue
59
62
 
60
63
  UPD_CTR_SQL = 'update catissue_consent_tier_response set response = ? where identifier = ?'
61
64
 
62
- # Overrides #{CaRuby::Database::Writer#recursive_save?} to support the update work-around
65
+ # Overrides #+CaRuby::Database::Writer.recursive_save?+ to support the update work-around
63
66
  # described in {#update_object}. A recursive SCG update is allowed if the nested
64
67
  # transaction sequence is:
65
68
  # * Update SCG
@@ -192,7 +195,7 @@ module CaTissue
192
195
  penultimate and penultimate.subject == obj
193
196
  end
194
197
 
195
- # Augments {CaRuby::Database#save_with_template} to work around the following caTissue anomalies:
198
+ # Augments +CaRuby::Database.save_with_template+ to work around the following caTissue anomalies:
196
199
  #
197
200
  # @quirk caTissue Bug #149: API update TissueSpecimen position validation incorrect.
198
201
  # The Specimen update argument must reference the old position, even though the position is not
@@ -203,21 +206,21 @@ module CaTissue
203
206
  # position in the caTissue service update argument. A Specimen position is altered as a side-effect
204
207
  # by creating a proxy save {CaTissue::TransferEventParameters}. The changed position is not reflected
205
208
  # in the Specimen position, which must be refetched to reflect the database state. This fetch is
206
- # done automatically by {CaRuby::Database} as part of the save proxy mechanism. The Specimen update
209
+ # done automatically by +CaRuby::Database+ as part of the save proxy mechanism. The Specimen update
207
210
  # template must include a reference to the former position but not the changed position.
208
211
  #
209
- # However, the Specimen {CaRuby::Writer#update} argument will include the changed position, not the
210
- # former position. The template built {CaRuby::Writer#update} for submission to the caTissue app
212
+ # However, the Specimen +CaRuby::Writer.update+ argument will include the changed position, not the
213
+ # former position. The template built +CaRuby::Writer.update+ for submission to the caTissue app
211
214
  # does not include a position reference, since the position has a save proxy which handles position
212
- # change as part of the {CaRuby::Writer} update dependent propagation.
215
+ # change as part of the +CaRuby::Writer+ update dependent propagation.
213
216
  #
214
217
  # Thus, updating a Specimen which includes a position change is performed as follows:
215
218
  # * reconstitute the former position from the Position snapshot taken as part of the
216
- # {CaRuby::Persistable} change tracker.
217
- # * add the former position to the template (which will now differ from the {CaRuby::Writer#update}
219
+ # +CaRuby::Persistable+ change tracker.
220
+ # * add the former position to the template (which will now differ from the +CaRuby::Writer.update+
218
221
  # argument).
219
222
  # * submit the adjusted Specimen template to the caTissue app updateObject.
220
- # * {CaRuby::Writer#update} will propagate the Specimen update to the changed position dependent,
223
+ # * +CaRuby::Writer.update+ will propagate the Specimen update to the changed position dependent,
221
224
  # which in turn saves via the {CaTissue::TransferEventParameters} proxy.
222
225
  # * The proxy save will in turn refetch the proxied Specimen position to obtain the identifier
223
226
  # and merge this into the Specimen position.
@@ -291,7 +294,7 @@ module CaTissue
291
294
  logger.debug { "caTissue #{ctr} update work-around completed." }
292
295
  end
293
296
 
294
- # Overrides {CaRuby::Database::Writer#save_changed_dependents} to handle the following anomalies:
297
+ # Overrides +CaRuby::Database::Writer.save_changed_dependents+ to handle the following anomalies:
295
298
  # * create Specimen disposal event last, as described in {#save_changed_specimen_dependents}
296
299
  #
297
300
  # @param (see CaRuby::Writer#save_dependents)
@@ -302,7 +305,7 @@ module CaTissue
302
305
  end
303
306
  end
304
307
 
305
- # Overrides {CaRuby::Database::Writer#save_changed_dependents} on a Specimen to correct the
308
+ # Overrides +CaRuby::Database::Writer.save_changed_dependents+ on a Specimen to correct the
306
309
  # following problem:
307
310
  #
308
311
  # @quirk caTissue DisposalEventParameters must be created after all other Specimen SEPs.
@@ -321,7 +324,7 @@ module CaTissue
321
324
  # for the subtle interaction required between these two work-arounds.
322
325
  #
323
326
  # @param [CaTissue::Specimen] the specimen whose dependents are to be saved
324
- # @yield [dependent] calls the base {CaRuby::Writer#save_changed_dependents}
327
+ # @yield [dependent] calls the base +CaRuby::Writer.save_changed_dependents+
325
328
  # @yieldparam [Resource] dependent the dependent to save
326
329
  def save_changed_specimen_dependents(specimen)
327
330
  dsp = specimen.specimen_events.detect { |ep| CaTissue::DisposalEventParameters === ep }
@@ -343,7 +346,7 @@ module CaTissue
343
346
  end
344
347
  end
345
348
 
346
- # Overrides {CaRuby::Database#build_save_template} to return obj itself if
349
+ # Overrides +CaRuby::Database.build_save_template+ to return obj itself if
347
350
  # obj is an {Annotation}, since annotations do not employ a separate template.
348
351
  #
349
352
  # @param (see CaRuby::Database#build_save_template)
@@ -369,7 +372,7 @@ module CaTissue
369
372
  annotation
370
373
  end
371
374
 
372
- # Overrides {CaRuby::Database::Writer#save_with_template} to work around caTissue bugs.
375
+ # Overrides +CaRuby::Database::Writer.save_with_template+ to work around caTissue bugs.
373
376
  # @quirk caTissue Bug #63: a SpecimenCollectionGroup update requires the referenced CollectionProtocolRegistration
374
377
  # with an identifier to hold extraneous CollectionProtocolRegistration content, including the CPR
375
378
  # collection protocol and PPI.
@@ -479,7 +482,7 @@ module CaTissue
479
482
  template.send(wtr, pxy)
480
483
  end
481
484
 
482
- # Augment {CaRuby::Database::Writer#create_object} to work around caTissue bugs.
485
+ # Augment +CaRuby::Database::Writer.create_object+ to work around caTissue bugs.
483
486
  # @quirk caTissue Bug #124: SCG SpecimenEventParameters save fails validation.
484
487
  # Work-around is to create the SEP by updating the SCG.
485
488
  # @quirk If obj is a CaTissue::Specimen with the is_available flag set to false, then work around the bug
@@ -514,7 +517,7 @@ module CaTissue
514
517
  obj
515
518
  end
516
519
 
517
- # Overrides {CaRuby::Database#create_from_template} as follows:
520
+ # Overrides +CaRuby::Database.create_from_template+ as follows:
518
521
  # * Surrogate {Annotation::Proxy} is "created" by setting the identifier to its hook owner.
519
522
  # The create operation then creates referenced uncreated dependents.
520
523
  #
@@ -596,7 +599,7 @@ module CaTissue
596
599
  specimen
597
600
  end
598
601
 
599
- # Overrides {CaRuby::Database::Reader#fetch_object} to circumvent {Annotation} fetch, since an annotation
602
+ # Overrides +CaRuby::Database::Reader.fetch_object+ to circumvent {Annotation} fetch, since an annotation
600
603
  # does not have a key.
601
604
  def fetch_object(obj)
602
605
  super or fetch_alternative(obj)
@@ -609,7 +612,7 @@ module CaTissue
609
612
  end
610
613
  end
611
614
 
612
- # Override {CaRuby::Database#query_safe} to work around the following +caTissue+ bugs:
615
+ # Override +CaRuby::Database.query_safe+ to work around the following +caTissue+ bugs:
613
616
  # * @quirk caTissue Specimen auto-generates blank ExternalIdentifier.
614
617
  # cf. https://cabig-kc.nci.nih.gov/Biospecimen/forums/viewtopic.php?f=19&t=436&sid=ef98f502fc0ab242781b7759a0eaff36
615
618
  # * @quirk caTissue Specimen auto-generates blank PMI.
@@ -690,7 +693,7 @@ module CaTissue
690
693
  annotator.integrator.find(proxy)
691
694
  end
692
695
 
693
- # @quirk caCORE Override {CaRuby::Database::Reader#invertible_query?} to enable the Bug #147 work
696
+ # @quirk caCORE Override +CaRuby::Database::Reader.invertible_query?+ to enable the Bug #147 work
694
697
  # around in {#query_object}. Invertible queries are performed to work around Bug #79. However, this
695
698
  # work-around induces Bug #147, so we disable the Bug #79 work-around here for the special case of
696
699
  # a CPE in order to enable the Bug #147 work-around. And so it goes....