Class: LabwhereReception

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Naming
Includes:
ActiveModel::Conversion, ActiveModel::Validations
Defined in:
app/models/labwhere_reception.rb

Overview

A simple class to handle the behaviour from the labwhere reception controller

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(user_code, location_barcode, asset_barcodes) ⇒ LabwhereReception

Returns a new instance of LabwhereReception.



21
22
23
24
25
# File 'app/models/labwhere_reception.rb', line 21

def initialize(user_code, location_barcode, asset_barcodes)
  @asset_barcodes = (asset_barcodes || []).map(&:strip)
  @location_barcode = location_barcode.try(:strip)
  @user_code = user_code.try(:strip)
end

Instance Attribute Details

#asset_barcodesObject (readonly)

Returns the value of attribute asset_barcodes.



11
12
13
# File 'app/models/labwhere_reception.rb', line 11

def asset_barcodes
  @asset_barcodes
end

#location_barcodeObject (readonly)

Returns the value of attribute location_barcode.



11
12
13
# File 'app/models/labwhere_reception.rb', line 11

def location_barcode
  @location_barcode
end

#user_codeObject (readonly)

Returns the value of attribute user_code.



11
12
13
# File 'app/models/labwhere_reception.rb', line 11

def user_code
  @user_code
end

Instance Method Details

#assetsObject

rubocop:enable Metrics/MethodLength



80
81
82
# File 'app/models/labwhere_reception.rb', line 80

def assets
  @assets ||= Labware.with_barcode(asset_barcodes)
end

#idObject



27
28
29
# File 'app/models/labwhere_reception.rb', line 27

def id
  nil
end

#missing_barcodesObject



84
85
86
87
88
# File 'app/models/labwhere_reception.rb', line 84

def missing_barcodes
  machine_barcodes = assets.to_set(&:machine_barcode)
  human_barcodes = assets.to_set(&:human_barcode)
  asset_barcodes.delete_if { |barcode| human_barcodes.include?(barcode) || machine_barcodes.include?(barcode) }
end

#new_record?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'app/models/labwhere_reception.rb', line 35

def new_record?
  true
end

#persisted?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'app/models/labwhere_reception.rb', line 31

def persisted?
  false
end

#saveObject

save attempts to perform the actions, and returns true if it was successful This maintains compatibility with rails rubocop:todo Metrics/MethodLength



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/models/labwhere_reception.rb', line 46

def save # rubocop:todo Metrics/AbcSize
  return false unless valid?

  begin
    scan =
      LabWhereClient::Scan.create(
        location_barcode: location_barcode,
        user_code: user_code,
        labware_barcodes: asset_barcodes
      )

    unless scan.valid?
      # Prepend the errors with 'Labwhere' to make it clear where the error came from
      # This is important as you can get both Sequencescape and Labwhere errors of the same type
      # e.g. User does not exist
      labwhere_errors = scan.errors.map { |error| "LabWhere #{error}" }
      errors.add(:base, labwhere_errors)
      return false
    end
  rescue LabWhereClient::LabwhereException => e
    errors.add(:base, 'Could not connect to Labwhere.')
    return false
  end

  assets.each do |asset|
    asset.events.create_scanned_into_lab!(location_barcode, user.)
    BroadcastEvent::LabwareReceived.create!(seed: asset, user: user, properties: { location_barcode: })
  end

  valid?
end

#userObject



39
40
41
# File 'app/models/labwhere_reception.rb', line 39

def user
  @user ||= User.find_with_barcode_or_swipecard_code(@user_code)
end