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.



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

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.



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

def asset_barcodes
  @asset_barcodes
end

#location_barcodeObject (readonly)

Returns the value of attribute location_barcode.



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

def location_barcode
  @location_barcode
end

#user_codeObject

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



88
89
90
# File 'app/models/labwhere_reception.rb', line 88

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

#idObject



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

def id
  nil
end

#missing_barcodesObject



92
93
94
95
96
# File 'app/models/labwhere_reception.rb', line 92

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)


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

def new_record?
  true
end

#persisted?Boolean

Returns:

  • (Boolean)


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

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



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
77
78
79
80
81
82
83
84
# File 'app/models/labwhere_reception.rb', line 47

def save # rubocop:todo Metrics/AbcSize
  if user_code.blank?
    errors.add(:base, 'Please provide a valid user code.')
    return false
  end
  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

  result = valid?
  @user_code = ''

  result
end

#userObject



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

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