sequencescape-client-api 0.3.7 → 0.4.0.pre.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +44 -0
  3. data/.rubocop_todo.yml +338 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +1 -1
  6. data/README.markdown +13 -0
  7. data/lib/sequencescape-api.rb +1 -1
  8. data/lib/sequencescape-api/actions.rb +9 -8
  9. data/lib/sequencescape-api/associations.rb +8 -6
  10. data/lib/sequencescape-api/associations/base.rb +1 -1
  11. data/lib/sequencescape-api/associations/base/instance_methods.rb +10 -8
  12. data/lib/sequencescape-api/associations/belongs_to.rb +4 -4
  13. data/lib/sequencescape-api/associations/has_many.rb +14 -13
  14. data/lib/sequencescape-api/associations/has_many/json.rb +1 -1
  15. data/lib/sequencescape-api/associations/has_many/validation.rb +1 -1
  16. data/lib/sequencescape-api/composition.rb +11 -7
  17. data/lib/sequencescape-api/connection_factory.rb +6 -5
  18. data/lib/sequencescape-api/connection_factory/actions.rb +17 -12
  19. data/lib/sequencescape-api/core.rb +12 -7
  20. data/lib/sequencescape-api/core_ext/array.rb +1 -1
  21. data/lib/sequencescape-api/core_ext/hash.rb +3 -3
  22. data/lib/sequencescape-api/errors.rb +2 -2
  23. data/lib/sequencescape-api/finder_methods.rb +16 -11
  24. data/lib/sequencescape-api/rails.rb +8 -7
  25. data/lib/sequencescape-api/resource/active_model.rb +1 -1
  26. data/lib/sequencescape-api/resource/attribute_groups.rb +11 -7
  27. data/lib/sequencescape-api/resource/attributes.rb +8 -8
  28. data/lib/sequencescape-api/resource/instance_methods.rb +17 -9
  29. data/lib/sequencescape-api/resource/json.rb +18 -15
  30. data/lib/sequencescape-api/resource/modifications.rb +20 -11
  31. data/lib/sequencescape-api/resource_model_proxy.rb +7 -5
  32. data/lib/sequencescape-api/version.rb +1 -1
  33. data/lib/sequencescape.rb +4 -2
  34. data/lib/sequencescape/bait_library.rb +1 -1
  35. data/lib/sequencescape/bait_library_layout.rb +2 -2
  36. data/lib/sequencescape/barcoded_asset.rb +1 -1
  37. data/lib/sequencescape/batch.rb +6 -6
  38. data/lib/sequencescape/behaviour/qced.rb +3 -4
  39. data/lib/sequencescape/behaviour/receptacle.rb +3 -3
  40. data/lib/sequencescape/behaviour/state_driven.rb +4 -4
  41. data/lib/sequencescape/bulk_transfer.rb +1 -1
  42. data/lib/sequencescape/comment.rb +0 -2
  43. data/lib/sequencescape/extraction_attribute.rb +6 -0
  44. data/lib/sequencescape/library_event.rb +1 -1
  45. data/lib/sequencescape/library_tube.rb +1 -1
  46. data/lib/sequencescape/lot.rb +0 -1
  47. data/lib/sequencescape/lot_type.rb +1 -2
  48. data/lib/sequencescape/order_template.rb +1 -2
  49. data/lib/sequencescape/pipeline.rb +1 -1
  50. data/lib/sequencescape/plate.rb +29 -11
  51. data/lib/sequencescape/plate/pooling.rb +9 -3
  52. data/lib/sequencescape/plate/well_structure.rb +6 -6
  53. data/lib/sequencescape/plate_conversion.rb +3 -3
  54. data/lib/sequencescape/plate_creation.rb +3 -3
  55. data/lib/sequencescape/plate_purpose.rb +3 -3
  56. data/lib/sequencescape/plate_template.rb +0 -2
  57. data/lib/sequencescape/pooled_plate_creation.rb +3 -3
  58. data/lib/sequencescape/project.rb +2 -1
  59. data/lib/sequencescape/qc_decision.rb +0 -1
  60. data/lib/sequencescape/qc_file.rb +0 -3
  61. data/lib/sequencescape/qcable.rb +0 -3
  62. data/lib/sequencescape/qcable_creator.rb +1 -4
  63. data/lib/sequencescape/request.rb +3 -3
  64. data/lib/sequencescape/search.rb +10 -8
  65. data/lib/sequencescape/specific_tube_creation.rb +2 -2
  66. data/lib/sequencescape/stamp.rb +0 -1
  67. data/lib/sequencescape/state_change.rb +2 -2
  68. data/lib/sequencescape/study.rb +1 -1
  69. data/lib/sequencescape/submission.rb +1 -2
  70. data/lib/sequencescape/tag2_layout.rb +3 -3
  71. data/lib/sequencescape/tag2_layout_template.rb +2 -2
  72. data/lib/sequencescape/tag_group.rb +0 -1
  73. data/lib/sequencescape/tag_layout.rb +3 -3
  74. data/lib/sequencescape/tag_layout_template.rb +4 -4
  75. data/lib/sequencescape/transfer.rb +2 -2
  76. data/lib/sequencescape/transfer_request.rb +5 -7
  77. data/lib/sequencescape/transfer_template.rb +2 -2
  78. data/lib/sequencescape/tube.rb +3 -3
  79. data/lib/sequencescape/tube_creation.rb +3 -3
  80. data/lib/sequencescape/tube_from_tube_creation.rb +3 -3
  81. data/lib/sequencescape/tube_purpose.rb +3 -3
  82. data/lib/sequencescape/user.rb +2 -2
  83. data/lib/sequencescape/volume_update.rb +1 -1
  84. data/lib/sequencescape/well.rb +0 -2
  85. data/lib/sequencescape/work_completion.rb +1 -1
  86. data/sequencescape-api.gemspec +18 -17
  87. data/spec/sequencescape-api/associations_spec.rb +4 -2
  88. data/spec/sequencescape-api/finding_methods_spec.rb +3 -1
  89. data/spec/sequencescape-api/modifications_spec.rb +17 -16
  90. data/spec/sequencescape-api/root_spec.rb +11 -6
  91. data/spec/spec_helper.rb +3 -1
  92. data/spec/support/contract_helper.rb +18 -10
  93. data/spec/support/namespaces.rb +9 -9
  94. data/spec/support/shared_examples.rb +2 -0
  95. metadata +54 -36
  96. data/.rvmrc +0 -52
@@ -8,21 +8,23 @@ require 'ostruct'
8
8
  # Any interaction with the API isn't done directly through a model but through an instance of this
9
9
  # class, that proxies the model and ensures that it uses the correct instance of Sequencescape::Api.
10
10
  class Sequencescape::Api::ResourceModelProxy
11
- self.instance_methods.each { |m| undef_method(m) unless m.to_s =~ /^(__.+__|respond_to\?|object_id)$/ }
11
+ instance_methods.each { |m| undef_method(m) unless m.to_s =~ /^(__.+__|respond_to\?|object_id)$/ }
12
12
 
13
13
  include ::Sequencescape::Api::FinderMethods
14
14
  extend ::Sequencescape::Api::Actions
15
15
 
16
16
  def initialize(api, model, actions)
17
- @api, @model, @actions = api, model, OpenStruct.new(actions)
17
+ @api = api
18
+ @model = model
19
+ @actions = OpenStruct.new(actions)
18
20
  @model.send(:initialize_class_actions, self)
19
21
  end
20
22
 
21
23
  attr_reader :api, :actions, :model
22
24
  private :api, :actions, :model
23
25
 
24
- delegate :nil?, :inspect, :to => :model
25
- delegate :read_timeout, :to => :api
26
+ delegate :nil?, :inspect, to: :model
27
+ delegate :read_timeout, to: :api
26
28
 
27
29
  has_create_action
28
30
 
@@ -40,5 +42,5 @@ class Sequencescape::Api::ResourceModelProxy
40
42
  end
41
43
 
42
44
  # Here are some methods that need to be delegated directly.
43
- delegate :ai, :to => :model
45
+ delegate :ai, to: :model
44
46
  end
@@ -1,5 +1,5 @@
1
1
  module Sequencescape
2
2
  class Api
3
- VERSION = "0.3.7"
3
+ VERSION = '0.4.0-rc2'.freeze
4
4
  end
5
5
  end
@@ -1,7 +1,6 @@
1
1
  require 'sequencescape-api'
2
2
 
3
3
  module Sequencescape
4
-
5
4
  end
6
5
 
7
6
  require 'sequencescape/user'
@@ -74,8 +73,11 @@ require 'sequencescape/qcable_creator'
74
73
  require 'sequencescape/qc_decision'
75
74
  require 'sequencescape/plate_conversion'
76
75
 
76
+ # Support Extraction
77
+ require 'sequencescape/extraction_attribute'
78
+
77
79
  # Events
78
80
  require 'sequencescape/library_event'
79
81
 
80
82
  # Ensure that the I18n stuff has been properly configured
81
- I18n.config.load_path << File.expand_path(File.join(File.dirname(__FILE__), %w{sequencescape locale en.yml}))
83
+ I18n.config.load_path << File.expand_path(File.join(File.dirname(__FILE__), %w[sequencescape locale en.yml]))
@@ -2,7 +2,7 @@ class BaitLibrary
2
2
  include Sequencescape::Api::Composition::Target
3
3
 
4
4
  attribute_accessor :name
5
- attribute_accessor :created_at, :updated_at, :conversion => :to_time
5
+ attribute_accessor :created_at, :updated_at, conversion: :to_time
6
6
 
7
7
  attribute_group :supplier do
8
8
  attribute_accessor :name, :identifier
@@ -2,8 +2,8 @@ require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::BaitLibraryLayout < ::Sequencescape::Api::Resource
4
4
  belongs_to :user
5
- belongs_to :plate, :class_name => 'Plate'
5
+ belongs_to :plate, class_name: 'Plate'
6
6
  attribute_reader :layout
7
7
 
8
- has_class_create_action(:preview!, :action => :preview)
8
+ has_class_create_action(:preview!, action: :preview)
9
9
  end
@@ -8,5 +8,5 @@ class Sequencescape::BarcodedAsset < ::Sequencescape::Asset
8
8
  include Sequencescape::Behaviour::Barcoded
9
9
  include Sequencescape::Behaviour::Qced
10
10
 
11
- belongs_to :stock_plate, :class_name => 'Plate'
11
+ belongs_to :stock_plate, class_name: 'Plate'
12
12
  end
@@ -2,17 +2,17 @@ require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::Batch < ::Sequencescape::Api::Resource
4
4
  belongs_to :pipeline
5
- has_many :requests, :disposition => :inline
5
+ has_many :requests, disposition: :inline
6
6
  composed_of :user
7
7
 
8
- has_update_action :start!, :action => 'start'
9
- has_update_action :complete!, :action => 'complete'
10
- has_update_action :release!, :action => 'release'
8
+ has_update_action :start!, action: 'start'
9
+ has_update_action :complete!, action: 'complete'
10
+ has_update_action :release!, action: 'release'
11
11
 
12
12
  attribute_accessor :state, :production_state, :qc_state, :barcode
13
13
 
14
14
  def self.state_method(name)
15
- class_eval(%Q{def #{name}? ; state == #{name.to_s.inspect} ; end})
15
+ class_eval("def #{name}? ; state == #{name.to_s.inspect} ; end")
16
16
  end
17
17
 
18
18
  state_method(:pending)
@@ -20,5 +20,5 @@ class Sequencescape::Batch < ::Sequencescape::Api::Resource
20
20
  state_method(:completed)
21
21
  state_method(:released)
22
22
 
23
- validates_presence_of :requests, :allow_blank => false
23
+ validates_presence_of :requests, allow_blank: false
24
24
  end
@@ -1,6 +1,5 @@
1
1
  module Sequencescape::Behaviour
2
2
  module Qced
3
-
4
3
  module QcFile
5
4
  def create!(attributes = nil)
6
5
  attributes ||= {}
@@ -14,7 +13,8 @@ module Sequencescape::Behaviour
14
13
  attributes ||= {}
15
14
 
16
15
  new({}, false).tap do |qc_file|
17
- api.create_from_file(actions.create, file, filename, 'sequencescape/qc_file', Sequencescape::Api::ModifyingHandler.new(qc_file))
16
+ api.create_from_file(actions.create, file, filename, 'sequencescape/qc_file',
17
+ Sequencescape::Api::ModifyingHandler.new(qc_file))
18
18
  end
19
19
  end
20
20
  end
@@ -22,10 +22,9 @@ module Sequencescape::Behaviour
22
22
  def self.included(base)
23
23
  base.class_eval do
24
24
  has_many :qc_files do
25
- include Sequencescape::Behaviour::Qced::QcFile
25
+ include Sequencescape::Behaviour::Qced::QcFile
26
26
  end
27
27
  end
28
28
  end
29
-
30
29
  end
31
30
  end
@@ -4,9 +4,9 @@ require 'sequencescape/bait_library'
4
4
  module Sequencescape::Behaviour
5
5
  module Receptacle
6
6
  class Aliquot < Sequencescape::Api::Resource
7
- belongs_to :sample, :disposition => :inline
7
+ belongs_to :sample, disposition: :inline
8
8
  composed_of :tag
9
- composed_of :tag2, :class_name => 'Tag'
9
+ composed_of :tag2, class_name: 'Tag'
10
10
  composed_of :bait_library
11
11
 
12
12
  attribute_accessor :suboptimal
@@ -14,7 +14,7 @@ module Sequencescape::Behaviour
14
14
 
15
15
  def self.included(base)
16
16
  base.class_eval do
17
- has_many :aliquots, :disposition => :inline, :class_name => 'Behaviours::Receptacle::Aliquot'
17
+ has_many :aliquots, disposition: :inline, class_name: 'Behaviours::Receptacle::Aliquot'
18
18
  end
19
19
  end
20
20
  end
@@ -1,17 +1,17 @@
1
1
  module Sequencescape::Behaviour
2
2
  module StateDriven
3
- def self.included(base)
3
+ def self.included(base) # rubocop:todo Metrics/MethodLength
4
4
  base.class_eval do
5
5
  attribute_reader :state
6
6
 
7
7
  # Define a few default states
8
- [ :pending, :started, :passed, :failed, :cancelled, :unknown, :qc_complete ].each do |state|
8
+ %i[pending started passed failed cancelled unknown qc_complete].each do |state|
9
9
  line = __LINE__ + 1
10
- class_eval(%Q{
10
+ class_eval("
11
11
  def #{state}?
12
12
  state == #{state.to_s.inspect}
13
13
  end
14
- }, __FILE__, line)
14
+ ", __FILE__, line)
15
15
  end
16
16
  end
17
17
  end
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::BulkTransfer < ::Sequencescape::Api::Resource
4
4
  belongs_to :user
5
- has_many :transfers, :class_name => 'Transfer'
5
+ has_many :transfers, class_name: 'Transfer'
6
6
 
7
7
  attribute_accessor :well_transfers
8
8
  end
@@ -1,7 +1,5 @@
1
1
  require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::Comment < ::Sequencescape::Api::Resource
4
-
5
4
  attribute_accessor :description, :title
6
-
7
5
  end
@@ -0,0 +1,6 @@
1
+ require 'sequencescape-api/resource'
2
+
3
+ class Sequencescape::ExtractionAttribute < ::Sequencescape::Api::Resource
4
+ belongs_to :plate, class_name: 'Asset', disposition: :inline
5
+ attribute_accessor :attributes_update, :created_by
6
+ end
@@ -1,5 +1,5 @@
1
1
  class Sequencescape::LibraryEvent < ::Sequencescape::Api::Resource
2
2
  belongs_to :user
3
- belongs_to :seed, :class_name => 'Plate'
3
+ belongs_to :seed, class_name: 'Plate'
4
4
  attribute_accessor :event_type
5
5
  end
@@ -2,6 +2,6 @@ require 'sequencescape/tube'
2
2
 
3
3
  class Sequencescape::LibraryTube < ::Sequencescape::Tube
4
4
  has_many :requests
5
- belongs_to :source_request, :class_name => 'Sequencescape::Request'
5
+ belongs_to :source_request, class_name: 'Sequencescape::Request'
6
6
  belongs_to :custom_metadatum_collection
7
7
  end
@@ -1,7 +1,6 @@
1
1
  require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::Lot < ::Sequencescape::Api::Resource
4
-
5
4
  belongs_to :user
6
5
  belongs_to :lot_type
7
6
  belongs_to :template
@@ -1,9 +1,8 @@
1
1
  require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::LotType < ::Sequencescape::Api::Resource
4
-
5
4
  module LotCreator
6
- def create!(attributes=nil)
5
+ def create!(attributes = nil)
7
6
  attributes ||= {}
8
7
  new({}, false).tap do |lot|
9
8
  api.create(actions.create, { 'lot' => attributes }, Sequencescape::Api::ModifyingHandler.new(lot))
@@ -1,9 +1,8 @@
1
1
  require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::OrderTemplate < ::Sequencescape::Api::Resource
4
-
5
4
  module OrderCreator
6
- def create!(attributes=nil)
5
+ def create!(attributes = nil)
7
6
  attributes ||= {}
8
7
  new({}, false).tap do |order|
9
8
  api.create(actions.create, { 'order' => attributes }, Sequencescape::Api::ModifyingHandler.new(order))
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::Pipeline < ::Sequencescape::Api::Resource
4
4
  attribute_accessor :name
5
-
5
+
6
6
  has_many :requests
7
7
  has_many :batches do
8
8
  has_create_action
@@ -21,17 +21,18 @@ class Sequencescape::Plate < ::Sequencescape::Asset
21
21
 
22
22
  belongs_to :plate_purpose
23
23
  belongs_to :custom_metadatum_collection
24
- composed_of :stock_plate, :class_name => 'Plate'
24
+ composed_of :stock_plate, class_name: 'Plate'
25
25
 
26
26
  module CommentsCreation
27
27
  def create!(attributes = nil)
28
28
  attributes ||= {}
29
29
 
30
30
  new({}, false).tap do |comment|
31
- api.create(actions.create, { 'comment' => attributes }, Sequencescape::Api::ModifyingHandler.new(comment))
31
+ api.create(actions.create,
32
+ { 'comment' => attributes },
33
+ Sequencescape::Api::ModifyingHandler.new(comment))
32
34
  end
33
35
  end
34
-
35
36
  end
36
37
 
37
38
  module CurrentVolumeSubstraction
@@ -39,12 +40,14 @@ class Sequencescape::Plate < ::Sequencescape::Asset
39
40
  attributes ||= {}
40
41
 
41
42
  new({}, false).tap do |volume_update|
42
- api.create(actions.create, { 'volume_update' => attributes }, Sequencescape::Api::ModifyingHandler.new(volume_update))
43
+ api.create(actions.create,
44
+ { 'volume_update' => attributes },
45
+ Sequencescape::Api::ModifyingHandler.new(volume_update))
43
46
  end
44
47
  end
45
48
 
46
49
  def substract_volume!(volume_change)
47
- create!({ :volume_change => volume_change})
50
+ create!({ volume_change: volume_change })
48
51
  end
49
52
  end
50
53
  has_many :volume_updates do
@@ -55,17 +58,32 @@ class Sequencescape::Plate < ::Sequencescape::Asset
55
58
  include Sequencescape::Plate::CommentsCreation
56
59
  end
57
60
 
58
- has_many :source_transfers, :class_name => 'Transfer'
59
- has_many :transfers_to_tubes, :class_name => 'Transfer'
60
- has_many :creation_transfers, :class_name => 'Transfer'
61
+ has_many :source_transfers, class_name: 'Transfer'
62
+ has_many :transfers_to_tubes, class_name: 'Transfer'
63
+ has_many :creation_transfers, class_name: 'Transfer'
61
64
 
62
65
  attribute_accessor :size, :iteration, :pools, :pre_cap_groups, :location, :priority
63
66
 
64
67
  # Provides backwards compatability
65
68
  def creation_transfer
66
- Rails.logger.warn "Creation transfer is deprecated, use creation_transfers instead"
67
- return creation_transfers.first if creation_transfers.count == 1
68
- raise Sequencescape::Api::Error, "Unexpected number of transfers found: #{creation_transfers.count} found, 1 expected."
69
+ Rails.logger.warn 'Creation transfer is deprecated, use creation_transfers instead'
70
+ transfers_found = creation_transfers.count
71
+ return creation_transfers.first if transfers_found == 1
72
+
73
+ raise Sequencescape::Api::Error, "Unexpected number of transfers found: #{transfers_found} found, 1 expected."
69
74
  end
70
75
 
76
+ module UpdateExtractionAttributes
77
+ def create!(attributes = nil)
78
+ attributes ||= {}
79
+ new({}, false).tap do |attrs|
80
+ api.create(actions.create, { extraction_attribute: attributes },
81
+ Sequencescape::Api::ModifyingHandler.new(attrs))
82
+ end
83
+ end
84
+ end
85
+
86
+ has_many :extraction_attributes, class_name: 'ExtractionAttribute' do
87
+ include Sequencescape::Plate::UpdateExtractionAttributes
88
+ end
71
89
  end
@@ -3,21 +3,27 @@ module Sequencescape::Plate::Pooling
3
3
  wells.each do |well|
4
4
  pool_id, pool = pools.detect { |_, pool| pool['wells'].include?(well.location) }
5
5
  next if pool.nil?
6
+
6
7
  well.pool = pool
7
8
  end
8
9
  end
9
10
 
10
11
  def populate_wells_with_pre_cap_group
11
12
  wells.each do |well|
12
- pre_cap_group_id, pre_cap_group = pre_cap_groups.detect { |_, pre_cap_group| pre_cap_group['wells'].include?(well.location) }
13
+ pre_cap_group_id, pre_cap_group = pre_cap_groups.detect do |_, pre_cap_group|
14
+ pre_cap_group['wells'].include?(well.location)
15
+ end
13
16
  next if pre_cap_group.nil?
17
+
14
18
  well.pre_cap_group = pre_cap_group
15
19
  end
16
20
  end
17
21
 
18
22
  def after_load
19
- pools.each { |pool_id, pool| pool['id'] = pool_id } unless pools.nil?
20
- pre_cap_groups.each { |pre_cap_group_id, pre_cap_group| pre_cap_group['id'] = pre_cap_group_id } unless pre_cap_groups.nil?
23
+ pools&.each { |pool_id, pool| pool['id'] = pool_id }
24
+ return if pre_cap_groups.nil?
25
+
26
+ pre_cap_groups.each { |pre_cap_group_id, pre_cap_group| pre_cap_group['id'] = pre_cap_group_id }
21
27
  end
22
28
  private :after_load
23
29
  end
@@ -1,24 +1,24 @@
1
1
  module Sequencescape::Plate::WellStructure
2
2
  def rows
3
- case self.size
3
+ case size
4
4
  when 96 then ('A'..'H')
5
5
  when 384 then ('A'..'P')
6
- else raise RuntimeError, "Unknown plate size #{self.size}"
6
+ else raise "Unknown plate size #{size}"
7
7
  end
8
8
  end
9
9
 
10
10
  def columns
11
- case self.size
11
+ case size
12
12
  when 96 then (1..12)
13
13
  when 384 then (1..24)
14
- else raise RuntimeError, "Unknown plate size #{self.size}"
14
+ else raise "Unknown plate size #{size}"
15
15
  end
16
16
  end
17
17
 
18
18
  def locations_in_rows
19
19
  [].tap do |locations|
20
- self.rows.each do |row|
21
- self.columns.each do |column|
20
+ rows.each do |row|
21
+ columns.each do |column|
22
22
  locations << "#{row}#{column}"
23
23
  end
24
24
  end
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::PlateConversion < ::Sequencescape::Api::Resource
4
4
  belongs_to :user
5
- belongs_to :target, :class_name => 'Plate'
6
- belongs_to :parent, :class_name => 'Plate'
7
- belongs_to :purpose, :class_name => 'PlatePurpose'
5
+ belongs_to :target, class_name: 'Plate'
6
+ belongs_to :parent, class_name: 'Plate'
7
+ belongs_to :purpose, class_name: 'PlatePurpose'
8
8
  end
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::PlateCreation < ::Sequencescape::Api::Resource
4
4
  belongs_to :user
5
- belongs_to :parent, :class_name => 'Plate'
6
- belongs_to :child_purpose, :class_name => 'PlatePurpose'
7
- belongs_to :child, :class_name => 'Plate'
5
+ belongs_to :parent, class_name: 'Plate'
6
+ belongs_to :child_purpose, class_name: 'PlatePurpose'
7
+ belongs_to :child, class_name: 'Plate'
8
8
  end