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


82
83
84
# File 'app/models/labwhere_reception.rb', line 82

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


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

def missing_barcodes
  machine_barcodes = assets.map(&:machine_barcode).to_set
  human_barcodes = assets.map(&:human_barcode).to_set
  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
77
78
# 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?
      errors.add(:scan, scan.error)
      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: 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