bankrupt 0.1.0 → 1.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: 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: []