bankrupt 1.1.0 → 2.0.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
  SHA256:
3
- metadata.gz: 1dca115afeb3234502a119751813a7ae7e0d17ea19a7f0051386544211998eed
4
- data.tar.gz: c72b72acc9233dbd5e096896c42649953d3c1bc8facf2ceff649d7d5eb6deae7
3
+ metadata.gz: c128faa48d53c51a942b44223ae14a559dc3e3ce3addcbb5e54c24a26501d936
4
+ data.tar.gz: 04e4231a59a84d423b8d08be530b2b043a49cd59a4f71635f183eb75ea92ce26
5
5
  SHA512:
6
- metadata.gz: 3242ca78af837ea8979f1ad3b0ca329a88f1fe10716fa18ad0607173c0648090b1b3824fc58a087b4723277b1f6f1aa7b02806b3015f3ce1c51b054b8895cbf2
7
- data.tar.gz: 7c9c0c97bb5d5ccf6b7c25d15053d8ea932d3ee6b7f8d728ef51e7e3b117f4003267bbc67ef6aa636d3bc76e7d38cb8b2d38771dce4e07152c8f1e94f070dd92
6
+ metadata.gz: 5365d3ab584d89f8826bc1a93eafd0b3792024e79f8e77e3aa00d750e52974c365d1d22336ddd6e2bb54c1e4c28754437f86ca4303ab16ad6e275cf598f8ca5c
7
+ data.tar.gz: 7845cf9952c856d2810e598b6e1946c98be58b9d581d59033102e4c6dbc2ad0514330305be609693f14d8096325fa22b7e704e84c59ade72a3591cc4c0853abd
data/.gitignore CHANGED
@@ -3,6 +3,7 @@
3
3
  /coverage
4
4
  /doc
5
5
  /Gemfile.lock
6
+ /spec/fixtures/tmp
6
7
  /vendor/bundle
7
8
  /*.gem
8
9
  /*.gem.asc
data/.rubocop.yml CHANGED
@@ -2,22 +2,33 @@
2
2
  require: rubocop-rspec
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.3.7
5
+ TargetRubyVersion: 2.4.0
6
6
 
7
7
  Layout/ExtraSpacing:
8
8
  AllowForAlignment: false
9
9
 
10
10
  Metrics/BlockLength:
11
- Max: 60
11
+ Max: 80
12
12
  Exclude:
13
13
  - 'spec/**/*_spec.rb'
14
14
 
15
- Metrics/LineLength:
16
- Exclude:
17
- - 'spec/bankrupt/util_spec.rb'
18
-
19
15
  Metrics/MethodLength:
20
16
  Max: 15
21
17
 
18
+ RSpec/DescribeClass:
19
+ Exclude:
20
+ - 'spec/bankrupt/tasks_spec.rb'
21
+
22
+ RSpec/ExampleLength:
23
+ Exclude:
24
+ - 'spec/bankrupt/tasks_spec.rb'
25
+
26
+ RSpec/MessageSpies:
27
+ Enabled: false
28
+
29
+ RSpec/MultipleExpectations:
30
+ Exclude:
31
+ - 'spec/bankrupt/tasks_spec.rb'
32
+
22
33
  RSpec/NestedGroups:
23
34
  Max: 6
data/.travis.yml CHANGED
@@ -3,7 +3,6 @@ sudo: false
3
3
 
4
4
  language: ruby
5
5
  rvm:
6
- - 2.3
7
6
  - 2.4
8
7
  - 2.5
9
8
  - 2.6
data/CHANGELOG.md CHANGED
@@ -3,6 +3,19 @@
3
3
  This file keeps track of changes between releases for the bankrupt project
4
4
  which adheres to [semantic versioning](https://semver.org).
5
5
 
6
+ ## v2.0.0 2019-06-12
7
+
8
+ This major release changes the default cache behavior of assets uploaded to s3
9
+ to make them expire in one year.
10
+
11
+ * Set cache-control header on objects uploaded to s3 (1 year).
12
+ * Add new rake task to remove old objects (anything not in the current
13
+ manifest) from s3.
14
+ * Extend test covertage to rake tasks.
15
+ * Drop support for ruby 2.3.x which might be considered breaking, but has
16
+ actually always been the case just unnoticed until the test coverage was
17
+ extended and exposed the problem, so I'm considering it a bugfix.
18
+
6
19
  ## v1.1.0 2019-06-05
7
20
 
8
21
  Add support for `img` tags along with the ability to add other attributes.
data/bankrupt.gemspec CHANGED
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.description = 'Load files from local disk or from a CDN in production.'
15
15
  spec.homepage = 'https://github.com/mfinelli/bankrupt'
16
16
  spec.license = 'Apache-2.0'
17
- spec.required_ruby_version = '>= 2.3.0'
17
+ spec.required_ruby_version = '>= 2.4.0'
18
18
 
19
19
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
20
20
  f.match(%r{^(test|spec|features)/})
@@ -22,9 +22,10 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.require_paths = ['lib']
24
24
 
25
- # spec.add_dependency 'aws-sdk-s3', '~> 1.0'
26
- # spec.add_dependency 'mini_mime', '~> 1.0'
27
25
  spec.add_dependency 'slim', '>= 3.0', '< 5.0'
26
+ spec.add_development_dependency 'aws-sdk-s3'
27
+ spec.add_development_dependency 'mini_mime'
28
+ spec.add_development_dependency 'rake'
28
29
 
29
30
  spec.add_development_dependency 'bundler'
30
31
  spec.add_development_dependency 'coveralls'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright 2018 Mario Finelli
3
+ # Copyright 2018-2019 Mario Finelli
4
4
  #
5
5
  # Licensed under the Apache License, Version 2.0 (the "License");
6
6
  # you may not use this file except in compliance with the License.
@@ -42,6 +42,7 @@ namespace :bankrupt do
42
42
  # content_md5: Base64.strict_encode64(asset[:md5]),
43
43
  content_length: File.size(f),
44
44
  content_type: MiniMime.lookup_by_filename(f).content_type,
45
+ cache_control: 'public, max-age=31536000',
45
46
  server_side_encryption: 'AES256',
46
47
  storage_class: 'STANDARD',
47
48
  metadata: {
@@ -53,6 +54,39 @@ namespace :bankrupt do
53
54
  end
54
55
  end
55
56
 
57
+ desc 'Purge files that no longer exist in the manifest from s3/cloudfront'
58
+ task purge: [:manifest] do
59
+ s3 = Aws::S3::Client.new(region: 'eu-west-1')
60
+
61
+ r = s3.list_objects_v2(bucket: CDN_BUCKET, prefix: CDN_PREFIX)
62
+ cdn = r[:contents].collect(&:key)
63
+
64
+ local = JSON.parse(File.read(File.join(APP_ROOT, 'tmp', 'assets.json')),
65
+ symbolize_names: true).map do |_key, asset|
66
+ File.join(
67
+ CDN_PREFIX,
68
+ [[asset[:filename].split(ex = File.extname(asset[:filename])).first,
69
+ asset[:md5]].join('-'), ex].join
70
+ )
71
+ end
72
+
73
+ if local.empty?
74
+ LOG.error 'Local manifest returned zero assets, not purging anything'
75
+ exit(1)
76
+ end
77
+
78
+ keys = (cdn - local).map do |key|
79
+ LOG.info "Going to purge #{key}"
80
+
81
+ {
82
+ key: key
83
+ }
84
+ end
85
+
86
+ d = s3.delete_objects(bucket: CDN_BUCKET, delete: { objects: keys })
87
+ LOG.info "Purged #{d.deleted.size} objects from s3"
88
+ end
89
+
56
90
  desc 'Generate an asset manifest file with sums and hashes'
57
91
  task :manifest do
58
92
  manifest = {}
@@ -80,7 +114,7 @@ namespace :bankrupt do
80
114
  }
81
115
  end
82
116
 
83
- LOG.info "Generated asset manifest with #{manifest.keys.size} entries."
117
+ LOG.info "Generated asset manifest with #{manifest.keys.size} entries"
84
118
 
85
119
  FileUtils.mkdir_p(File.join(APP_ROOT, 'tmp'))
86
120
  File.write(File.join(APP_ROOT, 'tmp', 'assets.json'),
@@ -15,5 +15,5 @@
15
15
  # limitations under the License.
16
16
 
17
17
  module Bankrupt
18
- VERSION = '1.1.0'
18
+ VERSION = '2.0.0'
19
19
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bankrupt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mario Finelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-05 00:00:00.000000000 Z
11
+ date: 2019-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slim
@@ -30,6 +30,48 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: aws-sdk-s3
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: mini_mime
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
33
75
  - !ruby/object:Gem::Dependency
34
76
  name: bundler
35
77
  requirement: !ruby/object:Gem::Requirement
@@ -189,7 +231,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
189
231
  requirements:
190
232
  - - ">="
191
233
  - !ruby/object:Gem::Version
192
- version: 2.3.0
234
+ version: 2.4.0
193
235
  required_rubygems_version: !ruby/object:Gem::Requirement
194
236
  requirements:
195
237
  - - ">="