diff --git a/app/models/collection_sample_set.rb b/app/models/collection_sample_set.rb new file mode 100644 index 00000000..8de9443d --- /dev/null +++ b/app/models/collection_sample_set.rb @@ -0,0 +1,15 @@ +class CollectionSampleSet < RegisterSampleSet + attr :collection + + def initialize(collection) + @collection = collection + end + + def source_object + collection + end + + def type_genomes + @type_genomes ||= collection.map(&:type_genomes).flatten.uniq + end +end diff --git a/app/models/genome/sample_set.rb b/app/models/genome/sample_set.rb index 8259d7d5..5a4c3cf8 100644 --- a/app/models/genome/sample_set.rb +++ b/app/models/genome/sample_set.rb @@ -3,39 +3,3 @@ def sample_set @sample_set ||= GenomeSampleSet.new(self, source_hash) end end - -class GenomeSampleSet < SampleSet - attr :genome, :source_hash - def initialize(genome, source_hash) - @genome = genome - @source_hash = source_hash - @source_hash ||= {} - end - - def source_object - genome - end - - def samples - @samples ||= - source_hash[:samples]&.map { |k, v| GenomeSample.new(k, v) } || [] - end - - def retrieved_at - @source_hash[:retrieved_at] - end - - def extra_biosamples - return [] if empty? - - @source_extra_biosamples ||= - %i[derived_from sample_derived_from].map do |attribute| - next unless attr = unique_attributes[attribute] - - attr.map do |i| - i.value.gsub(/.*: */, '').gsub(/[\.]/, '').split(/ *[,;-](?: and)? */) - end - end.flatten.compact.uniq - known_biosamples - end -end - diff --git a/app/models/genome_sample_set.rb b/app/models/genome_sample_set.rb new file mode 100644 index 00000000..13312a26 --- /dev/null +++ b/app/models/genome_sample_set.rb @@ -0,0 +1,34 @@ +class GenomeSampleSet < SampleSet + attr :genome, :source_hash + def initialize(genome, source_hash) + @genome = genome + @source_hash = source_hash + @source_hash ||= {} + end + + def source_object + genome + end + + def samples + @samples ||= + source_hash[:samples]&.map { |k, v| GenomeSample.new(k, v) } || [] + end + + def retrieved_at + @source_hash[:retrieved_at] + end + + def extra_biosamples + return [] if empty? + + @source_extra_biosamples ||= + %i[derived_from sample_derived_from].map do |attribute| + next unless attr = unique_attributes[attribute] + + attr.map do |i| + i.value.gsub(/.*: */, '').gsub(/[\.]/, '').split(/ *[,;-](?: and)? */) + end + end.flatten.compact.uniq - known_biosamples + end +end diff --git a/app/models/register/sample_set.rb b/app/models/register/sample_set.rb index e2cb4f3a..49fdcc08 100644 --- a/app/models/register/sample_set.rb +++ b/app/models/register/sample_set.rb @@ -3,44 +3,3 @@ def sample_set @sample_set ||= RegisterSampleSet.new(self) end end - -class RegisterSampleSet < SampleSet - attr :register, :genome_sample_sets - - def initialize(register) - @register = register - end - - def source_object - register - end - - def type_genomes - @type_genomes ||= register.type_genomes.uniq - end - - def genome_sample_sets - @genome_sample_sets ||= type_genomes.uniq.map(&:sample_set).compact - end - - def samples - @samples ||= genome_sample_sets.map(&:samples).flatten - end -end - -class CollectionSampleSet < RegisterSampleSet - attr :collection - - def initialize(collection) - @collection = collection - end - - def source_object - collection - end - - def type_genomes - @type_genomes ||= collection.map(&:type_genomes).flatten.uniq - end -end - diff --git a/app/models/register_sample_set.rb b/app/models/register_sample_set.rb new file mode 100644 index 00000000..0cdfc779 --- /dev/null +++ b/app/models/register_sample_set.rb @@ -0,0 +1,23 @@ +class RegisterSampleSet < SampleSet + attr :register, :genome_sample_sets + + def initialize(register) + @register = register + end + + def source_object + register + end + + def type_genomes + @type_genomes ||= register.type_genomes.uniq + end + + def genome_sample_sets + @genome_sample_sets ||= type_genomes.uniq.map(&:sample_set).compact + end + + def samples + @samples ||= genome_sample_sets.map(&:samples).flatten + end +end