Class: SampleDetails::Collection
- Inherits:
-
Object
- Object
- SampleDetails::Collection
- Defined in:
- app/models/sample_details.rb
Instance Method Summary collapse
- #countries ⇒ Object
- #fields(for_group = nil, exclude_summary_only = false) ⇒ Object
- #groups(used_by_sample = nil) ⇒ Object
-
#initialize(samples, groups, fields, values) ⇒ Collection
constructor
A new instance of Collection.
- #samples(for_country = nil) ⇒ Object
- #value(sample, field) ⇒ Object
Constructor Details
#initialize(samples, groups, fields, values) ⇒ Collection
Returns a new instance of Collection.
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'app/models/sample_details.rb', line 4 def initialize(samples, groups, fields, values) @samples = samples.to_a @countries = @samples.map { |s| s.country }.uniq.sort { |a, b| a.full_name <=> b.full_name } @groups = groups.to_a.sort { |a, b| a.order <=> b.order } @fields = fields.to_a @values = values.to_a sample_map = Hash[@samples.map { |s| [s.id, s] }] @value_sample_map = {} @group_sample_map = {} @values.each do |v| s = sample_map[v.sample_id] g = v.sample_detail_field.sample_detail_group (@value_sample_map[s] ||= []) << v (@group_sample_map[s] ||= {})[g] = nil end @group_sample_map.each { |s, v| @group_sample_map[s] = v.keys } end |
Instance Method Details
#countries ⇒ Object
25 26 27 |
# File 'app/models/sample_details.rb', line 25 def countries @countries end |
#fields(for_group = nil, exclude_summary_only = false) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'app/models/sample_details.rb', line 45 def fields(for_group = nil, exclude_summary_only = false) if for_group data = @fields.select { |f| f.sample_detail_group == for_group } else data = @fields end if exclude_summary_only data.reject { |f| f.summary_only } else data end end |
#groups(used_by_sample = nil) ⇒ Object
37 38 39 40 41 42 43 |
# File 'app/models/sample_details.rb', line 37 def groups(used_by_sample = nil) if used_by_sample @group_sample_map[used_by_sample] || [] else @groups end end |
#samples(for_country = nil) ⇒ Object
29 30 31 32 33 34 35 |
# File 'app/models/sample_details.rb', line 29 def samples(for_country = nil) if for_country @samples.select { |s| s.country == for_country } else @samples end end |
#value(sample, field) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'app/models/sample_details.rb', line 59 def value(sample, field) field = case field when SampleDetailField field when String @fields.detect { |f| f.name == field } else nil end return nil unless sample && field list = @value_sample_map[sample] || [] list.detect { |v| v.sample_detail_field_id == field.id } end |