sequencescape-client-api 0.3.9 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +44 -0
- data/.rubocop_todo.yml +338 -0
- data/.ruby-version +1 -0
- data/Gemfile +1 -1
- data/README.markdown +13 -0
- data/lib/sequencescape-api.rb +1 -1
- data/lib/sequencescape-api/actions.rb +9 -8
- data/lib/sequencescape-api/associations.rb +8 -6
- data/lib/sequencescape-api/associations/base.rb +1 -1
- data/lib/sequencescape-api/associations/base/instance_methods.rb +10 -8
- data/lib/sequencescape-api/associations/belongs_to.rb +4 -4
- data/lib/sequencescape-api/associations/has_many.rb +14 -13
- data/lib/sequencescape-api/associations/has_many/json.rb +1 -1
- data/lib/sequencescape-api/associations/has_many/validation.rb +1 -1
- data/lib/sequencescape-api/composition.rb +11 -7
- data/lib/sequencescape-api/connection_factory.rb +6 -5
- data/lib/sequencescape-api/connection_factory/actions.rb +17 -12
- data/lib/sequencescape-api/core.rb +12 -7
- data/lib/sequencescape-api/core_ext/array.rb +1 -1
- data/lib/sequencescape-api/core_ext/hash.rb +3 -3
- data/lib/sequencescape-api/errors.rb +2 -2
- data/lib/sequencescape-api/finder_methods.rb +16 -11
- data/lib/sequencescape-api/rails.rb +8 -7
- data/lib/sequencescape-api/resource/active_model.rb +1 -1
- data/lib/sequencescape-api/resource/attribute_groups.rb +11 -7
- data/lib/sequencescape-api/resource/attributes.rb +8 -8
- data/lib/sequencescape-api/resource/instance_methods.rb +17 -9
- data/lib/sequencescape-api/resource/json.rb +18 -15
- data/lib/sequencescape-api/resource/modifications.rb +20 -11
- data/lib/sequencescape-api/resource_model_proxy.rb +7 -5
- data/lib/sequencescape-api/version.rb +1 -1
- data/lib/sequencescape.rb +4 -2
- data/lib/sequencescape/asset_audit.rb +1 -1
- data/lib/sequencescape/bait_library.rb +1 -1
- data/lib/sequencescape/bait_library_layout.rb +2 -2
- data/lib/sequencescape/barcoded_asset.rb +1 -1
- data/lib/sequencescape/batch.rb +6 -6
- data/lib/sequencescape/behaviour/qced.rb +3 -4
- data/lib/sequencescape/behaviour/receptacle.rb +3 -3
- data/lib/sequencescape/behaviour/state_driven.rb +4 -4
- data/lib/sequencescape/bulk_transfer.rb +1 -1
- data/lib/sequencescape/comment.rb +0 -2
- data/lib/sequencescape/extraction_attribute.rb +6 -0
- data/lib/sequencescape/library_event.rb +1 -1
- data/lib/sequencescape/library_tube.rb +1 -1
- data/lib/sequencescape/lot.rb +0 -1
- data/lib/sequencescape/lot_type.rb +1 -2
- data/lib/sequencescape/order_template.rb +1 -2
- data/lib/sequencescape/pipeline.rb +1 -1
- data/lib/sequencescape/plate.rb +29 -11
- data/lib/sequencescape/plate/pooling.rb +9 -3
- data/lib/sequencescape/plate/well_structure.rb +6 -6
- data/lib/sequencescape/plate_conversion.rb +3 -3
- data/lib/sequencescape/plate_creation.rb +3 -3
- data/lib/sequencescape/plate_purpose.rb +3 -3
- data/lib/sequencescape/plate_template.rb +0 -2
- data/lib/sequencescape/pooled_plate_creation.rb +3 -3
- data/lib/sequencescape/project.rb +2 -1
- data/lib/sequencescape/qc_decision.rb +0 -1
- data/lib/sequencescape/qc_file.rb +0 -3
- data/lib/sequencescape/qcable.rb +0 -3
- data/lib/sequencescape/qcable_creator.rb +0 -3
- data/lib/sequencescape/request.rb +3 -3
- data/lib/sequencescape/search.rb +10 -8
- data/lib/sequencescape/specific_tube_creation.rb +2 -2
- data/lib/sequencescape/stamp.rb +0 -1
- data/lib/sequencescape/state_change.rb +2 -2
- data/lib/sequencescape/study.rb +1 -1
- data/lib/sequencescape/submission.rb +1 -2
- data/lib/sequencescape/tag2_layout.rb +3 -3
- data/lib/sequencescape/tag2_layout_template.rb +2 -2
- data/lib/sequencescape/tag_group.rb +0 -1
- data/lib/sequencescape/tag_layout.rb +3 -3
- data/lib/sequencescape/tag_layout_template.rb +4 -4
- data/lib/sequencescape/transfer.rb +2 -2
- data/lib/sequencescape/transfer_request.rb +5 -6
- data/lib/sequencescape/transfer_template.rb +2 -2
- data/lib/sequencescape/tube.rb +3 -3
- data/lib/sequencescape/tube_creation.rb +3 -3
- data/lib/sequencescape/tube_from_tube_creation.rb +3 -3
- data/lib/sequencescape/tube_purpose.rb +3 -3
- data/lib/sequencescape/user.rb +2 -2
- data/lib/sequencescape/volume_update.rb +1 -1
- data/lib/sequencescape/well.rb +0 -2
- data/lib/sequencescape/work_completion.rb +1 -1
- data/sequencescape-api.gemspec +18 -17
- data/spec/sequencescape-api/associations_spec.rb +4 -2
- data/spec/sequencescape-api/finding_methods_spec.rb +3 -1
- data/spec/sequencescape-api/modifications_spec.rb +17 -16
- data/spec/sequencescape-api/root_spec.rb +11 -6
- data/spec/spec_helper.rb +3 -1
- data/spec/support/contract_helper.rb +18 -10
- data/spec/support/namespaces.rb +9 -9
- data/spec/support/shared_examples.rb +2 -0
- metadata +52 -33
- data/.rvmrc +0 -52
@@ -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, :
|
16
|
-
has_many :parents, :
|
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
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'sequencescape/asset'
|
2
2
|
|
3
3
|
class Sequencescape::PlateTemplate < ::Sequencescape::Asset
|
4
|
-
|
5
4
|
require 'sequencescape/plate/well_structure'
|
6
5
|
|
7
6
|
include Sequencescape::Plate::WellStructure
|
@@ -9,5 +8,4 @@ class Sequencescape::PlateTemplate < ::Sequencescape::Asset
|
|
9
8
|
has_many :wells
|
10
9
|
|
11
10
|
attribute_accessor :size, :name
|
12
|
-
|
13
11
|
end
|
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::PooledPlateCreation < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
has_many :parents, :
|
6
|
-
belongs_to :child_purpose, :
|
7
|
-
belongs_to :child, :
|
5
|
+
has_many :parents, class_name: 'Plate', disposition: :inline
|
6
|
+
belongs_to :child_purpose, class_name: 'PlatePurpose'
|
7
|
+
belongs_to :child, class_name: 'Plate'
|
8
8
|
end
|
@@ -5,7 +5,8 @@ class Sequencescape::Project < ::Sequencescape::Api::Resource
|
|
5
5
|
|
6
6
|
attribute_accessor :name
|
7
7
|
attribute_accessor :approved, :state
|
8
|
-
attribute_accessor :project_manager, :cost_code, :funding_comments, :external_funding_source, :budget_division
|
8
|
+
attribute_accessor :project_manager, :cost_code, :funding_comments, :external_funding_source, :budget_division
|
9
|
+
attribute_accessor :budget_cost_centre, :funding_model
|
9
10
|
attribute_accessor :collaborators
|
10
11
|
attribute_accessor :roles
|
11
12
|
end
|
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
1
|
require 'sequencescape-api/resource'
|
3
2
|
|
4
3
|
class Sequencescape::QcFile < ::Sequencescape::Api::Resource
|
5
|
-
|
6
4
|
belongs_to :asset
|
7
5
|
|
8
6
|
attribute_accessor :filename, :size
|
@@ -10,5 +8,4 @@ class Sequencescape::QcFile < ::Sequencescape::Api::Resource
|
|
10
8
|
def retrieve
|
11
9
|
api.retrieve(actions.read, Sequencescape::Api::ModifyingHandler.new(self), 'sequencescape/qc_file')
|
12
10
|
end
|
13
|
-
|
14
11
|
end
|
data/lib/sequencescape/qcable.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
|
2
1
|
require 'sequencescape-api/resource'
|
3
2
|
|
4
3
|
class Sequencescape::Qcable < ::Sequencescape::Api::Resource
|
5
|
-
|
6
4
|
belongs_to :lot
|
7
5
|
belongs_to :qcable_creator
|
8
6
|
belongs_to :asset
|
@@ -14,5 +12,4 @@ class Sequencescape::Qcable < ::Sequencescape::Api::Resource
|
|
14
12
|
attribute_accessor :ean13 # The EAN13 barcode number
|
15
13
|
attribute_accessor :machine # The barcode printed on the label
|
16
14
|
end
|
17
|
-
|
18
15
|
end
|
@@ -6,11 +6,11 @@ class Sequencescape::Request < ::Sequencescape::Api::Resource
|
|
6
6
|
belongs_to :sample
|
7
7
|
belongs_to :submission
|
8
8
|
|
9
|
-
belongs_to :source_asset, :
|
10
|
-
belongs_to :target_asset, :
|
9
|
+
belongs_to :source_asset, class_name: 'Asset'
|
10
|
+
belongs_to :target_asset, class_name: 'Asset'
|
11
11
|
|
12
12
|
attribute_accessor :type, :state
|
13
|
-
validates_inclusion_of :state, :
|
13
|
+
validates_inclusion_of :state, in: %w[pending started failed passed cancelled blocked hold]
|
14
14
|
|
15
15
|
attribute_accessor :read_length, :library_type, :fragment_size
|
16
16
|
end
|
data/lib/sequencescape/search.rb
CHANGED
@@ -4,7 +4,7 @@ class Sequencescape::Search < ::Sequencescape::Api::Resource
|
|
4
4
|
class BaseHandler
|
5
5
|
include Sequencescape::Api::BasicErrorHandling
|
6
6
|
|
7
|
-
def success(
|
7
|
+
def success(_attributes)
|
8
8
|
raise Sequencescape::Api::Error, 'A success response from a search is unexpected'
|
9
9
|
end
|
10
10
|
end
|
@@ -17,7 +17,7 @@ class Sequencescape::Search < ::Sequencescape::Api::Resource
|
|
17
17
|
@api = api
|
18
18
|
end
|
19
19
|
|
20
|
-
def redirection(json
|
20
|
+
def redirection(json)
|
21
21
|
json.delete('uuids_to_ids')
|
22
22
|
Sequencescape::Api::FinderMethods::FindByUuidHandler.new(@api.send(json.keys.first)).success(json)
|
23
23
|
end
|
@@ -28,6 +28,7 @@ class Sequencescape::Search < ::Sequencescape::Api::Resource
|
|
28
28
|
class MultipleResultPaged
|
29
29
|
include Enumerable
|
30
30
|
attr_reader :objects, :size
|
31
|
+
|
31
32
|
def initialize(objects, size)
|
32
33
|
@objects = objects
|
33
34
|
@size = size
|
@@ -39,18 +40,19 @@ class Sequencescape::Search < ::Sequencescape::Api::Resource
|
|
39
40
|
# The response from the server contains the JSON for each of the resources found. We simply
|
40
41
|
# need to be able to create the resources from each of these.
|
41
42
|
class MultipleResultHandler
|
42
|
-
def initialize(api,model)
|
43
|
-
@api
|
43
|
+
def initialize(api, model)
|
44
|
+
@api = api
|
45
|
+
@model = model
|
44
46
|
end
|
45
47
|
|
46
|
-
def redirection(json
|
48
|
+
def redirection(json)
|
47
49
|
items = json['searches'].map(&method(:new))
|
48
50
|
size = json['size']
|
49
51
|
MultipleResultPaged.new(items, size)
|
50
52
|
end
|
51
53
|
|
52
54
|
def new(json)
|
53
|
-
args = [
|
55
|
+
args = [json, false]
|
54
56
|
args.unshift(@api) unless @model.is_a_proxied_model?
|
55
57
|
@model.new(*args)
|
56
58
|
end
|
@@ -59,11 +61,11 @@ class Sequencescape::Search < ::Sequencescape::Api::Resource
|
|
59
61
|
|
60
62
|
def self.search_action(name)
|
61
63
|
line = __LINE__ + 1
|
62
|
-
class_eval(
|
64
|
+
class_eval("
|
63
65
|
def #{name}(criteria = {})
|
64
66
|
api.create(actions.#{name}, { 'search' => criteria }, SingleResultHandler.new(api))
|
65
67
|
end
|
66
|
-
|
68
|
+
", __FILE__, line)
|
67
69
|
end
|
68
70
|
|
69
71
|
attribute_reader :name
|
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::SpecificTubeCreation < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
belongs_to :parent, :
|
5
|
+
belongs_to :parent, class_name: 'Plate'
|
6
6
|
attribute_writer :child_purposes, :tube_attributes
|
7
|
-
has_many :children, :
|
7
|
+
has_many :children, class_name: 'Tube'
|
8
8
|
end
|
data/lib/sequencescape/stamp.rb
CHANGED
@@ -2,8 +2,8 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::StateChange < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
belongs_to :target, :
|
6
|
-
attribute_accessor :contents
|
5
|
+
belongs_to :target, class_name: 'Asset', disposition: :inline
|
6
|
+
attribute_accessor :contents # Array of "contents" to fail, deciphered by the target, can be nil
|
7
7
|
attribute_accessor :target_state
|
8
8
|
attribute_accessor :previous_state
|
9
9
|
attribute_accessor :reason
|
data/lib/sequencescape/study.rb
CHANGED
@@ -10,5 +10,5 @@ class Sequencescape::Study < ::Sequencescape::Api::Resource
|
|
10
10
|
attribute_accessor :contaminated_human_dna, :contains_human_dna
|
11
11
|
attribute_accessor :data_release_sort_of_study, :data_release_strategy
|
12
12
|
|
13
|
-
validates :name, :
|
13
|
+
validates :name, presence: true
|
14
14
|
end
|
@@ -8,9 +8,8 @@ class Sequencescape::Submission < ::Sequencescape::Api::Resource
|
|
8
8
|
# TODO: use a has many, but ensure it works
|
9
9
|
attribute_accessor :orders
|
10
10
|
|
11
|
-
has_update_action :submit!, :
|
11
|
+
has_update_action :submit!, action: 'submit', verb: :create, skip_json: true
|
12
12
|
|
13
13
|
attribute_reader :state
|
14
14
|
attribute_reader :asset_group_name
|
15
|
-
|
16
15
|
end
|
@@ -3,8 +3,8 @@ require 'sequencescape/tag'
|
|
3
3
|
|
4
4
|
class Sequencescape::Tag2Layout < ::Sequencescape::Api::Resource
|
5
5
|
belongs_to :user
|
6
|
-
belongs_to :plate, :
|
7
|
-
belongs_to :source, :
|
8
|
-
composed_of :tag, :
|
6
|
+
belongs_to :plate, class_name: 'Plate'
|
7
|
+
belongs_to :source, class_name: 'Asset'
|
8
|
+
composed_of :tag, class_name: 'Tag'
|
9
9
|
attribute_reader :target_well_locations
|
10
10
|
end
|
@@ -3,7 +3,7 @@ require 'sequencescape/tag'
|
|
3
3
|
|
4
4
|
class Sequencescape::Tag2LayoutTemplate < ::Sequencescape::Api::Resource
|
5
5
|
attribute_reader :name
|
6
|
-
composed_of :tag, :
|
6
|
+
composed_of :tag, class_name: 'Tag'
|
7
7
|
|
8
|
-
has_create_action :
|
8
|
+
has_create_action resource: 'tag2_layout'
|
9
9
|
end
|
@@ -3,9 +3,9 @@ require 'sequencescape/tag'
|
|
3
3
|
|
4
4
|
class Sequencescape::TagLayout < ::Sequencescape::Api::Resource
|
5
5
|
belongs_to :user
|
6
|
-
belongs_to :plate, :
|
7
|
-
composed_of :tag_group, :
|
8
|
-
composed_of :tag2_group, :
|
6
|
+
belongs_to :plate, class_name: 'Plate'
|
7
|
+
composed_of :tag_group, class_name: 'Tag::Group'
|
8
|
+
composed_of :tag2_group, class_name: 'Tag::Group'
|
9
9
|
|
10
10
|
attribute_accessor :substitutions, :direction, :walking_by, :initial_tag, :tags_per_well
|
11
11
|
end
|
@@ -3,11 +3,11 @@ require 'sequencescape/tag'
|
|
3
3
|
|
4
4
|
class Sequencescape::TagLayoutTemplate < ::Sequencescape::Api::Resource
|
5
5
|
attribute_reader :name, :direction, :walking_by
|
6
|
-
belongs_to :plate, :
|
7
|
-
composed_of :tag_group, :
|
8
|
-
composed_of :tag2_group, :
|
6
|
+
belongs_to :plate, class_name: 'Plate'
|
7
|
+
composed_of :tag_group, class_name: 'Tag::Group'
|
8
|
+
composed_of :tag2_group, class_name: 'Tag::Group'
|
9
9
|
|
10
|
-
has_create_action :
|
10
|
+
has_create_action resource: 'tag_layout'
|
11
11
|
|
12
12
|
def dual_index?
|
13
13
|
tag2_group.present?
|
@@ -2,8 +2,8 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::Transfer < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
belongs_to :source, :
|
6
|
-
belongs_to :destination, :
|
5
|
+
belongs_to :source, class_name: 'BarcodedAsset', disposition: :inline
|
6
|
+
belongs_to :destination, class_name: 'BarcodedAsset', disposition: :inline
|
7
7
|
attribute_reader :transfers
|
8
8
|
attribute_accessor :targets
|
9
9
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'sequencescape-api/resource'
|
2
2
|
|
3
3
|
class Sequencescape::TransferRequest < ::Sequencescape::Api::Resource
|
4
|
+
belongs_to :source_asset, class_name: 'Asset'
|
5
|
+
belongs_to :target_asset, class_name: 'Asset'
|
6
|
+
belongs_to :submission, class_name: 'Submission'
|
7
|
+
belongs_to :outer_request, class_name: 'Request'
|
4
8
|
|
5
|
-
|
6
|
-
belongs_to :target_asset, :class_name => 'Asset'
|
7
|
-
belongs_to :submission, :class_name => 'Submission'
|
8
|
-
belongs_to :outer_request, :class_name => 'Request'
|
9
|
-
|
10
|
-
attribute_accessor :type, :state, :submission_id, :volume
|
9
|
+
attribute_accessor :type, :state, :submission_id, :volume, :merge_equivalent_aliquots
|
11
10
|
end
|
@@ -4,6 +4,6 @@ class Sequencescape::TransferTemplate < ::Sequencescape::Api::Resource
|
|
4
4
|
attribute_reader :name
|
5
5
|
attribute_reader :transfers
|
6
6
|
|
7
|
-
has_create_action :
|
8
|
-
has_create_action :preview!, :
|
7
|
+
has_create_action resource: 'transfer'
|
8
|
+
has_create_action :preview!, action: :preview, resource: 'transfer'
|
9
9
|
end
|
data/lib/sequencescape/tube.rb
CHANGED
@@ -14,13 +14,13 @@ class Sequencescape::Tube < ::Sequencescape::Asset
|
|
14
14
|
|
15
15
|
attribute_accessor :closed
|
16
16
|
attribute_accessor :concentration, :volume
|
17
|
-
attribute_accessor :scanned_in_date, :
|
17
|
+
attribute_accessor :scanned_in_date, conversion: :to_time
|
18
18
|
|
19
19
|
attribute_reader :state
|
20
20
|
|
21
21
|
attribute_accessor :sibling_tubes
|
22
22
|
|
23
|
-
belongs_to :purpose, :
|
24
|
-
belongs_to :stock_plate, :
|
23
|
+
belongs_to :purpose, class_name: 'TubePurpose'
|
24
|
+
belongs_to :stock_plate, class_name: 'Plate'
|
25
25
|
belongs_to :custom_metadatum_collection
|
26
26
|
end
|
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::TubeCreation < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
belongs_to :parent, :
|
6
|
-
belongs_to :child_purpose, :
|
7
|
-
has_many :children, :
|
5
|
+
belongs_to :parent, class_name: 'Plate'
|
6
|
+
belongs_to :child_purpose, class_name: 'TubePurpose'
|
7
|
+
has_many :children, class_name: 'Tube'
|
8
8
|
end
|
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::TubeFromTubeCreation < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
belongs_to :parent, :
|
6
|
-
belongs_to :child_purpose, :
|
7
|
-
belongs_to :child, :
|
5
|
+
belongs_to :parent, class_name: 'Plate'
|
6
|
+
belongs_to :child_purpose, class_name: 'TubePurpose'
|
7
|
+
belongs_to :child, class_name: 'Tube'
|
8
8
|
end
|
@@ -4,7 +4,7 @@ class Sequencescape::TubePurpose < ::Sequencescape::Api::Resource
|
|
4
4
|
module TubeCreation
|
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::TubePurpose < ::Sequencescape::Api::Resource
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
has_many :children, :
|
16
|
-
has_many :parents, :
|
15
|
+
has_many :children, class_name: 'TubePurpose'
|
16
|
+
has_many :parents, class_name: 'TubePurpose'
|
17
17
|
|
18
18
|
has_many :tubes do
|
19
19
|
include Sequencescape::TubePurpose::TubeCreation
|
data/lib/sequencescape/user.rb
CHANGED
@@ -5,8 +5,8 @@ class Sequencescape::User < ::Sequencescape::Api::Resource
|
|
5
5
|
attribute_accessor :last_name
|
6
6
|
attribute_accessor :barcode
|
7
7
|
|
8
|
-
#TODO make swipecard_code readonly. Can't at the moment because of a bug
|
9
|
-
#attribute_writer :swipecard_code
|
8
|
+
# TODO: make swipecard_code readonly. Can't at the moment because of a bug
|
9
|
+
# attribute_writer :swipecard_code
|
10
10
|
attribute_accessor :swipecard_code
|
11
11
|
|
12
12
|
attribute_reader :has_a_swipecard_code
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'sequencescape-api/resource'
|
2
2
|
|
3
3
|
class Sequencescape::VolumeUpdate < ::Sequencescape::Api::Resource
|
4
|
-
belongs_to :target, :
|
4
|
+
belongs_to :target, class_name: 'Asset', disposition: :inline
|
5
5
|
attribute_accessor :volume_change, :created_by
|
6
6
|
end
|
data/lib/sequencescape/well.rb
CHANGED
@@ -3,7 +3,6 @@ require 'sequencescape/behaviour/receptacle'
|
|
3
3
|
require 'sequencescape/behaviour/state_driven'
|
4
4
|
|
5
5
|
class Sequencescape::Well < ::Sequencescape::Asset
|
6
|
-
|
7
6
|
include Sequencescape::Behaviour::Receptacle
|
8
7
|
include Sequencescape::Behaviour::StateDriven
|
9
8
|
|
@@ -15,5 +14,4 @@ class Sequencescape::Well < ::Sequencescape::Asset
|
|
15
14
|
def pool_id
|
16
15
|
pool.nil? ? nil : pool['id']
|
17
16
|
end
|
18
|
-
|
19
17
|
end
|
@@ -2,7 +2,7 @@ require 'sequencescape-api/resource'
|
|
2
2
|
|
3
3
|
class Sequencescape::WorkCompletion < ::Sequencescape::Api::Resource
|
4
4
|
belongs_to :user
|
5
|
-
belongs_to :target, :
|
5
|
+
belongs_to :target, class_name: 'Asset'
|
6
6
|
|
7
7
|
# This should really be a has_many, but we'll need
|
8
8
|
# to get assignment from arrays of strings working first.
|