lotus-assets 0.0.0 → 0.1.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 +4 -4
- data/CHANGELOG.md +19 -0
- data/{LICENSE.txt → LICENSE.md} +1 -1
- data/README.md +429 -7
- data/bin/lotus-assets +22 -0
- data/lib/lotus/assets.rb +153 -2
- data/lib/lotus/assets/bundler.rb +173 -0
- data/lib/lotus/assets/cache.rb +58 -0
- data/lib/lotus/assets/compiler.rb +212 -0
- data/lib/lotus/assets/compressors/abstract.rb +119 -0
- data/lib/lotus/assets/compressors/builtin_javascript.rb +36 -0
- data/lib/lotus/assets/compressors/builtin_stylesheet.rb +57 -0
- data/lib/lotus/assets/compressors/closure_javascript.rb +25 -0
- data/lib/lotus/assets/compressors/javascript.rb +77 -0
- data/lib/lotus/assets/compressors/jsmin.rb +283 -0
- data/lib/lotus/assets/compressors/null_compressor.rb +19 -0
- data/lib/lotus/assets/compressors/sass_stylesheet.rb +38 -0
- data/lib/lotus/assets/compressors/stylesheet.rb +77 -0
- data/lib/lotus/assets/compressors/uglifier_javascript.rb +25 -0
- data/lib/lotus/assets/compressors/yui_javascript.rb +25 -0
- data/lib/lotus/assets/compressors/yui_stylesheet.rb +25 -0
- data/lib/lotus/assets/config/global_sources.rb +50 -0
- data/lib/lotus/assets/config/manifest.rb +112 -0
- data/lib/lotus/assets/config/sources.rb +77 -0
- data/lib/lotus/assets/configuration.rb +539 -0
- data/lib/lotus/assets/helpers.rb +733 -0
- data/lib/lotus/assets/precompiler.rb +67 -0
- data/lib/lotus/assets/version.rb +4 -1
- data/lotus-assets.gemspec +25 -11
- metadata +192 -15
- data/.gitignore +0 -22
- data/Gemfile +0 -4
- data/Rakefile +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a53af544bb09106a98a6312c6cb3e3be1efd9882
|
4
|
+
data.tar.gz: 3229cdb6681442576d81f5eeebe77f3aa642aae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77811692964b34196c8ce9f510db15c32885f02103563dea34a37ac71478cc86a06577ff66c42fb54a25eb34bc3beeb6a3e37bf7f6d221cc0e72b120bdc65eb0
|
7
|
+
data.tar.gz: a371359ce3d45cfcec912a5159b65abb532db329e3b52c320192e4b9e031007b33a213ebcee0bef20aa5d76ffc1e69a250e44bd0faccc78610f51486a45087fe
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# Lotus::Assets
|
2
|
+
Assets management for Ruby web applications
|
3
|
+
|
4
|
+
## v0.1.0 - 2016-01-12
|
5
|
+
### Added
|
6
|
+
- [Luca Guidi] Configurable assets compressors
|
7
|
+
- [Luca Guidi] Builtin JavaScript and stylesheet compressors
|
8
|
+
- [deepj & Michael Deol] Added `Lotus::Assets::Helpers#favicon`
|
9
|
+
- [Leigh Halliday] Added `Lotus::Assets::Helpers#video`
|
10
|
+
- [Kleber Correia] Added `Lotus::Assets::Helpers#audio`
|
11
|
+
- [Gonzalo Rodríguez-Baltanás Díaz] Added `Lotus::Assets::Helpers#image`
|
12
|
+
- [Luca Guidi] Added `Lotus::Assets::Helpers#javascript` and `#stylesheet`
|
13
|
+
- [Luca Guidi] Added `Lotus::Assets::Helpers#asset_path` and `#asset_url`
|
14
|
+
- [Luca Guidi] "CDN Mode" let helpers to generate CDN URLs (eg. `https://123.cloudfront.net/assets/application-d1829dc353b734e3adc24855693b70f9.js`)
|
15
|
+
- [Luca Guidi] "Digest Mode" let helpers to generate digest URLs (eg. `/assets/application-d1829dc353b734e3adc24855693b70f9.js`)
|
16
|
+
- [Luca Guidi] Added `lotus-assets` command to precompile assets at the deploy time
|
17
|
+
- [Luca Guidi] Added support for third party gems that want to ship gemified assets for Lotus
|
18
|
+
- [Luca Guidi] Assets preprocessors (eg. Sass, ES6, CoffeeScript, Opal, JSX)
|
19
|
+
- [Luca Guidi] Official support for Ruby 2.0+
|
data/{LICENSE.txt → LICENSE.md}
RENAMED
data/README.md
CHANGED
@@ -1,29 +1,451 @@
|
|
1
1
|
# Lotus::Assets
|
2
2
|
|
3
|
-
|
3
|
+
Assets management for Ruby web projects
|
4
|
+
|
5
|
+
## Status
|
6
|
+
|
7
|
+
[](https://badge.fury.io/rb/lotus-assets)
|
8
|
+
[](https://travis-ci.org/lotus/assets?branch=master)
|
9
|
+
[](https://coveralls.io/r/lotus/assets)
|
10
|
+
[](https://codeclimate.com/github/lotus/assets)
|
11
|
+
[](https://gemnasium.com/lotus/assets)
|
12
|
+
[](http://inch-ci.org/github/lotus/assets)
|
13
|
+
|
14
|
+
## Contact
|
15
|
+
|
16
|
+
* Home page: http://lotusrb.org
|
17
|
+
* Community: http://lotusrb.org/community
|
18
|
+
* Guides: http://lotusrb.org/guides
|
19
|
+
* Mailing List: http://lotusrb.org/mailing-list
|
20
|
+
* API Doc: http://rdoc.info/gems/lotus-assets
|
21
|
+
* Bugs/Issues: https://github.com/lotus/assets/issues
|
22
|
+
* Support: http://stackoverflow.com/questions/tagged/lotus-ruby
|
23
|
+
* Forum: https://discuss.lotusrb.org
|
24
|
+
* Chat: http://chat.lotusrb.org
|
25
|
+
|
26
|
+
## Rubies
|
27
|
+
|
28
|
+
__Lotus::Assets__ supports Ruby (MRI) 2+
|
4
29
|
|
5
30
|
## Installation
|
6
31
|
|
7
32
|
Add this line to your application's Gemfile:
|
8
33
|
|
9
|
-
|
34
|
+
```ruby
|
35
|
+
gem 'lotus-assets'
|
36
|
+
```
|
10
37
|
|
11
38
|
And then execute:
|
12
39
|
|
13
|
-
|
40
|
+
```shell
|
41
|
+
$ bundle
|
42
|
+
```
|
14
43
|
|
15
44
|
Or install it yourself as:
|
16
45
|
|
17
|
-
|
46
|
+
```shell
|
47
|
+
$ gem install lotus-assets
|
48
|
+
```
|
18
49
|
|
19
50
|
## Usage
|
20
51
|
|
21
|
-
|
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 `Lotus::Assets` is compatible with
|
99
|
+
all the rendering engines such as HAML, Slim, Mustache, etc..
|
100
|
+
|
101
|
+
```ruby
|
102
|
+
require 'erb'
|
103
|
+
require 'lotus/assets'
|
104
|
+
require 'lotus/assets/helpers'
|
105
|
+
|
106
|
+
class View
|
107
|
+
include Lotus::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
|
+
[`Lotus::Assets::Configuration`](https://github.com/lotus/assets/blob/master/lib/lotus/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
|
+
`Lotus::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 'lotus/assets'
|
151
|
+
|
152
|
+
Lotus::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
|
+
`Lotus::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
|
+
`Lotus::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 'lotus/assets'
|
205
|
+
|
206
|
+
Lotus::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
|
+
`Lotus::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
|
239
|
+
|
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.
|
242
|
+
|
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).
|
245
|
+
|
246
|
+
### Deployment
|
247
|
+
|
248
|
+
`Lotus::Assets` ships with an executable (`lotus-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 lotus-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
|
+
Lotus 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
|
+
Lotus 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
|
+
Lotus::Assets.configure do
|
344
|
+
javascript_compressor :uglifier
|
345
|
+
end
|
346
|
+
```
|
347
|
+
|
348
|
+
##### Stylesheet Compressors
|
349
|
+
|
350
|
+
Lotus 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
|
+
Lotus::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
|
+
Lotus::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
|
+
Lotus::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 Lotus project can serve assets via CDN.
|
396
|
+
|
397
|
+
```ruby
|
398
|
+
Lotus::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 Lotus. For instance `lotus-ember` or `lotus-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/lotus/jquery.rb
|
424
|
+
Lotus::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
|
+
__Lotus::Assets__ uses [Semantic Versioning 2.0.0](http://semver.org)
|
22
440
|
|
23
441
|
## Contributing
|
24
442
|
|
25
|
-
1. Fork it ( https://github.com/
|
443
|
+
1. Fork it ( https://github.com/lotus/assets/fork )
|
26
444
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
445
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
446
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
-
5. Create
|
447
|
+
5. Create new Pull Request
|
448
|
+
|
449
|
+
## Copyright
|
450
|
+
|
451
|
+
Copyright © 2014-2016 Luca Guidi – Released under MIT License
|