nightcrawler_swift 0.2.3 → 0.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c8ecba7c2f2eb54d05e60faf6f646e86f3cbabd6
4
- data.tar.gz: 90002c61b8d4980170bda37ba8350a215e016917
3
+ metadata.gz: 792e1b2a4c65b85291d7a5c733fbd238f6b4f531
4
+ data.tar.gz: b34fa251f341f191b7627d8ac200bb0daa43fdbd
5
5
  SHA512:
6
- metadata.gz: 59ac7d43fb910a23e5f8b5cc79ae674c32f64001e9d013055c289c1ad0c85af24fee8a638584080330c804e7322dbe6d603b17f8a30a7e52e5bffe0e40696e45
7
- data.tar.gz: d9d997b31878e5552c8c1128135a9f7a620df7a4038814f72bbe4f46a6d536ebafdb192e9f3cffefd54b72cbbc49fd91341fb9dbd682419c7b25289d6acc9a1d
6
+ metadata.gz: be4f048df14fe2453b4fc22ed8e495434c5f4fb51009f8e5765fae6f61cbc160dcf12ae4c2d274e4aa69096884b629d8e83538f03bd14dd4992ad39dc1e66f91
7
+ data.tar.gz: d9bd21e55c32c1ee73f16e817c7edf2c529552d94402c615a63a37026f01eb5ba477b21c461878f35fcd54953e574553dda79e5ce6f50cf5b745e61ad55030a7
data/.gitignore CHANGED
@@ -1 +1,2 @@
1
1
  .DS_Store
2
+ pkg
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
4
+ script: bundle exec rspec
data/Changelog.md ADDED
@@ -0,0 +1,34 @@
1
+ # Changelog
2
+
3
+ ## 0.3.0
4
+
5
+ - Included ```Cache-Control``` header to upload command through max_age configuration parameter
6
+ - Sending etag when uploading assets
7
+ - Bugfix: rake task now returns exit code 1 when error
8
+
9
+ ## 0.2.3
10
+
11
+ - Removed rest-client version due to compatibility issues
12
+
13
+ ## 0.2.2
14
+
15
+ - Included ```Content-Type``` header to upload command
16
+
17
+ ## 0.2.1
18
+
19
+ - Bugfix: sync was not connecting
20
+
21
+ ## 0.2.0
22
+
23
+ - Better Rails integration
24
+ - Download command
25
+
26
+ ## 0.1.1
27
+
28
+ - Bugfix: sync broken syntax
29
+
30
+ ## 0.1.0
31
+
32
+ - Connection object
33
+ - Sync, upload, delete and list commands
34
+ - Rake task to sync Rails public dir
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- nightcrawler_swift (0.2.3)
4
+ nightcrawler_swift (0.3.0)
5
5
  multi_mime (>= 1.0.1)
6
6
  rest-client
7
7
 
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  [![Code Climate](https://codeclimate.com/github/tulios/nightcrawler_swift/badges/gpa.svg)](https://codeclimate.com/github/tulios/nightcrawler_swift)
2
-
2
+ [![Travis](https://api.travis-ci.org/tulios/nightcrawler_swift.svg?branch=master)](https://travis-ci.org/tulios/nightcrawler_swift)
3
+ [![Gem Version](https://badge.fury.io/rb/nightcrawler_swift.svg)](http://badge.fury.io/rb/nightcrawler_swift)
3
4
  # Nightcrawler Swift
4
5
 
5
6
  Like the X-Men nightcrawler this gem teleports your assets to a OpenStack Swift bucket/container. It was designed to sync your assets with OpenStack Swift and allow some operations with your buckets/containers.
@@ -21,17 +22,19 @@ Or install it yourself as:
21
22
  ## Usage
22
23
 
23
24
  ### With Rails
24
- #### 1) Configure your swift credentials
25
+ #### 1) Configure your swift credentials and options
25
26
 
26
27
  _In config/application.rb_ or _config/environments/*.rb_
27
28
 
28
29
  ```ruby
29
30
  config.nightcrawler_swift.bucket = "rogue"
30
- config.nightcrawler_swift.tenent_name = "nightcrawler"
31
+ config.nightcrawler_swift.tenant_name = "nightcrawler"
31
32
  config.nightcrawler_swift.username = "my_username1"
32
33
  config.nightcrawler_swift.password = "my_password1"
33
34
  config.nightcrawler_swift.auth_url = "https://auth.url.com:123/v2.0/tokens"
35
+ config.nightcrawler_swift.max_age = 3600 #optional
34
36
  ```
37
+ **max_age** will be used to define *Cache-Control:max-age=<value>* header. It's not required.
35
38
 
36
39
  By default it will use ```Rails.logger``` as logger, to change that use a different logger in configurations, like:
37
40
 
@@ -49,7 +52,7 @@ It will invoke ```rake assets:precompile``` and will copy your public directory
49
52
 
50
53
  ### Programatically
51
54
 
52
- #### 1) Configure your swift credentials
55
+ #### 1) Configure your swift credentials and options
53
56
 
54
57
  ```ruby
55
58
  NightcrawlerSwift.configure({
@@ -57,7 +60,8 @@ NightcrawlerSwift.configure({
57
60
  tenant_name: "nightcrawler"
58
61
  username: "my_username1",
59
62
  password: "my_password1",
60
- auth_url: "https://auth.url.com:123/v2.0/tokens"
63
+ auth_url: "https://auth.url.com:123/v2.0/tokens",
64
+ max_age: 3600 #optional
61
65
  })
62
66
  ```
63
67
 
@@ -6,6 +6,7 @@ module NightcrawlerSwift
6
6
  #
7
7
  def initialize opts = {}
8
8
  @opts = OpenStruct.new opts
9
+ raise NightcrawlerSwift::Exceptions::ConfigurationError.new "max_age should be an Integer" if @opts.max_age and not @opts.max_age.is_a? Numeric
9
10
  end
10
11
 
11
12
  def connect!
@@ -12,6 +12,6 @@ module NightcrawlerSwift
12
12
 
13
13
  class ConnectionError < BaseError; end
14
14
  class NotFoundError < BaseError; end
15
-
15
+ class ConfigurationError < StandardError; end
16
16
  end
17
17
  end
@@ -5,8 +5,12 @@ namespace :nightcrawler_swift do
5
5
 
6
6
  desc "Synchronizes the public directory with OpenStack Swift"
7
7
  task asset_sync: ["assets:precompile", "environment"] do
8
- raise unless defined?(Rails)
9
- NightcrawlerSwift.sync File.join(Rails.root, "public")
8
+ begin
9
+ NightcrawlerSwift.sync File.join(Rails.root, "public")
10
+ rescue => e
11
+ STDERR.puts e.message
12
+ exit 1
13
+ end
10
14
  end
11
15
 
12
16
  end
@@ -1,9 +1,15 @@
1
+ require 'digest'
2
+
1
3
  module NightcrawlerSwift
2
4
  class Upload < Command
3
5
 
4
6
  def execute path, file
5
7
  content_type = MultiMime.by_file(file).content_type
6
- response = put "#{connection.upload_url}/#{path}", body: file.read, headers: {content_type: content_type}
8
+ content = file.read
9
+ etag = '"%s"' % Digest::MD5.new.update(content).hexdigest
10
+ headers = {etag: etag, content_type: content_type}
11
+ headers.merge!({cache_control: "max-age=#{connection.opts.max_age}"}) if connection.opts.max_age
12
+ response = put "#{connection.upload_url}/#{path}", body: content, headers: headers
7
13
  [200, 201].include?(response.code)
8
14
  end
9
15
 
@@ -1,3 +1,3 @@
1
1
  module NightcrawlerSwift
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -8,7 +8,8 @@ describe NightcrawlerSwift::Connection do
8
8
  tenant_name: "tenant_username1",
9
9
  username: "username1",
10
10
  password: "some-pass",
11
- auth_url: "https://auth.url.com:123/v2.0/tokens"
11
+ auth_url: "https://auth.url.com:123/v2.0/tokens",
12
+ max_age: 31536000 #1 year
12
13
  }
13
14
  end
14
15
 
@@ -89,6 +90,16 @@ describe NightcrawlerSwift::Connection do
89
90
  it "returns self" do
90
91
  expect(subject.connect!).to eql(subject)
91
92
  end
93
+
94
+ context "max_age" do
95
+ it "stores it" do
96
+ expect(subject.opts.max_age).to eql(opts[:max_age])
97
+ end
98
+
99
+ it "should be an integer" do
100
+ expect { NightcrawlerSwift::Connection.new({max_age: "a string"}) }.to raise_error(NightcrawlerSwift::Exceptions::ConfigurationError)
101
+ end
102
+ end
92
103
  end
93
104
 
94
105
  describe "when some error happens" do
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ unless defined?(Rails)
4
+ module Rails
5
+ def self.root; end
6
+ end
7
+ end
8
+
9
+ describe "asset_sync.rake" do
10
+ let :rake do
11
+ Rake.application = Rake::Application.new
12
+ end
13
+
14
+ let :load_path do
15
+ [File.expand_path(File.join(File.dirname(__FILE__), "../../../../lib/nightcrawler_swift/tasks"))]
16
+ end
17
+
18
+ before do
19
+ rake.rake_require "asset_sync", load_path, []
20
+
21
+ Rake::Task.define_task("environment")
22
+ Rake::Task.define_task("assets:precompile")
23
+ end
24
+
25
+ describe "nightcrawler_swift:rails:asset_sync" do
26
+ let(:task_name) { "nightcrawler_swift:rails:asset_sync" }
27
+ subject { rake[task_name] }
28
+
29
+ before do
30
+ allow(Rails).to receive(:root).and_return(".")
31
+ end
32
+
33
+ it "requires environment and assets:precompile" do
34
+ expect(subject.prerequisites).to include "environment"
35
+ expect(subject.prerequisites).to include "assets:precompile"
36
+ end
37
+
38
+ it "calls sync with Rails public dir path" do
39
+ expect(NightcrawlerSwift).to receive(:sync).with("./public")
40
+ subject.invoke
41
+ end
42
+
43
+ context "when occurs an error" do
44
+ it "exits with code 1" do
45
+ allow(STDERR).to receive(:puts)
46
+ allow(NightcrawlerSwift).to receive(:sync).and_raise(StandardError.new)
47
+ code = "wrong code"
48
+
49
+ begin
50
+ subject.invoke
51
+ rescue SystemExit => e
52
+ code = e.status
53
+ end
54
+
55
+ expect(code).to eql(1)
56
+ end
57
+ end
58
+ end
59
+ end
@@ -1,3 +1,4 @@
1
+ require 'digest'
1
2
  require 'spec_helper'
2
3
 
3
4
  describe NightcrawlerSwift::Upload do
@@ -14,13 +15,21 @@ describe NightcrawlerSwift::Upload do
14
15
  end
15
16
 
16
17
  let :connection do
17
- double :connection, upload_url: "server-url"
18
+ double :connection, upload_url: "server-url", opts: OpenStruct.new {}
18
19
  end
19
20
 
20
21
  let :response do
21
22
  double(:response, code: 201)
22
23
  end
23
24
 
25
+ let :etag do
26
+ '"%s"' % Digest::MD5.new.update(file.read).hexdigest
27
+ end
28
+
29
+ let :max_age do
30
+ 31536000
31
+ end
32
+
24
33
  before do
25
34
  allow(NightcrawlerSwift).to receive(:connection).and_return(connection)
26
35
  allow(subject).to receive(:put).and_return(response)
@@ -41,9 +50,9 @@ describe NightcrawlerSwift::Upload do
41
50
  expect(subject).to have_received(:put).with(anything, hash_including(body: "content"))
42
51
  end
43
52
 
44
- it "sends file content_type as header" do
53
+ it "sends file metadata as headers" do
45
54
  execute
46
- expect(subject).to have_received(:put).with(anything, hash_including(headers: { content_type: "text/css"}))
55
+ expect(subject).to have_received(:put).with(anything, hash_including(headers: { content_type: "text/css", etag: etag}))
47
56
  end
48
57
 
49
58
  it "sends to upload url with given path" do
@@ -51,6 +60,12 @@ describe NightcrawlerSwift::Upload do
51
60
  expect(subject).to have_received(:put).with("server-url/file_name", anything)
52
61
  end
53
62
 
63
+ it "sends max_age into headers" do
64
+ connection.opts.max_age = max_age
65
+ execute
66
+ expect(subject).to have_received(:put).with(anything, hash_including(headers: { content_type: "text/css", etag: etag, cache_control: "max-age=#{max_age}" }))
67
+ end
68
+
54
69
  context "when response code is 200" do
55
70
  let(:response) { double(:response, code: 200) }
56
71
  it { expect(execute).to be true }
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "rake"
1
2
  require "byebug"
2
3
  require "nightcrawler_swift"
3
4
 
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.2.3
4
+ version: 0.3.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: 2014-08-28 00:00:00.000000000 Z
12
+ date: 2014-08-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
@@ -108,6 +108,8 @@ files:
108
108
  - ".rspec"
109
109
  - ".ruby-gemset"
110
110
  - ".ruby-version"
111
+ - ".travis.yml"
112
+ - Changelog.md
111
113
  - Gemfile
112
114
  - Gemfile.lock
113
115
  - LICENSE.txt
@@ -138,6 +140,7 @@ files:
138
140
  - spec/lib/nightcrawler_swift/download_spec.rb
139
141
  - spec/lib/nightcrawler_swift/list_spec.rb
140
142
  - spec/lib/nightcrawler_swift/sync_spec.rb
143
+ - spec/lib/nightcrawler_swift/tasks/asset_sync_spec.rb
141
144
  - spec/lib/nightcrawler_swift/upload_spec.rb
142
145
  - spec/lib/nightcrawler_swift_spec.rb
143
146
  - spec/spec_helper.rb
@@ -179,6 +182,7 @@ test_files:
179
182
  - spec/lib/nightcrawler_swift/download_spec.rb
180
183
  - spec/lib/nightcrawler_swift/list_spec.rb
181
184
  - spec/lib/nightcrawler_swift/sync_spec.rb
185
+ - spec/lib/nightcrawler_swift/tasks/asset_sync_spec.rb
182
186
  - spec/lib/nightcrawler_swift/upload_spec.rb
183
187
  - spec/lib/nightcrawler_swift_spec.rb
184
188
  - spec/spec_helper.rb