middleman-s3_sync 3.0.13 → 3.0.14

Sign up to get free protection for your applications and to get access to all the features.
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
@@ -0,0 +1,17 @@
1
+ ---
2
+ language: ruby
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ env:
7
+ global:
8
+ - secure: ! 'dQ/vYDmUZEW9LD8IyTRFoRFo24w2yJTYQHuAS24vfKToDZ0BO2/Tpq5lh0vb
9
+
10
+ EJ25M7+IwJgo0PC++c1cbssurpNvNeMmDMKuBd6IjnSoJSzK6AszK5wA8dRs
11
+
12
+ gd3RC+G5lJ2sKPip28t6bIf5K6KFPD/3d45rE+qY9rXZxCwMJHw='
13
+ - secure: ! 'N26NTcIxZa6kUVMRPe2HONMjcAKTJUAFBMOXu9CC6FAyeIMFbldUMDs2Dk3D
14
+
15
+ CWPYiWQmqXywTbqHsnPfv9LwqQ9zntsURlq8I5JPVGNvf7QWqKdojI05cIiS
16
+
17
+ kT7C8IqnK3RzVmx4WZ5qFYxG6ypwilYq1px0OKjB4JHbFR5bj18='
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Middleman::S3Sync
2
2
 
3
- [![Code
4
- Climate](https://codeclimate.com/github/fredjean/middleman-s3_sync.png)](https://codeclimate.com/github/fredjean/middleman-s3_sync)
3
+ [![Code Climate](https://codeclimate.com/github/fredjean/middleman-s3_sync.png)](https://codeclimate.com/github/fredjean/middleman-s3_sync) [![Build Status](https://travis-ci.org/fredjean/middleman-s3_sync.png?branch=master)](https://travis-ci.org/fredjean/middleman-s3_sync)
5
4
 
6
5
  This gem determines which files need to be added, updated and optionally deleted
7
6
  and only transfer these files up. This reduces the impact of an update
@@ -47,6 +46,27 @@ end
47
46
 
48
47
  You can then start synchronizing files with S3 through ```middleman s3_sync```.
49
48
 
49
+ ### Configuration Defaults
50
+
51
+ The following defaults apply to the configuration items:
52
+
53
+ | Setting | Default |
54
+ | ----------------- | ---------------------------- |
55
+ | aws_access_key_id | ```ENV['AWS_ACCESS_KEY_ID``` |
56
+ | aws_secret_access_key | ```ENV['AWS_SECRET_ACCESS_KEY']``` |
57
+ | delete | ```true``` |
58
+ | after_build | ```false``` |
59
+ | prefer_gzip | ```true``` |
60
+
61
+ You do not need to specify the settings that match the defaults. This
62
+ simplify the configuration of the extension:
63
+
64
+ ```ruby
65
+ activate :s3_sync do |s3_sync|
66
+ s3_sync.bucket = 'my.bucket.com'
67
+ end
68
+ ```
69
+
50
70
  ## Push All Content to S3
51
71
 
52
72
  There are situations where you might need to push the files to S3. In
data/Rakefile CHANGED
@@ -1 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -1,131 +1,7 @@
1
1
  require 'middleman-core'
2
- require 'fog'
3
- require 'pmap'
4
- require 'digest/md5'
5
- require 'middleman-s3_sync/version'
6
- require 'middleman-s3_sync/commands'
7
- require 'middleman/s3_sync/status'
8
- require 'middleman/s3_sync/resource'
9
- require 'middleman-s3_sync/extension'
10
- require 'ruby-progressbar'
11
-
12
- Fog::Logger[:warning] = nil
2
+ require 'middleman/s3_sync'
13
3
 
14
4
  ::Middleman::Extensions.register(:s3_sync, '>= 3.0.0') do
15
5
  ::Middleman::S3Sync
16
6
  end
17
7
 
18
- module Middleman
19
- module S3Sync
20
- class << self
21
- include Status
22
-
23
- def sync
24
- unless work_to_be_done?
25
- say_status "\nAll S3 files are up to date."
26
- return
27
- end
28
-
29
- say_status "\nReady to apply updates to #{s3_sync_options.bucket}."
30
-
31
- create_resources
32
- update_resources
33
- delete_resources
34
- end
35
-
36
- def bucket
37
- @bucket ||= connection.directories.get(s3_sync_options.bucket)
38
- end
39
-
40
- protected
41
- def connection
42
- @connection ||= Fog::Storage.new({
43
- :provider => 'AWS',
44
- :aws_access_key_id => s3_sync_options.aws_access_key_id,
45
- :aws_secret_access_key => s3_sync_options.aws_secret_access_key,
46
- :region => s3_sync_options.region
47
- })
48
- end
49
-
50
- def resources
51
- @resources ||= paths.pmap do |p|
52
- progress_bar.increment
53
- S3Sync::Resource.new(p)
54
- end
55
- end
56
-
57
- def progress_bar
58
- @progress_bar ||= ProgressBar.create(total: paths.length)
59
- end
60
-
61
- def paths
62
- @paths ||= begin
63
- say_status "Gathering the paths to evaluate."
64
- (remote_paths + local_paths).uniq.sort
65
- end
66
- end
67
-
68
- def local_paths
69
- @local_paths ||= begin
70
- local_paths = (Dir[build_dir + "/**/*"] + Dir[build_dir + "/**/.*"])
71
- .reject { |p| File.directory?(p) }
72
-
73
- if s3_sync_options.prefer_gzip
74
- local_paths.reject! { |p| p =~ /\.gz$/ && File.exist?(p.gsub(/\.gz$/, '')) }
75
- end
76
-
77
- local_paths.pmap { |p| p.gsub(/#{build_dir}\//, '') }
78
- end
79
- end
80
-
81
- def remote_paths
82
- @remote_paths ||= bucket.files.map{ |f| f.key }.reject { |p| p =~ %r{/$} }
83
- end
84
-
85
- def create_resources
86
- files_to_create.each do |r|
87
- r.create!
88
- end
89
- end
90
-
91
- def update_resources
92
- files_to_update.each do |r|
93
- r.update!
94
- end
95
- end
96
-
97
- def delete_resources
98
- files_to_delete.each do |r|
99
- r.destroy!
100
- end
101
- end
102
-
103
- def work_to_be_done?
104
- !(files_to_create.empty? && files_to_update.empty? && files_to_delete.empty?)
105
- end
106
-
107
- def files_to_delete
108
- @files_to_delete ||= if s3_sync_options.delete
109
- resources.select { |r| r.to_delete? }
110
- else
111
- []
112
- end
113
- end
114
-
115
- def files_to_create
116
- @files_to_create ||= resources.select { |r| r.to_create? }
117
- end
118
-
119
- def files_to_update
120
- return resources.select { |r| r.local? } if s3_sync_options.force
121
-
122
- @files_to_update ||= resources.select { |r| r.to_update? }
123
- end
124
-
125
- def build_dir
126
- @build_dir ||= s3_sync_options.build_dir
127
- end
128
- end
129
- end
130
- end
131
-
@@ -3,77 +3,9 @@ require 'map'
3
3
 
4
4
  module Middleman
5
5
  module S3Sync
6
- class Options < Struct.new(
7
- :prefix,
8
- :bucket,
9
- :region,
10
- :aws_access_key_id,
11
- :aws_secret_access_key,
12
- :after_build,
13
- :delete,
14
- :existing_remote_file,
15
- :build_dir,
16
- :force,
17
- :prefer_gzip,
18
- :verbose
19
- )
20
-
21
- def add_caching_policy(content_type, options)
22
- caching_policies[content_type.to_s] = BrowserCachePolicy.new(options)
23
- end
24
-
25
- def caching_policy_for(content_type)
26
- caching_policies.fetch(content_type.to_s, caching_policies[:default])
27
- end
28
-
29
- def default_caching_policy
30
- caching_policies[:default]
31
- end
32
-
33
- def caching_policies
34
- @caching_policies ||= Map.new
35
- end
36
-
37
- protected
38
- class BrowserCachePolicy
39
- attr_accessor :policies
40
-
41
- def initialize(options)
42
- @policies = Map.from_hash(options)
43
- end
44
-
45
- def cache_control
46
- policy = []
47
- policy << "max-age=#{policies.max_age}" if policies.has_key?(:max_age)
48
- policy << "s-maxage=#{s_maxage}" if policies.has_key?(:s_maxage)
49
- policy << "public" if policies.fetch(:public, false)
50
- policy << "private" if policies.fetch(:private, false)
51
- policy << "no-cache" if policies.fetch(:no_cache, false)
52
- policy << "no-store" if policies.fetch(:no_store, false)
53
- policy << "must-revalidate" if policies.fetch(:must_revalidate, false)
54
- policy << "proxy-revalidate" if policies.fetch(:proxy_revalidate, false)
55
- if policy.empty?
56
- nil
57
- else
58
- policy.join(", ")
59
- end
60
- end
61
-
62
- def expires
63
- if expiration = policies.fetch(:expires, nil)
64
- CGI.rfc1123_date(expiration)
65
- end
66
- end
67
- end
68
- end
69
-
70
6
  class << self
71
- def s3_sync_options
72
- @@options
73
- end
74
-
75
7
  def registered(app, options_hash = {}, &block)
76
- options = Options.new(options_hash)
8
+ options = Options.new
77
9
  yield options if block_given?
78
10
 
79
11
  @@options = options
@@ -88,9 +20,12 @@ module Middleman
88
20
  ::Middleman::S3Sync.sync if options.after_build
89
21
  end
90
22
  end
91
-
92
23
  alias :included :registered
93
24
 
25
+ def s3_sync_options
26
+ @@options
27
+ end
28
+
94
29
  module Helpers
95
30
  def s3_sync_options
96
31
  ::Middleman::S3Sync.s3_sync_options
@@ -0,0 +1,138 @@
1
+ require 'fog'
2
+ require 'pmap'
3
+ require 'digest/md5'
4
+ require 'middleman/s3_sync/version'
5
+ require 'middleman/s3_sync/options'
6
+ require 'middleman-s3_sync/commands'
7
+ require 'middleman/s3_sync/status'
8
+ require 'middleman/s3_sync/resource'
9
+ require 'middleman-s3_sync/extension'
10
+ require 'ruby-progressbar'
11
+
12
+ Fog::Logger[:warning] = nil
13
+
14
+ module Middleman
15
+ module S3Sync
16
+ class << self
17
+ include Status
18
+
19
+ def sync
20
+ unless work_to_be_done?
21
+ say_status "\nAll S3 files are up to date."
22
+ return
23
+ end
24
+
25
+ say_status "\nReady to apply updates to #{s3_sync_options.bucket}."
26
+
27
+ ignore_resources
28
+ create_resources
29
+ update_resources
30
+ delete_resources
31
+ end
32
+
33
+ def bucket
34
+ @bucket ||= connection.directories.get(s3_sync_options.bucket)
35
+ end
36
+
37
+ protected
38
+ def connection
39
+ @connection ||= Fog::Storage.new({
40
+ :provider => 'AWS',
41
+ :aws_access_key_id => s3_sync_options.aws_access_key_id,
42
+ :aws_secret_access_key => s3_sync_options.aws_secret_access_key,
43
+ :region => s3_sync_options.region
44
+ })
45
+ end
46
+
47
+ def resources
48
+ @resources ||= paths.pmap do |p|
49
+ progress_bar.increment
50
+ S3Sync::Resource.new(p)
51
+ end
52
+ end
53
+
54
+ def progress_bar
55
+ @progress_bar ||= ProgressBar.create(total: paths.length)
56
+ end
57
+
58
+ def paths
59
+ @paths ||= begin
60
+ say_status "Gathering the paths to evaluate."
61
+ (remote_paths + local_paths).uniq.sort
62
+ end
63
+ end
64
+
65
+ def local_paths
66
+ @local_paths ||= begin
67
+ local_paths = (Dir[build_dir + "/**/*"] + Dir[build_dir + "/**/.*"])
68
+ .reject { |p| File.directory?(p) }
69
+
70
+ if s3_sync_options.prefer_gzip
71
+ local_paths.reject! { |p| p =~ /\.gz$/ && File.exist?(p.gsub(/\.gz$/, '')) }
72
+ end
73
+
74
+ local_paths.pmap { |p| p.gsub(/#{build_dir}\//, '') }
75
+ end
76
+ end
77
+
78
+ def remote_paths
79
+ @remote_paths ||= bucket.files.map{ |f| f.key }.reject { |p| p =~ %r{/$} }
80
+ end
81
+
82
+ def create_resources
83
+ files_to_create.each do |r|
84
+ r.create!
85
+ end
86
+ end
87
+
88
+ def update_resources
89
+ files_to_update.each do |r|
90
+ r.update!
91
+ end
92
+ end
93
+
94
+ def delete_resources
95
+ files_to_delete.each do |r|
96
+ r.destroy!
97
+ end
98
+ end
99
+
100
+ def ignore_resources
101
+ files_to_ignore.each do |r|
102
+ r.ignore!
103
+ end
104
+ end
105
+
106
+ def work_to_be_done?
107
+ !(files_to_create.empty? && files_to_update.empty? && files_to_delete.empty?)
108
+ end
109
+
110
+ def files_to_delete
111
+ @files_to_delete ||= if s3_sync_options.delete
112
+ resources.select { |r| r.to_delete? }
113
+ else
114
+ []
115
+ end
116
+ end
117
+
118
+ def files_to_create
119
+ @files_to_create ||= resources.select { |r| r.to_create? }
120
+ end
121
+
122
+ def files_to_update
123
+ return resources.select { |r| r.local? } if s3_sync_options.force
124
+
125
+ @files_to_update ||= resources.select { |r| r.to_update? }
126
+ end
127
+
128
+ def files_to_ignore
129
+ @files_to_ignore ||= resources.select { |r| r.to_ignore? }
130
+ end
131
+
132
+ def build_dir
133
+ @build_dir ||= s3_sync_options.build_dir
134
+ end
135
+ end
136
+ end
137
+ end
138
+
@@ -0,0 +1,91 @@
1
+ module Middleman
2
+ module S3Sync
3
+ class Options
4
+ attr_accessor \
5
+ :prefix,
6
+ :bucket,
7
+ :region,
8
+ :aws_access_key_id,
9
+ :aws_secret_access_key,
10
+ :after_build,
11
+ :delete,
12
+ :existing_remote_file,
13
+ :build_dir,
14
+ :force,
15
+ :prefer_gzip,
16
+ :verbose
17
+
18
+ def add_caching_policy(content_type, options)
19
+ caching_policies[content_type.to_s] = BrowserCachePolicy.new(options)
20
+ end
21
+
22
+ def caching_policy_for(content_type)
23
+ caching_policies.fetch(content_type.to_s, caching_policies[:default])
24
+ end
25
+
26
+ def default_caching_policy
27
+ caching_policies[:default]
28
+ end
29
+
30
+ def caching_policies
31
+ @caching_policies ||= Map.new
32
+ end
33
+
34
+ def aws_access_key_id
35
+ @aws_access_key_id || ENV['AWS_ACCESS_KEY_ID']
36
+ end
37
+
38
+ def aws_secret_access_key
39
+ @aws_secret_access_key || ENV['AWS_SECRET_ACCESS_KEY']
40
+ end
41
+
42
+ def delete
43
+ @delete.nil? ? true : @delete
44
+ end
45
+
46
+ def after_build
47
+ @after_build.nil? ? false : @after_build
48
+ end
49
+
50
+ def prefer_gzip
51
+ (@prefer_gzip.nil? ? true : @prefer_gzip)
52
+ end
53
+
54
+ protected
55
+ class BrowserCachePolicy
56
+ attr_accessor :policies
57
+
58
+ def initialize(options)
59
+ @policies = Map.from_hash(options)
60
+ end
61
+
62
+ def cache_control
63
+ policy = []
64
+ policy << "max-age=#{policies.max_age}" if policies.has_key?(:max_age)
65
+ policy << "s-maxage=#{policies.s_maxage}" if policies.has_key?(:s_maxage)
66
+ policy << "public" if policies.fetch(:public, false)
67
+ policy << "private" if policies.fetch(:private, false)
68
+ policy << "no-cache" if policies.fetch(:no_cache, false)
69
+ policy << "no-store" if policies.fetch(:no_store, false)
70
+ policy << "must-revalidate" if policies.fetch(:must_revalidate, false)
71
+ policy << "proxy-revalidate" if policies.fetch(:proxy_revalidate, false)
72
+ if policy.empty?
73
+ nil
74
+ else
75
+ policy.join(", ")
76
+ end
77
+ end
78
+
79
+ def to_s
80
+ cache_control
81
+ end
82
+
83
+ def expires
84
+ if expiration = policies.fetch(:expires, nil)
85
+ CGI.rfc1123_date(expiration)
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end
@@ -76,7 +76,7 @@ module Middleman
76
76
  end
77
77
 
78
78
  def destroy!
79
- say_status "Deleting".red + " #{path}".red
79
+ say_status "Deleting".red + " #{path}"
80
80
  s3_resource.destroy
81
81
  end
82
82
 
@@ -91,6 +91,10 @@ module Middleman
91
91
  bucket.files.create(to_h)
92
92
  end
93
93
 
94
+ def ignore!
95
+ say_status "Ignoring".yellow + " #{path} #{ redirect? ? "(redirect)".white : "" }"
96
+ end
97
+
94
98
  def to_delete?
95
99
  status == :deleted
96
100
  end
@@ -107,6 +111,10 @@ module Middleman
107
111
  status == :updated
108
112
  end
109
113
 
114
+ def to_ignore?
115
+ status == :ignored
116
+ end
117
+
110
118
  def body
111
119
  @body = File.open(local_path)
112
120
  end
@@ -120,6 +128,8 @@ module Middleman
120
128
  end
121
129
  elsif local?
122
130
  :new
131
+ elsif redirect?
132
+ :ignored
123
133
  else
124
134
  :deleted
125
135
  end
@@ -133,6 +143,10 @@ module Middleman
133
143
  s3_resource
134
144
  end
135
145
 
146
+ def redirect?
147
+ s3_resource.metadata.has_key? 'x-amz-website-redirect-location'
148
+ end
149
+
136
150
  def relative_path
137
151
  @relative_path ||= local_path.gsub(/#{build_dir}/, '')
138
152
  end
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module S3Sync
3
- VERSION = "3.0.13"
3
+ VERSION = "3.0.14"
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'middleman-s3_sync/version'
4
+ require 'middleman/s3_sync/version'
5
5
 
6
6
  Gem::Specification.new do |gem|
7
7
  gem.name = "middleman-s3_sync"
@@ -27,4 +27,8 @@ Gem::Specification.new do |gem|
27
27
  gem.add_development_dependency 'rake'
28
28
  gem.add_development_dependency 'pry'
29
29
  gem.add_development_dependency 'pry-nav'
30
+ gem.add_development_dependency 'rspec'
31
+ gem.add_development_dependency 'timerizer'
32
+ gem.add_development_dependency 'travis'
33
+ gem.add_development_dependency 'travis-lint'
30
34
  end
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+ require 'middleman/s3_sync/options'
3
+
4
+ describe Middleman::S3Sync::Options do
5
+ subject(:options) { Middleman::S3Sync::Options.new }
6
+
7
+ its(:delete) { should be_true }
8
+ its(:after_build) { should be_false }
9
+ its(:prefer_gzip) { should be_true }
10
+ its(:aws_secret_access_key) { should == ENV['AWS_SECRET_ACCESS_KEY'] }
11
+ its(:aws_access_key_id) { should == ENV['AWS_ACCESS_KEY_ID'] }
12
+ its(:caching_policies) { should be_empty }
13
+ its(:default_caching_policy) { should be_nil }
14
+
15
+ context "browser caching policy" do
16
+ let(:policy) { options.default_caching_policy }
17
+
18
+ it "should have a blank default caching policy" do
19
+ options.add_caching_policy :default, {}
20
+
21
+ policy.should_not be_nil
22
+
23
+ policy.to_s.should_not =~ /max-age=/
24
+ policy.to_s.should_not =~ /s-maxage=/
25
+ policy.to_s.should_not =~ /public/
26
+ policy.to_s.should_not =~ /private/
27
+ policy.to_s.should_not =~ /no-cache/
28
+ policy.to_s.should_not =~ /no-store/
29
+ policy.to_s.should_not =~ /must-revalidate/
30
+ policy.to_s.should_not =~ /proxy-revalidate/
31
+ policy.expires.should be_nil
32
+ end
33
+
34
+ it "should set the max-age policy" do
35
+ options.add_caching_policy :default, :max_age => 300
36
+
37
+ policy.to_s.should =~ /max-age=300/
38
+ end
39
+
40
+ it "should set the s-maxage policy" do
41
+ options.add_caching_policy :default, :s_maxage => 300
42
+
43
+ policy.to_s.should =~ /s-maxage=300/
44
+ end
45
+
46
+ it "should set the public flag on the policy if set to true" do
47
+ options.add_caching_policy :default, :public => true
48
+
49
+ policy.to_s.should =~ /public/
50
+ end
51
+
52
+ it "should not set the public flag on the policy if it is set to false" do
53
+ options.add_caching_policy :default, :public => false
54
+
55
+ policy.to_s.should_not =~ /public/
56
+ end
57
+
58
+ it "should set the private flag on the policy if it is set to true" do
59
+ options.add_caching_policy :default, :private => true
60
+
61
+ policy.to_s.should =~ /private/
62
+ end
63
+
64
+ it "should set the no-cache flag on the policy if it is set to true" do
65
+ options.add_caching_policy :default, :no_cache => true
66
+
67
+ policy.to_s.should =~ /no-cache/
68
+ end
69
+
70
+ it "should set the no-store flag if it is set to true" do
71
+ options.add_caching_policy :default, :no_store => true
72
+
73
+ policy.to_s.should =~ /no-store/
74
+ end
75
+
76
+ it "should set the must-revalidate policy if it is set to true" do
77
+ options.add_caching_policy :default, :must_revalidate => true
78
+
79
+ policy.to_s.should =~ /must-revalidate/
80
+ end
81
+
82
+ it "should set the proxy-revalidate policy if it is set to true" do
83
+ options.add_caching_policy :default, :proxy_revalidate => true
84
+
85
+ policy.to_s.should =~ /proxy-revalidate/
86
+ end
87
+
88
+ it "should divide caching policies with commas and a space" do
89
+ options.add_caching_policy :default, :max_age => 300, :public => true
90
+
91
+ policies = policy.to_s.split(/, /)
92
+ policies.length.should == 2
93
+ policies.first.should == 'max-age=300'
94
+ policies.last.should == 'public'
95
+ end
96
+
97
+ it "should set the expiration date" do
98
+ expiration = 1.years.from_now
99
+
100
+ options.add_caching_policy :default, :expires => expiration
101
+ policy.expires.should == CGI.rfc1123_date(expiration)
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+
3
+ describe Middleman::S3Sync::Resource do
4
+
5
+ end
@@ -0,0 +1,25 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ require 'middleman-s3_sync'
9
+ require 'timerizer'
10
+
11
+ RSpec.configure do |config|
12
+ config.treat_symbols_as_metadata_keys_with_true_values = true
13
+ config.run_all_when_everything_filtered = true
14
+ config.filter_run :focus
15
+
16
+ # Run specs in random order to surface order dependencies. If you find an
17
+ # order dependency and want to debug it, you can fix the order by providing
18
+ # the seed, which is printed after each run.
19
+ # --seed 1234
20
+ config.order = 'random'
21
+
22
+ config.before :all do
23
+ Fog.mock!
24
+ end
25
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-s3_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.13
4
+ version: 3.0.14
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-06-03 00:00:00.000000000 Z
13
+ date: 2013-08-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: middleman-core
@@ -156,6 +156,70 @@ dependencies:
156
156
  - - ! '>='
157
157
  - !ruby/object:Gem::Version
158
158
  version: '0'
159
+ - !ruby/object:Gem::Dependency
160
+ name: rspec
161
+ requirement: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ! '>='
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ type: :development
168
+ prerelease: false
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ none: false
171
+ requirements:
172
+ - - ! '>='
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: timerizer
177
+ requirement: !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ! '>='
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ type: :development
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ none: false
187
+ requirements:
188
+ - - ! '>='
189
+ - !ruby/object:Gem::Version
190
+ version: '0'
191
+ - !ruby/object:Gem::Dependency
192
+ name: travis
193
+ requirement: !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ! '>='
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ - !ruby/object:Gem::Dependency
208
+ name: travis-lint
209
+ requirement: !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ! '>='
213
+ - !ruby/object:Gem::Version
214
+ version: '0'
215
+ type: :development
216
+ prerelease: false
217
+ version_requirements: !ruby/object:Gem::Requirement
218
+ none: false
219
+ requirements:
220
+ - - ! '>='
221
+ - !ruby/object:Gem::Version
222
+ version: '0'
159
223
  description: Only syncs files that have been updated to S3.
160
224
  email:
161
225
  - fred@fredjean.net
@@ -164,6 +228,8 @@ extensions: []
164
228
  extra_rdoc_files: []
165
229
  files:
166
230
  - .gitignore
231
+ - .rspec
232
+ - .travis.yml
167
233
  - Changelog.md
168
234
  - Gemfile
169
235
  - LICENSE.txt
@@ -172,11 +238,16 @@ files:
172
238
  - lib/middleman-s3_sync.rb
173
239
  - lib/middleman-s3_sync/commands.rb
174
240
  - lib/middleman-s3_sync/extension.rb
175
- - lib/middleman-s3_sync/version.rb
241
+ - lib/middleman/s3_sync.rb
242
+ - lib/middleman/s3_sync/options.rb
176
243
  - lib/middleman/s3_sync/resource.rb
177
244
  - lib/middleman/s3_sync/status.rb
245
+ - lib/middleman/s3_sync/version.rb
178
246
  - lib/middleman_extension.rb
179
247
  - middleman-s3_sync.gemspec
248
+ - spec/options_spec.rb
249
+ - spec/resource_spec.rb
250
+ - spec/spec_helper.rb
180
251
  homepage: http://github.com/fredjean/middleman-s3_sync
181
252
  licenses: []
182
253
  post_install_message:
@@ -191,7 +262,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
191
262
  version: '0'
192
263
  segments:
193
264
  - 0
194
- hash: -3466126012457379905
265
+ hash: -2891873384991304950
195
266
  required_rubygems_version: !ruby/object:Gem::Requirement
196
267
  none: false
197
268
  requirements:
@@ -200,11 +271,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
271
  version: '0'
201
272
  segments:
202
273
  - 0
203
- hash: -3466126012457379905
274
+ hash: -2891873384991304950
204
275
  requirements: []
205
276
  rubyforge_project:
206
277
  rubygems_version: 1.8.23
207
278
  signing_key:
208
279
  specification_version: 3
209
280
  summary: Tries really, really hard not to push files to S3.
210
- test_files: []
281
+ test_files:
282
+ - spec/options_spec.rb
283
+ - spec/resource_spec.rb
284
+ - spec/spec_helper.rb