nightcrawler_swift 0.7.0 → 0.8.0
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/Changelog.md +5 -0
- data/Gemfile.lock +5 -1
- data/README.md +47 -0
- data/lib/nightcrawler_swift/cli/formatters/basic.rb +6 -0
- data/lib/nightcrawler_swift/cli.rb +5 -0
- data/lib/nightcrawler_swift/command.rb +12 -8
- data/lib/nightcrawler_swift/commands/metadata.rb +13 -0
- data/lib/nightcrawler_swift/commands/multithread_sync.rb +44 -0
- data/lib/nightcrawler_swift/gateway.rb +2 -1
- data/lib/nightcrawler_swift/version.rb +1 -1
- data/lib/nightcrawler_swift.rb +3 -0
- data/nightcrawler_swift.gemspec +2 -1
- data/spec/lib/nightcrawler_swift/cli/formatters/basic_spec.rb +18 -0
- data/spec/lib/nightcrawler_swift/command_spec.rb +36 -48
- data/spec/lib/nightcrawler_swift/commands/metadata_spec.rb +64 -0
- data/spec/lib/nightcrawler_swift/gateway_spec.rb +16 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 206f894e8de465851f7a45dcea23615de0666dd4
|
4
|
+
data.tar.gz: 69f0ed04088e491d8d7bf1ea6e6b2c5c3bd03049
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9432b08baae481fc88123911809c78ada1300653af4ecd1cadda04d5b3776bbdfdfb6288fd3284a42aacca7056632c1fd26f9bd1eb833401efdec43504eb9226
|
7
|
+
data.tar.gz: 1d14060fafd907d4e0185ff5612a84c087ea58234219638fae4f07eabd6d5c3d50a78b264d548d90c50e1731b60e58628a5e59267df9b8bd1ceb23536fb9b982
|
data/Changelog.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.8.0
|
4
|
+
|
5
|
+
- Added support for ssl_version configuration
|
6
|
+
- Command for object metadata. Available for cli (closes #16, #17)
|
7
|
+
|
3
8
|
## 0.7.0
|
4
9
|
|
5
10
|
- CLI now supports ```--no-cache``` which ignores the cached connection and removes the cache file if it exists (issue #12)
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nightcrawler_swift (0.
|
4
|
+
nightcrawler_swift (0.8.0)
|
5
|
+
concurrent-ruby (~> 0.8.0)
|
5
6
|
multi_mime (>= 1.0.1)
|
6
7
|
rest-client
|
7
8
|
|
@@ -15,6 +16,8 @@ GEM
|
|
15
16
|
codeclimate-test-reporter (0.4.0)
|
16
17
|
simplecov (>= 0.7.1, < 1.0.0)
|
17
18
|
columnize (0.9.0)
|
19
|
+
concurrent-ruby (0.8.0)
|
20
|
+
ref (~> 1.0, >= 1.0.5)
|
18
21
|
debugger-linecache (1.2.0)
|
19
22
|
diff-lcs (1.2.5)
|
20
23
|
docile (1.1.5)
|
@@ -23,6 +26,7 @@ GEM
|
|
23
26
|
multi_mime (1.0.1)
|
24
27
|
netrc (0.10.2)
|
25
28
|
rake (10.3.2)
|
29
|
+
ref (1.0.5)
|
26
30
|
rest-client (1.7.2)
|
27
31
|
mime-types (>= 1.16, < 3.0)
|
28
32
|
netrc (~> 0.7)
|
data/README.md
CHANGED
@@ -74,6 +74,9 @@ config.nightcrawler_swift.ssl_client_key =
|
|
74
74
|
|
75
75
|
# default: nil
|
76
76
|
config.nightcrawler_swift.ssl_ca_file = "ca_certificate.pem"
|
77
|
+
|
78
|
+
#default: nil
|
79
|
+
config.nightcrawler_swift.ssl_version = "SSLv23"
|
77
80
|
```
|
78
81
|
|
79
82
|
By default it will use ```Rails.logger``` as logger, to change that use a different logger in configurations, like:
|
@@ -212,6 +215,19 @@ $ nswift delete <swift_path> # nswift delete assets/robots.txt
|
|
212
215
|
```sh
|
213
216
|
$ nswift url-for <swift_path> # nswift url-for assets/robots.txt
|
214
217
|
```
|
218
|
+
```sh
|
219
|
+
$ nswift metadata <swift_path>
|
220
|
+
# {
|
221
|
+
# "date": "Tue, 31 Mar 2015 02:10:40 GMT",
|
222
|
+
# "content_type": "text/css",
|
223
|
+
# "content_length": "50013",
|
224
|
+
# "last_modified": "Wed, 15 Oct 2014 13:38:56 GMT",
|
225
|
+
# "etag": "e13839c545f32be23b942a41f3ea7724",
|
226
|
+
# "x_timestamp": "1413380335.38118",
|
227
|
+
# "cache_control": "public, max-age=604800",
|
228
|
+
# "x_trans_id": "tx824d632ef9e54685a7563-005519f838"
|
229
|
+
# }
|
230
|
+
```
|
215
231
|
|
216
232
|
For any commands you could provide a different configuration file through the _-c_/_--config_ switch, as:
|
217
233
|
|
@@ -275,6 +291,37 @@ list.execute prefix: '/some/path'
|
|
275
291
|
# [{"hash": "...", "name": "/some/path/with/my_file_path.txt"}, {}, {}, ...]
|
276
292
|
```
|
277
293
|
|
294
|
+
### Metadata
|
295
|
+
|
296
|
+
```ruby
|
297
|
+
metadata = NightcrawlerSwift::Metadata.new
|
298
|
+
metadata.execute "my_file.css"
|
299
|
+
# {
|
300
|
+
# :date=>"Tue, 31 Mar 2015 01:46:10 GMT",
|
301
|
+
# :content_type=>"text/css",
|
302
|
+
# :content_length=>"50013",
|
303
|
+
# :last_modified=>"Wed, 15 Oct 2014 13:38:56 GMT",
|
304
|
+
# :etag=>"e13839c545f32be23b942a41f3ea7724",
|
305
|
+
# :x_timestamp=>"1413380335.38118",
|
306
|
+
# :cache_control=>"public, max-age=604800",
|
307
|
+
# :x_trans_id=>"tx92ca1becd1a74fa3ae1f2-005519fc62"
|
308
|
+
# }
|
309
|
+
|
310
|
+
# Consulting the bucket/container metadata
|
311
|
+
metadata.execute
|
312
|
+
# {
|
313
|
+
# :date=>"Tue, 31 Mar 2015 01:41:25 GMT",
|
314
|
+
# :content_type=>"application/xml; charset=utf-8",
|
315
|
+
# :content_length=>"98171",
|
316
|
+
# :x_container_object_count=>"374",
|
317
|
+
# :x_storage_policy=>"default-3x",
|
318
|
+
# :x_container_read=>".r:*",
|
319
|
+
# :x_container_bytes_used=>"7171468",
|
320
|
+
# :x_timestamp=>"1409750420.36261",
|
321
|
+
# :x_trans_id=>"tx17d8c66ab746436b8b7b6-005519fb40"
|
322
|
+
# }
|
323
|
+
```
|
324
|
+
|
278
325
|
### Delete
|
279
326
|
|
280
327
|
```ruby
|
@@ -30,6 +30,12 @@ module NightcrawlerSwift::CLI
|
|
30
30
|
@runner.log(deleted ? "success" : "failure")
|
31
31
|
end
|
32
32
|
|
33
|
+
def command_metadata command
|
34
|
+
filepath = @runner.argv.first
|
35
|
+
metadata = command.new.execute(filepath)
|
36
|
+
@runner.log JSON.pretty_generate(metadata)
|
37
|
+
end
|
38
|
+
|
33
39
|
def command_url_for command
|
34
40
|
filepath = @runner.argv.first
|
35
41
|
@runner.log command.new.execute(filepath)
|
@@ -32,6 +32,11 @@ module NightcrawlerSwift
|
|
32
32
|
command: NightcrawlerSwift::Delete
|
33
33
|
},
|
34
34
|
|
35
|
+
"metadata" => {
|
36
|
+
description: "Returns the object metadata in JSON format. Without <swift_path> returns the bucket/container metadata. Ex: nswift metadata assets/robots.txt",
|
37
|
+
command: NightcrawlerSwift::Metadata
|
38
|
+
},
|
39
|
+
|
35
40
|
"url-for" => {
|
36
41
|
description: "Returns the public url of an object. Format: nswift url-for <swift_path> Ex: nswift url-for robots.txt",
|
37
42
|
command: NightcrawlerSwift::CLI::UrlFor
|
@@ -19,9 +19,18 @@ module NightcrawlerSwift
|
|
19
19
|
|
20
20
|
protected
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
[
|
23
|
+
:get,
|
24
|
+
:head,
|
25
|
+
:delete
|
26
|
+
].each do |http_verb|
|
27
|
+
define_method http_verb do |*method_args|
|
28
|
+
url = method_args[0]
|
29
|
+
args = method_args[1] || {}
|
30
|
+
|
31
|
+
prepare_args args
|
32
|
+
Gateway.new(url).request {|r| r.send(http_verb, headers_and_params(args))}
|
33
|
+
end
|
25
34
|
end
|
26
35
|
|
27
36
|
def put url, args = {}
|
@@ -29,11 +38,6 @@ module NightcrawlerSwift
|
|
29
38
|
Gateway.new(url).request {|r| r.put args[:body], headers_and_params(args)}
|
30
39
|
end
|
31
40
|
|
32
|
-
def delete url, args = {}
|
33
|
-
prepare_args args
|
34
|
-
Gateway.new(url).request {|r| r.delete headers_and_params(args)}
|
35
|
-
end
|
36
|
-
|
37
41
|
private
|
38
42
|
def prepare_args args
|
39
43
|
args[:headers] ||= {}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module NightcrawlerSwift
|
2
|
+
class Metadata < Command
|
3
|
+
|
4
|
+
def execute path = nil
|
5
|
+
resource_url = "#{connection.internal_url}/#{options.bucket}/#{path}"
|
6
|
+
resource_url.gsub!(/\/$/, '') unless path
|
7
|
+
|
8
|
+
response = head resource_url
|
9
|
+
response.headers.symbolize_keys
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module NightcrawlerSwift
|
2
|
+
class MultithreadSync < Command
|
3
|
+
DEFAULT_POOL_SIZE = 5
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
require 'concurrent/utilities'
|
7
|
+
require 'concurrent/executors'
|
8
|
+
@logger = NightcrawlerSwift.logger
|
9
|
+
end
|
10
|
+
|
11
|
+
def execute args = {}
|
12
|
+
pool_size = args[:pool_size] || DEFAULT_POOL_SIZE
|
13
|
+
dir_path = args[:dir_path]
|
14
|
+
|
15
|
+
@logger.info "[NightcrawlerSwift] dir_path: #{dir_path}"
|
16
|
+
@logger.info "[NightcrawlerSwift] multithread sync, #{Concurrent.processor_count} processors"
|
17
|
+
|
18
|
+
assets = Dir["#{dir_path}/**/**"].
|
19
|
+
reject {|fullpath| File.directory?(fullpath)}.
|
20
|
+
map {|fullpath|
|
21
|
+
path = fullpath.gsub("#{dir_path}/", "")
|
22
|
+
OpenStruct.new(path: path, fullpath: fullpath)
|
23
|
+
}
|
24
|
+
|
25
|
+
pool = Concurrent::FixedThreadPool.new pool_size
|
26
|
+
|
27
|
+
assets.each do |asset|
|
28
|
+
pool.post do
|
29
|
+
@logger.info "[NightcrawlerSwift] #{asset.path}"
|
30
|
+
|
31
|
+
upload = Upload.new
|
32
|
+
upload.execute asset.path, File.open(asset.fullpath, "r")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
sleep(1) while pool.queue_length > 0
|
37
|
+
|
38
|
+
@logger.info "[NightcrawlerSwift] shutting down"
|
39
|
+
pool.shutdown
|
40
|
+
pool.wait_for_termination
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
data/lib/nightcrawler_swift.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "cgi"
|
2
2
|
require "date"
|
3
|
+
require "json"
|
3
4
|
require "logger"
|
4
5
|
require "digest"
|
5
6
|
require "ostruct"
|
@@ -16,9 +17,11 @@ require "nightcrawler_swift/connection"
|
|
16
17
|
require "nightcrawler_swift/command"
|
17
18
|
require "nightcrawler_swift/commands/upload"
|
18
19
|
require "nightcrawler_swift/commands/download"
|
20
|
+
require "nightcrawler_swift/commands/metadata"
|
19
21
|
require "nightcrawler_swift/commands/list"
|
20
22
|
require "nightcrawler_swift/commands/delete"
|
21
23
|
require "nightcrawler_swift/commands/sync"
|
24
|
+
require "nightcrawler_swift/commands/multithread_sync"
|
22
25
|
require "nightcrawler_swift/railtie" if defined?(Rails)
|
23
26
|
|
24
27
|
module NightcrawlerSwift
|
data/nightcrawler_swift.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "rest-client"
|
22
|
-
spec.add_dependency "multi_mime",
|
22
|
+
spec.add_dependency "multi_mime", ">= 1.0.1"
|
23
|
+
spec.add_dependency "concurrent-ruby", "~> 0.8.0"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.6"
|
25
26
|
spec.add_development_dependency "rake"
|
@@ -100,6 +100,24 @@ describe NightcrawlerSwift::CLI::Formatters::Basic do
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
+
describe "#command_metadata" do
|
104
|
+
let :command_class do
|
105
|
+
NightcrawlerSwift::Metadata
|
106
|
+
end
|
107
|
+
|
108
|
+
let :metadata do
|
109
|
+
{some_metadata: true}
|
110
|
+
end
|
111
|
+
|
112
|
+
it "returns the metadata of the given path" do
|
113
|
+
expect(command_class).to receive(:new).and_return(command)
|
114
|
+
expect(command).to receive(:execute).with(filepath).and_return(metadata)
|
115
|
+
expect(runner).to receive(:log).with(JSON.pretty_generate(metadata))
|
116
|
+
expect(runner).to receive(:argv).and_return([filepath])
|
117
|
+
subject.command_metadata command_class
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
103
121
|
describe "#command_url_for" do
|
104
122
|
let :command_class do
|
105
123
|
NightcrawlerSwift::CLI::UrlFor
|
@@ -15,7 +15,7 @@ describe NightcrawlerSwift::Command do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
let(:connection) { NightcrawlerSwift::Connection.new }
|
18
|
-
let(:restclient) { double(:restclient, put: response, get: response, delete: response) }
|
18
|
+
let(:restclient) { double(:restclient, put: response, get: response, head: response, delete: response) }
|
19
19
|
let(:response) { double(:response) }
|
20
20
|
let(:url) { "http://url-com" }
|
21
21
|
let(:token) { "token" }
|
@@ -28,6 +28,33 @@ describe NightcrawlerSwift::Command do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
+
shared_examples "standard http method" do
|
32
|
+
let :execute_http do
|
33
|
+
subject.send http_verb, url, body: 'ignore_me', headers: { content_type: :json }, params: { b: 2 }
|
34
|
+
end
|
35
|
+
|
36
|
+
it_behaves_like "command with configured gateway"
|
37
|
+
|
38
|
+
it "ignores body" do
|
39
|
+
execute_http
|
40
|
+
expect(restclient).to have_received(http_verb).with(kind_of(Hash))
|
41
|
+
end
|
42
|
+
|
43
|
+
it "sends headers with token" do
|
44
|
+
execute_http
|
45
|
+
expect(restclient).to have_received(http_verb).with(hash_including({ content_type: :json, "X-Storage-Token" => token }))
|
46
|
+
end
|
47
|
+
|
48
|
+
it "sends params" do
|
49
|
+
execute_http
|
50
|
+
expect(restclient).to have_received(http_verb).with(hash_including(params: { b: 2 }))
|
51
|
+
end
|
52
|
+
|
53
|
+
it "returns RestClient response" do
|
54
|
+
expect(execute_http).to eql(response)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
31
58
|
describe "#connection" do
|
32
59
|
context "when disconnected" do
|
33
60
|
before do
|
@@ -59,57 +86,18 @@ describe NightcrawlerSwift::Command do
|
|
59
86
|
end
|
60
87
|
|
61
88
|
describe "#get" do
|
62
|
-
let :
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
it_behaves_like "command with configured gateway"
|
67
|
-
|
68
|
-
it "ignores body" do
|
69
|
-
execute_http
|
70
|
-
expect(restclient).to have_received(:get).with(kind_of(Hash))
|
71
|
-
end
|
72
|
-
|
73
|
-
it "sends headers with token" do
|
74
|
-
execute_http
|
75
|
-
expect(restclient).to have_received(:get).with(hash_including({ content_type: :json, "X-Storage-Token" => token }))
|
76
|
-
end
|
77
|
-
|
78
|
-
it "sends params" do
|
79
|
-
execute_http
|
80
|
-
expect(restclient).to have_received(:get).with(hash_including(params: { b: 2 }))
|
81
|
-
end
|
89
|
+
let(:http_verb) { :get }
|
90
|
+
it_behaves_like "standard http method"
|
91
|
+
end
|
82
92
|
|
83
|
-
|
84
|
-
|
85
|
-
|
93
|
+
describe "#head" do
|
94
|
+
let(:http_verb) { :head }
|
95
|
+
it_behaves_like "standard http method"
|
86
96
|
end
|
87
97
|
|
88
98
|
describe "#delete" do
|
89
|
-
let :
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
it_behaves_like "command with configured gateway"
|
94
|
-
|
95
|
-
it "ignores body" do
|
96
|
-
execute_http
|
97
|
-
expect(restclient).to have_received(:delete).with(kind_of(Hash))
|
98
|
-
end
|
99
|
-
|
100
|
-
it "sends headers with token" do
|
101
|
-
execute_http
|
102
|
-
expect(restclient).to have_received(:delete).with(hash_including({ content_type: :json, "X-Storage-Token" => token }))
|
103
|
-
end
|
104
|
-
|
105
|
-
it "sends params" do
|
106
|
-
execute_http
|
107
|
-
expect(restclient).to have_received(:delete).with(hash_including(params: { b: 2 }))
|
108
|
-
end
|
109
|
-
|
110
|
-
it "returns RestClient response" do
|
111
|
-
expect(execute_http).to eql(response)
|
112
|
-
end
|
99
|
+
let(:http_verb) { :delete }
|
100
|
+
it_behaves_like "standard http method"
|
113
101
|
end
|
114
102
|
|
115
103
|
describe "#put" do
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe NightcrawlerSwift::Metadata do
|
4
|
+
|
5
|
+
let(:connection) { NightcrawlerSwift::Connection.new }
|
6
|
+
let(:token) { "token" }
|
7
|
+
let(:expires_at) { (DateTime.now + 60).to_time }
|
8
|
+
let(:internal_url) { "server-url" }
|
9
|
+
let(:bucket) { "rogue" }
|
10
|
+
|
11
|
+
subject do
|
12
|
+
NightcrawlerSwift::Metadata.new
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
allow(NightcrawlerSwift).to receive(:connection).and_return(connection)
|
17
|
+
allow(connection).to receive(:token_id).and_return(token)
|
18
|
+
allow(connection).to receive(:expires_at).and_return(expires_at)
|
19
|
+
allow(connection).to receive(:internal_url).and_return(internal_url)
|
20
|
+
NightcrawlerSwift.configure bucket: bucket
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#execute" do
|
24
|
+
let(:file_path) { "file_path.css" }
|
25
|
+
let(:execute) { subject.execute file_path }
|
26
|
+
|
27
|
+
let :response do
|
28
|
+
double(:response, code: 200, body: "", headers: {
|
29
|
+
"content_type" => "text/css",
|
30
|
+
"content_length" => "50013",
|
31
|
+
"last_modified" => "Wed, 15 Oct 2014 13:38:56 GMT",
|
32
|
+
"etag" => "e13839c545f32be23b942a41f3ea7724",
|
33
|
+
"x_timestamp" => "1413380335.38118",
|
34
|
+
"cache_control" => "public, max-age=604800",
|
35
|
+
"x_trans_id" => "tx824d632ef9e54685a7563-005519f838"
|
36
|
+
})
|
37
|
+
end
|
38
|
+
|
39
|
+
before do
|
40
|
+
allow(subject).to receive(:head).and_return(response)
|
41
|
+
end
|
42
|
+
|
43
|
+
context "success" do
|
44
|
+
it "gets using internal url" do
|
45
|
+
execute
|
46
|
+
expect(subject).to have_received(:head).with("server-url/#{bucket}/#{file_path}")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns headers with symbolized keys" do
|
50
|
+
output = execute
|
51
|
+
expect(output).to eql response.headers.symbolize_keys
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when the path was not informed" do
|
56
|
+
let(:file_path) { nil }
|
57
|
+
|
58
|
+
it "removes the trailing slash" do
|
59
|
+
execute
|
60
|
+
expect(subject).to have_received(:head).with("server-url/#{bucket}")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -81,6 +81,22 @@ describe NightcrawlerSwift::Gateway do
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
|
+
context "but only 'ssl_version'" do
|
85
|
+
let :opts do
|
86
|
+
{ssl_version: 'sslversion'}
|
87
|
+
end
|
88
|
+
|
89
|
+
it "uses the configured option" do
|
90
|
+
expect(RestClient::Resource).to receive(:new).with(
|
91
|
+
url,
|
92
|
+
timeout: NightcrawlerSwift.options.timeout,
|
93
|
+
verify_ssl: NightcrawlerSwift.options.verify_ssl,
|
94
|
+
ssl_version: NightcrawlerSwift.options.ssl_version
|
95
|
+
)
|
96
|
+
subject
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
84
100
|
context "using all options" do
|
85
101
|
let :opts do
|
86
102
|
{
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nightcrawler_swift
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- tulios
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-05-18 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -39,6 +39,20 @@ dependencies:
|
|
39
39
|
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 1.0.1
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: concurrent-ruby
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 0.8.0
|
49
|
+
type: :runtime
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 0.8.0
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: bundler
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -141,6 +155,8 @@ files:
|
|
141
155
|
- lib/nightcrawler_swift/commands/delete.rb
|
142
156
|
- lib/nightcrawler_swift/commands/download.rb
|
143
157
|
- lib/nightcrawler_swift/commands/list.rb
|
158
|
+
- lib/nightcrawler_swift/commands/metadata.rb
|
159
|
+
- lib/nightcrawler_swift/commands/multithread_sync.rb
|
144
160
|
- lib/nightcrawler_swift/commands/sync.rb
|
145
161
|
- lib/nightcrawler_swift/commands/upload.rb
|
146
162
|
- lib/nightcrawler_swift/connection.rb
|
@@ -168,6 +184,7 @@ files:
|
|
168
184
|
- spec/lib/nightcrawler_swift/commands/delete_spec.rb
|
169
185
|
- spec/lib/nightcrawler_swift/commands/download_spec.rb
|
170
186
|
- spec/lib/nightcrawler_swift/commands/list_spec.rb
|
187
|
+
- spec/lib/nightcrawler_swift/commands/metadata_spec.rb
|
171
188
|
- spec/lib/nightcrawler_swift/commands/sync_spec.rb
|
172
189
|
- spec/lib/nightcrawler_swift/commands/upload_spec.rb
|
173
190
|
- spec/lib/nightcrawler_swift/connection_spec.rb
|
@@ -219,6 +236,7 @@ test_files:
|
|
219
236
|
- spec/lib/nightcrawler_swift/commands/delete_spec.rb
|
220
237
|
- spec/lib/nightcrawler_swift/commands/download_spec.rb
|
221
238
|
- spec/lib/nightcrawler_swift/commands/list_spec.rb
|
239
|
+
- spec/lib/nightcrawler_swift/commands/metadata_spec.rb
|
222
240
|
- spec/lib/nightcrawler_swift/commands/sync_spec.rb
|
223
241
|
- spec/lib/nightcrawler_swift/commands/upload_spec.rb
|
224
242
|
- spec/lib/nightcrawler_swift/connection_spec.rb
|