middleman-cdn 0.1.13 → 0.1.14

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: 8550558e8e045e9d7f82f7b54b44a8a41dca5077
4
- data.tar.gz: bbf9bf9ee078a2f6ed00edf5e5461abf3ff183aa
3
+ metadata.gz: 7c8c316517f0c2673b971da4bfb0c637cb09b9a4
4
+ data.tar.gz: c68675ee11af145c82dd4e64a72135baa5522d0d
5
5
  SHA512:
6
- metadata.gz: 459ed7ed549ffead8d05e497d2b1036d48416efaf5cce161fa8ed51ce773a6ad4a69711c51aecfb26649fb4efad7c66183113008f51ca365f7ea32476231ccc0
7
- data.tar.gz: dcef7018c3c2141b8f36baae317272931b250886c3d17ffbbfc07d7be2102f72971f251db38503d972372c3965417af3ac42448794f97a332bcf5f3f72de6791
6
+ metadata.gz: a490b5271e455b88f523cc937c58d7a55e29fdf0f0b321d5ad5ff24fd1913898268e7bc985e7b5904cc3bb2ca327c1adf501c6b5b630c7d2df8b5e94a59fac21
7
+ data.tar.gz: aea229478874d90b8f0c3526c557daada1066b581e9cd7b8c9f99b5c16170aed949f92fdba11eb9a956cf57b092cdfaa33936072fab5d8fa83da42382ae6f31f
data/.travis.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.0.0
4
- - 2.1.0
5
- - 2.1.2
4
+ - 2.1.5
5
+ - 2.2.1
data/README.md CHANGED
@@ -14,15 +14,13 @@ on common Content Delivery Networks (CDNs).
14
14
  * [Rackspace CloudFiles](http://www.rackspace.com/cloud/files/)
15
15
  * Select files for invalidation with regex.
16
16
  * Automatically invalidate after build.
17
- * Manually trigger invalidation with a single command.
18
-
19
- What's next?
20
- * Invalidating files only when they've changed.
21
- * [Open an issue](../../issues/new) if you'd like your CDN provider added.
17
+ * Manually trigger invalidation with a single command on specific files.
18
+ * Invalidating files only when they've changed [if you're using middleman-s3_sync](#invalidating-with-middleman-s3_sync).
22
19
 
23
20
  # Usage
24
21
 
25
22
  ## Installation
23
+
26
24
  Add this to your `Gemfile`:
27
25
  ```ruby
28
26
  gem "middleman-cdn"
@@ -99,6 +97,9 @@ invalidate them.
99
97
  Note: Directories containing `index.html` files are automatically included
100
98
  when their respective `index.html` is included in the filter.
101
99
 
100
+ Alternatively: If you're using `middleman-s3_sync` you can hook middleman-cdn into
101
+ it's build process. See the [instructions here](#invalidating-with-middleman-s3_sync).
102
+
102
103
  ### Configuration: CloudFlare
103
104
 
104
105
  The `cloudflare` parameter contains the information specific to your CloudFlare
@@ -194,7 +195,6 @@ as environment variables or provided on the commandline like this example.
194
195
  CLOUDFLARE_CLIENT_API_KEY= CLOUDFLARE_EMAIL= bundle exec middleman invalidate
195
196
  ```
196
197
 
197
-
198
198
  ## Invalidating
199
199
 
200
200
  Set `after_build` to `true` and the cache will be invalidated after build:
@@ -204,14 +204,25 @@ bundle exec middleman build
204
204
 
205
205
  Or, invalidate manually using:
206
206
  ```bash
207
- bundle exec middleman cdn_invalidate
207
+ bundle exec middleman cdn
208
208
  ```
209
209
 
210
- Or:
210
+ Or, invalidate specific files manually:
211
211
  ```bash
212
- bundle exec middleman cdn
212
+ bundle exec middleman cdn [file] [file] ...
213
213
  ```
214
214
 
215
+ ## Invalidating with middleman-s3_sync
216
+
217
+ If you're using `middleman-s3_sync` you can hook middleman-cdn into it's build process, to invalidate only the files that s3_sync uploads. Add the following to your `config.rb`:
218
+ ```ruby
219
+ after_s3_sync do |files_by_status|
220
+ cdn_invalidate(files_by_status[:updated])
221
+ end
222
+ ```
223
+
224
+ Also, make sure to remove `cdn.after_build = true` from your config, if it was there previously, so the invalidation is not run twice.
225
+
215
226
  ## Example Usage
216
227
 
217
228
  I'm using middleman-cdn on my personal website [leighmcculloch.com](http://leighmcculloch.com) which is on [github](https://github.com/leighmcculloch/leighmcculloch.com) if you want to checkout how I deploy. It's configuration has all of the above CDNs in use for demonstration. I primarily use CloudFlare, and unlike the other CDNs, CloudFlare doesn't default to caching HTML. To make the most of CloudFlare, configure a PageRule that looks like this to tell CloudFlare to cache everything.
@@ -25,14 +25,14 @@ module Middleman
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.".red)
28
+ say_status(ANSI.red{ "Error: Configuration key cloudflare[:#{key}] is missing." })
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.".red)
35
+ say_status(ANSI.red{ "Error: Configuration key cloudflare[:base_urls] must be an array and contain at least one base url." })
36
36
  raise
37
37
  end
38
38
 
@@ -42,9 +42,9 @@ module Middleman
42
42
  say_status("Invalidating zone #{options[:zone]}... ", newline: false)
43
43
  cloudflare.fpurge_ts(options[:zone])
44
44
  rescue => e
45
- say_status(", " + "error: #{e.message}".red, header: false)
45
+ say_status(", " + ANSI.red{ "error: #{e.message}" }, header: false)
46
46
  else
47
- say_status("✔".green, header: false)
47
+ say_status(ANSI.green{ "✔" }, header: false)
48
48
  end
49
49
  else
50
50
  options[:base_urls].each do |base_url|
@@ -54,9 +54,9 @@ module Middleman
54
54
  say_status("Invalidating #{url}... ", newline: false)
55
55
  cloudflare.zone_file_purge(options[:zone], "#{base_url}#{file}")
56
56
  rescue => e
57
- say_status(", " + "error: #{e.message}".red, header: false)
57
+ say_status(", " + ANSI.red{ "error: #{e.message}" }, header: false)
58
58
  else
59
- say_status("✔".green, header: false)
59
+ say_status(ANSI.green{ "✔" }, header: false)
60
60
  end
61
61
  end
62
62
  end
@@ -24,7 +24,7 @@ module Middleman
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.".red)
27
+ say_status(ANSI.red{ "Error: Configuration key cloudfront[:base_urls] is missing." })
28
28
  raise
29
29
  end
30
30
  end
@@ -41,10 +41,10 @@ module Middleman
41
41
  say_status("Invalidating #{files.count} files... ", newline: false)
42
42
  invalidation = distribution.invalidations.create(:paths => files)
43
43
  if invalidation.status != 'InProgress'
44
- say_status("Invalidation status is #{invalidation.status}. Expected 'InProgress'.".red.bold, header: false)
44
+ say_status(ANSI.red{ ANSI.bold + "Invalidation status is #{invalidation.status}. Expected 'InProgress'." }, header: false)
45
45
  raise
46
46
  end
47
- say_status("✔".green, header: false)
47
+ say_status(ANSI.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("✔".green, header: false)
55
+ say_status(ANSI.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.")
@@ -22,14 +22,14 @@ module Middleman
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.".red)
25
+ say_status(ANSI.red{ "Error: Configuration key fastly[:#{key}] is missing." })
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.".red)
32
+ say_status(ANSI.red{ "Error: Configuration key fastly[:base_urls] must be an array and contain at least one base url." })
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}".red, header: false)
47
+ say_status(ANSI.red{ ", " + "error: #{e.message}" }, header: false)
48
48
  else
49
- say_status("✔".green, header: false)
49
+ say_status(ANSI.green{ "✔" }, header: false)
50
50
  end
51
51
  end
52
52
  end
@@ -26,7 +26,7 @@ module Middleman
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.".red)
29
+ say_status(ANSI.red{ "Error: Configuration key maxcdn[:#{key}] is missing." })
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}".red, header: false)
40
+ say_status(ANSI.red{ ", " + "error: #{e.message}" }, header: false)
41
41
  else
42
- say_status("✔".green, header: false)
42
+ say_status(ANSI.green{ "✔" }, header: false)
43
43
  end
44
44
  end
45
45
  end
@@ -28,7 +28,7 @@ module Middleman
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.".red)
31
+ say_status(ANSI.red{ "Error: Configuration key rackspace[:#{key}] is missing." })
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}".red, header: false)
57
+ say_status(ANSI.red{ " error: #{e.message}" }, header: false)
58
58
  else
59
- say_status("✔".green, header: false)
59
+ say_status(ANSI.green{ "✔" }, header: false)
60
60
  end
61
61
  end
62
62
  end
@@ -6,7 +6,7 @@ require "middleman-cdn/cdns/cloudfront.rb"
6
6
  require "middleman-cdn/cdns/fastly.rb"
7
7
  require "middleman-cdn/cdns/maxcdn.rb"
8
8
  require "middleman-cdn/cdns/rackspace.rb"
9
- require "colorize"
9
+ require "ansi/code"
10
10
 
11
11
  module Middleman
12
12
  module Cli
@@ -35,7 +35,7 @@ module Middleman
35
35
  if options.nil?
36
36
  app_instance = ::Middleman::Application.server.inst
37
37
  unless app_instance.respond_to?(:cdn_options)
38
- self.class.say_status(nil, "Error: You need to activate the cdn extension in config.rb.\n#{example_configuration}".red)
38
+ self.class.say_status(nil, ANSI.red{ "Error: You need to activate the cdn extension in config.rb.\n#{example_configuration}" })
39
39
  raise
40
40
  end
41
41
  options = app_instance.cdn_options
@@ -43,7 +43,7 @@ module Middleman
43
43
  options.filter ||= /.*/
44
44
 
45
45
  if cdns.all? { |cdn| options.public_send(cdn.key.to_sym).nil? }
46
- self.class.say_status(nil, "Error: You must specify a config for one of the supported CDNs.\n#{example_configuration}".red)
46
+ self.class.say_status(nil, ANSI.red{ "Error: You must specify a config for one of the supported CDNs.\n#{example_configuration}" })
47
47
  raise
48
48
  end
49
49
 
@@ -72,7 +72,7 @@ module Middleman
72
72
 
73
73
  def self.say_status(cdn, status, newline: true, header: true, wait_enter: false)
74
74
  message = ""
75
- message << "#{:cdn.to_s.rjust(12).green} #{cdn.try(:yellow)}" if header
75
+ message << "#{ANSI.green { :cdn.to_s.rjust(12)} } #{ANSI.yellow{ cdn } unless cdn.nil? }" if header
76
76
  message << " " if header && cdn
77
77
  message << status if status
78
78
  print message
@@ -1,5 +1,5 @@
1
1
  module Middleman
2
2
  module CDN
3
- VERSION = '0.1.13'
3
+ VERSION = '0.1.14'
4
4
  end
5
5
  end
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency 'cloudflare', '~> 2.0'
22
22
  s.add_dependency 'fastly', '~> 1.1'
23
23
  s.add_dependency 'maxcdn', '~> 0.1'
24
- s.add_dependency 'colorize', '~> 0.7'
24
+ s.add_dependency 'ansi', '~> 1.5'
25
25
  s.add_dependency 'activesupport', '~> 4.1'
26
26
  s.add_dependency 'httparty', '~> 0.13'
27
27
 
@@ -15,6 +15,12 @@ describe Middleman::Cli::CDN do
15
15
  described_class.say_status(nil, "a status")
16
16
  end
17
17
  end
18
+
19
+ context "with a cdn" do
20
+ it "should say" do
21
+ described_class.say_status("the cdn", "a status")
22
+ end
23
+ end
18
24
  end
19
25
 
20
26
  describe '#cdn_invalidate' do
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.13
4
+ version: 0.1.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leigh McCulloch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-16 00:00:00.000000000 Z
11
+ date: 2015-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog
@@ -67,19 +67,19 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0.1'
69
69
  - !ruby/object:Gem::Dependency
70
- name: colorize
70
+ name: ansi
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0.7'
75
+ version: '1.5'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0.7'
82
+ version: '1.5'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: activesupport
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -219,7 +219,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
219
  version: '0'
220
220
  requirements: []
221
221
  rubyforge_project:
222
- rubygems_version: 2.2.2
222
+ rubygems_version: 2.4.3
223
223
  signing_key:
224
224
  specification_version: 4
225
225
  summary: Invalidate CloudFlare or CloudFront cache after deployment