sequencescape-client-api 0.3.10 → 0.4.0.pre.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  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 +1 -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 +1 -1
  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 +19 -15
  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 +0 -3
  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 +4 -5
  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 +53 -35
  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.10"
3
+ VERSION = '0.4.0-rc1'.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'
@@ -81,4 +80,4 @@ require 'sequencescape/extraction_attribute'
81
80
  require 'sequencescape/library_event'
82
81
 
83
82
  # Ensure that the I18n stuff has been properly configured
84
- 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
@@ -1,6 +1,6 @@
1
1
  require 'sequencescape-api/resource'
2
2
 
3
3
  class Sequencescape::ExtractionAttribute < ::Sequencescape::Api::Resource
4
- belongs_to :plate, :class_name => 'Asset', :disposition => :inline
4
+ belongs_to :plate, class_name: 'Asset', disposition: :inline
5
5
  attribute_accessor :attributes_update, :created_by
6
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,31 +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
- end
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
70
72
 
73
+ raise Sequencescape::Api::Error, "Unexpected number of transfers found: #{transfers_found} found, 1 expected."
74
+ end
71
75
 
72
76
  module UpdateExtractionAttributes
73
77
  def create!(attributes = nil)
74
78
  attributes ||= {}
75
79
  new({}, false).tap do |attrs|
76
- api.create(actions.create, {:extraction_attribute => attributes}, Sequencescape::Api::ModifyingHandler.new(attrs))
80
+ api.create(actions.create, { extraction_attribute: attributes },
81
+ Sequencescape::Api::ModifyingHandler.new(attrs))
77
82
  end
78
83
  end
79
84
  end
80
85
 
81
- has_many :extraction_attributes, :class_name => 'ExtractionAttribute' do
86
+ has_many :extraction_attributes, class_name: 'ExtractionAttribute' do
82
87
  include Sequencescape::Plate::UpdateExtractionAttributes
83
88
  end
84
-
85
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
@@ -4,7 +4,7 @@ class Sequencescape::PlatePurpose < ::Sequencescape::Api::Resource
4
4
  module PlateCreation
5
5
  def create!(attributes = nil)
6
6
  attributes ||= {}
7
- attributes[:wells].delete_if { |_,v| v.blank? } if attributes.key?(:wells)
7
+ attributes[:wells].delete_if { |_, v| v.blank? } if attributes.key?(:wells)
8
8
 
9
9
  new({}, false).tap do |plate|
10
10
  api.create(actions.create, { 'plate' => attributes }, Sequencescape::Api::ModifyingHandler.new(plate))
@@ -12,8 +12,8 @@ class Sequencescape::PlatePurpose < ::Sequencescape::Api::Resource
12
12
  end
13
13
  end
14
14
 
15
- has_many :children, :class_name => 'PlatePurpose'
16
- has_many :parents, :class_name => 'PlatePurpose'
15
+ has_many :children, class_name: 'PlatePurpose'
16
+ has_many :parents, class_name: 'PlatePurpose'
17
17
 
18
18
  has_many :plates do
19
19
  include Sequencescape::PlatePurpose::PlateCreation