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.
- 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 +1 -2
- 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 +1 -1
- 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 +19 -15
- 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 +4 -5
- 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 +53 -35
- data/.rvmrc +0 -52
|
@@ -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
|
-
[
|
|
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
|
-
|
|
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, :
|
|
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, :
|
|
14
|
-
rescue Sequencescape::Api::ResourceInvalid =>
|
|
15
|
-
|
|
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, :
|
|
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, :
|
|
32
|
-
rescue Sequencescape::Api::ResourceInvalid =>
|
|
33
|
-
|
|
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!(:
|
|
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!(:
|
|
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!(:
|
|
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!(:
|
|
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
|
-
:
|
|
124
|
-
:
|
|
125
|
-
:
|
|
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(:
|
|
8
|
+
subject { Sequencescape::Api.new(url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie') }
|
|
7
9
|
|
|
8
10
|
it 'raises an exception' do
|
|
9
|
-
|
|
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(:
|
|
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 {
|
|
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
|
|
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
|
-
[
|
|
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
|
data/spec/spec_helper.rb
CHANGED
|
@@ -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
|
-
|
|
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)
|
|
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
|
|
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
|
|
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
|
|
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')
|
|
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
|
-
:
|
|
92
|
-
:
|
|
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
|
-
:
|
|
103
|
-
:
|
|
110
|
+
url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie',
|
|
111
|
+
authorisation: 'authorised!', namespace: Authenticated
|
|
104
112
|
)
|
|
105
113
|
end
|
|
106
114
|
end
|
data/spec/support/namespaces.rb
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module Unauthorised
|
|
2
|
-
MODELS_THROUGH_API = [
|
|
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, :
|
|
28
|
-
belongs_to :model_by_full_name, :
|
|
29
|
-
belongs_to :model_with_early_data, :
|
|
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, :
|
|
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 = [
|
|
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
|
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.
|
|
4
|
+
version: 0.4.0.pre.rc1
|
|
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: 2020-
|
|
13
|
+
date: 2020-05-28 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
|
-
name:
|
|
16
|
+
name: activemodel
|
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
|
18
18
|
requirements:
|
|
19
19
|
- - ">="
|
|
20
20
|
- !ruby/object:Gem::Version
|
|
21
|
-
version:
|
|
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:
|
|
32
|
-
- - "<"
|
|
33
|
-
- !ruby/object:Gem::Version
|
|
34
|
-
version: '5.2'
|
|
28
|
+
version: 5.0.0
|
|
35
29
|
- !ruby/object:Gem::Dependency
|
|
36
|
-
name:
|
|
30
|
+
name: activesupport
|
|
37
31
|
requirement: !ruby/object:Gem::Requirement
|
|
38
32
|
requirements:
|
|
39
33
|
- - ">="
|
|
40
34
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
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:
|
|
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.
|
|
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.
|
|
70
|
+
version: 1.4.1
|
|
83
71
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
72
|
+
name: pry
|
|
85
73
|
requirement: !ruby/object:Gem::Requirement
|
|
86
74
|
requirements:
|
|
87
|
-
- - "
|
|
75
|
+
- - ">="
|
|
88
76
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
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:
|
|
84
|
+
version: '0'
|
|
97
85
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
- ".
|
|
181
|
+
- ".rubocop.yml"
|
|
182
|
+
- ".rubocop_todo.yml"
|
|
183
|
+
- ".ruby-version"
|
|
166
184
|
- ".yardoc/checksums"
|
|
167
185
|
- ".yardoc/complete"
|
|
168
186
|
- ".yardoc/object_types"
|
|
@@ -486,11 +504,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
486
504
|
version: '0'
|
|
487
505
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
488
506
|
requirements:
|
|
489
|
-
- - "
|
|
507
|
+
- - ">"
|
|
490
508
|
- !ruby/object:Gem::Version
|
|
491
|
-
version:
|
|
509
|
+
version: 1.3.1
|
|
492
510
|
requirements: []
|
|
493
|
-
rubygems_version: 3.0.
|
|
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
|