hanami-assets 0.0.0 → 0.2.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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +23 -0
  3. data/LICENSE.md +22 -0
  4. data/README.md +426 -9
  5. data/bin/hanami-assets +22 -0
  6. data/hanami-assets.gemspec +26 -12
  7. data/lib/hanami/assets.rb +153 -2
  8. data/lib/hanami/assets/bundler.rb +173 -0
  9. data/lib/hanami/assets/cache.rb +58 -0
  10. data/lib/hanami/assets/compiler.rb +212 -0
  11. data/lib/hanami/assets/compressors/abstract.rb +119 -0
  12. data/lib/hanami/assets/compressors/builtin_javascript.rb +36 -0
  13. data/lib/hanami/assets/compressors/builtin_stylesheet.rb +57 -0
  14. data/lib/hanami/assets/compressors/closure_javascript.rb +25 -0
  15. data/lib/hanami/assets/compressors/javascript.rb +77 -0
  16. data/lib/hanami/assets/compressors/jsmin.rb +283 -0
  17. data/lib/hanami/assets/compressors/null_compressor.rb +19 -0
  18. data/lib/hanami/assets/compressors/sass_stylesheet.rb +38 -0
  19. data/lib/hanami/assets/compressors/stylesheet.rb +77 -0
  20. data/lib/hanami/assets/compressors/uglifier_javascript.rb +25 -0
  21. data/lib/hanami/assets/compressors/yui_javascript.rb +25 -0
  22. data/lib/hanami/assets/compressors/yui_stylesheet.rb +25 -0
  23. data/lib/hanami/assets/config/global_sources.rb +50 -0
  24. data/lib/hanami/assets/config/manifest.rb +112 -0
  25. data/lib/hanami/assets/config/sources.rb +77 -0
  26. data/lib/hanami/assets/configuration.rb +539 -0
  27. data/lib/hanami/assets/helpers.rb +733 -0
  28. data/lib/hanami/assets/precompiler.rb +67 -0
  29. data/lib/hanami/assets/version.rb +4 -1
  30. metadata +189 -17
  31. data/.gitignore +0 -9
  32. data/Gemfile +0 -4
  33. data/Rakefile +0 -2
  34. data/bin/console +0 -14
  35. data/bin/setup +0 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 799f1705c3aaeeb889f0b1b227d3aa5ee1ef9571
4
- data.tar.gz: 8329ada74df211e8c7b7715f37739f23549b0a22
3
+ metadata.gz: a443db3ecee31792abeda3bc3c777df04b3ed8e7
4
+ data.tar.gz: e8cabf2dc50f5a1a9d6c2e44403a251bddbf9873
5
5
  SHA512:
6
- metadata.gz: 3add3df0ca42d323c89062d69aed34a7f6399d9d5f27c00eb6e3d76c5e6e59a75a259331c8e5d25a8a7ea5a1543b616f3289b3982f85614ce42e0182504538cd
7
- data.tar.gz: 9b0def07ac7a0c5cd8dc5827c131b3d135cb1c25f6208ece09af95acd08d416d4f06b2c04c8885fb82ce996de2e5587493dda1f54f854c89688f747ba6765613
6
+ metadata.gz: c837a69fa374ed5ccefedc39c202769135e8d15021a6eb11859d3d8737e0152c5add82a756a58a138ece98d258a1acb08fc0557258c225fc679ece71a5787d1c
7
+ data.tar.gz: d54301922da41e242a1b5bb3e6bbf952a61007f3e3ece7c17462853dd105f42e11c0e465b46e58883d9d1a44e62b5efa8ea5b2c0ec4436c93b815957d6aa7c81
data/CHANGELOG.md ADDED
@@ -0,0 +1,23 @@
1
+ # Hanami::Assets
2
+ Assets management for Ruby web applications
3
+
4
+ ## v0.2.0 - 2016-01-22
5
+ ### Changed
6
+ - [Luca Guidi] Renamed the project
7
+
8
+ ## v0.1.0 - 2016-01-12
9
+ ### Added
10
+ - [Luca Guidi] Configurable assets compressors
11
+ - [Luca Guidi] Builtin JavaScript and stylesheet compressors
12
+ - [deepj & Michael Deol] Added `Lotus::Assets::Helpers#favicon`
13
+ - [Leigh Halliday] Added `Lotus::Assets::Helpers#video`
14
+ - [Kleber Correia] Added `Lotus::Assets::Helpers#audio`
15
+ - [Gonzalo Rodríguez-Baltanás Díaz] Added `Lotus::Assets::Helpers#image`
16
+ - [Luca Guidi] Added `Lotus::Assets::Helpers#javascript` and `#stylesheet`
17
+ - [Luca Guidi] Added `Lotus::Assets::Helpers#asset_path` and `#asset_url`
18
+ - [Luca Guidi] "CDN Mode" let helpers to generate CDN URLs (eg. `https://123.cloudfront.net/assets/application-d1829dc353b734e3adc24855693b70f9.js`)
19
+ - [Luca Guidi] "Digest Mode" let helpers to generate digest URLs (eg. `/assets/application-d1829dc353b734e3adc24855693b70f9.js`)
20
+ - [Luca Guidi] Added `hanami-assets` command to precompile assets at the deploy time
21
+ - [Luca Guidi] Added support for third party gems that want to ship gemified assets for Lotus
22
+ - [Luca Guidi] Assets preprocessors (eg. Sass, ES6, CoffeeScript, Opal, JSX)
23
+ - [Luca Guidi] Official support for Ruby 2.0+
data/LICENSE.md ADDED
@@ -0,0 +1,22 @@
1
+ Copyright © 2014-2016 Luca Guidi
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -1,8 +1,31 @@
1
1
  # Hanami::Assets
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/hanami/assets`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Assets management for Ruby web projects
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ ## Status
6
+
7
+ [![Gem Version](http://img.shields.io/gem/v/hanami-assets.svg)](https://badge.fury.io/rb/hanami-assets)
8
+ [![Build Status](http://img.shields.io/travis/hanami/assets/master.svg)](https://travis-ci.org/hanami/assets?branch=master)
9
+ [![Coverage](http://img.shields.io/coveralls/hanami/assets/master.svg)](https://coveralls.io/r/hanami/assets)
10
+ [![Code Climate](http://img.shields.io/codeclimate/github/hanami/assets.svg)](https://codeclimate.com/github/hanami/assets)
11
+ [![Dependencies](http://img.shields.io/gemnasium/hanami/assets.svg)](https://gemnasium.com/hanami/assets)
12
+ [![Inline Docs](http://inch-ci.org/github/hanami/assets.svg)](http://inch-ci.org/github/hanami/assets)
13
+
14
+ ## Contact
15
+
16
+ * Home page: http://hanamirb.org
17
+ * Community: http://hanamirb.org/community
18
+ * Guides: http://hanamirb.org/guides
19
+ * Mailing List: http://hanamirb.org/mailing-list
20
+ * API Doc: http://rdoc.info/gems/hanami-assets
21
+ * Bugs/Issues: https://github.com/hanami/assets/issues
22
+ * Support: http://stackoverflow.com/questions/tagged/hanami
23
+ * Forum: https://discuss.hanamirb.org
24
+ * Chat: http://chat.hanamirb.org
25
+
26
+ ## Rubies
27
+
28
+ __Hanami::Assets__ supports Ruby (MRI) 2.2+
6
29
 
7
30
  ## Installation
8
31
 
@@ -14,23 +37,417 @@ gem 'hanami-assets'
14
37
 
15
38
  And then execute:
16
39
 
17
- $ bundle
40
+ ```shell
41
+ $ bundle
42
+ ```
18
43
 
19
44
  Or install it yourself as:
20
45
 
21
- $ gem install hanami-assets
46
+ ```shell
47
+ $ gem install hanami-assets
48
+ ```
22
49
 
23
50
  ## Usage
24
51
 
25
- TODO: Write usage instructions here
52
+ ### Helpers
53
+
54
+ The framework offers assets specific helpers to be used in templates.
55
+ They resolve one or multiple sources into corresponding HTML tags.
56
+ Those sources can be the name of the local asset or an absolute URL.
57
+
58
+ Given the following template:
59
+
60
+ ```erb
61
+ <!doctype HTML>
62
+ <html>
63
+ <head>
64
+ <title>Assets example</title>
65
+ <%= stylesheet 'reset', 'grid', 'main' %>
66
+ </head>
67
+
68
+ <body>
69
+ <!-- ... -->
70
+ <%= javascript 'https://code.jquery.com/jquery-2.1.1.min.js', 'application' %>
71
+ <%= javascript 'modals' %>
72
+ </body>
73
+ </html>
74
+ ```
75
+
76
+ It will output this markup.
77
+
78
+ ```html
79
+ <!doctype HTML>
80
+ <html>
81
+ <head>
82
+ <title>Assets example</title>
83
+ <link href="/assets/reset.css" type="text/css" rel="stylesheet">
84
+ <link href="/assets/grid.css" type="text/css" rel="stylesheet">
85
+ <link href="/assets/main.css" type="text/css" rel="stylesheet">
86
+ </head>
87
+
88
+ <body>
89
+ <!-- ... -->
90
+ <script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
91
+ <script src="/assets/application.js" type="text/javascript"></script>
92
+ <script src="/assets/modals.js" type="text/javascript"></script>
93
+ </body>
94
+ </html>
95
+ ```
96
+
97
+ Let's have a look at the corresponding Ruby code.
98
+ In this example we use ERb, but remember that `Hanami::Assets` is compatible with
99
+ all the rendering engines such as HAML, Slim, Mustache, etc..
100
+
101
+ ```ruby
102
+ require 'erb'
103
+ require 'hanami/assets'
104
+ require 'hanami/assets/helpers'
105
+
106
+ class View
107
+ include Hanami::Assets::Helpers
108
+
109
+ def initialize
110
+ @template = File.read('template.erb')
111
+ @engine = ERB.new(@template)
112
+ end
113
+
114
+ def render
115
+ @engine.result(binding)
116
+ end
117
+ end
118
+
119
+ View.new.render # => HTML markup
120
+ ```
121
+
122
+ For advanced configurations, please have a look at
123
+ [`Hanami::Assets::Configuration`](https://github.com/hanami/assets/blob/master/lib/hanami/assets/configuration.rb).
124
+
125
+ ### Available Helpers
126
+
127
+ This gems ships with the following helpers:
128
+
129
+ * `javascript`
130
+ * `stylesheet`
131
+ * `favicon`
132
+ * `image`
133
+ * `video`
134
+ * `audio`
135
+ * `asset_path`
136
+ * `asset_url`
137
+
138
+ ### Development mode
139
+
140
+ `Hanami::Assets` can help you during the development process of your application.
141
+ It can manage multiple source directories for each asset type or run a
142
+ preprocessor for you.
143
+
144
+ #### Sources
145
+
146
+ Imagine to have your application's javascripts under `app/assets/javascripts` and that
147
+ those assets depends on a vendored version of jQuery.
148
+
149
+ ```ruby
150
+ require 'hanami/assets'
151
+
152
+ Hanami::Assets.configure do
153
+ compile true
154
+
155
+ sources << [
156
+ 'app/assets',
157
+ 'vendor/jquery'
158
+ ]
159
+ end
160
+ ```
161
+
162
+ When from a template you do:
163
+
164
+ ```erb
165
+ <%= javascript 'jquery', 'jquery-ui', 'login' %>
166
+ ```
167
+
168
+ `Hanami::Assets` looks at the defined sources and **lazily copies** those files
169
+ under `public/assets` (by default), before the markup is generated.
170
+
171
+ Your public directory will have the following structure.
172
+
173
+ ```shell
174
+ % tree public
175
+ public/
176
+ └── assets
177
+ ├── jquery.js
178
+ ├── jquery-ui.js
179
+ └── login.js
180
+
181
+ ```
182
+
183
+ **Please remember that sources are recursively looked up in order of declaration.**
184
+
185
+ If in the example above we had a `jquery.js` under `app/assets/javascripts/**/*.js`
186
+ that file would be copied into the public directory instead of the one under
187
+ `vendor/jquery`. The reason is because we declared `app/assets/javascripts` first.
188
+
189
+ #### Preprocessors
190
+
191
+ `Hanami::Assets` is able to run assets preprocessors and **lazily compile** them
192
+ under `public/assets` (by default), before the markup is generated.
193
+
194
+ Imagine to have `main.css.scss` under `app/assets/stylesheets` and `reset.css` under
195
+ `vendor/stylesheets`.
196
+
197
+ **The extensions structure is important.**
198
+ The first one is mandatory and it's used to understand which asset type we are
199
+ handling: `.css` for stylesheets.
200
+ The second one is optional and it's for a preprocessor: `.scss` for Sass.
201
+
202
+ ```ruby
203
+ require 'sass'
204
+ require 'hanami/assets'
205
+
206
+ Hanami::Assets.configure do
207
+ compile true
208
+
209
+ sources << [
210
+ 'assets',
211
+ 'vendor/assets'
212
+ ]
213
+ end
214
+ ```
215
+
216
+ When from a template you do:
217
+
218
+ ```erb
219
+ <%= stylesheet 'reset', 'main' %>
220
+ ```
221
+
222
+ Your public directory will have the following structure.
223
+
224
+ ```shell
225
+ % tree public
226
+ public/
227
+ └── assets
228
+ ├── reset.css
229
+ └── main.css
230
+ ```
231
+
232
+ ### Preprocessors engines
233
+
234
+ `Hanami::Assets` uses [Tilt](https://github.com/rtomayko/tilt) to provide support for the most common preprocessors, such as [Sass](http://sass-lang.com/) (including `sassc-ruby`), [Less](http://lesscss.org/), ES6, [JSX](https://jsx.github.io/), [CoffeScript](http://coffeescript.org), [Opal](http://opalrb.org), [Handlebars](http://handlebarsjs.com), [JBuilder](https://github.com/rails/jbuilder).
235
+
236
+ In order to use one or more of them, be sure to include the corresponding gem into your `Gemfile` and require the library.
237
+
238
+ #### EcmaScript 6
26
239
 
27
- ## Development
240
+ We strongly suggest to use [EcmaScript 6](http://es6-features.org/) for your next project.
241
+ It isn't fully [supported](https://kangax.github.io/compat-table/es6/) yet by browser vendors, but it's the future of JavaScript.
28
242
 
29
- After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
243
+ As of today, you need to transpile ES6 code into something understandable by current browsers, which is ES5.
244
+ For this purpose we support [Babel](https://babeljs.io).
30
245
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
246
+ ### Deployment
247
+
248
+ `Hanami::Assets` ships with an executable (`hanami-assets`), which can be used to precompile assets and make them cacheable by browsers (via checksum suffix).
249
+
250
+ Let's say we have an application that has main file that requires the entire code (`config/environment.rb`), a gem that brings Ember.js code, and the following sources:
251
+
252
+ ```shell
253
+ % tree .
254
+ ├── apps
255
+ │   ├── admin
256
+ │   │   ├── assets
257
+ │   │   │   └── js
258
+ │   │   │   ├── application.js
259
+ │   │   │   └── zepto.js
260
+ # ...
261
+ │   ├── metrics
262
+ │   │   ├── assets
263
+ │   │   │   └── javascripts
264
+ │   │   │   └── dashboard.js
265
+ # ...
266
+ │   └── web
267
+ │   ├── assets
268
+ │   │   ├── images
269
+ │   │   │   └── bookshelf.jpg
270
+ │   │   └── javascripts
271
+ │   │   └── application.js
272
+ # ...
273
+ │   └── vendor
274
+ │   └── assets
275
+ │   └── javascripts
276
+ │   └── jquery.js
277
+ └── config
278
+    └── environment.rb
279
+ ```
280
+
281
+ In order to deploy, we can run:
282
+
283
+ ```shell
284
+ bundle exec hanami-assets --config=config/environment.rb
285
+ ```
286
+
287
+ It will output:
288
+
289
+ ```shell
290
+ tree public
291
+ public
292
+ ├── assets
293
+ │   ├── admin
294
+ │   │   ├── application-28a6b886de2372ee3922fcaf3f78f2d8.js
295
+ │   │   ├── application.js
296
+ │   │   ├── ember-b2d6de1e99c79a0e52cf5c205aa2e07a.js
297
+ │   │   ├── ember-source-e74117fc6ba74418b2601ffff9eb1568.js
298
+ │   │   ├── ember-source.js
299
+ │   │   ├── ember.js
300
+ │   │   ├── zepto-ca736a378613d484138dec4e69be99b6.js
301
+ │   │   └── zepto.js
302
+ │   ├── application-d1829dc353b734e3adc24855693b70f9.js
303
+ │   ├── application.js
304
+ │   ├── bookshelf-237ecbedf745af5a477e380f0232039a.jpg
305
+ │   ├── bookshelf.jpg
306
+ │   ├── ember-b2d6de1e99c79a0e52cf5c205aa2e07a.js
307
+ │   ├── ember-source-e74117fc6ba74418b2601ffff9eb1568.js
308
+ │   ├── ember-source.js
309
+ │   ├── ember.js
310
+ │   ├── jquery-05277a4edea56b7f82a4c1442159e183.js
311
+ │   ├── jquery.js
312
+ │   └── metrics
313
+ │   ├── dashboard-7766a63ececc63a7a629bfb0666e9c62.js
314
+ │   ├── dashboard.js
315
+ │   ├── ember-b2d6de1e99c79a0e52cf5c205aa2e07a.js
316
+ │   ├── ember-source-e74117fc6ba74418b2601ffff9eb1568.js
317
+ │   ├── ember-source.js
318
+ │   └── ember.js
319
+ └── assets.json
320
+ ```
321
+
322
+ #### Compressors
323
+
324
+ Minification is a process that shrink file size in production, by removing unnecessary spaces and characters.
325
+ The goal of this step, is to have lighter assets to be served faster to the browsers.
326
+
327
+ Hanami supports JavaScript and stylesheets minifiers.
328
+
329
+ Because this framework relies on external gems for minification, this feature is **turned off by default**.
330
+
331
+ To do so we need to specify which gem we want to use and add it to our `Gemfile`.
332
+
333
+ ##### JavaScript Compressors
334
+
335
+ Hanami can use the following compressors (aka minifiers) for JavaScript.
336
+
337
+ * `:builtin` - Ruby based implementation of jsmin. It doesn't require any external gem.
338
+ * `:yui` - [YUI Compressor](http://yui.github.io/yuicompressor), it depends on [`yui-compressor`](https://rubygems.org/gems/yui-compressor) gem and iπt requires Java 1.4+
339
+ * `:uglifier` - [UglifyJS](http://lisperator.net/uglifyjs), it depends on [`uglifier`](https://rubygems.org/gems/uglifier) gem and it requires Node.js
340
+ * `:closure` - [Google Closure Compiler](https://developers.google.com/closure/compiler), it depends on [`closure-compiler`](https://rubygems.org/gems/closure-compiler) gem and it requires Java
341
+
342
+ ```ruby
343
+ Hanami::Assets.configure do
344
+ javascript_compressor :uglifier
345
+ end
346
+ ```
347
+
348
+ ##### Stylesheet Compressors
349
+
350
+ Hanami can use the following compressors (aka minifiers) for Stylesheet.
351
+
352
+ * `:builtin` - Ruby based compressor. It doesn't require any external gem. It's fast, but not an efficient compressor.
353
+ * `:yui` - [YUI Compressor](http://yui.github.io/yuicompressor), it depends on [`yui-compressor`](https://rubygems.org/gems/yui-compressor) gem and iπt requires Java 1.4+
354
+ * `:sass` - [Sass](http://sass-lang.com/), it depends on [`sass`](https://rubygems.org/gems/sass) gem
355
+
356
+ ```ruby
357
+ Hanami::Assets.configure do
358
+ stylesheet_compressor :sass
359
+ end
360
+ ```
361
+
362
+ ##### Custom Compressors
363
+
364
+ We can specify our own minifiers:
365
+
366
+ ```ruby
367
+ Hanami::Assets.configure do
368
+ javascript_compressor MyJavascriptCompressor.new
369
+ stylesheet_compressor MyStylesheetCompressor.new
370
+ end
371
+ ```
372
+
373
+ ### Digest Mode
374
+
375
+ This is a mode that can be activated via the configuration and it's suitable for production environments.
376
+
377
+ ```ruby
378
+ Hanami::Assets.configure do
379
+ digest true
380
+ end
381
+ ```
382
+
383
+ Once turned on, it will look at `/public/assets.json`, and helpers such as `javascript` will return a relative URL that includes the digest of the asset.
384
+
385
+ ```erb
386
+ <%= javascript 'application' %>
387
+ ```
388
+
389
+ ```html
390
+ <script src="/assets/application-d1829dc353b734e3adc24855693b70f9.js" type="text/javascript"></script>
391
+ ```
392
+
393
+ ### CDN Mode
394
+
395
+ A Hanami project can serve assets via CDN.
396
+
397
+ ```ruby
398
+ Hanami::Assets.configure do
399
+ scheme 'https'
400
+ host '123.cloudfront.net'
401
+ port 443
402
+ cdn true
403
+ end
404
+ ```
405
+
406
+ Since now on, helpers will return the CDN absolute URL for the asset.
407
+
408
+ ```erb
409
+ <%= javascript 'application' %>
410
+ ```
411
+
412
+ ```html
413
+ <script src="https://123.cloudfront.net/assets/application-d1829dc353b734e3adc24855693b70f9.js" type="text/javascript"></script>
414
+ ```
415
+
416
+ ## Third party gems
417
+
418
+ Developers can maintain gems that distribute assets for Hanami. For instance `hanami-ember` or `hanami-jquery`.
419
+
420
+ As a gem developer, you must add one or more paths, where the assets are stored inside the gem.
421
+
422
+ ```ruby
423
+ # lib/hanami/jquery.rb
424
+ Hanami::Assets.sources << '/path/to/jquery'
425
+ ```
426
+
427
+ ## Running tests
428
+
429
+ * Make sure you have one of [ExecJS](https://github.com/rails/execjs)
430
+ supported runtime on your machine.
431
+ * Java 1.4+
432
+
433
+ ```sh
434
+ bundle exec rake test
435
+ ```
436
+
437
+ ## Versioning
438
+
439
+ __Hanami::Assets__ uses [Semantic Versioning 2.0.0](http://semver.org)
32
440
 
33
441
  ## Contributing
34
442
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/hanami-assets.
443
+ 1. Fork it ( https://github.com/hanami/assets/fork )
444
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
445
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
446
+ 4. Push to the branch (`git push origin my-new-feature`)
447
+ 5. Create new Pull Request
448
+
449
+ ## Copyright
450
+
451
+ Copyright © 2014-2016 Luca Guidi – Released under MIT License
36
452
 
453
+ This project was formerly known as Lotus (`lotus-assets`).