bankrupt 0.1.0 → 1.0.0

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
  SHA256:
3
- metadata.gz: 683171c662debe1e9b1997633f30aa5b7d9cae6302c67e58db0435b225edcf3f
4
- data.tar.gz: a99edeb946348365e9e78cf715482b8402df6711774e481270918ae7363e9a96
3
+ metadata.gz: 9881aed762cf1b7c364718161f3432a0dc0cadd735a56452f0783f915f8152ac
4
+ data.tar.gz: 342de62d65f9321e759d8f919942526ef2894cb995f134ea21aec08ea877b50a
5
5
  SHA512:
6
- metadata.gz: d167fd1aa94bef42993071c7fc9700f87c1cd70952b970cc00276b5e19f4476170b7cf56e82f37dd7ed331ecea66704253468b4c552b356e83c95ec7b6fc747b
7
- data.tar.gz: 5134e5f34bf084d11cfbaa694a8a747616dca77892e0a22d81513ccceb259ee79c1f7a6d7730ba589ee4aa615bc9a124daac7ef9dd2728c828795884e5c34a7a
6
+ metadata.gz: d09c883f9d5244e44297a62442516043bad996cc557551bc2470e6b7b9d0a62cf86d93c07862f2fea6ffa361634fb9386ea48e675c301657cfad2a51937f6508
7
+ data.tar.gz: 2ea0da6c668536fa73de4ee9760762425ca7d7c733a6fe7efaffcb569ed2a798f8748f7c84c6cf4cdeabea8ace5fc22c6dbf106e265e7a5b9a305390655e5348
data/.editorconfig ADDED
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ indent_style = space
6
+ indent_size = 2
7
+ end_of_line = lf
8
+ insert_final_newline = true
9
+ trim_trailing_whitespace = true
data/.gitignore CHANGED
@@ -1,3 +1,8 @@
1
1
  /.bundle
2
+ /.yardoc
3
+ /coverage
4
+ /doc
2
5
  /Gemfile.lock
3
6
  /vendor/bundle
7
+ /*.gem
8
+ /*.gem.asc
data/.rubocop.yml ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ require: rubocop-rspec
3
+
4
+ AllCops:
5
+ TargetRubyVersion: 2.3.7
6
+
7
+ Layout/ExtraSpacing:
8
+ AllowForAlignment: false
9
+
10
+ Metrics/BlockLength:
11
+ Max: 60
12
+ Exclude:
13
+ - 'spec/**/*_spec.rb'
14
+
15
+ Metrics/LineLength:
16
+ Exclude:
17
+ - 'spec/bankrupt/util_spec.rb'
18
+
19
+ Metrics/MethodLength:
20
+ Max: 15
21
+
22
+ RSpec/NestedGroups:
23
+ Max: 5
data/.travis.yml ADDED
@@ -0,0 +1,20 @@
1
+ ---
2
+ sudo: false
3
+
4
+ language: ruby
5
+ rvm:
6
+ - 2.3
7
+ - 2.4
8
+ - 2.5
9
+
10
+ before_install:
11
+ - gem update --system
12
+ - gem --version
13
+
14
+ script:
15
+ - bundle exec rubocop
16
+ - bundle exec rspec
17
+ - bundle exec yard
18
+
19
+ notifications:
20
+ email: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,17 @@
1
+ # Bankrupt Change Log
2
+
3
+ This file keeps track of changes between releases for the bankrupt project
4
+ which adheres to [semantic versioning](https://semver.org).
5
+
6
+ ## v1.0.0 2018-08-10
7
+
8
+ First stable release. Combines all old, internal code (rake tasks, helper
9
+ module) with new updates (modification for public release, utility methods).
10
+
11
+ * Add rake task for generating manifest files.
12
+ * Add rake task for uploading assets to AWS s3 bucket.
13
+ * Add utility method for parsing manifest files.
14
+
15
+ ## v0.1.0 2018-07-25
16
+
17
+ Initial release.
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  gemspec
data/README.md CHANGED
@@ -1,4 +1,103 @@
1
1
  # Bankrupt
2
2
 
3
+ [![RubyGems](https://img.shields.io/gem/v/bankrupt.svg)](https://rubygems.org/gems/bankrupt)
4
+ [![Build Status](https://travis-ci.org/mfinelli/bankrupt.svg?branch=master)](https://travis-ci.org/mfinelli/bankrupt)
5
+ [![Coverage Status](https://coveralls.io/repos/github/mfinelli/bankrupt/badge.svg?branch=master)](https://coveralls.io/github/mfinelli/bankrupt?branch=master)
6
+ [![Maintainability](https://api.codeclimate.com/v1/badges/f13a4521623d19c8eb4a/maintainability)](https://codeclimate.com/github/mfinelli/bankrupt/maintainability)
7
+ [![Inline docs](http://inch-ci.org/github/mfinelli/bankrupt.svg?branch=master)](http://inch-ci.org/github/mfinelli/bankrupt)
8
+
3
9
  A [sinatra](http://sinatrarb.com) helper to path assets during development and
4
10
  production.
11
+
12
+ ## Usage
13
+
14
+ ### Sinatra
15
+
16
+ Before loading your app set a few constants:
17
+
18
+ ```ruby
19
+ CDN = CONFIG[:cdn_url].to_s.freeze
20
+
21
+ require 'bankrupt/util'
22
+ ASSETS = Bankrupt::Util.parse_manifest(
23
+ File.join(APP_ROOT, 'tmp', 'assets.json')
24
+ ).freeze
25
+ ```
26
+
27
+ Then include bankrupt as a helper in your app:
28
+
29
+ ```ruby
30
+ require 'bankrupt'
31
+
32
+ class App < Sinatra::Base
33
+ set :public_folder, File.join(APP_ROOT, 'public')
34
+
35
+ helpers Bankrupt
36
+
37
+ # TODO: there is a better way to do this
38
+ def initialize
39
+ @_assets = {}
40
+ super
41
+ end
42
+ end
43
+ ```
44
+
45
+ ### Rake
46
+
47
+ You can use the bundled rake task to generate the manifest file in the correct
48
+ format using any assets found in the `public` folder. You can also upload the
49
+ assets to an s3 bucket for use with cloudfront as a CDN.
50
+
51
+ Make sure to add the extra dependencies to your gemfile:
52
+
53
+ ```ruby
54
+ gem 'aws-sdk-s3'
55
+ gem 'mini_mime'
56
+ ```
57
+
58
+ In your rakefile you'll need to define several constants and then include
59
+ the tasks:
60
+
61
+ ```ruby
62
+ require 'bankrupt/tasks'
63
+ require 'logger'
64
+
65
+ APP_ROOT = __dir__.freeze unless defined?(APP_ROOT)
66
+ CDN_BUCKET = 'your-s3-bucket'.freeze unless defined?(CDN_BUCKET)
67
+ CDN_PREFIX = 'project'.freeze unless defined?(CDN_PREFIX)
68
+
69
+ unless defined?(VERSION)
70
+ VERSION = JSON.parse(File.read(File.join(APP_ROOT, 'package.json')),
71
+ symbolize_names: true).fetch(:version).freeze
72
+ end
73
+
74
+ LOG = Logger.new(STDOUT) unless defined?(LOG)
75
+ ```
76
+
77
+ Finally set your default task:
78
+
79
+ ```ruby
80
+ task default: if ENV['CLOUDBUILD'].to_s.casecmp?('true')
81
+ %i[bankrupt:cdn]
82
+ else
83
+ %i[bankrupt:manifest]
84
+ end
85
+ ```
86
+
87
+ ## License
88
+
89
+ ```
90
+ Copyright 2018 Mario Finelli
91
+
92
+ Licensed under the Apache License, Version 2.0 (the "License");
93
+ you may not use this file except in compliance with the License.
94
+ You may obtain a copy of the License at
95
+
96
+ http://www.apache.org/licenses/LICENSE-2.0
97
+
98
+ Unless required by applicable law or agreed to in writing, software
99
+ distributed under the License is distributed on an "AS IS" BASIS,
100
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
101
+ See the License for the specific language governing permissions and
102
+ limitations under the License.
103
+ ```
data/bankrupt.gemspec CHANGED
@@ -1,26 +1,38 @@
1
- lib = File.expand_path("../lib", __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
2
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require "bankrupt/version"
5
+ require 'bankrupt/version'
4
6
 
5
7
  Gem::Specification.new do |spec|
6
- spec.name = "bankrupt"
7
- spec.version = Bankrupt::VERSION
8
- spec.authors = ["Mario Finelli"]
9
- spec.email = ["mario@finel.li"]
8
+ spec.name = 'bankrupt'
9
+ spec.version = Bankrupt::VERSION
10
+ spec.authors = ['Mario Finelli']
11
+ spec.email = ['mario@finel.li']
10
12
 
11
- spec.summary = %q{A sinatra helper to load assets in development and production.}
12
- spec.description = %q{This gem loads files from disk locally and from a CDN in production.}
13
- spec.homepage = "https://github.com/mfinelli/bankrupt"
14
- spec.license = "Apache-2.0"
13
+ spec.summary = 'A sinatra helper to load assets locally and production.'
14
+ spec.description = 'Load files from local disk or from a CDN in production.'
15
+ spec.homepage = 'https://github.com/mfinelli/bankrupt'
16
+ spec.license = 'Apache-2.0'
17
+ spec.required_ruby_version = '>= 2.3.0'
15
18
 
16
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
20
  f.match(%r{^(test|spec|features)/})
18
21
  end
19
22
 
20
- spec.require_paths = ["lib"]
23
+ spec.require_paths = ['lib']
21
24
 
25
+ # spec.add_dependency 'aws-sdk-s3', '~> 1.0'
26
+ # spec.add_dependency 'mini_mime', '~> 1.0'
22
27
  spec.add_dependency 'slim', '~> 3.0'
23
28
 
24
- spec.add_development_dependency "bundler", "~> 1.16"
25
- spec.add_development_dependency "rspec", "~> 3.7"
29
+ spec.add_development_dependency 'bundler'
30
+ spec.add_development_dependency 'coveralls'
31
+ spec.add_development_dependency 'pry'
32
+ spec.add_development_dependency 'redcarpet'
33
+ spec.add_development_dependency 'rspec'
34
+ spec.add_development_dependency 'rubocop'
35
+ spec.add_development_dependency 'rubocop-rspec'
36
+ spec.add_development_dependency 'simplecov'
37
+ spec.add_development_dependency 'yard'
26
38
  end
data/lib/bankrupt.rb CHANGED
@@ -1,3 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Mario Finelli
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'slim'
18
+
19
+ # Read assets from a local cache, using files on disk for development and
20
+ # from a CDN url if the CDN constant is set.
1
21
  module Bankrupt
2
22
  ASSET = Struct.new(:path, :sri).freeze
3
23
 
@@ -0,0 +1,89 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Mario Finelli
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ require 'aws-sdk-s3'
18
+ require 'base64'
19
+ require 'digest/bubblebabble'
20
+ require 'fileutils'
21
+ require 'json'
22
+ require 'mini_mime'
23
+ require 'rake'
24
+
25
+ namespace :bankrupt do
26
+ desc 'Upload files specified in the manifest to s3/cloudfront'
27
+ task cdn: [:manifest] do
28
+ s3 = Aws::S3::Client.new(region: 'eu-west-1')
29
+
30
+ JSON.parse(File.read(File.join(APP_ROOT, 'tmp', 'assets.json')),
31
+ symbolize_names: true).each do |_key, asset|
32
+ r = s3.put_object(
33
+ bucket: CDN_BUCKET,
34
+ key: File.join(CDN_PREFIX,
35
+ [[
36
+ asset[:filename].split(
37
+ ex = File.extname(asset[:filename])
38
+ ).first, asset[:md5]
39
+ ].join('-'), ex].join),
40
+ body: File.read(f = File.join(APP_ROOT, 'public', asset[:filename])),
41
+ acl: 'private',
42
+ # content_md5: Base64.strict_encode64(asset[:md5]),
43
+ content_length: File.size(f),
44
+ content_type: MiniMime.lookup_by_filename(f).content_type,
45
+ server_side_encryption: 'AES256',
46
+ storage_class: 'STANDARD',
47
+ metadata: {
48
+ bankruptVersion: "v#{VERSION}"
49
+ }
50
+ )
51
+
52
+ LOG.info "Uploaded #{asset[:filename]} (#{r.etag})"
53
+ end
54
+ end
55
+
56
+ desc 'Generate an asset manifest file with sums and hashes'
57
+ task :manifest do
58
+ manifest = {}
59
+ file_glob = '*.{css,jpg,js,png,svg}'
60
+
61
+ Dir.glob(File.join(APP_ROOT, 'public', file_glob)) do |file|
62
+ md5 = Digest::MD5.file(file).to_s
63
+ basename = File.basename(file)
64
+
65
+ # undo the hash that we have webpack insert (but is important so the
66
+ # final css uses the correct path)
67
+ if basename.match?(/\-#{md5}\.#{File.extname(file).delete('.')}$/)
68
+ File.rename(file,
69
+ (file = File.join(
70
+ File.dirname(file),
71
+ (basename = basename.gsub("-#{md5}", ''))
72
+ )))
73
+ end
74
+
75
+ manifest[basename] = {
76
+ filename: basename,
77
+ md5: md5,
78
+ babble: Digest::MD5.file(file).bubblebabble,
79
+ sri: 'sha384-' + Digest::SHA384.file(file).base64digest.to_s
80
+ }
81
+ end
82
+
83
+ LOG.info "Generated asset manifest with #{manifest.keys.size} entries."
84
+
85
+ FileUtils.mkdir_p(File.join(APP_ROOT, 'tmp'))
86
+ File.write(File.join(APP_ROOT, 'tmp', 'assets.json'),
87
+ JSON.generate(manifest))
88
+ end
89
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Mario Finelli
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ module Bankrupt
18
+ # Utilities for working with asset manifest files.
19
+ class Util
20
+ # Parse the asset manifest
21
+ #
22
+ # @param path [String] path to the manifest
23
+ # @return [Hash] parsed manifest or empty hash on error
24
+ def self.parse_manifest(path)
25
+ Hash[JSON.parse(File.read(path)).map do |k, v|
26
+ [k.freeze, Hash[v.map { |l, b| [l.to_sym, b.freeze] }].freeze]
27
+ end].freeze
28
+ rescue StandardError
29
+ {}
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright 2018 Mario Finelli
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
1
17
  module Bankrupt
2
- VERSION = '0.1.0'
18
+ VERSION = '1.0.0'
3
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: 0.1.0
4
+ version: 1.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: 2018-07-25 00:00:00.000000000 Z
11
+ date: 2018-08-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: slim
@@ -28,44 +28,148 @@ dependencies:
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: coveralls
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
39
67
  - !ruby/object:Gem::Version
40
- version: '1.16'
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: redcarpet
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
41
83
  - !ruby/object:Gem::Dependency
42
84
  name: rspec
43
85
  requirement: !ruby/object:Gem::Requirement
44
86
  requirements:
45
- - - "~>"
87
+ - - ">="
46
88
  - !ruby/object:Gem::Version
47
- version: '3.7'
89
+ version: '0'
48
90
  type: :development
49
91
  prerelease: false
50
92
  version_requirements: !ruby/object:Gem::Requirement
51
93
  requirements:
52
- - - "~>"
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
53
130
  - !ruby/object:Gem::Version
54
- version: '3.7'
55
- description: This gem loads files from disk locally and from a CDN in production.
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: yard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Load files from local disk or from a CDN in production.
56
154
  email:
57
155
  - mario@finel.li
58
156
  executables: []
59
157
  extensions: []
60
158
  extra_rdoc_files: []
61
159
  files:
160
+ - ".editorconfig"
62
161
  - ".gitignore"
63
162
  - ".rspec"
163
+ - ".rubocop.yml"
164
+ - ".travis.yml"
165
+ - CHANGELOG.md
64
166
  - Gemfile
65
167
  - LICENSE
66
168
  - README.md
67
169
  - bankrupt.gemspec
68
170
  - lib/bankrupt.rb
171
+ - lib/bankrupt/tasks.rb
172
+ - lib/bankrupt/util.rb
69
173
  - lib/bankrupt/version.rb
70
174
  homepage: https://github.com/mfinelli/bankrupt
71
175
  licenses:
@@ -79,7 +183,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
183
  requirements:
80
184
  - - ">="
81
185
  - !ruby/object:Gem::Version
82
- version: '0'
186
+ version: 2.3.0
83
187
  required_rubygems_version: !ruby/object:Gem::Requirement
84
188
  requirements:
85
189
  - - ">="
@@ -90,5 +194,5 @@ rubyforge_project:
90
194
  rubygems_version: 2.7.6
91
195
  signing_key:
92
196
  specification_version: 4
93
- summary: A sinatra helper to load assets in development and production.
197
+ summary: A sinatra helper to load assets locally and production.
94
198
  test_files: []