faucet_pipeline_rails 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 97fec74f079066619428bd49d015d7dc04e57e25
4
+ data.tar.gz: 646f3f335aad7fa900059c818801e31877e68874
5
+ SHA512:
6
+ metadata.gz: 7e3b46db5330ea021dfded2c0803232ce05ff4bb6c34dcd6ec156fc79a347aa68e98481ee6ad217ab306507b5da2ef2ee1e04606610f80286d1f4f18ffdbaa9f
7
+ data.tar.gz: c0494053c41fc8d4d4799ed93f37eb78f446d857f4c8a37e909db3c18c656f4a9fdab6f17161d9f59e84a6b5e117df5fba4681fed67ddec3a354c0b5a1e49ad0
data/README.md ADDED
@@ -0,0 +1,150 @@
1
+ # Use Rails with faucet-pipeline [![Build Status](https://travis-ci.org/faucet-pipeline/faucet_pipeline_rails.svg)](https://travis-ci.org/faucet-pipeline/faucet_pipeline_rails)
2
+
3
+ Instead of using the built-in asset pipeline of Rails, use
4
+ [`faucet-pipeline`](https://github.com/faucet-pipeline/faucet-pipeline). This
5
+ gem enables the required integration with Rails.
6
+
7
+ Why is an integration like that required? `faucet-pipeline` modifies the names
8
+ of the generated files depending on their content (by adding a hash of the file
9
+ to the name), Rails will not be able to find the files on its own. You still
10
+ want to be able to use the helpers you are used to like `stylesheet_link_tag`
11
+ or `image_tag`, and they should put out the correct URL for the desired asset.
12
+ This technique is referred to as *cache busting*.
13
+
14
+ So let's say you have a JavaScript file called `application.js` (for example in
15
+ `app/assets/javascripts`) and `faucet-pipeline` generates a file called
16
+ `application-03118e77692b637cfc0f55bb27fef087.js` (for example in
17
+ `public/assets/javascripts`) from that file. When you use `stylesheet_link_tag
18
+ 'application'`, you expect that the resulting HTML points to the file
19
+ containing the hash in its filename. To do that, `faucet-pipeline` generates a
20
+ manifest files for each type of asset. In this case, it needs to generate a
21
+ file called `javascript.json` in `public/assets/manifests` (to change this, see
22
+ the Configuration section). The file should look like this:
23
+
24
+ ```json
25
+ {
26
+ "application.js": "/assets/javascripts/application-03118e77692b637cfc0f55bb27fef087.js"
27
+ }
28
+ ```
29
+
30
+ And that's it. This gem will take care of the rest. The resulting HTML will look like this:
31
+
32
+ ```html
33
+ <!-- ... -->
34
+ <script src="/assets/javascripts/application-03118e77692b637cfc0f55bb27fef087.js" data-turbolinks-track="reload"></script>
35
+ <!-- ... -->
36
+ ```
37
+
38
+ The types supported by this gem are:
39
+
40
+ * `stylesheet`
41
+ * `javascript`
42
+ * `image`
43
+
44
+ ## Installation
45
+
46
+ Add this line to your application's Gemfile:
47
+
48
+ ```ruby
49
+ gem 'faucet_pipeline_rails'
50
+ ```
51
+
52
+ And then execute:
53
+
54
+ ```
55
+ $ bundle
56
+ ```
57
+
58
+ Or install it yourself as:
59
+
60
+ ```
61
+ $ gem install faucet_pipeline_rails
62
+ ```
63
+
64
+ ## Configuration
65
+
66
+ By default this gem assumes that your manifest files can be found in
67
+ `public/assets/manifests`. This is a nice starting point for a `faucet.config.js`:
68
+
69
+ ```js
70
+ let jsConfig = {
71
+ manifest: {
72
+ file: "public/assets/manifests/javascript.json",
73
+ baseURI: (bundlePath, baseName) => `/assets/javascripts/${baseName}`
74
+ },
75
+ bundles: [{
76
+ entryPoint: "./app/assets/javascripts/application.js",
77
+ target: "public/assets/javascripts/application.js",
78
+ externals: {}
79
+ }]
80
+ };
81
+
82
+ let sassConfig = {
83
+ manifest: {
84
+ file: "public/assets/manifests/stylesheet.json",
85
+ baseURI: (bundlePath, baseName) => `/assets/stylesheets/${baseName}`
86
+ },
87
+ assets: [
88
+ "public/assets/manifests/static.json"
89
+ ],
90
+ prefixes: {
91
+ browsers: [ "last 2 versions" ]
92
+ },
93
+ bundles: [{
94
+ entryPoint: "app/assets/stylesheets/application.scss",
95
+ target: "public/assets/stylesheets/application.css"
96
+ }]
97
+ };
98
+
99
+ let staticConfig = {
100
+ manifest: {
101
+ file: "public/assets/manifests/static.json",
102
+ baseURI: (bundlePath, baseName) => `/assets/static/${baseName}`
103
+ },
104
+ bundles: [{
105
+ source: "app/assets/images",
106
+ target: "public/assets/static"
107
+ }]
108
+ }
109
+
110
+ module.exports = {
111
+ js: jsConfig,
112
+ sass: sassConfig,
113
+ static: staticConfig,
114
+ watchDirs: ["app/assets"]
115
+ };
116
+ ```
117
+
118
+ You can change the path to the manifest fiels that with the following
119
+ configuration:
120
+
121
+ ```ruby
122
+ config.x.faucet_pipeline.manifests_path = File.join("my", "own", "manifests", "path")
123
+ ```
124
+
125
+ The `manifests_path` is relative to your Rails Root.
126
+
127
+ ## Development
128
+
129
+ After checking out the repo, run `bin/setup` to install dependencies. You can
130
+ also run `bin/console` for an interactive prompt that will allow you to
131
+ experiment.
132
+
133
+ To install this gem onto your local machine, run `bundle exec rake install`. To
134
+ release a new version, update the version number in `version.rb`, and then run
135
+ `bundle exec rake release`, which will create a git tag for the version, push
136
+ git commits and tags, and push the `.gem` file to
137
+ [rubygems.org](https://rubygems.org).
138
+
139
+ ## Contributing
140
+
141
+ Bug reports and pull requests are welcome on GitHub at
142
+ https://github.com/faucet-pipeline/faucet_pipeline_rails. This project is
143
+ intended to be a safe, welcoming space for collaboration, and contributors are
144
+ expected to adhere to the [Contributor
145
+ Covenant](http://contributor-covenant.org) code of conduct.
146
+
147
+ ## License
148
+
149
+ The gem is available as open source under the terms of the [MIT
150
+ License](http://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,15 @@
1
+ require "bundler/setup"
2
+ require "bundler/gem_tasks"
3
+ require "rake/testtask"
4
+ require "rubocop/rake_task"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "lib"
8
+ t.libs << "test"
9
+ t.pattern = "test/**/*_test.rb"
10
+ t.verbose = false
11
+ end
12
+
13
+ RuboCop::RakeTask.new
14
+
15
+ task default: [:test]
@@ -0,0 +1,25 @@
1
+ require "faucet_pipeline_rails/manifest"
2
+
3
+ module FaucetPipelineRails
4
+ module ComputeAssetPath
5
+ MANIFEST_FOR_TYPE = {
6
+ image: "static",
7
+ stylesheet: "stylesheet",
8
+ javascript: "javascript"
9
+ }
10
+
11
+ def compute_asset_path(source, options = {})
12
+ if MANIFEST_FOR_TYPE.has_key? options[:type]
13
+ manifest = Manifest.new(manifests_path, MANIFEST_FOR_TYPE[options[:type]])
14
+ manifest.fetch(source)
15
+ else
16
+ source
17
+ end
18
+ end
19
+
20
+ def manifests_path
21
+ Rails.configuration.x.faucet_pipeline.manifests_path ||
22
+ File.join("public", "assets", "manifests")
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ module FaucetPipelineRails
2
+ class Manifest
3
+ def initialize(manifests_path, type)
4
+ @manifests_path = manifests_path
5
+ @type = type
6
+ end
7
+
8
+ def fetch(asset_name)
9
+ parsed_manifest.fetch(asset_name)
10
+ rescue KeyError
11
+ raise "The asset '#{asset_name}' of type '#{@type}' was not in the manifest"
12
+ end
13
+
14
+ private
15
+
16
+ def parsed_manifest
17
+ JSON.parse(unparsed_manifest)
18
+ rescue JSON::ParserError
19
+ raise "The manifest file '#{manifest_path}' is invalid JSON"
20
+ end
21
+
22
+ def unparsed_manifest
23
+ File.read(full_manifest_path)
24
+ rescue Errno::ENOENT
25
+ raise "The manifest file '#{manifest_path}' is missing"
26
+ end
27
+
28
+ def full_manifest_path
29
+ File.join(Rails.root, manifest_path)
30
+ end
31
+
32
+ def manifest_path
33
+ File.join(@manifests_path, "#{@type}.json")
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,9 @@
1
+ require "faucet_pipeline_rails/compute_asset_path"
2
+
3
+ module FaucetPipelineRails
4
+ class Railtie < Rails::Railtie
5
+ ActiveSupport.on_load(:action_view) do
6
+ include FaucetPipelineRails::ComputeAssetPath
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module FaucetPipelineRails
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "faucet_pipeline_rails/version"
2
+ require "faucet_pipeline_rails/railtie"
3
+
4
+ module FaucetPipelineRails
5
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faucet_pipeline_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Lucas Dohmen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-11-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.10
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.10
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.51.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.51.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 12.2.1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 12.2.1
55
+ description: Instead of using the build-in asset pipeline of Rails, use faucet-pipeline.
56
+ This gem enables the required integration with Rails.
57
+ email:
58
+ - lucas.dohmen@innoq.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - README.md
64
+ - Rakefile
65
+ - lib/faucet_pipeline_rails.rb
66
+ - lib/faucet_pipeline_rails/compute_asset_path.rb
67
+ - lib/faucet_pipeline_rails/manifest.rb
68
+ - lib/faucet_pipeline_rails/railtie.rb
69
+ - lib/faucet_pipeline_rails/version.rb
70
+ homepage: https://github.com/faucet-pipeline/faucet_pipeline_rails
71
+ licenses:
72
+ - MIT
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.6.13
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Use Rails with faucet-pipeline
94
+ test_files: []