worochi 0.0.17 → 0.0.18
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/README.md +8 -4
- data/circle.yml +6 -5
- data/lib/worochi/agent.rb +1 -2
- data/lib/worochi/agent/#example.rb +1 -1
- data/lib/worochi/agent/box.rb +78 -0
- data/lib/worochi/version.rb +1 -1
- data/spec/spec_helper.rb +4 -3
- data/spec/worochi/agent/box_spec.rb +34 -0
- data/worochi.gemspec +1 -0
- metadata +18 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2a18845c1adcadfe7c424ac39bf2d9d8a66ae5e
|
4
|
+
data.tar.gz: ea90cb0fb85aa177b54226862af3cd56f9b80487
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dcf3004c8fe46c9ed7df05d05bcea8d312eb0109f4fff883fd54f7640abb0118163b189df4892d0f73196443beb9b52d78780631cb3d98f60e5bd1260d39b2d2
|
7
|
+
data.tar.gz: 227612326f57102371ee6e94a4ffdfd53c50ff063f61440cdd98e050f4cc4c82a0280b3ad6b18a46cc2515a1bb7bbcbfa11745edf8c26191e705612d335a831d
|
data/README.md
CHANGED
@@ -156,10 +156,6 @@ Tokens are hashes and `refresh` expects a hash containing the field
|
|
156
156
|
|
157
157
|
Currently these services are fully supported:
|
158
158
|
|
159
|
-
**Google Drive**
|
160
|
-
- Service name `:google_drive`
|
161
|
-
- Env variables `GOOGLE_ID` `GOOGLE_SECRET` `GOOGLE_TEST_TOKEN`
|
162
|
-
|
163
159
|
**Dropbox**
|
164
160
|
- Service name `:dropbox`
|
165
161
|
- Env variables `DROPBOX_ID` `DROPBOX_SECRET` `DROPBOX_TEST_TOKEN`
|
@@ -168,6 +164,14 @@ Currently these services are fully supported:
|
|
168
164
|
- Service name `:github`
|
169
165
|
- Env variables `GITHUB_ID` `GITHUB_SECRET` `GITHUB_TEST_TOKEN`
|
170
166
|
|
167
|
+
**Google Drive**
|
168
|
+
- Service name `:google_drive`
|
169
|
+
- Env variables `GOOGLE_ID` `GOOGLE_SECRET` `GOOGLE_TEST_TOKEN`
|
170
|
+
|
171
|
+
**Box**
|
172
|
+
- Service name `:box`
|
173
|
+
- Env variables `BOX_ID` `BOX_SECRET` `BOX_TEST_TOKEN`
|
174
|
+
|
171
175
|
### Environmental Variables
|
172
176
|
|
173
177
|
`ID` and `SECRET` variables are only needed for retrieving access tokens and
|
data/circle.yml
CHANGED
@@ -8,12 +8,13 @@ machine:
|
|
8
8
|
AWS_SECRET_ACCESS_KEY: abc
|
9
9
|
BOX_ID: abc
|
10
10
|
BOX_SECRET: abc
|
11
|
-
|
12
|
-
GOOGLE_SECRET: abc
|
13
|
-
GITHUB_ID: abc
|
14
|
-
GITHUB_SECRET: abc
|
11
|
+
BOX_TEST_TOKEN: abc
|
15
12
|
DROPBOX_ID: abc
|
16
13
|
DROPBOX_SECRET: abc
|
17
|
-
GITHUB_TEST_TOKEN: abc
|
18
14
|
DROPBOX_TEST_TOKEN: abc
|
15
|
+
GITHUB_ID: abc
|
16
|
+
GITHUB_SECRET: abc
|
17
|
+
GITHUB_TEST_TOKEN: abc
|
18
|
+
GOOGLE_ID: abc
|
19
|
+
GOOGLE_SECRET: abc
|
19
20
|
GOOGLE_TEST_TOKEN: abc
|
data/lib/worochi/agent.rb
CHANGED
@@ -246,7 +246,6 @@ end
|
|
246
246
|
Worochi::Config.services.each do |service|
|
247
247
|
begin
|
248
248
|
require "worochi/agent/#{service}"
|
249
|
-
rescue LoadError
|
250
|
-
Worochi::Log.warn "Found #{service}.yml but not #{service}.rb"
|
249
|
+
rescue LoadError # yml is defined but not the agent
|
251
250
|
end
|
252
251
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'ruby-box'
|
2
|
+
|
3
|
+
class Worochi
|
4
|
+
# The {Agent} for Box API.
|
5
|
+
# @see https://github.com/attachmentsme/ruby-box
|
6
|
+
class Agent::Box < Agent
|
7
|
+
# Initializes ruby-box client.
|
8
|
+
#
|
9
|
+
# @return [RubyBox::Client]
|
10
|
+
def init_client
|
11
|
+
session = RubyBox::Session.new(
|
12
|
+
client_id: 'dummy_id',
|
13
|
+
access_token: options[:token])
|
14
|
+
@client = RubyBox::Client.new(session)
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns a list of files and subdirectories at the remote path specified
|
18
|
+
# by `options[:dir]`.
|
19
|
+
#
|
20
|
+
# @param path [String] path to list instead of the current directory
|
21
|
+
# @return [Array<Hash>] list of files and subdirectories
|
22
|
+
def list(path=nil)
|
23
|
+
remote_path = list_path(path)
|
24
|
+
begin
|
25
|
+
folder = @client.folder(remote_path)
|
26
|
+
raise Error if folder.nil?
|
27
|
+
folder.items.map do |elem|
|
28
|
+
{
|
29
|
+
name: elem.name,
|
30
|
+
path: "#{remote_path}/#{elem.name}",
|
31
|
+
type: elem.type
|
32
|
+
}
|
33
|
+
end
|
34
|
+
rescue RubyBox::AuthError
|
35
|
+
box_error
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Push a single {Item} to Box.
|
40
|
+
#
|
41
|
+
# @param item [Item]
|
42
|
+
def push_item(item)
|
43
|
+
abs_path = full_path(item.path)
|
44
|
+
begin
|
45
|
+
folder = @client.create_folder(File.dirname(abs_path))
|
46
|
+
raise Error if folder.nil?
|
47
|
+
folder.upload_file(item.filename, item.content, true)
|
48
|
+
rescue RubyBox::AuthError
|
49
|
+
box_error
|
50
|
+
end
|
51
|
+
nil
|
52
|
+
end
|
53
|
+
|
54
|
+
# Deletes the file at `path` from Box.
|
55
|
+
#
|
56
|
+
# @param path [String] path relative to current directory
|
57
|
+
# @return [Boolean] `true` if a file was actually deleted
|
58
|
+
def delete(path)
|
59
|
+
abs_path = full_path(path)
|
60
|
+
begin
|
61
|
+
file = @client.file(abs_path)
|
62
|
+
return false if file.nil?
|
63
|
+
file.delete
|
64
|
+
rescue RubyBox::AuthError
|
65
|
+
box_error
|
66
|
+
end
|
67
|
+
true
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# Box tokens can expire so the user should check for this error to and
|
73
|
+
# refresh the access token when necessary.
|
74
|
+
def box_error
|
75
|
+
raise Error, 'Box access token is valid or has expired'
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
data/lib/worochi/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -29,7 +29,8 @@ end
|
|
29
29
|
test_token_prefix = {
|
30
30
|
google_drive: 'GOOGLE',
|
31
31
|
dropbox: 'DROPBOX',
|
32
|
-
github: 'GITHUB'
|
32
|
+
github: 'GITHUB',
|
33
|
+
box: 'BOX'
|
33
34
|
}
|
34
35
|
|
35
36
|
# Removes sensitive keys from recordings
|
@@ -69,7 +70,7 @@ RSpec.configure do |c|
|
|
69
70
|
if ENV["#{prefix}_TEST_TOKEN"].nil?
|
70
71
|
c.filter_run_excluding service
|
71
72
|
service_name = Worochi::Config.service_display_name(service)
|
72
|
-
puts "#{prefix}_TEST_TOKEN not found. Skipping
|
73
|
+
puts "#{prefix}_TEST_TOKEN not found. Skipping #{service_name} tests."
|
73
74
|
end
|
74
75
|
end
|
75
|
-
end
|
76
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Worochi::Agent::Box, :box do
|
4
|
+
let(:required_keys) { [] }
|
5
|
+
let(:client_class) { RubyBox::Client }
|
6
|
+
|
7
|
+
let(:agent) do
|
8
|
+
Worochi::Agent::Box.new(
|
9
|
+
token: ENV['BOX_TEST_TOKEN'],
|
10
|
+
dir: '/worochi/test')
|
11
|
+
end
|
12
|
+
|
13
|
+
it_should_behave_like 'a service agent'
|
14
|
+
|
15
|
+
describe '#push_item', :vcr do
|
16
|
+
it 'pushes a single item' do
|
17
|
+
item = Worochi::Item.open_single(local.source)
|
18
|
+
agent.push_item(item)
|
19
|
+
expect(agent.files).to include(local.name)
|
20
|
+
agent.delete(local.name)
|
21
|
+
expect(agent.files).not_to include(local.name)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#box_error', :vcr do
|
26
|
+
it 'raises an error on expired/invalid tokens' do
|
27
|
+
bad_agent = Worochi::Agent::Box.new(token: 'badtoken')
|
28
|
+
expect{bad_agent.files}.to raise_error(Worochi::Error)
|
29
|
+
item = Worochi::Item.open_single(local.source)
|
30
|
+
expect{bad_agent.push_item(item)}.to raise_error(Worochi::Error)
|
31
|
+
expect{bad_agent.delete(local.name)}.to raise_error(Worochi::Error)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/worochi.gemspec
CHANGED
@@ -32,6 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_runtime_dependency('dropbox-sdk') # Dropbox
|
33
33
|
s.add_runtime_dependency('google-api-client') # Google
|
34
34
|
s.add_runtime_dependency('octokit', ['1.25.0']) # GitHub
|
35
|
+
s.add_runtime_dependency('ruby-box') # Box
|
35
36
|
|
36
37
|
s.add_development_dependency('ruby-filemagic')
|
37
38
|
s.add_development_dependency('rspec', ['~> 2.14.1'])
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: worochi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Raven Jiang
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - '='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 1.25.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: ruby-box
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: ruby-filemagic
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -253,6 +267,7 @@ files:
|
|
253
267
|
- lib/worochi/agent/github.rb
|
254
268
|
- lib/worochi/agent/#example.rb
|
255
269
|
- lib/worochi/agent/google_drive.rb
|
270
|
+
- lib/worochi/agent/box.rb
|
256
271
|
- lib/worochi/agent/dropbox.rb
|
257
272
|
- lib/worochi/helper.rb
|
258
273
|
- lib/worochi/item.rb
|
@@ -274,6 +289,7 @@ files:
|
|
274
289
|
- spec/worochi/helper/github_helper_spec.rb
|
275
290
|
- spec/worochi/agent/dropbox_spec.rb
|
276
291
|
- spec/worochi/agent/github_spec.rb
|
292
|
+
- spec/worochi/agent/box_spec.rb
|
277
293
|
- spec/worochi/agent/google_drive_spec.rb
|
278
294
|
- spec/worochi/config_spec.rb
|
279
295
|
- spec/worochi/agent_spec.rb
|
@@ -317,6 +333,7 @@ test_files:
|
|
317
333
|
- spec/worochi/helper/github_helper_spec.rb
|
318
334
|
- spec/worochi/agent/dropbox_spec.rb
|
319
335
|
- spec/worochi/agent/github_spec.rb
|
336
|
+
- spec/worochi/agent/box_spec.rb
|
320
337
|
- spec/worochi/agent/google_drive_spec.rb
|
321
338
|
- spec/worochi/config_spec.rb
|
322
339
|
- spec/worochi/agent_spec.rb
|