sequencescape-client-api 0.4.3 → 0.6.0.pre.rc2

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 (35) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +39 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +16 -10
  5. data/.rubocop_todo.yml +58 -18
  6. data/README.markdown +11 -7
  7. data/lib/sequencescape-api.rb +1 -0
  8. data/lib/sequencescape-api/connection_factory.rb +5 -5
  9. data/lib/sequencescape-api/connection_factory/actions.rb +6 -6
  10. data/lib/sequencescape-api/finder_methods.rb +1 -3
  11. data/lib/sequencescape-api/rails.rb +5 -9
  12. data/lib/sequencescape-api/version.rb +1 -1
  13. data/lib/sequencescape/order.rb +2 -1
  14. data/sequencescape-api.gemspec +14 -2
  15. data/spec/sequencescape-api/contracts/create-invalid-resource.txt +1 -1
  16. data/spec/sequencescape-api/contracts/create-model-c-has-many-inline-nested.txt +1 -1
  17. data/spec/sequencescape-api/contracts/create-model-c-has-many-inline.txt +1 -1
  18. data/spec/sequencescape-api/contracts/create-model-c-has-many.txt +1 -1
  19. data/spec/sequencescape-api/contracts/create-model-c.txt +1 -1
  20. data/spec/sequencescape-api/contracts/create-via-has-many.txt +1 -1
  21. data/spec/sequencescape-api/contracts/retrieve-belongs-to-association.txt +1 -1
  22. data/spec/sequencescape-api/contracts/retrieve-model.txt +1 -2
  23. data/spec/sequencescape-api/contracts/retrieve-results-page-1.txt +1 -1
  24. data/spec/sequencescape-api/contracts/retrieve-results-page-2.txt +1 -1
  25. data/spec/sequencescape-api/contracts/retrieve-results-page-3.txt +1 -1
  26. data/spec/sequencescape-api/contracts/retrieve-root-with-an-authorised-client.txt +1 -2
  27. data/spec/sequencescape-api/contracts/retrieve-root-with-an-unauthorised-client.txt +1 -2
  28. data/spec/sequencescape-api/contracts/retrieve-unauthorised-model-a-list.txt +1 -2
  29. data/spec/sequencescape-api/contracts/retrieve-unauthorised-model-b-list.txt +1 -2
  30. data/spec/sequencescape-api/contracts/retrieve-unauthorised-model-c-list.txt +1 -2
  31. data/spec/sequencescape-api/contracts/update-invalid-resource.txt +1 -1
  32. data/spec/sequencescape-api/contracts/update-model-c.txt +1 -1
  33. data/spec/sequencescape-api/root_spec.rb +3 -3
  34. data/spec/support/contract_helper.rb +3 -3
  35. metadata +36 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6165cb0ac7fff92a450a030a961c5249f0b647429d1f81af91917117e76081f4
4
- data.tar.gz: 9504bdafbdc9def4a588d57e92de0bebe8acdbe3b163dfc9246cd0db455bc09b
3
+ metadata.gz: 4635af26773e382752071323b624a7f0bd79bad156274c6d211e861220a28f20
4
+ data.tar.gz: ce8b85bd9a143ac7c5668ecf77eddc167913359f9cae919ed22903338e9cf14d
5
5
  SHA512:
6
- metadata.gz: 7138f22aeaa97717e093ecfa1f664c2ae9ff5c507bb4527a870af507007fb4f2bb6ee16f0ff9a8376448564e3c31eeca1aa91bad66b45e96aae8935e769b0511
7
- data.tar.gz: 55f1f93cf063802dca85aa34c885837ebaf1d86ad39498047a84373f9198c98f9fc3d62d35447f6106e893a93ab5bacef95b789e39fa259d9fb4047b3679755d
6
+ metadata.gz: d41aaee47f0fc6f5b79d869ef518cee9165aa271bff3f935328819b27aec1c408c0300e955ba7939fa9b5a3a4c78ebfa25067a10ac06a7f6cbc33e7d4c10b5cd
7
+ data.tar.gz: 47170dbc8bead91f517e88d0dad9f7888245b5f897cac319c569fe74277c298fa60007ba6af7aa36b8e80d8d8db0fbdada4589094111980d9eeae18c000345d4
@@ -0,0 +1,39 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ - push
5
+ - pull_request
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ matrix:
12
+ ruby: ["2.5", "2.6", "2.7", "3.0"]
13
+ name: Ruby Test ${{ matrix.ruby }}
14
+
15
+ steps:
16
+ - uses: actions/checkout@v2
17
+ - name: Set up Ruby
18
+ uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ bundler-cache:
22
+ true # Runs bundle install and caches gems. See the ruby_test.yml
23
+ # example if you need more control over bundler.
24
+ - name: Run tests
25
+ run: bundle exec rspec
26
+ lint:
27
+ runs-on: ubuntu-latest
28
+
29
+ steps:
30
+ - uses: actions/checkout@v2
31
+ - name: Set up Ruby
32
+ uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: 3.0
35
+ bundler-cache:
36
+ true # Runs bundle install and caches gems. See the ruby_test.yml
37
+ # example if you need more control over bundler.
38
+ - name: Run lint
39
+ run: bundle exec rubocop
data/.gitignore CHANGED
@@ -5,3 +5,4 @@ pkg/*
5
5
  tags
6
6
  .DS_Store
7
7
  lib/.DS_Store
8
+ .talismanrc
data/.rubocop.yml CHANGED
@@ -22,23 +22,29 @@ Naming/FileName:
22
22
  - 'lib/sequencescape-api.rb'
23
23
 
24
24
  # Pending Cops
25
- Layout/EmptyLinesAroundAttributeAccessor:
25
+ Lint/DuplicateBranch: # (new in 1.3)
26
26
  Enabled: true
27
- Layout/SpaceAroundMethodCallOperator:
27
+ Lint/DuplicateRegexpCharacterClassElement: # (new in 1.1)
28
28
  Enabled: true
29
- Lint/DeprecatedOpenSSLConstant:
29
+ Lint/EmptyBlock: # (new in 1.1)
30
30
  Enabled: true
31
- Lint/RaiseException:
31
+ Lint/EmptyClass: # (new in 1.3)
32
32
  Enabled: true
33
- Lint/StructNewOverride:
33
+ Lint/NoReturnInBeginEndBlocks: # (new in 1.2)
34
34
  Enabled: true
35
- Style/ExponentialNotation:
35
+ Lint/ToEnumArguments: # (new in 1.1)
36
36
  Enabled: true
37
- Style/HashEachMethods:
37
+ Lint/UnmodifiedReduceAccumulator: # (new in 1.1)
38
38
  Enabled: true
39
- Style/HashTransformKeys:
39
+ Style/ArgumentsForwarding: # (new in 1.1)
40
40
  Enabled: true
41
- Style/HashTransformValues:
41
+ Style/CollectionCompact: # (new in 1.2)
42
42
  Enabled: true
43
- Style/SlicingWithRange:
43
+ Style/DocumentDynamicEvalDefinition: # (new in 1.1)
44
+ Enabled: true
45
+ Style/NegatedIfElseCondition: # (new in 1.2)
46
+ Enabled: true
47
+ Style/NilLambda: # (new in 1.3)
48
+ Enabled: true
49
+ Style/SwapValues: # (new in 1.1)
44
50
  Enabled: true
data/.rubocop_todo.yml CHANGED
@@ -1,11 +1,29 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config --exclude-limit 15000`
3
- # on 2020-05-28 09:58:56 +0100 using RuboCop version 0.84.0.
3
+ # on 2020-11-20 12:14:23 UTC using RuboCop version 1.3.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
+ # Offense count: 4
10
+ Lint/DuplicateBranch:
11
+ Exclude:
12
+ - 'lib/sequencescape-api/associations/belongs_to.rb'
13
+ - 'lib/sequencescape-api/connection_factory/actions.rb'
14
+
15
+ # Offense count: 3
16
+ Lint/MissingSuper:
17
+ Exclude:
18
+ - 'lib/sequencescape-api/associations/belongs_to.rb'
19
+ - 'lib/sequencescape-api/resource_model_proxy.rb'
20
+ - 'lib/sequencescape/search.rb'
21
+
22
+ # Offense count: 1
23
+ Lint/MixedRegexpCaptureTypes:
24
+ Exclude:
25
+ - 'spec/support/contract_helper.rb'
26
+
9
27
  # Offense count: 2
10
28
  Lint/ShadowingOuterLocalVariable:
11
29
  Exclude:
@@ -28,28 +46,34 @@ Lint/Void:
28
46
  Exclude:
29
47
  - 'spec/sequencescape-api/associations_spec.rb'
30
48
 
31
- # Offense count: 10
49
+ # Offense count: 7
32
50
  # Configuration parameters: IgnoredMethods.
33
51
  Metrics/AbcSize:
34
- Max: 25
52
+ Max: 26
35
53
 
36
54
  # Offense count: 8
37
- # Configuration parameters: CountComments, ExcludedMethods.
55
+ # Configuration parameters: CountComments, CountAsOne, ExcludedMethods.
38
56
  # ExcludedMethods: refine
39
57
  Metrics/BlockLength:
40
58
  Max: 65
41
59
 
42
60
  # Offense count: 1
43
- # Configuration parameters: CountComments.
61
+ # Configuration parameters: IgnoredMethods.
62
+ Metrics/CyclomaticComplexity:
63
+ Max: 8
64
+
65
+ # Offense count: 1
66
+ # Configuration parameters: CountComments, CountAsOne.
44
67
  Metrics/ModuleLength:
45
68
  Max: 120
46
69
 
47
- # Offense count: 1
70
+ # Offense count: 2
48
71
  # Configuration parameters: IgnoredMethods.
49
72
  Metrics/PerceivedComplexity:
50
- Max: 9
73
+ Max: 10
51
74
 
52
75
  # Offense count: 1
76
+ # Cop supports --auto-correct.
53
77
  Naming/BinaryOperatorParameterName:
54
78
  Exclude:
55
79
  - 'lib/sequencescape-api/resource/instance_methods.rb'
@@ -71,18 +95,23 @@ Naming/PredicateName:
71
95
  - 'lib/sequencescape-api/resource/attributes.rb'
72
96
  - 'lib/sequencescape-api/resource_model_proxy.rb'
73
97
 
74
- # Offense count: 1
75
- # Configuration parameters: EnforcedStyle, AllowModifiersOnSymbols.
76
- # SupportedStyles: inline, group
77
- Style/AccessModifierDeclarations:
78
- Exclude:
79
- - 'lib/sequencescape-api/resource/attributes.rb'
80
-
81
98
  # Offense count: 1
82
99
  Style/BeginBlock:
83
100
  Exclude:
84
101
  - 'lib/sequencescape-api/connection_factory/actions.rb'
85
102
 
103
+ # Offense count: 11
104
+ Style/DocumentDynamicEvalDefinition:
105
+ Exclude:
106
+ - 'lib/sequencescape-api/actions.rb'
107
+ - 'lib/sequencescape-api/associations.rb'
108
+ - 'lib/sequencescape-api/composition.rb'
109
+ - 'lib/sequencescape-api/finder_methods.rb'
110
+ - 'lib/sequencescape-api/resource/attributes.rb'
111
+ - 'lib/sequencescape/batch.rb'
112
+ - 'lib/sequencescape/behaviour/state_driven.rb'
113
+ - 'lib/sequencescape/search.rb'
114
+
86
115
  # Offense count: 138
87
116
  Style/Documentation:
88
117
  Exclude:
@@ -214,6 +243,12 @@ Style/EvalWithLocation:
214
243
  - 'lib/sequencescape/behaviour/state_driven.rb'
215
244
  - 'lib/sequencescape/search.rb'
216
245
 
246
+ # Offense count: 1
247
+ # Cop supports --auto-correct.
248
+ Style/ExplicitBlockArgument:
249
+ Exclude:
250
+ - 'spec/support/contract_helper.rb'
251
+
217
252
  # Offense count: 104
218
253
  # Cop supports --auto-correct.
219
254
  # Configuration parameters: EnforcedStyle.
@@ -326,13 +361,18 @@ Style/FrozenStringLiteralComment:
326
361
  - 'sequencescape-api.gemspec'
327
362
 
328
363
  # Offense count: 2
329
- Style/MethodMissingSuper:
364
+ Style/MissingRespondToMissing:
330
365
  Exclude:
331
366
  - 'lib/sequencescape-api/associations/belongs_to.rb'
332
- - 'lib/sequencescape-api/resource_model_proxy.rb'
367
+ - 'lib/sequencescape-api/core.rb'
333
368
 
334
- # Offense count: 2
335
- Style/MissingRespondToMissing:
369
+ # Offense count: 6
370
+ # Configuration parameters: AllowedMethods.
371
+ # AllowedMethods: respond_to_missing?
372
+ Style/OptionalBooleanParameter:
336
373
  Exclude:
337
374
  - 'lib/sequencescape-api/associations/belongs_to.rb'
338
375
  - 'lib/sequencescape-api/core.rb'
376
+ - 'lib/sequencescape-api/finder_methods.rb'
377
+ - 'lib/sequencescape-api/resource/instance_methods.rb'
378
+ - 'lib/sequencescape-api/resource/modifications.rb'
data/README.markdown CHANGED
@@ -1,23 +1,25 @@
1
- Sequencescape Client API
2
- ========================
1
+ # Sequencescape Client API
3
2
 
4
3
  This is the Ruby client library for the Sequencescape API.
5
4
  Documentation can be found [on the wiki](https://github.com/sanger/sequencescape-client-api/wiki).
6
5
 
7
- Version Guides
8
- --------------
6
+ ## Version Guides
9
7
 
10
8
  - 0.2.x Supports older versions of Rails.
11
9
  - 0.3.x Supports Rails 3.2.x to 5.1.x
12
10
  - 0.4.x Supports Rails 5.0 and up
11
+ - 0.5.x Supports Rails 5.0 and up, drops yajl in favour of multi-json
12
+ - 0.6.x Removes usage of WTSISignOn cookie. Replaces with user specific api key,
13
+ can be provided to Sequencescape::Api.new as user_api_key: or via
14
+ `api_connection_options` in the controller.
13
15
 
14
- - master currently corresponds to 0.4.x
16
+ - master currently corresponds to 0.6.x
15
17
 
16
18
  Rails 6 appears to be supported judging by Specs, but haven't used it in anger
17
19
  yet.
18
20
 
19
- Making a release
20
- ----------------
21
+ ## Making a release
22
+
21
23
  1. Update the version number in `lib/sequencescape-api/version.rb`
22
24
  2. For pre-releases the version number should be in the format:
23
25
  major.minor.point-rcx
@@ -25,6 +27,8 @@ Making a release
25
27
  major.minor.point
26
28
  4. Ensure everything is committed, and for non-pre-releases, make sure you are
27
29
  merged to master.
30
+
28
31
  ```
29
32
  rake release
30
33
  ``
34
+ ```
@@ -1,4 +1,5 @@
1
1
  require 'active_support'
2
+ require 'active_support/core_ext/array/extract_options'
2
3
  require 'active_support/core_ext/module/delegation'
3
4
  require 'active_support/core_ext/class'
4
5
  require 'active_support/core_ext/kernel/singleton_class'
@@ -7,8 +7,8 @@ class Sequencescape::Api::ConnectionFactory
7
7
 
8
8
  def self.create(options)
9
9
  required_options = []
10
- required_options.push(:cookie) if options[:authorisation].blank?
11
- required_options.push(:url) if default_url.blank?
10
+ required_options.push(:user_api_key) if options[:authorisation].blank?
11
+ required_options.push(:url) if default_url.blank?
12
12
 
13
13
  required_options.push(allow_blank: false)
14
14
  options.required!(*required_options) do |missing|
@@ -19,12 +19,12 @@ class Sequencescape::Api::ConnectionFactory
19
19
  new(options)
20
20
  end
21
21
 
22
- attr_reader :url, :cookie, :read_timeout
23
- private :url, :cookie, :read_timeout
22
+ attr_reader :url, :user_api_key, :read_timeout
23
+ private :url, :user_api_key, :read_timeout
24
24
 
25
25
  def initialize(options)
26
26
  @url = options[:url]
27
- @cookie = options[:cookie]
27
+ @user_api_key = options[:user_api_key]
28
28
  @authorisation = options[:authorisation]
29
29
  @read_timeout = options[:read_timeout] || 120
30
30
  end
@@ -1,5 +1,5 @@
1
1
  require 'net/http'
2
- require 'yajl'
2
+ require 'multi_json'
3
3
 
4
4
  # PINCHED FROM https://gist.github.com/736721
5
5
  BEGIN {
@@ -48,7 +48,7 @@ module Sequencescape::Api::ConnectionFactory::Actions
48
48
  end
49
49
 
50
50
  # rubocop:todo Metrics/MethodLength
51
- def create(url, body, handler) # rubocop:todo Metrics/CyclomaticComplexity
51
+ def create(url, body, handler)
52
52
  perform(:post, url, jsonify(body, action: :create)) do |response|
53
53
  case response
54
54
  when Net::HTTPCreated then handler.success(parse_json_from(response))
@@ -64,7 +64,7 @@ module Sequencescape::Api::ConnectionFactory::Actions
64
64
  # rubocop:enable Metrics/MethodLength
65
65
 
66
66
  # rubocop:todo Metrics/MethodLength
67
- def create_from_file(url, file, filename, content_type, handler) # rubocop:todo Metrics/CyclomaticComplexity
67
+ def create_from_file(url, file, filename, content_type, handler)
68
68
  perform_for_file(:post, url, file, filename, content_type) do |response|
69
69
  case response
70
70
  when Net::HTTPCreated then handler.success(parse_json_from(response))
@@ -113,7 +113,7 @@ module Sequencescape::Api::ConnectionFactory::Actions
113
113
  unless body.nil?
114
114
  request.content_type = 'application/json'
115
115
  # request.body = body.to_json
116
- request.body = Yajl::Encoder.encode(body)
116
+ request.body = MultiJson.dump(body)
117
117
  end
118
118
  yield(connection.request(request))
119
119
  end
@@ -146,12 +146,12 @@ module Sequencescape::Api::ConnectionFactory::Actions
146
146
  def parse_json_from(response)
147
147
  raise ServerError, 'server returned non-JSON content' unless response.content_type == 'application/json'
148
148
 
149
- Yajl::Parser.parse(StringIO.new(response.body))
149
+ MultiJson.load(StringIO.new(response.body))
150
150
  end
151
151
  private :parse_json_from
152
152
 
153
153
  def headers
154
- { 'Accept' => 'application/json', 'Cookie' => "WTSISignOn=#{cookie}" }.tap do |standard|
154
+ { 'Accept' => 'application/json', 'Cookie' => "api_key=#{user_api_key}" }.tap do |standard|
155
155
  standard.merge!('X-Sequencescape-Client-ID' => @authorisation) unless @authorisation.blank?
156
156
  end
157
157
  end
@@ -82,11 +82,9 @@ end
82
82
  class Sequencescape::Api::PageOfResults
83
83
  include Enumerable
84
84
 
85
- attr_reader :api, :actions
85
+ attr_reader :api, :actions, :size
86
86
  private :api, :actions
87
87
 
88
- attr_reader :size
89
-
90
88
  def initialize(api, json, &block)
91
89
  @api = api
92
90
  @ctor = block
@@ -1,7 +1,6 @@
1
1
  module Sequencescape::Api::Rails
2
2
  # Including this module into your Rails ApplicationController adds a before filter that will
3
- # provide a user (based on the WTSISignOn cookie) specific Sequencescape::Api instance to
4
- # use, accessible through `api`.
3
+ # provide a Sequencescape::Api instance to use, accessible through `api`.
5
4
  module ApplicationController
6
5
  def self.included(base) # rubocop:todo Metrics/MethodLength
7
6
  base.class_eval do
@@ -20,32 +19,29 @@ module Sequencescape::Api::Rails
20
19
  end
21
20
  end
22
21
 
22
+ private
23
+
23
24
  def api_class
24
25
  ::Sequencescape::Api
25
26
  end
26
- private :api_class
27
27
 
28
28
  def configure_api
29
- @api = api_class.new({ cookie: cookies['WTSISignOn'] }.merge(api_connection_options))
29
+ @api = api_class.new(api_connection_options)
30
30
  end
31
- private :configure_api
32
31
 
33
32
  def api_connection_options
34
- {}
33
+ raise Sequencescape::Api::Error, "api_connection_options not implemented for #{self.class}"
35
34
  end
36
- private :api_connection_options
37
35
 
38
36
  def sequencescape_api_error_handler(exception)
39
37
  Rails.logger.error "#{exception}, #{exception.backtrace}"
40
38
  raise StandardError, "There is an issue with the API connection to Sequencescape (#{exception.message})"
41
39
  end
42
- private :sequencescape_api_error_handler
43
40
 
44
41
  def sequencescape_api_unauthenticated_handler(exception)
45
42
  Rails.logger.error "#{exception}, #{exception.backtrace}"
46
43
  raise StandardError, 'You are not authenticated; please visit the WTSI login page'
47
44
  end
48
- private :sequencescape_api_unauthenticated_handler
49
45
  end
50
46
 
51
47
  # Including this module into your Rails model indicates that the model is associated with
@@ -1,5 +1,5 @@
1
1
  module Sequencescape
2
2
  class Api
3
- VERSION = '0.4.3'.freeze
3
+ VERSION = '0.6.0-rc2'.freeze
4
4
  end
5
5
  end
@@ -9,5 +9,6 @@ class Sequencescape::Order < ::Sequencescape::Api::Resource
9
9
  # It does, but we don't care for now.
10
10
  # has_many :request_types
11
11
 
12
- attr_accessor :request_options
12
+ attribute_accessor :request_options
13
+ attribute_writer :autodetect_studies_projects
13
14
  end
@@ -10,6 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.homepage = ''
11
11
  s.summary = 'Gem for the client side of the Sequencescape API'
12
12
  s.description = 'Provides all of the necessary code for interacting with the Sequencescape API'
13
+ s.required_ruby_version = '> 2.4'
13
14
 
14
15
  s.rubyforge_project = 'sequencescape-client-api'
15
16
 
@@ -18,16 +19,27 @@ Gem::Specification.new do |s|
18
19
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
20
  s.require_paths = ['lib']
20
21
 
22
+ s.post_install_message = <<~POST_INSTALL
23
+ sequencescape-client-api has dropped 'yajl-ruby' in favour of 'multi_json',
24
+ https://rubygems.org/gems/multi_json. This will automatically pick the
25
+ fastest json encoder in your Gemfile, falling back to the default encoder.
26
+
27
+ For best performance you are strongly encouraged to add a custom json
28
+ encoder to your project. eg. bundle install oj.
29
+ POST_INSTALL
30
+
21
31
  s.add_dependency('activemodel', '>= 5.0.0')
22
32
  s.add_dependency('activesupport', '>= 5.0.0')
23
33
  s.add_dependency('i18n')
24
- s.add_dependency('yajl-ruby', '>= 1.4.1')
34
+ s.add_dependency('multi_json')
25
35
 
26
36
  s.add_development_dependency('pry')
27
37
  s.add_development_dependency('rake')
28
38
  s.add_development_dependency('redcarpet')
29
39
  s.add_development_dependency('rspec', '~> 2.11.0')
30
- s.add_development_dependency('rubocop', '~> 0.84.0')
40
+ s.add_development_dependency('rubocop', '~> 1.3.1')
31
41
  s.add_development_dependency('webmock')
32
42
  s.add_development_dependency('yard')
43
+ # Add a json encoder for development
44
+ s.add_development_dependency('oj')
33
45
  end
@@ -1,7 +1,7 @@
1
1
  POST /model_c/create HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -1,7 +1,7 @@
1
1
  POST /model_c/create HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -1,7 +1,7 @@
1
1
  POST /model_c/create HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -1,7 +1,7 @@
1
1
  POST /model_c/create HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -1,7 +1,7 @@
1
1
  POST /model_c/create HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -1,7 +1,7 @@
1
1
  POST /UUID/model_bs HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_b": {
@@ -1,3 +1,3 @@
1
1
  GET /BELONGS_TO_UUID HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,4 +1,3 @@
1
1
  GET /UUID HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
4
-
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,3 +1,3 @@
1
1
  GET /pages/1 HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,3 +1,3 @@
1
1
  GET /pages/2 HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,3 +1,3 @@
1
1
  GET /pages/3 HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,5 +1,4 @@
1
1
  GET / HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
3
+ Cookie: api_key=single-sign-on-cookie
4
4
  X-Sequencescape-Client-Id: authorised!
5
-
@@ -1,4 +1,3 @@
1
1
  GET / HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
4
-
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,4 +1,3 @@
1
1
  GET /model_a HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
4
-
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,4 +1,3 @@
1
1
  GET /model_b HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
4
-
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,4 +1,3 @@
1
1
  GET /model_c HTTP/1.1
2
2
  Accept: application/json
3
- Cookie: WTSISignOn=single-sign-on-cookie
4
-
3
+ Cookie: api_key=single-sign-on-cookie
@@ -1,7 +1,7 @@
1
1
  PUT /UUID HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -1,7 +1,7 @@
1
1
  PUT /UUID HTTP/1.1
2
2
  Accept: application/json
3
3
  Content-Type: application/json
4
- Cookie: WTSISignOn=single-sign-on-cookie
4
+ Cookie: api_key=single-sign-on-cookie
5
5
 
6
6
  {
7
7
  "model_c": {
@@ -5,7 +5,7 @@ require 'spec_helper'
5
5
  describe 'Handling authentication issues' do
6
6
  stub_request_from('retrieve-root-with-an-unauthorised-client') { response('client-fails-authentication') }
7
7
 
8
- subject { Sequencescape::Api.new(url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie') }
8
+ subject { Sequencescape::Api.new(url: 'http://localhost:3000/', user_api_key: 'single-sign-on-cookie') }
9
9
 
10
10
  it 'raises an exception' do
11
11
  -> { subject }.should raise_error(Sequencescape::Api::UnauthenticatedError)
@@ -17,7 +17,7 @@ describe 'Retrieving the root URL' do
17
17
  is_working_as_an_unauthorised_client
18
18
 
19
19
  context 'with no namespace' do
20
- subject { Sequencescape::Api.new(url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie') }
20
+ subject { Sequencescape::Api.new(url: 'http://localhost:3000/', user_api_key: 'single-sign-on-cookie') }
21
21
 
22
22
  Unauthorised::MODELS_THROUGH_API.each do |model|
23
23
  it "provides the #{model} through the API instance" do
@@ -25,7 +25,7 @@ describe 'Retrieving the root URL' do
25
25
  end
26
26
 
27
27
  it "errors because Sequencescape::#{model.to_s.classify} is not defined" do
28
- # Note: Using a regex as > Ruby 2.3 'DidYouMean' changes the error message slightly.
28
+ # NOTE: Using a regex as > Ruby 2.3 'DidYouMean' changes the error message slightly.
29
29
  lambda {
30
30
  subject.send(model.to_sym)
31
31
  }.should raise_error(NameError,
@@ -35,7 +35,7 @@ module ContractHelper
35
35
  @url = "http://localhost:3000#{match[:path]}"
36
36
  @conditions = {}
37
37
  @conditions[:headers] = Hash[*match[:headers].split(/\r?\n/).map { |l| l.split(':') }.flatten.map(&:strip)]
38
- @conditions[:body] = Yajl::Encoder.encode(Yajl::Parser.parse(match[:body])) unless match[:body].blank?
38
+ @conditions[:body] = MultiJson.dump(MultiJson.load(match[:body])) unless match[:body].blank?
39
39
  end
40
40
  end
41
41
 
@@ -96,7 +96,7 @@ module ContractHelper
96
96
  end
97
97
  let(:api) do
98
98
  Sequencescape::Api.new(
99
- url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie',
99
+ url: 'http://localhost:3000/', user_api_key: 'single-sign-on-cookie',
100
100
  namespace: Unauthorised
101
101
  )
102
102
  end
@@ -107,7 +107,7 @@ module ContractHelper
107
107
 
108
108
  let(:api) do
109
109
  Sequencescape::Api.new(
110
- url: 'http://localhost:3000/', cookie: 'single-sign-on-cookie',
110
+ url: 'http://localhost:3000/', user_api_key: 'single-sign-on-cookie',
111
111
  authorisation: 'authorised!', namespace: Authenticated
112
112
  )
113
113
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequencescape-client-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.6.0.pre.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Denner
8
8
  - James Glover
9
9
  - Eduardo Martin Rojo
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-11-11 00:00:00.000000000 Z
13
+ date: 2021-07-28 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activemodel
@@ -55,19 +55,19 @@ dependencies:
55
55
  - !ruby/object:Gem::Version
56
56
  version: '0'
57
57
  - !ruby/object:Gem::Dependency
58
- name: yajl-ruby
58
+ name: multi_json
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
61
  - - ">="
62
62
  - !ruby/object:Gem::Version
63
- version: 1.4.1
63
+ version: '0'
64
64
  type: :runtime
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
- version: 1.4.1
70
+ version: '0'
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: pry
73
73
  requirement: !ruby/object:Gem::Requirement
@@ -130,14 +130,14 @@ dependencies:
130
130
  requirements:
131
131
  - - "~>"
132
132
  - !ruby/object:Gem::Version
133
- version: 0.84.0
133
+ version: 1.3.1
134
134
  type: :development
135
135
  prerelease: false
136
136
  version_requirements: !ruby/object:Gem::Requirement
137
137
  requirements:
138
138
  - - "~>"
139
139
  - !ruby/object:Gem::Version
140
- version: 0.84.0
140
+ version: 1.3.1
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: webmock
143
143
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +166,20 @@ dependencies:
166
166
  - - ">="
167
167
  - !ruby/object:Gem::Version
168
168
  version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: oj
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ version: '0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
169
183
  description: Provides all of the necessary code for interacting with the Sequencescape
170
184
  API
171
185
  email:
@@ -176,6 +190,7 @@ executables: []
176
190
  extensions: []
177
191
  extra_rdoc_files: []
178
192
  files:
193
+ - ".github/workflows/ruby.yml"
179
194
  - ".gitignore"
180
195
  - ".rspec"
181
196
  - ".rubocop.yml"
@@ -493,23 +508,29 @@ files:
493
508
  homepage: ''
494
509
  licenses: []
495
510
  metadata: {}
496
- post_install_message:
511
+ post_install_message: |
512
+ sequencescape-client-api has dropped 'yajl-ruby' in favour of 'multi_json',
513
+ https://rubygems.org/gems/multi_json. This will automatically pick the
514
+ fastest json encoder in your Gemfile, falling back to the default encoder.
515
+
516
+ For best performance you are strongly encouraged to add a custom json
517
+ encoder to your project. eg. bundle install oj.
497
518
  rdoc_options: []
498
519
  require_paths:
499
520
  - lib
500
521
  required_ruby_version: !ruby/object:Gem::Requirement
501
522
  requirements:
502
- - - ">="
523
+ - - ">"
503
524
  - !ruby/object:Gem::Version
504
- version: '0'
525
+ version: '2.4'
505
526
  required_rubygems_version: !ruby/object:Gem::Requirement
506
527
  requirements:
507
- - - ">="
528
+ - - ">"
508
529
  - !ruby/object:Gem::Version
509
- version: '0'
530
+ version: 1.3.1
510
531
  requirements: []
511
- rubygems_version: 3.0.8
512
- signing_key:
532
+ rubygems_version: 3.1.4
533
+ signing_key:
513
534
  specification_version: 4
514
535
  summary: Gem for the client side of the Sequencescape API
515
536
  test_files: