Class: FieldValue
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- FieldValue
- Includes:
- FieldValueKrill, FieldValuePlanner
- Defined in:
- app/models/field_value.rb
Overview
Simply put: a representation of an input, output, or parameter of an Operation.
In more detail: an Item, Sample, or parameter of the inputs/outputs of an Operation or of the properties of a Sample that can be verified as allowed for that Operation or Sample by the corresponding FieldType of the respective parent OperationType or SampleType.
Class Method Summary collapse
-
.create_number(sample, ft, values) ⇒ Object
TODO: dead code.
-
.create_sample(sample, ft, values) ⇒ Object
TODO: dead code.
-
.create_string(sample, ft, values) ⇒ Object
TODO: dead code.
-
.create_url(sample, ft, values) ⇒ Object
TODO: dead code.
-
.creator(sample, field_type, raw) ⇒ Object
TODO: dead code.
Instance Method Summary collapse
- #child_data(name) ⇒ Object
-
#collection ⇒ Collection
Return associated Collection.
-
#collection_part(row, column) ⇒ Item
Return the specified part of collection.
- #copy_inventory(fv) ⇒ Object
- #export ⇒ Object
-
#field_type ⇒ FieldType
Gets the FieldType which defines this field value.
- #full_json(_options = {}) ⇒ Object
-
#item ⇒ Item
Return associated Item.
-
#item_link ⇒ String
Return an html link to the item ui for the Item associated with this field value.
-
#name ⇒ String
Gets name of FieldValue.
-
#part ⇒ Item
Return associated Part if this fv refers to a part of a collection.
- #routing ⇒ Object
-
#sample ⇒ Sample
Return associated Sample.
-
#set(opts = {}) ⇒ Object
Set Item, Collection, or row or column.
- #set_child_data(name, value) ⇒ Object
-
#to_s ⇒ Object
TODO: URLs belong elsewhere.
-
#val ⇒ Float, ...
Return associated parameter value.
Methods included from FieldValueKrill
#info, #make, #make_collection, #make_part, #part?, #retrieve
Class Method Details
.create_number(sample, ft, values) ⇒ Object
TODO: dead code
135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'app/models/field_value.rb', line 135 def self.create_number(sample, ft, values) values.each do |v| if ft.choices && ft.choices != '' choices = ft.choices.split(',').collect(&:to_f) unless choices.member? v.to_f sample.errors.add :choices, "#{v} is not a valid choice for #{ft.name}" raise ActiveRecord::Rollback end end fv = sample.field_values.create name: ft.name, value: v.to_f fv.save end end |
.create_sample(sample, ft, values) ⇒ Object
TODO: dead code
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'app/models/field_value.rb', line 158 def self.create_sample(sample, ft, values) values.each do |v| if v.class == Sample child = v elsif v.class == Integer child = Sample.find_by(id: v) unless sample sample.errors.add :sample, "Could not find sample with id #{v} for #{ft.name}" raise ActiveRecord::Rollback end else sample.errors.add :sample, "#{v} should be a sample for #{ft.name}" raise ActiveRecord::Rollback end unless ft.allowed? child sample.errors.add :sample, "#{v} is not an allowable sample_type for #{ft.name}" raise ActiveRecord::Rollback end fv = sample.field_values.create name: ft.name, child_sample_id: child.id fv.save end end |
.create_string(sample, ft, values) ⇒ Object
TODO: dead code
120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'app/models/field_value.rb', line 120 def self.create_string(sample, ft, values) values.each do |v| if ft.choices && ft.choices != '' choices = ft.choices.split(',') unless choices.member? v sample.errors.add :choices, "#{v} is not a valid choice for #{ft.name}" raise ActiveRecord::Rollback end end fv = sample.field_values.create name: ft.name, value: v fv.save end end |
.create_url(sample, ft, values) ⇒ Object
TODO: dead code
150 151 152 153 154 155 |
# File 'app/models/field_value.rb', line 150 def self.create_url(sample, ft, values) values.each do |v| fv = sample.field_values.create name: ft.name, value: v fv.save end end |
.creator(sample, field_type, raw) ⇒ Object
TODO: dead code
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 |
# File 'app/models/field_value.rb', line 184 def self.creator(sample, field_type, raw) # sample, field_type, raw_field_data values = [] if field_type.array if raw.class != Array sample.errors.add :array, "#{field_type.name} should be an array." raise ActiveRecord::Rollback end values = raw else values = [raw] end method('create_' + field_type.type).call(sample, field_type, values) end |
Instance Method Details
#child_data(name) ⇒ Object
228 229 230 |
# File 'app/models/field_value.rb', line 228 def child_data(name) child_item.get(name) if child_item_id end |
#collection ⇒ Collection
Return associated Collection
63 64 65 |
# File 'app/models/field_value.rb', line 63 def collection Collection.find(child_item.id) if child_item end |
#collection_part(row, column) ⇒ Item
Return the specified part of collection
79 80 81 82 |
# File 'app/models/field_value.rb', line 79 def collection_part(row, column) pas = PartAssociation.where(collection_id: child_item_id, row: row, column: column) pas.first.part if pas.length == 1 end |
#copy_inventory(fv) ⇒ Object
256 257 258 259 260 261 |
# File 'app/models/field_value.rb', line 256 def copy_inventory(fv) self.child_item_id = fv.child_item_id self.row = fv.row self.column = fv.column save end |
#export ⇒ Object
221 222 223 224 225 226 |
# File 'app/models/field_value.rb', line 221 def export attributes.merge( child_sample: child_sample.as_json, child_item: child_item.as_json ) end |
#field_type ⇒ FieldType
Gets the FieldType which defines this field value.
25 |
# File 'app/models/field_value.rb', line 25 belongs_to :field_type |
#full_json(_options = {}) ⇒ Object
268 269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'app/models/field_value.rb', line 268 def full_json( = {}) as_json(include: [ :child_sample, :wires_as_source, :wires_as_dest, allowable_field_type: { include: %i[ object_type sample_type ] } ]) end |
#item ⇒ Item
Return associated Item.
45 46 47 |
# File 'app/models/field_value.rb', line 45 def item child_item end |
#item_link ⇒ String
Return an html link to the item ui for the Item associated with this field value.
52 53 54 55 56 57 58 |
# File 'app/models/field_value.rb', line 52 def item_link if child_item_id child_item.to_s else '?' end end |
#name ⇒ String
Gets name of FieldValue. Will be the same as the name of the Parent FieldType.
30 |
# File 'app/models/field_value.rb', line 30 attr_accessible :name |
#part ⇒ Item
Return associated Part if this fv refers to a part of a collection
70 71 72 |
# File 'app/models/field_value.rb', line 70 def part collection_part row, column end |
#routing ⇒ Object
263 264 265 266 |
# File 'app/models/field_value.rb', line 263 def routing ft = field_type ft ? ft.routing : nil end |
#sample ⇒ Sample
Return associated Sample.
38 39 40 |
# File 'app/models/field_value.rb', line 38 def sample child_sample end |
#set(opts = {}) ⇒ Object
Set Item, Collection, or row or column.
248 249 250 251 252 253 254 |
# File 'app/models/field_value.rb', line 248 def set(opts = {}) self.child_item_id = opts[:item].id if opts[:item] self.child_item_id = opts[:collection].id if opts[:collection] self.row = opts[:row] if opts[:row] self.column = opts[:column] if opts[:column] save end |
#set_child_data(name, value) ⇒ Object
232 233 234 |
# File 'app/models/field_value.rb', line 232 def set_child_data(name, value) child_item.associate(name, value) if child_item_id end |
#to_s ⇒ Object
TODO: URLs belong elsewhere
201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# File 'app/models/field_value.rb', line 201 def to_s if child_sample_id c = Sample.find_by(id: child_sample_id) if c "<a href='/samples/#{c.id}'>#{c.name}</a>" else "? #{child_sample_id} not found ?" end elsif child_item_id c = Item.includes(:object_type).find_by(id: child_sample_id) if c "<a href='/items/#{c.id}'>#{c.object_type.name} #{c.id}</a>" else "? #{child_item_id} not found ?" end else value end end |
#val ⇒ Float, ...
Return associated parameter value.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'app/models/field_value.rb', line 89 def val if field_type ft = field_type elsif sample && sample_type fts = sample.sample_type.field_types.select { |type| type.name == name } return nil unless fts.length == 1 ft = ft.first else return nil end case ft.type when 'string', 'url' value when 'json' begin JSON.parse value, symbolize_names: true rescue JSON::ParserError => e { error: e, original_value: value } end when 'number' value.to_f when 'sample' child_sample when 'item' child_item end end |