archivesspace-client 0.1.8 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6ea50bb167b4debf8781434efa1ff7b06d077a8ab869f02c30ea8d1cd66de3c9
4
- data.tar.gz: 83f63ad1f11fc35ca89cdabe871a1e1fa91f935e2e6e284f038b6db2c0257065
3
+ metadata.gz: 3b68b6cb7fcd238639742c355e7256cea1ae76536762425d535e49ad0aaec309
4
+ data.tar.gz: 7188d9e03e36c0ffefb3abd1694bdc5b21e7a5e74aee9e5e9396ee30571d3919
5
5
  SHA512:
6
- metadata.gz: faa0086ae6ecd33700e3cf16c41b7457ebf094eb4a5e79109c3999ce0e916f8924450cb6ef8bcb4a761f0d6ed3a1c12a457dec4cd5738429a8f80fb249303fbe
7
- data.tar.gz: '09a6fca39d7846875715216e8b10d5d29b776b433c37abef3490b5964e62deca9de5f01e69f868a476cceb11c7ceaa43032cfb906f9fff35da10b43e0b3582e7'
6
+ metadata.gz: 122cf84d68c31fc2a69423489c15ae93fbf671a039ab1f7753f5ab0b47056640e186f073c276ac53f3b145f76663be6cddc9cb23c364bd5e88a0d431b755d6e9
7
+ data.tar.gz: eb8c1f20902bdf57c7d04a664d0f739878e1521c6d7a8ddcb5a0e2c08da9f1d9c7cb52789f409ac4ecee3705303aa07dd127d6584bb17ba5650c65049361275e
data/README.md CHANGED
@@ -77,14 +77,16 @@ See `helpers.rb` for more convenience methods such as `client.digital_objects` e
77
77
 
78
78
  **Setting a repository context**
79
79
 
80
- Update the `base_repo` configuration value to add a repository scope to requests (this is optional).
80
+ Use the `repository` method to add a repository scope to requests (this is optional).
81
81
 
82
82
  ```ruby
83
- client.config.base_repo = "repositories/2"
84
- client.get('digital_objects') # instead of "repositories/2/digital_objects" etc.
83
+ client.repository(2)
84
+ client.get('digital_objects', query: {page: 1}) # instead of "repositories/2/digital_objects" etc.
85
85
 
86
86
  # to reset
87
- client.config.base_repo = ""
87
+ client.repository(nil)
88
+ # or
89
+ client.use_global_repository
88
90
  ```
89
91
 
90
92
  ## Templates
@@ -116,6 +118,29 @@ response = client.post('/repositories/with_agent', json)
116
118
  puts response.result.success? ? '=)' : '=('
117
119
  ```
118
120
 
121
+ ## CLI
122
+
123
+ Create an `~/.asclientrc` file with a json version of the client configuration:
124
+
125
+ ```json
126
+ {
127
+ "base_uri": "https://archives.university.edu/api",
128
+ "base_repo": "",
129
+ "username": "admin",
130
+ "password": "123456",
131
+ "page_size": 50,
132
+ "throttle": 0,
133
+ "verify_ssl": false
134
+ }
135
+ ```
136
+
137
+ Run commands:
138
+
139
+ ```bash
140
+ # when using locally via the repo prefix commands with ./exe/ i.e. ./exe/asclient -v
141
+ asclient -v
142
+ ```
143
+
119
144
  ## Development
120
145
 
121
146
  To run the examples start a local instance of ArchivesSpace then:
@@ -139,7 +164,7 @@ bundle exec rake
139
164
  Bump version in `lib/archivesspace/client/version.rb` then:
140
165
 
141
166
  ```bash
142
- VERSION=0.1.8
167
+ VERSION=0.1.9
143
168
  gem build archivesspace-client
144
169
  git add . && git commit -m "Bump to $VERSION"
145
170
  git tag v$VERSION
data/Rakefile CHANGED
@@ -1,8 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'bundler/gem_tasks'
4
- require 'rspec/core/rake_task'
5
4
 
5
+ require 'rspec/core/rake_task'
6
6
  RSpec::Core::RakeTask.new(:spec)
7
7
 
8
- task default: :spec
8
+ # require 'rubocop/rake_task'
9
+ # RuboCop::RakeTask.new
10
+
11
+ require 'cucumber/rake/task'
12
+ Cucumber::Rake::Task.new
13
+
14
+ task default: %i[spec cucumber]
@@ -19,13 +19,18 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ['lib']
21
21
 
22
+ spec.add_development_dependency 'aruba'
22
23
  spec.add_development_dependency 'awesome_print', '~> 1.8.0'
23
24
  spec.add_development_dependency 'bundler'
25
+ spec.add_development_dependency 'capybara_discoball'
26
+ spec.add_development_dependency 'cucumber'
27
+ spec.add_development_dependency 'json_spec'
24
28
  spec.add_development_dependency 'rake', '~> 10.0'
25
29
  spec.add_development_dependency 'rspec', '3.6.0'
26
30
  spec.add_development_dependency 'vcr', '3.0.3'
27
31
  spec.add_development_dependency 'webmock', '3.0.1'
28
32
 
33
+ spec.add_dependency 'dry-cli', '~> 0.7'
29
34
  spec.add_dependency 'httparty', '~> 0.14'
30
35
  spec.add_dependency 'json', '~> 2.0'
31
36
  spec.add_dependency 'nokogiri', '~> 1.10'
data/exe/asclient ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'bundler/setup'
5
+ require 'archivesspace/client'
6
+
7
+ Dry::CLI.new(ArchivesSpace::Client::CLI).call
@@ -0,0 +1,4 @@
1
+ Feature: Exec
2
+ Scenario: With an invalid request type
3
+ When I run `asclient exec all`
4
+ Then the output should match /asclient exec TYPE PATH/
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'aruba/cucumber'
4
+ require 'json_spec/cucumber'
5
+ require 'capybara_discoball'
6
+
7
+ def last_json
8
+ last_command_started.output
9
+ end
@@ -0,0 +1,12 @@
1
+ Feature: Version
2
+ Scenario: Output with 'v'
3
+ When I run `asclient v`
4
+ Then the output should match /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/
5
+
6
+ Scenario: Output with -v
7
+ When I run `asclient -v`
8
+ Then the output should match /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/
9
+
10
+ Scenario: Output with --version
11
+ When I run `asclient --version`
12
+ Then the output should match /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArchivesSpace
4
+ class Client
5
+ module CLI
6
+ # ArchivesSpace::Client::CLI::Exec executes an API request
7
+ class Exec < Dry::CLI::Command
8
+ desc 'Execute an API request'
9
+
10
+ argument :type, required: true, values: %i[get post put delete], desc: 'API request type'
11
+ argument :path, required: true, desc: 'API request path'
12
+
13
+ option :rid, type: :integer, default: nil, desc: 'Repository id'
14
+ option :payload, type: :string, default: '{}', desc: 'Data payload (json)'
15
+ option :params, type: :string, default: '{}', desc: 'Params (json)'
16
+
17
+ example [
18
+ 'exec get --rid 2 "resources/1"',
19
+ 'exec get users --params \'{"query": {"page": 1}}\''
20
+ ]
21
+
22
+ def call(type:, path:, rid: nil, payload: '{}', params: '{}', **)
23
+ client = ArchivesSpace::Client::CLI.client
24
+ client.repository(rid) if rid
25
+ type = type.to_sym
26
+ payload = JSON.parse(payload, symbolize_names: true)
27
+ params = JSON.parse(params, symbolize_names: true)
28
+
29
+ response = case type
30
+ when :get
31
+ client.get(path, params)
32
+ when :post
33
+ client.post(path, payload, params)
34
+ when :put
35
+ client.put(path, payload, params)
36
+ when :delete
37
+ client.delete(path)
38
+ end
39
+ puts JSON.generate(response.parsed)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArchivesSpace
4
+ class Client
5
+ module CLI
6
+ # ArchivesSpace::Client::CLI::Version prints version
7
+ class Version < Dry::CLI::Command
8
+ desc 'Print ArchivesSpace Client version'
9
+
10
+ def call(*)
11
+ puts ArchivesSpace::Client::VERSION
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArchivesSpace
4
+ class Client
5
+ module CLI
6
+ extend Dry::CLI::Registry
7
+
8
+ def self.client
9
+ cfg = ArchivesSpace::Configuration.new(ArchivesSpace::Client::CLI.find_config)
10
+ ArchivesSpace::Client.new(cfg).login
11
+ end
12
+
13
+ def self.find_config
14
+ config = ENV.fetch('ASCLIENT_CFG', File.join(ENV['HOME'], '.asclientrc'))
15
+ raise "Unable to find asclient configuration file at: #{config}" unless File.file?(config)
16
+
17
+ JSON.parse(File.read(config), symbolize_names: true)
18
+ end
19
+
20
+ register 'exec', Exec, aliases: ['e', '-e']
21
+ register 'version', Version, aliases: ['v', '-v', '--version']
22
+ end
23
+ end
24
+ end
@@ -2,7 +2,8 @@
2
2
 
3
3
  module ArchivesSpace
4
4
  class Client
5
- include Helpers
5
+ include Pagination
6
+ include Task
6
7
  attr_accessor :token
7
8
  attr_reader :config
8
9
 
@@ -13,6 +14,10 @@ module ArchivesSpace
13
14
  @token = nil
14
15
  end
15
16
 
17
+ def backend_version
18
+ get 'version'
19
+ end
20
+
16
21
  def get(path, options = {})
17
22
  request 'GET', path, options
18
23
  end
@@ -29,6 +34,26 @@ module ArchivesSpace
29
34
  request 'DELETE', path
30
35
  end
31
36
 
37
+ # Scoping requests
38
+ def repository(id)
39
+ if id.nil?
40
+ use_global_repository
41
+ return
42
+ end
43
+
44
+ begin
45
+ Integer(id)
46
+ rescue StandardError
47
+ raise RepositoryIdError, "Invalid Repository id: #{id}"
48
+ end
49
+
50
+ @config.base_repo = "repositories/#{id}"
51
+ end
52
+
53
+ def use_global_repository
54
+ @config.base_repo = ''
55
+ end
56
+
32
57
  private
33
58
 
34
59
  def request(method, path, options = {})
@@ -6,6 +6,7 @@ module ArchivesSpace
6
6
  {
7
7
  base_uri: 'http://localhost:8089',
8
8
  base_repo: '',
9
+ debug: false,
9
10
  username: 'admin',
10
11
  password: 'admin',
11
12
  page_size: 50,
@@ -0,0 +1,60 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ArchivesSpace
4
+ # Handle API Pagination using enumerator
5
+ module Pagination
6
+ # TODO: get via lookup of endpoints that support pagination? (nice-to-have)
7
+ ENDPOINTS = %w[
8
+ accessions
9
+ agents/corporate_entities
10
+ agents/families
11
+ agents/people
12
+ agents/software
13
+ archival_objects
14
+ digital_objects
15
+ groups
16
+ repositiories
17
+ resources
18
+ subjects
19
+ users
20
+ ]
21
+
22
+ ENDPOINTS.each do |endpoint|
23
+ method_name = endpoint.split('/').last # remove prefix
24
+ define_method(method_name) do |options = {}|
25
+ all(endpoint, options)
26
+ end
27
+ end
28
+
29
+ def all(path, options = {})
30
+ Enumerator.new do |yielder|
31
+ page = 1
32
+ unlimited_listing = false
33
+ loop do
34
+ options[:query] ||= {}
35
+ options[:query][:page] = page
36
+ result = get(path, options)
37
+ results = []
38
+
39
+ if result.parsed.respond_to?(:key) && result.parsed.key?('results')
40
+ results = result.parsed['results']
41
+ else
42
+ results = result.parsed
43
+ unlimited_listing = true
44
+ end
45
+
46
+ if results.any?
47
+ results.each do |i|
48
+ yielder << i
49
+ end
50
+ raise StopIteration if unlimited_listing
51
+
52
+ page += 1
53
+ else
54
+ raise StopIteration
55
+ end
56
+ end
57
+ end.lazy
58
+ end
59
+ end
60
+ end
@@ -30,8 +30,9 @@ module ArchivesSpace
30
30
  @options[:verify] = config.verify_ssl
31
31
  @options[:query] = {} unless options.key? :query
32
32
 
33
- base_uri = config.base_repo&.length&.positive? ? File.join(config.base_uri, config.base_repo) : config.base_uri
33
+ self.class.debug_output($stdout) if @config.debug
34
34
 
35
+ base_uri = config.base_repo&.length&.positive? ? File.join(config.base_uri, config.base_repo) : config.base_uri
35
36
  self.class.base_uri base_uri
36
37
  end
37
38
 
@@ -1,66 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # needed for roundtrip hash merging
4
- class ::Hash
5
- def deep_merge(second)
6
- merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : v2 }
7
- merge(second, &merger)
8
- end
9
- end
10
-
11
3
  module ArchivesSpace
12
- module Helpers
13
- def accessions(options = {})
14
- all('accessions', options)
15
- end
16
-
17
- def all(path, options = {})
18
- Enumerator.new do |yielder|
19
- page = 1
20
- unlimited_listing = false
21
- loop do
22
- options[:query] ||= {}
23
- options[:query][:page] = page
24
- result = get(path, options)
25
- results = []
26
-
27
- if result.parsed.respond_to?(:key) && result.parsed.key?('results')
28
- results = result.parsed['results']
29
- else
30
- results = result.parsed
31
- unlimited_listing = true
32
- end
33
-
34
- if results.any?
35
- results.each do |i|
36
- yielder << i
37
- end
38
- raise StopIteration if unlimited_listing
39
-
40
- page += 1
41
- else
42
- raise StopIteration
43
- end
44
- end
45
- end.lazy
46
- end
47
-
48
- def backend_version
49
- get 'version'
50
- end
51
-
4
+ # Perform specific API tasks
5
+ module Task
52
6
  # def batch_import(payload, params = {})
53
7
  # # TODO: create "batch_import", payload, params
54
8
  # end
55
9
 
56
- def digital_objects(options = {})
57
- all('digital_objects', options)
58
- end
59
-
60
- def groups(options = {})
61
- all('groups', options)
62
- end
63
-
64
10
  def group_user_assignment(users_with_roles)
65
11
  updated = []
66
12
  groups.each do |group|
@@ -90,13 +36,16 @@ module ArchivesSpace
90
36
  end
91
37
 
92
38
  def login
93
- username = config.username
94
- password = config.password
39
+ username = config.username
40
+ password = config.password
41
+ base_repo = config.base_repo
42
+ use_global_repository # ensure we're in the global scope to login
95
43
  result = request('POST', "/users/#{username}/login", { query: { password: password } })
96
44
  unless result.parsed['session']
97
45
  raise ConnectionError, "Failed to connect to ArchivesSpace backend as #{username} #{password}"
98
46
  end
99
47
 
48
+ config.base_repo = base_repo # reset repo as set by the cfg
100
49
  @token = result.parsed['session']
101
50
  self
102
51
  end
@@ -108,26 +57,14 @@ module ArchivesSpace
108
57
  post(user['uri'], user.to_json, { password: password })
109
58
  end
110
59
 
111
- def repositories(options = {})
112
- all('repositories', options)
113
- end
114
-
115
- def repositories_with_agent; end
116
-
117
- def resources(options = {})
118
- all('resources', options)
119
- end
120
-
121
60
  # def search(params)
122
61
  # # TODO: get "search", params
123
62
  # end
124
63
 
64
+ private
65
+
125
66
  def uri_to_id(uri)
126
67
  uri.split('/').last
127
68
  end
128
-
129
- def users(options = {})
130
- all('users', options)
131
- end
132
69
  end
133
70
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ArchivesSpace
4
4
  class Client
5
- VERSION = '0.1.8'
5
+ VERSION = '0.1.10'
6
6
  end
7
7
  end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'dry/cli'
3
4
  require 'httparty'
4
5
  require 'json'
5
6
  require 'nokogiri'
6
7
 
7
8
  # mixins required first
8
- require 'archivesspace/client/helpers'
9
+ require 'archivesspace/client/pagination'
10
+ require 'archivesspace/client/task'
9
11
 
10
12
  require 'archivesspace/client/client'
11
13
  require 'archivesspace/client/configuration'
@@ -14,9 +16,19 @@ require 'archivesspace/client/response'
14
16
  require 'archivesspace/client/template'
15
17
  require 'archivesspace/client/version'
16
18
 
19
+ # cli
20
+ require 'archivesspace/client/cli/exec'
21
+ require 'archivesspace/client/cli/version'
22
+ require 'archivesspace/client/cli' # load the registry last
23
+
17
24
  module ArchivesSpace
18
25
  class ConnectionError < RuntimeError; end
26
+
19
27
  class ContextError < RuntimeError; end
28
+
29
+ class RepositoryIdError < RuntimeError; end
30
+
20
31
  class ParamsError < RuntimeError; end
32
+
21
33
  class RequestError < RuntimeError; end
22
34
  end
@@ -22,6 +22,57 @@ describe ArchivesSpace::Client do
22
22
  end
23
23
  end
24
24
 
25
+ describe 'Repository scoping' do
26
+ it 'will set the repository with an integer id' do
27
+ client = ArchivesSpace::Client.new
28
+ client.repository 2
29
+ expect(client.config.base_repo).to eq 'repositories/2'
30
+ end
31
+
32
+ it 'will set the repository with a string id cast to integer' do
33
+ client = ArchivesSpace::Client.new
34
+ client.repository '2'
35
+ expect(client.config.base_repo).to eq 'repositories/2'
36
+ end
37
+
38
+ it 'will fail if the id cannot be cast to integer' do
39
+ client = ArchivesSpace::Client.new
40
+ expect { client.repository('xyz') }.to raise_error(
41
+ ArchivesSpace::RepositoryIdError
42
+ )
43
+ end
44
+
45
+ it 'will use the global repo if repository is passed nil' do
46
+ client = ArchivesSpace::Client.new
47
+ client.repository 2
48
+ client.repository nil
49
+ expect(client.config.base_repo).to eq ''
50
+ end
51
+
52
+ it 'will use the global repo when the method is called' do
53
+ client = ArchivesSpace::Client.new
54
+ client.repository 2
55
+ client.use_global_repository
56
+ expect(client.config.base_repo).to eq ''
57
+ end
58
+ end
59
+
60
+ describe 'Pagination' do
61
+ it 'will have a method for defined paginated record types' do
62
+ client = ArchivesSpace::Client.new
63
+ ArchivesSpace::Pagination::ENDPOINTS.each do |e|
64
+ next if e.match?('/')
65
+
66
+ expect(client.respond_to?(e.to_sym)).to be true
67
+ end
68
+ end
69
+
70
+ it 'will have a method for defined paginated record types with multipart path' do
71
+ client = ArchivesSpace::Client.new
72
+ expect(client.respond_to?(:people)).to be true
73
+ end
74
+ end
75
+
25
76
  describe 'Version information' do
26
77
  it 'has a version number' do
27
78
  expect(ArchivesSpace::Client::VERSION).not_to be nil
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: archivesspace-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Cooper
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-21 00:00:00.000000000 Z
11
+ date: 2021-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aruba
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: awesome_print
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +52,48 @@ dependencies:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: capybara_discoball
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: cucumber
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: json_spec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
41
97
  - !ruby/object:Gem::Dependency
42
98
  name: rake
43
99
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +150,20 @@ dependencies:
94
150
  - - '='
95
151
  - !ruby/object:Gem::Version
96
152
  version: 3.0.1
153
+ - !ruby/object:Gem::Dependency
154
+ name: dry-cli
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '0.7'
160
+ type: :runtime
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: '0.7'
97
167
  - !ruby/object:Gem::Dependency
98
168
  name: httparty
99
169
  requirement: !ruby/object:Gem::Requirement
@@ -156,12 +226,20 @@ files:
156
226
  - examples/repo_and_user.rb
157
227
  - examples/test_connection.rb
158
228
  - examples/user_groups.rb
229
+ - exe/asclient
230
+ - features/exec.feature
231
+ - features/support/setup.rb
232
+ - features/version.feature
159
233
  - lib/archivesspace/client.rb
234
+ - lib/archivesspace/client/cli.rb
235
+ - lib/archivesspace/client/cli/exec.rb
236
+ - lib/archivesspace/client/cli/version.rb
160
237
  - lib/archivesspace/client/client.rb
161
238
  - lib/archivesspace/client/configuration.rb
162
- - lib/archivesspace/client/helpers.rb
239
+ - lib/archivesspace/client/pagination.rb
163
240
  - lib/archivesspace/client/request.rb
164
241
  - lib/archivesspace/client/response.rb
242
+ - lib/archivesspace/client/task.rb
165
243
  - lib/archivesspace/client/template.rb
166
244
  - lib/archivesspace/client/templates/digital_object.json.erb
167
245
  - lib/archivesspace/client/templates/repository.json.erb
@@ -197,6 +275,9 @@ signing_key:
197
275
  specification_version: 4
198
276
  summary: Interact with ArchivesSpace via the API.
199
277
  test_files:
278
+ - features/exec.feature
279
+ - features/support/setup.rb
280
+ - features/version.feature
200
281
  - spec/archivesspace/client_spec.rb
201
282
  - spec/archivesspace/configuration_spec.rb
202
283
  - spec/archivesspace/templates_spec.rb