middleman-cdn 0.1.10 → 0.1.11

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
  SHA1:
3
- metadata.gz: f1126fd1f909909f010c506e2239341214a4ef80
4
- data.tar.gz: 6ee82a56f22971322621659548ff8430e9259f8a
3
+ metadata.gz: 4aa1ea493606bab17daddd55eafc4a092b3e36ae
4
+ data.tar.gz: c1bd19c00e6049f9c0061be48fceb9837d1b91e7
5
5
  SHA512:
6
- metadata.gz: 9dbf7a85e93f6ed5caba2d3264379114fd318d04449c2b2487127095ee8ab0534ff767e39a7a6d5c7c745341a684093b3ea4b4daa4a96d33dd4f9be947b2f2cf
7
- data.tar.gz: 2540c95e40446f4ac123da08e4929df6e2926481ff287c402824a4f8177256b7df42241f68f5ae29a82e1f8bc788d45a4164e6273a39f790f95ab01e4b57850e
6
+ metadata.gz: fe34df0d332ba27dabd93aa024cc83d7fa62e3b1ed07384266b4c88c29f4d561ce72d2580b57da4bd08d79469c0a6b2a20ce577cafc345954ab2372a43c51928
7
+ data.tar.gz: 4855e0686dc2541e467ac27484e6f19daac2a4b3f3c24ef8d57c6a156160190226bfe2203f8261a59faa08b28a77177d802b14c0478c99013c5e97e925f9e205
@@ -19,34 +19,45 @@ module Middleman
19
19
  }
20
20
  end
21
21
 
22
- def invalidate(options, files)
22
+ def invalidate(options, files, all: false)
23
23
  options[:client_api_key] ||= ENV['CLOUDFLARE_CLIENT_API_KEY']
24
24
  options[:email] ||= ENV['CLOUDFLARE_EMAIL']
25
25
 
26
26
  [:client_api_key, :email, :zone, :base_urls].each do |key|
27
27
  if options[key].blank?
28
- say_status("Error: Configuration key cloudflare[:#{key}] is missing.".light_red)
28
+ say_status("Error: Configuration key cloudflare[:#{key}] is missing.".red)
29
29
  raise
30
30
  end
31
31
  end
32
32
 
33
33
  options[:base_urls] = [options[:base_urls]] if options[:base_urls].is_a?(String)
34
34
  if !options[:base_urls].is_a?(Array)
35
- say_status("Error: Configuration key cloudflare[:base_urls] must be an array and contain at least one base url.".light_red)
35
+ say_status("Error: Configuration key cloudflare[:base_urls] must be an array and contain at least one base url.".red)
36
36
  raise
37
37
  end
38
38
 
39
39
  cloudflare = ::CloudFlare::connection(options[:client_api_key], options[:email])
40
- options[:base_urls].each do |base_url|
41
- files.each do |file|
42
- begin
43
- url = "#{base_url}#{file}"
44
- say_status("Invalidating #{url}... ", newline: false)
45
- cloudflare.zone_file_purge(options[:zone], "#{base_url}#{file}")
46
- rescue => e
47
- say_status(", " + "error: #{e.message}".light_red, header: false)
48
- else
49
- say_status("✔".light_green, header: false)
40
+ if all
41
+ begin
42
+ say_status("Invalidating zone #{options[:zone]}... ", newline: false)
43
+ cloudflare.fpurge_ts(options[:zone])
44
+ rescue => e
45
+ say_status(", " + "error: #{e.message}".red, header: false)
46
+ else
47
+ say_status("".green, header: false)
48
+ end
49
+ else
50
+ options[:base_urls].each do |base_url|
51
+ files.each do |file|
52
+ begin
53
+ url = "#{base_url}#{file}"
54
+ say_status("Invalidating #{url}... ", newline: false)
55
+ cloudflare.zone_file_purge(options[:zone], "#{base_url}#{file}")
56
+ rescue => e
57
+ say_status(", " + "error: #{e.message}".red, header: false)
58
+ else
59
+ say_status("✔".green, header: false)
60
+ end
50
61
  end
51
62
  end
52
63
  end
@@ -19,12 +19,12 @@ module Middleman
19
19
  }
20
20
  end
21
21
 
22
- def invalidate(options, files)
22
+ def invalidate(options, files, all: false)
23
23
  options[:access_key_id] ||= ENV['AWS_ACCESS_KEY_ID']
24
24
  options[:secret_access_key] ||= ENV['AWS_SECRET_ACCESS_KEY']
25
25
  [:access_key_id, :secret_access_key, :distribution_id].each do |key|
26
26
  if options[key].blank?
27
- say_status("Error: Configuration key cloudfront[:base_urls] is missing.".light_red)
27
+ say_status("Error: Configuration key cloudfront[:base_urls] is missing.".red)
28
28
  raise
29
29
  end
30
30
  end
@@ -44,7 +44,7 @@ module Middleman
44
44
  say_status("Invalidation status is #{invalidation.status}. Expected 'InProgress'.".red.bold, header: false)
45
45
  raise
46
46
  end
47
- say_status("✔".light_green, header: false)
47
+ say_status("✔".green, header: false)
48
48
  else
49
49
  slices = files.each_slice(INVALIDATION_LIMIT)
50
50
  say_status("Invalidating #{files.count} files in #{slices.count} batch(es) ")
@@ -52,7 +52,7 @@ module Middleman
52
52
  say_status("Invalidating batch #{i + 1}... ", newline: false)
53
53
  invalidation = distribution.invalidations.create(:paths => slice)
54
54
  invalidation.wait_for { ready? } unless i == slices.count - 1
55
- say_status("✔".light_green, header: false)
55
+ say_status("✔".green, header: false)
56
56
  end
57
57
  end
58
58
  say_status("It might take 10 to 15 minutes until all files are invalidated.")
@@ -17,19 +17,19 @@ module Middleman
17
17
  }
18
18
  end
19
19
 
20
- def invalidate(options, files)
20
+ def invalidate(options, files, all: false)
21
21
  options[:api_key] ||= ENV['FASTLY_API_KEY']
22
22
 
23
23
  [:api_key, :base_urls].each do |key|
24
24
  if options[key].blank?
25
- say_status("Error: Configuration key fastly[:#{key}] is missing.".light_red)
25
+ say_status("Error: Configuration key fastly[:#{key}] is missing.".red)
26
26
  raise
27
27
  end
28
28
  end
29
29
 
30
30
  options[:base_urls] = [options[:base_urls]] if options[:base_urls].is_a?(String)
31
31
  if !options[:base_urls].is_a?(Array)
32
- say_status("Error: Configuration key fastly[:base_urls] must be an array and contain at least one base url.".light_red)
32
+ say_status("Error: Configuration key fastly[:base_urls] must be an array and contain at least one base url.".red)
33
33
  raise
34
34
  end
35
35
 
@@ -44,9 +44,9 @@ module Middleman
44
44
  say_status("Invalidating #{url}... ", newline: false)
45
45
  fastly.purge("#{base_url}#{file}")
46
46
  rescue => e
47
- say_status(", " + "error: #{e.message}".light_red, header: false)
47
+ say_status(", " + "error: #{e.message}".red, header: false)
48
48
  else
49
- say_status("✔".light_green, header: false)
49
+ say_status("✔".green, header: false)
50
50
  end
51
51
  end
52
52
  end
@@ -19,14 +19,14 @@ module Middleman
19
19
  }
20
20
  end
21
21
 
22
- def invalidate(options, files)
22
+ def invalidate(options, files, all: false)
23
23
  options[:alias] ||= ENV['MAXCDN_ALIAS']
24
24
  options[:consumer_key] ||= ENV['MAXCDN_CONSUMER_KEY']
25
25
  options[:consumer_secret] ||= ENV['MAXCDN_CONSUMER_SECRET']
26
26
 
27
27
  [:alias, :consumer_key, :consumer_secret, :zone_id].each do |key|
28
28
  if options[key].blank?
29
- say_status("Error: Configuration key maxcdn[:#{key}] is missing.".light_red)
29
+ say_status("Error: Configuration key maxcdn[:#{key}] is missing.".red)
30
30
  raise
31
31
  end
32
32
  end
@@ -37,9 +37,9 @@ module Middleman
37
37
  say_status("Invalidating #{files.count} files...", newline: false)
38
38
  maxcdn.purge(options[:zone_id], files)
39
39
  rescue => e
40
- say_status(", " + "error: #{e.message}".light_red, header: false)
40
+ say_status(", " + "error: #{e.message}".red, header: false)
41
41
  else
42
- say_status("✔".light_green, header: false)
42
+ say_status("✔".green, header: false)
43
43
  end
44
44
  end
45
45
  end
@@ -22,13 +22,13 @@ module Middleman
22
22
  }
23
23
  end
24
24
 
25
- def invalidate(options, files)
25
+ def invalidate(options, files, all: false)
26
26
  options[:username] ||= ENV['RACKSPACE_USERNAME']
27
27
  options[:api_key] ||= ENV['RACKSPACE_API_KEY']
28
28
 
29
29
  [:username, :api_key, :region, :container].each do |key|
30
30
  if options[key].blank?
31
- say_status("Error: Configuration key rackspace[:#{key}] is missing.".light_red)
31
+ say_status("Error: Configuration key rackspace[:#{key}] is missing.".red)
32
32
  raise
33
33
  end
34
34
  end
@@ -54,9 +54,9 @@ module Middleman
54
54
  say_status("Invalidating #{file}...", newline: false)
55
55
  rackspace_client.invalidate(region, container, file, notification_email: notification_email)
56
56
  rescue => e
57
- say_status(" error: #{e.message}".light_red, header: false)
57
+ say_status(" error: #{e.message}".red, header: false)
58
58
  else
59
- say_status("✔".light_green, header: false)
59
+ say_status("✔".green, header: false)
60
60
  end
61
61
  end
62
62
  end
@@ -28,7 +28,7 @@ module Middleman
28
28
  if options.nil?
29
29
  app_instance = ::Middleman::Application.server.inst
30
30
  unless app_instance.respond_to?(:cdn_options)
31
- self.class.say_status(nil, "Error: You need to activate the cdn extension in config.rb.\n#{example_configuration}".light_red)
31
+ self.class.say_status(nil, "Error: You need to activate the cdn extension in config.rb.\n#{example_configuration}".red)
32
32
  raise
33
33
  end
34
34
  options = app_instance.cdn_options
@@ -36,18 +36,20 @@ module Middleman
36
36
  options.filter ||= /.*/
37
37
 
38
38
  if cdns.all? { |cdn| options.public_send(cdn.key.to_sym).nil? }
39
- self.class.say_status(nil, "Error: You must specify a config for one of the supported CDNs.\n#{example_configuration}".light_red)
39
+ self.class.say_status(nil, "Error: You must specify a config for one of the supported CDNs.\n#{example_configuration}".red)
40
40
  raise
41
41
  end
42
42
 
43
43
  files = list_files(options.filter)
44
- self.class.say_status(nil, "Invalidating #{files.count} files with filter: " + "#{options.filter.source}".magenta.bold)
44
+ self.class.say_status(nil, "Invalidating #{files.count} files with filter: " + "#{options.filter.source}")
45
45
  files.each { |file| self.class.say_status(nil, " • #{file}") }
46
46
  return if files.empty?
47
47
 
48
+ invalidate_all = does_filter_match_all(options.filter)
49
+
48
50
  cdns_keyed.each do |cdn_key, cdn|
49
51
  cdn_options = options.public_send(cdn_key.to_sym)
50
- cdn.new.invalidate(cdn_options, files) unless cdn_options.nil?
52
+ cdn.new.invalidate(cdn_options, files, all: invalidate_all) unless cdn_options.nil?
51
53
  end
52
54
  rescue SystemExit, Interrupt
53
55
  self.class.say_status(nil, nil, header: false)
@@ -56,7 +58,7 @@ module Middleman
56
58
 
57
59
  def self.say_status(cdn, status, newline: true, header: true, wait_enter: false)
58
60
  message = ""
59
- message << "#{:cdn.to_s.rjust(12).light_green.bold} #{cdn.try(:yellow).try(:bold)}" if header
61
+ message << "#{:cdn.to_s.rjust(12).green} #{cdn.try(:yellow)}" if header
60
62
  message << " " if header && cdn
61
63
  message << status if status
62
64
  print message
@@ -92,6 +94,10 @@ end
92
94
  TEXT
93
95
  end
94
96
 
97
+ def does_filter_match_all(filter)
98
+ [".*", ".+"].include?(filter.source)
99
+ end
100
+
95
101
  def list_files(filter)
96
102
  Dir.chdir('build/') do
97
103
  Dir.glob('**/*', File::FNM_DOTMATCH).tap do |files|
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module CDN
3
- VERSION = '0.1.10'
3
+ VERSION = '0.1.11'
4
4
  end
5
5
  end
@@ -29,5 +29,5 @@ Gem::Specification.new do |s|
29
29
  s.add_development_dependency 'rspec', '~> 3.0'
30
30
  s.add_development_dependency 'coveralls', '~> 0.7'
31
31
 
32
- s.add_dependency 'middleman-core', '~> 3.0'
32
+ s.add_dependency 'middleman-core', '~> 3.3'
33
33
  end
@@ -73,6 +73,22 @@ describe Middleman::Cli::CloudFlareCDN do
73
73
  expect { subject.invalidate(options, files) }.to output(/✔/).to_stdout
74
74
  end
75
75
 
76
+ context "matches all files" do
77
+ before do
78
+ allow(double_cloudflare).to receive(:fpurge_ts)
79
+ end
80
+
81
+ it "should invalidate the entire zone" do
82
+ expect(double_cloudflare).to receive(:fpurge_ts).once.with("example.com")
83
+ subject.invalidate(options, files, all: true)
84
+ end
85
+
86
+ it "should not invalidate individual files" do
87
+ expect(double_cloudflare).not_to receive(:zone_file_purge)
88
+ subject.invalidate(options, files, all: true)
89
+ end
90
+ end
91
+
76
92
  context "and errors occurs when purging" do
77
93
  before do
78
94
  allow(double_cloudflare).to receive(:zone_file_purge).and_raise(StandardError)
@@ -51,7 +51,7 @@ describe Middleman::Cli::CDN do
51
51
  end
52
52
 
53
53
  it "should invalidate the files with only cloudflare" do
54
- expect_any_instance_of(::Middleman::Cli::CloudFlareCDN).to receive(:invalidate).with(options.cloudflare, ["/index.html", "/image.png", "/"])
54
+ expect_any_instance_of(::Middleman::Cli::CloudFlareCDN).to receive(:invalidate).with(options.cloudflare, ["/index.html", "/image.png", "/"], all: true)
55
55
  expect_any_instance_of(::Middleman::Cli::CloudFrontCDN).to_not receive(:invalidate)
56
56
  expect_any_instance_of(::Middleman::Cli::FastlyCDN).to_not receive(:invalidate)
57
57
  subject.cdn_invalidate(options)
@@ -69,9 +69,9 @@ describe Middleman::Cli::CDN do
69
69
  end
70
70
 
71
71
  it "should invalidate the files with all cdns" do
72
- expect_any_instance_of(::Middleman::Cli::CloudFlareCDN).to receive(:invalidate).with(options.cloudflare, ["/index.html", "/image.png", "/"])
73
- expect_any_instance_of(::Middleman::Cli::CloudFrontCDN).to receive(:invalidate).with(options.cloudfront, ["/index.html", "/image.png", "/"])
74
- expect_any_instance_of(::Middleman::Cli::FastlyCDN).to receive(:invalidate).with(options.fastly, ["/index.html", "/image.png", "/"])
72
+ expect_any_instance_of(::Middleman::Cli::CloudFlareCDN).to receive(:invalidate).with(options.cloudflare, ["/index.html", "/image.png", "/"], all: true)
73
+ expect_any_instance_of(::Middleman::Cli::CloudFrontCDN).to receive(:invalidate).with(options.cloudfront, ["/index.html", "/image.png", "/"], all: true)
74
+ expect_any_instance_of(::Middleman::Cli::FastlyCDN).to receive(:invalidate).with(options.fastly, ["/index.html", "/image.png", "/"], all: true)
75
75
  subject.cdn_invalidate(options)
76
76
  end
77
77
  end
@@ -88,9 +88,9 @@ describe Middleman::Cli::CDN do
88
88
  end
89
89
 
90
90
  it "should invalidate the files with all cdns" do
91
- expect_any_instance_of(::Middleman::Cli::CloudFlareCDN).to receive(:invalidate).with(options.cloudflare, ["/index.html", "/"])
92
- expect_any_instance_of(::Middleman::Cli::CloudFrontCDN).to receive(:invalidate).with(options.cloudfront, ["/index.html", "/"])
93
- expect_any_instance_of(::Middleman::Cli::FastlyCDN).to receive(:invalidate).with(options.cloudfront, ["/index.html", "/"])
91
+ expect_any_instance_of(::Middleman::Cli::CloudFlareCDN).to receive(:invalidate).with(options.cloudflare, ["/index.html", "/"], all: false)
92
+ expect_any_instance_of(::Middleman::Cli::CloudFrontCDN).to receive(:invalidate).with(options.cloudfront, ["/index.html", "/"], all: false)
93
+ expect_any_instance_of(::Middleman::Cli::FastlyCDN).to receive(:invalidate).with(options.cloudfront, ["/index.html", "/"], all: false)
94
94
  subject.cdn_invalidate(options)
95
95
  end
96
96
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: middleman-cdn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leigh McCulloch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-28 00:00:00.000000000 Z
11
+ date: 2015-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog
@@ -156,14 +156,14 @@ dependencies:
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '3.0'
159
+ version: '3.3'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '3.0'
166
+ version: '3.3'
167
167
  description: Invalidate a specific set of files in your CloudFlare or CloudFront cache
168
168
  email:
169
169
  executables: []