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
@@ -1,32 +1,33 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "sequencescape-api/version"
1
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
2
+ require 'sequencescape-api/version'
4
3
 
5
4
  Gem::Specification.new do |s|
6
- s.name = "sequencescape-client-api"
5
+ s.name = 'sequencescape-client-api'
7
6
  s.version = Sequencescape::Api::VERSION
8
7
  s.platform = Gem::Platform::RUBY
9
- s.authors = ["Matthew Denner","James Glover","Eduardo Martin Rojo"]
10
- s.email = ["md12@sanger.ac.uk","james.glover@sanger.ac.uk","emr@sanger.ac.uk"]
11
- s.homepage = ""
12
- s.summary = %q{Gem for the client side of the Sequencescape API}
13
- s.description = %q{Provides all of the necessary code for interacting with the Sequencescape API}
8
+ s.authors = ['Matthew Denner', 'James Glover', 'Eduardo Martin Rojo']
9
+ s.email = ['md12@sanger.ac.uk', 'james.glover@sanger.ac.uk', 'emr@sanger.ac.uk']
10
+ s.homepage = ''
11
+ s.summary = 'Gem for the client side of the Sequencescape API'
12
+ s.description = 'Provides all of the necessary code for interacting with the Sequencescape API'
14
13
 
15
- s.rubyforge_project = "sequencescape-client-api"
14
+ s.rubyforge_project = 'sequencescape-client-api'
16
15
 
17
16
  s.files = `git ls-files`.split("\n")
18
17
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
- s.require_paths = ["lib"]
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
+ s.require_paths = ['lib']
21
20
 
22
- s.add_dependency('activesupport', '>= 4.0.0', '< 5.2')
23
- s.add_dependency('activemodel', '>= 4.0.0', '< 5.2')
21
+ s.add_dependency('activemodel', '>= 5.0.0')
22
+ s.add_dependency('activesupport', '>= 5.0.0')
24
23
  s.add_dependency('i18n')
25
- s.add_dependency('yajl-ruby', '>= 1.3.1')
24
+ s.add_dependency('yajl-ruby', '>= 1.4.1')
26
25
 
27
- s.add_development_dependency('rspec', '~> 2.11.0')
28
26
  s.add_development_dependency('pry')
27
+ s.add_development_dependency('rake')
28
+ s.add_development_dependency('redcarpet')
29
+ s.add_development_dependency('rspec', '~> 2.11.0')
30
+ s.add_development_dependency('rubocop', '~> 0.84.0')
29
31
  s.add_development_dependency('webmock')
30
32
  s.add_development_dependency('yard')
31
- s.add_development_dependency('redcarpet')
32
33
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'Various associations' do
@@ -51,7 +53,7 @@ describe 'Various associations' do
51
53
  stub_request_from('retrieve-model') { response('model-a-instance') }
52
54
  stub_request_from('create-via-has-many') { response('model-b-instance') }
53
55
 
54
- subject { api.model_a.find('UUID').model_bs.create!() }
56
+ subject { api.model_a.find('UUID').model_bs.create! }
55
57
 
56
58
  its(:class) { should == Unauthorised::ModelB }
57
59
  end
@@ -62,7 +64,7 @@ describe 'Various associations' do
62
64
 
63
65
  let(:resource) { api.model_b.find('UUID') }
64
66
 
65
- [ :model_a, :model_by_simple_name, :model_by_full_name ].each do |association_name|
67
+ %i[model_a model_by_simple_name model_by_full_name].each do |association_name|
66
68
  context "expressed as #{association_name.inspect}" do
67
69
  stub_request_and_response('belongs-to-association')
68
70
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'Finding a resource instance' do
@@ -9,7 +11,7 @@ describe 'Finding a resource instance' do
9
11
  stub_request_from('retrieve-model') { response('resource-not-found') }
10
12
 
11
13
  it 'raises an exception' do
12
- lambda { subject }.should raise_error(Sequencescape::Api::ResourceNotFound)
14
+ -> { subject }.should raise_error(Sequencescape::Api::ResourceNotFound)
13
15
  end
14
16
  end
15
17
 
@@ -1,18 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  shared_examples_for 'errors on both client and server' do |action, request_contract|
4
6
  context 'may be invalid on the client side' do
5
7
  it 'raises an error' do
6
8
  lambda do
7
- target.__send__(action, :attribute_validated_at_client => 'please error')
9
+ target.__send__(action, attribute_validated_at_client: 'please error')
8
10
  end.should raise_error(Sequencescape::Api::ResourceInvalid)
9
11
  end
10
12
 
11
13
  it 'includes the error on the field' do
12
14
  begin
13
- target.__send__(action, :attribute_validated_at_client => 'please error')
14
- rescue Sequencescape::Api::ResourceInvalid => exception
15
- exception.resource.errors[:attribute_validated_at_client].should == [ 'cannot be set' ]
15
+ target.__send__(action, attribute_validated_at_client: 'please error')
16
+ rescue Sequencescape::Api::ResourceInvalid => e
17
+ e.resource.errors[:attribute_validated_at_client].should == ['cannot be set']
16
18
  end
17
19
  end
18
20
  end
@@ -22,15 +24,15 @@ shared_examples_for 'errors on both client and server' do |action, request_contr
22
24
 
23
25
  it 'raises an error' do
24
26
  lambda do
25
- target.__send__(action, :attribute_validated_at_server => 'please error')
27
+ target.__send__(action, attribute_validated_at_server: 'please error')
26
28
  end.should raise_error(Sequencescape::Api::ResourceInvalid)
27
29
  end
28
30
 
29
31
  it 'includes the error on the field' do
30
32
  begin
31
- target.__send__(action, :attribute_validated_at_server => 'please error')
32
- rescue Sequencescape::Api::ResourceInvalid => exception
33
- exception.resource.errors[:attribute_validated_at_server].should == [ 'cannot be set' ]
33
+ target.__send__(action, attribute_validated_at_server: 'please error')
34
+ rescue Sequencescape::Api::ResourceInvalid => e
35
+ e.resource.errors[:attribute_validated_at_server].should == ['cannot be set']
34
36
  end
35
37
  end
36
38
  end
@@ -49,7 +51,7 @@ describe 'Creating a resource' do
49
51
  stub_request_from('create-model-c') { response('model-c-instance-created') }
50
52
 
51
53
  subject do
52
- target.create!(:changes_during_update => 'sent from client', :remains_same_during_update => 'from JSON')
54
+ target.create!(changes_during_update: 'sent from client', remains_same_during_update: 'from JSON')
53
55
  end
54
56
 
55
57
  its(:changes_during_update) { should == 'set during create' }
@@ -65,7 +67,7 @@ describe 'Creating a resource' do
65
67
 
66
68
  it 'takes an array of objects and converts them to UUID'
67
69
  it 'assumes an array of strings are UUIDs' do
68
- target.create!(:model_bs => ['model-b-uuids'])
70
+ target.create!(model_bs: ['model-b-uuids'])
69
71
  end
70
72
  it 'raises if not given an enumerable'
71
73
  end
@@ -75,7 +77,7 @@ describe 'Creating a resource' do
75
77
 
76
78
  it 'takes an array of objects and converts them to UUID'
77
79
  it 'assumes an array of strings are UUIDs' do
78
- target.create!(:model_bs => [{ "test_attribute" => "test_value" }])
80
+ target.create!(model_bs: [{ 'test_attribute' => 'test_value' }])
79
81
  end
80
82
  it 'raises if not given an enumerable'
81
83
  end
@@ -85,7 +87,7 @@ describe 'Creating a resource' do
85
87
 
86
88
  it 'takes an array of objects and converts them to UUID'
87
89
  it 'assumes an array of strings are UUIDs' do
88
- target.create!(:model_as => ['model-a-uuids'])
90
+ target.create!(model_as: ['model-a-uuids'])
89
91
  end
90
92
  it 'raises if not given an enumerable'
91
93
  end
@@ -120,9 +122,9 @@ describe 'Updating a resource' do
120
122
 
121
123
  before(:each) do
122
124
  subject.update_attributes!(
123
- :changes_during_update => 'sent from client',
124
- :remains_same_during_update => 'from JSON',
125
- :write_only => 'has been set'
125
+ changes_during_update: 'sent from client',
126
+ remains_same_during_update: 'from JSON',
127
+ write_only: 'has been set'
126
128
  )
127
129
  end
128
130
 
@@ -166,4 +168,3 @@ describe 'Updating a resource through an association' do
166
168
  it 'handles individual attribute changes'
167
169
  end
168
170
  end
169
-
@@ -1,12 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe 'Handling authentication issues' do
4
6
  stub_request_from('retrieve-root-with-an-unauthorised-client') { response('client-fails-authentication') }
5
7
 
6
- subject { Sequencescape::Api.new(:url => 'http://localhost:3000/', :cookie => 'single-sign-on-cookie') }
8
+ subject { Sequencescape::Api.new(url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie') }
7
9
 
8
10
  it 'raises an exception' do
9
- lambda { subject }.should raise_error(Sequencescape::Api::UnauthenticatedError)
11
+ -> { subject }.should raise_error(Sequencescape::Api::UnauthenticatedError)
10
12
  end
11
13
  end
12
14
 
@@ -15,7 +17,7 @@ describe 'Retrieving the root URL' do
15
17
  is_working_as_an_unauthorised_client
16
18
 
17
19
  context 'with no namespace' do
18
- subject { Sequencescape::Api.new(:url => 'http://localhost:3000/', :cookie => 'single-sign-on-cookie') }
20
+ subject { Sequencescape::Api.new(url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie') }
19
21
 
20
22
  Unauthorised::MODELS_THROUGH_API.each do |model|
21
23
  it "provides the #{model} through the API instance" do
@@ -24,12 +26,15 @@ describe 'Retrieving the root URL' do
24
26
 
25
27
  it "errors because Sequencescape::#{model.to_s.classify} is not defined" do
26
28
  # Note: Using a regex as > Ruby 2.3 'DidYouMean' changes the error message slightly.
27
- lambda { subject.send(model.to_sym) }.should raise_error(NameError, /uninitialized constant Sequencescape::#{model.to_s.classify}/)
29
+ lambda {
30
+ subject.send(model.to_sym)
31
+ }.should raise_error(NameError,
32
+ /uninitialized constant Sequencescape::#{model.to_s.classify}/)
28
33
  end
29
34
  end
30
35
  end
31
36
 
32
- context "with a specified namespace" do
37
+ context 'with a specified namespace' do
33
38
  Unauthorised::MODELS_THROUGH_API.each do |model|
34
39
  context do
35
40
  stub_request_and_response("unauthorised-#{model.to_s.dasherize}-list")
@@ -49,7 +54,7 @@ describe 'Retrieving the root URL' do
49
54
 
50
55
  subject { api }
51
56
 
52
- [ :model_c, :model_d ].each do |model|
57
+ %i[model_c model_d].each do |model|
53
58
  it "provides the #{model} through the API instance" do
54
59
  subject.should respond_to(model.to_sym)
55
60
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sequencescape-api'
2
4
  require 'sequencescape'
3
5
 
4
6
  # Make sure our support files can be loaded when required
5
- $:.push(File.expand_path(File.join(File.dirname(__FILE__), 'support')))
7
+ $LOAD_PATH.push(File.expand_path(File.join(File.dirname(__FILE__), 'support')))
6
8
  require 'contract_helper'
7
9
  require 'namespaces'
8
10
  require 'shared_examples'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Fake the web connections so we don't trash anything
2
4
  require 'webmock/rspec'
3
5
 
@@ -21,13 +23,16 @@ module ContractHelper
21
23
  \g<verb>\s+\g<path>\s+HTTP/1.1\g<eol>
22
24
  \g<headers>\g<eol>
23
25
  (\g<eol>\g<body>?)?
24
- }mx
26
+ }mx.freeze
25
27
 
26
28
  def request(contract_name)
27
29
  contract(contract_name) do |file|
28
- match = REQUEST_REGEXP.match(file.read) or raise StandardError, "Invalidly formatted request in #{contract_name.inspect}"
30
+ match = REQUEST_REGEXP.match(file.read)
31
+
32
+ raise StandardError, "Invalidly formatted request in #{contract_name.inspect}" if match.nil?
29
33
 
30
- @http_verb, @url = match[:verb].downcase.to_sym, "http://localhost:3000#{match[:path]}"
34
+ @http_verb = match[:verb].downcase.to_sym
35
+ @url = "http://localhost:3000#{match[:path]}"
31
36
  @conditions = {}
32
37
  @conditions[:headers] = Hash[*match[:headers].split(/\r?\n/).map { |l| l.split(':') }.flatten.map(&:strip)]
33
38
  @conditions[:body] = Yajl::Encoder.encode(Yajl::Parser.parse(match[:body])) unless match[:body].blank?
@@ -40,11 +45,12 @@ module ContractHelper
40
45
  end
41
46
  end
42
47
 
43
- def contract(contract_name, &block)
48
+ def contract(contract_name)
44
49
  path = @root.dup
45
50
  until path.empty?
46
51
  filename = File.join(path, 'contracts', "#{contract_name}.txt")
47
52
  return File.open(filename, 'r') { |file| yield(file) } if File.file?(filename)
53
+
48
54
  path.pop
49
55
  end
50
56
  raise StandardError, "Cannot find contract #{filename.inspect} anywhere within #{@root.inspect}"
@@ -74,7 +80,7 @@ module ContractHelper
74
80
 
75
81
  module ClassMethods
76
82
  def stub_request_from(request_filename, &block)
77
- stubbed_request = StubRequestBuilder.new(File.join(File.dirname(__FILE__), %w{.. sequencescape-api contracts}))
83
+ stubbed_request = StubRequestBuilder.new(File.join(File.dirname(__FILE__), %w[.. sequencescape-api contracts]))
78
84
  stubbed_request.request(request_filename)
79
85
  stubbed_request.instance_eval(&block)
80
86
  stubbed_request.inject_into(self)
@@ -85,11 +91,13 @@ module ContractHelper
85
91
  end
86
92
 
87
93
  def is_working_as_an_unauthorised_client
88
- stub_request_from('retrieve-root-with-an-unauthorised-client') { response('root-response-for-unauthorised-client') }
94
+ stub_request_from('retrieve-root-with-an-unauthorised-client') do
95
+ response('root-response-for-unauthorised-client')
96
+ end
89
97
  let(:api) do
90
98
  Sequencescape::Api.new(
91
- :url => 'http://localhost:3000/', :cookie => 'single-sign-on-cookie',
92
- :namespace => Unauthorised
99
+ url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie',
100
+ namespace: Unauthorised
93
101
  )
94
102
  end
95
103
  end
@@ -99,8 +107,8 @@ module ContractHelper
99
107
 
100
108
  let(:api) do
101
109
  Sequencescape::Api.new(
102
- :url => 'http://localhost:3000/', :cookie => 'single-sign-on-cookie',
103
- :authorisation => 'authorised!', :namespace => Authenticated
110
+ url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie',
111
+ authorisation: 'authorised!', namespace: Authenticated
104
112
  )
105
113
  end
106
114
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Unauthorised
2
- MODELS_THROUGH_API = [ :model_a, :model_b, :model_c ]
4
+ MODELS_THROUGH_API = %i[model_a model_b model_c].freeze
3
5
 
4
6
  class ModelA < Sequencescape::Api::Resource
5
7
  module LotCreator
6
- def create!(attributes=nil)
8
+ def create!(attributes = nil)
7
9
  attributes ||= {}
8
10
  new({}, false).tap do |lot|
9
11
  api.create(actions.create, { 'model_b' => attributes }, Sequencescape::Api::ModifyingHandler.new(lot))
@@ -24,14 +26,14 @@ module Unauthorised
24
26
 
25
27
  class ModelB < Sequencescape::Api::Resource
26
28
  belongs_to :model_a
27
- belongs_to :model_by_simple_name, :class_name => 'ModelA'
28
- belongs_to :model_by_full_name, :class_name => 'Nested::Model'
29
- belongs_to :model_with_early_data, :class_name => 'ModelA'
29
+ belongs_to :model_by_simple_name, class_name: 'ModelA'
30
+ belongs_to :model_by_full_name, class_name: 'Nested::Model'
31
+ belongs_to :model_with_early_data, class_name: 'ModelA'
30
32
  attribute_accessor :test_attribute
31
33
  end
32
34
 
33
35
  class ModelC < Sequencescape::Api::Resource
34
- has_many :model_bs, :disposition => :inline
36
+ has_many :model_bs, disposition: :inline
35
37
  has_many :model_as
36
38
 
37
39
  attribute_accessor :attribute_validated_at_client, :attribute_validated_at_server
@@ -56,12 +58,10 @@ module Unauthorised
56
58
  end
57
59
 
58
60
  module Authenticated
59
- MODELS_THROUGH_API = [ :model_c, :model_d ]
61
+ MODELS_THROUGH_API = %i[model_c model_d].freeze
60
62
 
61
63
  class ModelC < Sequencescape::Api::Resource
62
-
63
64
  end
64
65
  class ModelD < Sequencescape::Api::Resource
65
-
66
66
  end
67
67
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  shared_examples_for 'a paged result' do
2
4
  it 'physically contains 3 items' do
3
5
  subject.map(&:inspect).size.should == 3
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequencescape-client-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.4.0.pre.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Denner
@@ -10,48 +10,36 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-02-19 00:00:00.000000000 Z
13
+ date: 2020-05-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: activesupport
16
+ name: activemodel
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 4.0.0
22
- - - "<"
23
- - !ruby/object:Gem::Version
24
- version: '5.2'
21
+ version: 5.0.0
25
22
  type: :runtime
26
23
  prerelease: false
27
24
  version_requirements: !ruby/object:Gem::Requirement
28
25
  requirements:
29
26
  - - ">="
30
27
  - !ruby/object:Gem::Version
31
- version: 4.0.0
32
- - - "<"
33
- - !ruby/object:Gem::Version
34
- version: '5.2'
28
+ version: 5.0.0
35
29
  - !ruby/object:Gem::Dependency
36
- name: activemodel
30
+ name: activesupport
37
31
  requirement: !ruby/object:Gem::Requirement
38
32
  requirements:
39
33
  - - ">="
40
34
  - !ruby/object:Gem::Version
41
- version: 4.0.0
42
- - - "<"
43
- - !ruby/object:Gem::Version
44
- version: '5.2'
35
+ version: 5.0.0
45
36
  type: :runtime
46
37
  prerelease: false
47
38
  version_requirements: !ruby/object:Gem::Requirement
48
39
  requirements:
49
40
  - - ">="
50
41
  - !ruby/object:Gem::Version
51
- version: 4.0.0
52
- - - "<"
53
- - !ruby/object:Gem::Version
54
- version: '5.2'
42
+ version: 5.0.0
55
43
  - !ruby/object:Gem::Dependency
56
44
  name: i18n
57
45
  requirement: !ruby/object:Gem::Requirement
@@ -72,30 +60,30 @@ dependencies:
72
60
  requirements:
73
61
  - - ">="
74
62
  - !ruby/object:Gem::Version
75
- version: 1.3.1
63
+ version: 1.4.1
76
64
  type: :runtime
77
65
  prerelease: false
78
66
  version_requirements: !ruby/object:Gem::Requirement
79
67
  requirements:
80
68
  - - ">="
81
69
  - !ruby/object:Gem::Version
82
- version: 1.3.1
70
+ version: 1.4.1
83
71
  - !ruby/object:Gem::Dependency
84
- name: rspec
72
+ name: pry
85
73
  requirement: !ruby/object:Gem::Requirement
86
74
  requirements:
87
- - - "~>"
75
+ - - ">="
88
76
  - !ruby/object:Gem::Version
89
- version: 2.11.0
77
+ version: '0'
90
78
  type: :development
91
79
  prerelease: false
92
80
  version_requirements: !ruby/object:Gem::Requirement
93
81
  requirements:
94
- - - "~>"
82
+ - - ">="
95
83
  - !ruby/object:Gem::Version
96
- version: 2.11.0
84
+ version: '0'
97
85
  - !ruby/object:Gem::Dependency
98
- name: pry
86
+ name: rake
99
87
  requirement: !ruby/object:Gem::Requirement
100
88
  requirements:
101
89
  - - ">="
@@ -109,7 +97,7 @@ dependencies:
109
97
  - !ruby/object:Gem::Version
110
98
  version: '0'
111
99
  - !ruby/object:Gem::Dependency
112
- name: webmock
100
+ name: redcarpet
113
101
  requirement: !ruby/object:Gem::Requirement
114
102
  requirements:
115
103
  - - ">="
@@ -123,7 +111,35 @@ dependencies:
123
111
  - !ruby/object:Gem::Version
124
112
  version: '0'
125
113
  - !ruby/object:Gem::Dependency
126
- name: yard
114
+ name: rspec
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: 2.11.0
120
+ type: :development
121
+ prerelease: false
122
+ version_requirements: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - "~>"
125
+ - !ruby/object:Gem::Version
126
+ version: 2.11.0
127
+ - !ruby/object:Gem::Dependency
128
+ name: rubocop
129
+ requirement: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - "~>"
132
+ - !ruby/object:Gem::Version
133
+ version: 0.84.0
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - "~>"
139
+ - !ruby/object:Gem::Version
140
+ version: 0.84.0
141
+ - !ruby/object:Gem::Dependency
142
+ name: webmock
127
143
  requirement: !ruby/object:Gem::Requirement
128
144
  requirements:
129
145
  - - ">="
@@ -137,7 +153,7 @@ dependencies:
137
153
  - !ruby/object:Gem::Version
138
154
  version: '0'
139
155
  - !ruby/object:Gem::Dependency
140
- name: redcarpet
156
+ name: yard
141
157
  requirement: !ruby/object:Gem::Requirement
142
158
  requirements:
143
159
  - - ">="
@@ -162,7 +178,9 @@ extra_rdoc_files: []
162
178
  files:
163
179
  - ".gitignore"
164
180
  - ".rspec"
165
- - ".rvmrc"
181
+ - ".rubocop.yml"
182
+ - ".rubocop_todo.yml"
183
+ - ".ruby-version"
166
184
  - ".yardoc/checksums"
167
185
  - ".yardoc/complete"
168
186
  - ".yardoc/object_types"
@@ -374,6 +392,7 @@ files:
374
392
  - lib/sequencescape/bulk_transfer.rb
375
393
  - lib/sequencescape/comment.rb
376
394
  - lib/sequencescape/custom_metadatum_collection.rb
395
+ - lib/sequencescape/extraction_attribute.rb
377
396
  - lib/sequencescape/lane.rb
378
397
  - lib/sequencescape/library_event.rb
379
398
  - lib/sequencescape/library_tube.rb
@@ -485,12 +504,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
485
504
  version: '0'
486
505
  required_rubygems_version: !ruby/object:Gem::Requirement
487
506
  requirements:
488
- - - ">="
507
+ - - ">"
489
508
  - !ruby/object:Gem::Version
490
- version: '0'
509
+ version: 1.3.1
491
510
  requirements: []
492
- rubyforge_project: sequencescape-client-api
493
- rubygems_version: 2.6.14
511
+ rubygems_version: 3.0.8
494
512
  signing_key:
495
513
  specification_version: 4
496
514
  summary: Gem for the client side of the Sequencescape API