condenser-rails 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cbfbac2077b8f13f5a08ab9fff144495ee2ef3f76ea092ba230e8400bd2a7ef6
4
+ data.tar.gz: d2bf8e75d7c1dac414cf6a00de690d1be3b3e3259d1142c2eb157ba8752122ff
5
+ SHA512:
6
+ metadata.gz: cded87c625d07addcc40e13b368509d269433d918d2fb6d029a713ecdd5f4417a362698e6a166b9d140d5062000270e2496ac1c04d5f3962753147c5d67db531
7
+ data.tar.gz: e4d865e2b28063a24f1b0e7a11b223584bc480cb95936221ef741663788b7c8bc2ce45c6980845f7b3f4bad154b6215575f42eb8a52ebe1bb3bde9d129a4f827
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2019 Jon Bracy
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,2 @@
1
+ # condenser-rails
2
+ Condenser integration for Rails
@@ -0,0 +1,4 @@
1
+ require 'condenser/rails/version'
2
+ if defined? Rails::Railtie
3
+ require 'condenser/railtie'
4
+ end
@@ -0,0 +1,28 @@
1
+ require 'action_view/helpers'
2
+ require 'condenser'
3
+
4
+ class Condenser
5
+ module Rails
6
+
7
+ module Context
8
+ include ActionView::Helpers::AssetUrlHelper
9
+ include ActionView::Helpers::AssetTagHelper
10
+
11
+ def self.included(klass)
12
+ klass.class_eval do
13
+ class_attribute :config, :assets_prefix
14
+ end
15
+ end
16
+
17
+ def compute_asset_path(path, options = {})
18
+ if asset = environment.find(path)
19
+ @dependencies << asset.source_file
20
+ File.join(assets_prefix || "/", asset.path)
21
+ else
22
+ super
23
+ end
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,215 @@
1
+ require 'action_view'
2
+ require 'condenser'
3
+ require 'active_support/core_ext/class/attribute'
4
+
5
+ module Condenser::Rails
6
+
7
+ class AssetNotFound < StandardError; end
8
+ class AssetNotPrecompiled < StandardError; end
9
+ class AssetNotPrecompiledError < AssetNotPrecompiled
10
+ def initialize(source)
11
+ super(<<~MSG)
12
+ Asset was not declared to be precompiled in production. Add
13
+ `Rails.application.config.assets.precompile += %w( #{source} )` to
14
+ `config/initializers/assets.rb` and restart your server
15
+ MSG
16
+ end
17
+ end
18
+
19
+ module Helper
20
+ include ActionView::Helpers::AssetUrlHelper
21
+ include ActionView::Helpers::AssetTagHelper
22
+
23
+ VIEW_ACCESSORS = [
24
+ :assets, :assets_manifest, :assets_precompiled,
25
+ :assets_precompiled_regexes, :assets_prefix, :resolve_assets_with
26
+ ]
27
+
28
+ def self.included(klass)
29
+ klass.class_attribute(*VIEW_ACCESSORS)
30
+ end
31
+
32
+ def self.extended(obj)
33
+ obj.class_eval do
34
+ attr_accessor(*VIEW_ACCESSORS)
35
+ end
36
+ end
37
+
38
+ # Writes over the built in ActionView::Helpers::AssetUrlHelper#compute_asset_path
39
+ # to use the asset pipeline.
40
+ def compute_asset_path(path, options = {})
41
+ if asset_path = resolve_asset_path(path)
42
+ File.join(assets_prefix || "/", asset_path)
43
+ else
44
+ raise Condenser::Rails::AssetNotPrecompiledError.new(path)
45
+ # raise AssetNotFound, "The asset #{ path.inspect } is not present in the asset pipeline.\n"
46
+ end
47
+ end
48
+
49
+ # Resolve the asset path against the Condenser manifest or environment.
50
+ # Returns nil if it's an asset we don't know about.
51
+ def resolve_asset_path(path) #:nodoc:
52
+ asset_resolver.asset_path(path)
53
+ end
54
+
55
+ # Get integrity for asset path.
56
+ #
57
+ # path - String path
58
+ # options - Hash options
59
+ #
60
+ # Returns String integrity attribute or nil if no asset was found.
61
+ def asset_integrity(path, options = {})
62
+ asset_resolver.integrity(path)
63
+ end
64
+
65
+ # Override javascript tag helper to provide debugging support.
66
+ #
67
+ # Eventually will be deprecated and replaced by source maps.
68
+ def javascript_include_tag(*sources)
69
+ options = sources.extract_options!.stringify_keys
70
+ path_options = options.extract!("protocol", "extname", "host", "skip_pipeline").symbolize_keys
71
+ early_hints_links = []
72
+
73
+ sources_tags = sources.uniq.map { |source|
74
+ href = path_to_javascript(source, path_options)
75
+ early_hints_links << "<#{href}>; rel=preload; as=script"
76
+ tag_options = {
77
+ "src" => href
78
+ }.merge!(options)
79
+
80
+ if tag_options["nonce"] == true
81
+ tag_options["nonce"] = content_security_policy_nonce
82
+ end
83
+
84
+ if secure_subresource_integrity_context?
85
+ if tag_options["integrity"] == true
86
+ tag_options["integrity"] = asset_integrity(source.to_s.delete_suffix('.js')+'.js')
87
+ elsif tag_options["integrity"] == false
88
+ tag_options.delete('integrity')
89
+ end
90
+ else
91
+ tag_options.delete('integrity')
92
+ end
93
+
94
+ content_tag("script", "", tag_options)
95
+ }.join("\n").html_safe
96
+
97
+ request.send_early_hints("Link" => early_hints_links.join("\n")) if respond_to?(:request) && request
98
+
99
+ sources_tags
100
+ end
101
+
102
+ # Override stylesheet tag helper to provide debugging support.
103
+ #
104
+ # Eventually will be deprecated and replaced by source maps.
105
+ def stylesheet_link_tag(*sources)
106
+ options = sources.extract_options!.stringify_keys
107
+ path_options = options.extract!("protocol", "host", "skip_pipeline").symbolize_keys
108
+ early_hints_links = []
109
+
110
+ sources_tags = sources.uniq.map { |source|
111
+ href = path_to_stylesheet(source, path_options)
112
+ early_hints_links << "<#{href}>; rel=preload; as=style"
113
+ tag_options = {
114
+ "rel" => "stylesheet",
115
+ "media" => "screen",
116
+ "href" => href
117
+ }.merge!(options)
118
+
119
+ if secure_subresource_integrity_context?
120
+ if tag_options["integrity"] == true
121
+ tag_options["integrity"] = asset_integrity(source.to_s.delete_suffix('.css')+'.css')
122
+ elsif tag_options["integrity"] == false
123
+ tag_options.delete('integrity')
124
+ end
125
+ else
126
+ tag_options.delete('integrity')
127
+ end
128
+
129
+ tag(:link, tag_options)
130
+ }.join("\n").html_safe
131
+
132
+ request.send_early_hints("Link" => early_hints_links.join("\n")) if respond_to?(:request) && request
133
+
134
+ sources_tags
135
+ end
136
+
137
+ protected
138
+ # Only serve integrity metadata for HTTPS requests:
139
+ # http://www.w3.org/TR/SRI/#non-secure-contexts-remain-non-secure
140
+ def secure_subresource_integrity_context?
141
+ self.request.nil? || self.request && (self.request.local? || self.request.ssl?)
142
+ # respond_to?(:request) && self.request && (self.request.local? || self.request.ssl?)
143
+ end
144
+
145
+ # compute_asset_extname is in AV::Helpers::AssetUrlHelper
146
+ def path_with_extname(path, options)
147
+ path = path.to_s
148
+ "#{path}#{compute_asset_extname(path, options)}"
149
+ end
150
+
151
+ # Try each asset resolver and return the first non-nil result.
152
+ def asset_resolver
153
+ @asset_resolver ||= HelperAssetResolvers[resolve_assets_with].new(self)
154
+ end
155
+ end
156
+
157
+ # Use a separate module since Helper is mixed in and we needn't pollute
158
+ # the class namespace with our internals.
159
+ module HelperAssetResolvers #:nodoc:
160
+ def self.[](name)
161
+ case name
162
+ when :manifest
163
+ Manifest
164
+ when :environment
165
+ Environment
166
+ else
167
+ raise ArgumentError, "Unrecognized asset resolver: #{name.inspect}. Expected :manifest or :environment"
168
+ end
169
+ end
170
+
171
+ class Manifest #:nodoc:
172
+ def initialize(view)
173
+ @manifest = view.assets_manifest
174
+ raise ArgumentError, 'config.assets.resolve_with includes :manifest, but app.assets_manifest is nil' unless @manifest
175
+ end
176
+
177
+ def asset_path(path)
178
+ @manifest[path]['path']
179
+ end
180
+
181
+ def integrity(path)
182
+ @manifest[path]['integrity']
183
+ end
184
+
185
+ end
186
+
187
+ class Environment #:nodoc:
188
+ def initialize(view)
189
+ raise ArgumentError, 'config.assets.resolve_with includes :environment, but app.assets is nil' unless view.assets
190
+ @env = view.assets
191
+ @precompiled_assets = view.assets_precompiled_regexes
192
+ end
193
+
194
+ def asset_path(path)
195
+ if asset = @env.find(path)
196
+ if !precompiled?(asset.filename)
197
+ raise Condenser::Rails::AssetNotPrecompiledError.new(asset.filename)
198
+ end
199
+ asset.export.path
200
+ end
201
+ end
202
+
203
+ def integrity(path)
204
+ @env.find(path)&.integrity
205
+ end
206
+
207
+ private
208
+
209
+ def precompiled?(path)
210
+ @precompiled_assets.find { |glob| glob =~ path }
211
+ end
212
+
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,87 @@
1
+ require 'rake'
2
+ require 'rake/condensertask'
3
+ require 'condenser'
4
+ # require 'action_view'
5
+ # require 'action_view/base'
6
+
7
+ module Condenser::Rails
8
+ class Task < Rake::CondenserTask
9
+ attr_accessor :app
10
+
11
+ def initialize(app = nil)
12
+ self.app = app
13
+ super
14
+ end
15
+
16
+ def environment
17
+ if app
18
+ # Use initialized app.assets or force build an environment if
19
+ # config.assets.compile is disabled
20
+ app.assets || Condenser::Railtie.build_environment(app)
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ def output
27
+ if app
28
+ config = app.config
29
+ File.join(config.paths['public'].first, config.assets.prefix)
30
+ else
31
+ super
32
+ end
33
+ end
34
+
35
+ def assets
36
+ if app
37
+ app.config.assets.precompile
38
+ else
39
+ super
40
+ end
41
+ end
42
+
43
+ def manifest
44
+ if app
45
+ Condenser::Manifest.new(environment, output, app.config.assets.manifest)
46
+ else
47
+ super
48
+ end
49
+ end
50
+
51
+ def define
52
+ namespace :assets do
53
+ %w( environment precompile clean clobber ).each do |task|
54
+ Rake::Task[task].clear if Rake::Task.task_defined?(task)
55
+ end
56
+
57
+ # Override this task change the loaded dependencies
58
+ desc "Load asset compile environment"
59
+ task :environment do
60
+ # Load full Rails environment by default
61
+ Rake::Task['environment'].invoke
62
+ end
63
+
64
+ desc "Compile all the assets named in config.assets.precompile"
65
+ task :precompile => :environment do
66
+ with_logger do
67
+ manifest.compile(assets)
68
+ end
69
+ end
70
+
71
+ desc "Remove old compiled assets"
72
+ task :clean, [:keep] => :environment do |t, args|
73
+ with_logger do
74
+ manifest.clean #Integer(args.keep || self.keep)
75
+ end
76
+ end
77
+
78
+ desc "Remove compiled assets"
79
+ task :clobber => :environment do
80
+ with_logger do
81
+ manifest.clobber
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,75 @@
1
+ # based on http://cpan.uwinnipeg.ca/htdocs/Text-Glob/Text/Glob.pm.html#glob_to_regex_string from https://github.com/alexch/rerun/blob/master/lib/rerun/glob.rb
2
+
3
+ module Condenser::Rails
4
+ module Utils
5
+ NO_LEADING_DOT = '(?=[^\.])' # todo
6
+ START_OF_FILENAME = '(\A|\/)' # beginning of string or a slash
7
+ END_OF_STRING = '\z'
8
+
9
+ def self.smoosh chars
10
+ out = []
11
+ until chars.empty?
12
+ char = chars.shift
13
+ if char == "*" and chars.first == "*"
14
+ chars.shift
15
+ chars.shift if chars.first == "/"
16
+ out.push("**")
17
+ else
18
+ out.push(char)
19
+ end
20
+ end
21
+ out
22
+ end
23
+
24
+ def self.glob_to_regex(glob_string)
25
+ chars = smoosh(glob_string.split(''))
26
+
27
+ curlies = 0
28
+ escaping = false
29
+ string = chars.map do |char|
30
+ if escaping
31
+ escaping = false
32
+ char
33
+ else
34
+ case char
35
+ when '**'
36
+ "([^/]+/)*"
37
+ when '*'
38
+ ".*"
39
+ when "?"
40
+ "."
41
+ when "."
42
+ "\\."
43
+
44
+ when "{"
45
+ curlies += 1
46
+ "("
47
+ when "}"
48
+ if curlies > 0
49
+ curlies -= 1
50
+ ")"
51
+ else
52
+ char
53
+ end
54
+ when ","
55
+ if curlies > 0
56
+ "|"
57
+ else
58
+ char
59
+ end
60
+ when "\\"
61
+ escaping = true
62
+ "\\"
63
+
64
+ else
65
+ char
66
+
67
+ end
68
+ end
69
+ end.join
70
+
71
+ Regexp.new(START_OF_FILENAME + string + END_OF_STRING)
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,5 @@
1
+ class Condenser
2
+ module Rails
3
+ VERSION = "0.0.7"
4
+ end
5
+ end
@@ -0,0 +1,232 @@
1
+ require 'rails'
2
+ require 'rails/railtie'
3
+ require 'action_controller/railtie'
4
+ require 'active_support/core_ext/module/remove_method'
5
+ require 'active_support/core_ext/numeric/bytes'
6
+ require 'condenser'
7
+ require 'condenser/rails/utils'
8
+ require 'condenser/rails/context'
9
+ require 'condenser/rails/helper'
10
+ require 'condenser/rails/version'
11
+ # require 'sprockets/rails/quiet_assets'
12
+ # require 'sprockets/rails/route_wrapper'
13
+
14
+ module Rails
15
+ class Application
16
+
17
+ # Undefine Rails' assets method before redefining it, to avoid warnings.
18
+ remove_possible_method :assets
19
+ remove_possible_method :assets=
20
+
21
+ # Returns Condenser::Manifest for app config.
22
+ attr_accessor :assets
23
+
24
+ # Returns Condenser::Manifest for app config.
25
+ attr_accessor :assets_manifest
26
+
27
+ # Called from asset helpers to alert you if you reference an asset URL that
28
+ # isn't precompiled and hence won't be available in production.
29
+ def asset_precompiled?(logical_path)
30
+ precompiled_assets.find { |glob| glob =~ logical_path }
31
+ end
32
+
33
+ # Lazy-load the precompile list so we don't cause asset compilation at app
34
+ # boot time, but ensure we cache the list so we don't recompute it for each
35
+ # request or test case.
36
+ def precompiled_assets
37
+ @precompiled_assets ||= config.assets.precompile.map { |s| Condenser::Rails::Utils.glob_to_regex(s) }
38
+ end
39
+ end
40
+
41
+ class Engine < Railtie
42
+ initializer :append_assets_path, group: :all do |app|
43
+ app.config.assets.path.unshift(*paths["vendor/assets"].existent_directories)
44
+ app.config.assets.path.unshift(*paths["lib/assets"].existent_directories)
45
+ app.config.assets.path.unshift(*paths["app/assets"].existent_directories)
46
+ app.config.assets.npm_path = app.root.join('node_modules').to_s
47
+ end
48
+ end
49
+ end
50
+
51
+ class Condenser::Railtie < ::Rails::Railtie
52
+
53
+ class OrderedOptions < ActiveSupport::OrderedOptions
54
+ def configure(&block)
55
+ self._blocks << block
56
+ end
57
+ end
58
+
59
+ module SassFunctions
60
+ def asset_path(path, options = {})
61
+ SassC::Script::Value::String.new(condenser_context.asset_path(path.value, options), :string)
62
+ end
63
+ end
64
+
65
+ config.assets = OrderedOptions.new
66
+ config.assets._blocks = []
67
+ config.assets.path = []
68
+ config.assets.precompile = %w(application.css application.js **/*.jpg **/*.png **/*.gif)
69
+ config.assets.prefix = "/assets"
70
+ config.assets.quiet = false
71
+
72
+ # initializer :quiet_assets do |app|
73
+ # if app.config.assets.quiet
74
+ # app.middleware.insert_before ::Rails::Rack::Logger, ::Condenser::Rails::QuietAssets
75
+ # end
76
+ # end
77
+
78
+ # config.assets.version = ""
79
+ config.assets.compile = true
80
+ config.assets.digest = true
81
+ config.assets.cache_limit = 50.megabytes
82
+ config.assets.compressors = [:zlib]
83
+
84
+ config.assets.configure do |app, env|
85
+ config.assets.path.each { |path| env.append_path(path) }
86
+ if config.assets.npm_path && File.directory?(config.assets.npm_path)
87
+ env.append_npm_path(config.assets.npm_path)
88
+ end
89
+ end
90
+
91
+ config.assets.configure do |app, env|
92
+ env.context_class.send :include, ::Condenser::Rails::Context
93
+ env.context_class.assets_prefix = config.assets.prefix
94
+ env.context_class.config = config.action_controller
95
+ end
96
+
97
+ config.assets.configure do |app, env|
98
+ env.cache = Condenser::Cache::FileStore.new(
99
+ File.join(app.root, 'tmp', 'cache', 'assets', Rails.env),
100
+ size: config.assets.cache_limit,
101
+ logger: env.logger
102
+ )
103
+ end
104
+
105
+ # Sprockets.register_dependency_resolver 'rails-env' do
106
+ # ::Rails.env.to_s
107
+ # end
108
+
109
+ # config.assets.configure do |env|
110
+ # env.depend_on 'rails-env'
111
+ # end
112
+
113
+ # config.assets.configure do |app, env|
114
+ # env.version = config.assets.version
115
+ # end
116
+
117
+ rake_tasks do |app|
118
+ require 'condenser/rails/task'
119
+ Condenser::Rails::Task.new(app)
120
+ end
121
+
122
+ def resolve_minifier(value)
123
+ if value.is_a?(Symbol) || value.is_a?(String)
124
+ "Condenser::#{value.to_s.camelize}Minifier".constantize
125
+ else
126
+ value
127
+ end
128
+ end
129
+
130
+ def resolve_writer(value)
131
+ if value.is_a?(Symbol) || value.is_a?(String)
132
+ "Condenser::#{value.to_s.camelize}Writer".constantize.new
133
+ else
134
+ value
135
+ end
136
+ end
137
+
138
+ def build_environment(app, initialized = nil)
139
+ initialized = app.initialized? if initialized.nil?
140
+ unless initialized
141
+ ::Rails.logger.warn "Application uninitialized: Try calling YourApp::Application.initialize!"
142
+ end
143
+
144
+ env = Condenser.new(pipeline: false)
145
+ config = app.config
146
+
147
+ # Run app.assets.configure blocks
148
+ config.assets._blocks.each do |block|
149
+ block.call(app, env)
150
+ end
151
+
152
+ env.register_transformer 'text/scss', 'text/css', Condenser::ScssTransformer.new({
153
+ functions: Condenser::Railtie::SassFunctions
154
+ })
155
+
156
+ # Set compressors after the configure blocks since they can
157
+ # define new compressors and we only accept existent compressors.
158
+ env.register_preprocessor 'application/javascript', Condenser::BabelProcessor
159
+ env.register_exporter 'application/javascript', Condenser::RollupProcessor
160
+
161
+ env.register_minifier 'application/javascript', resolve_minifier(config.assets.js_minifier)
162
+ env.register_minifier 'text/css', resolve_minifier(config.assets.css_minifier)
163
+
164
+ env.register_writer Condenser::FileWriter.new
165
+ config.assets.compressors&.each do |writer|
166
+ env.register_writer resolve_writer(writer)
167
+ end
168
+
169
+ # No more configuration changes at this point.
170
+ # With cache classes on, Sprockets won't check the FS when files
171
+ # change. Preferable in production when the FS only changes on
172
+ # deploys when the app restarts.
173
+ if config.cache_classes
174
+ env = env.cached
175
+ end
176
+
177
+ env
178
+ end
179
+
180
+ def self.build_manifest(app)
181
+ config = app.config
182
+
183
+ path = File.join(config.paths['public'].first, config.assets.prefix)
184
+ Condenser::Manifest.new(app.assets, path, config.assets.manifest || app.root.join('config', 'assets.json'))
185
+ end
186
+
187
+ config.after_initialize do |app|
188
+ config = app.config
189
+
190
+ if config.assets.compile
191
+ config.assets.precompile
192
+ require 'condenser/server'
193
+ app.assets = self.build_environment(app, true)
194
+ app.routes.prepend do
195
+ mount Condenser::Server.new(app.assets, logger: Rails.logger) => config.assets.prefix
196
+ end
197
+ end
198
+
199
+ app.assets_manifest = build_manifest(app)
200
+
201
+ if config.assets.resolve_with.nil?
202
+ config.assets.resolve_with = if config.assets.compile
203
+ :environment
204
+ else
205
+ :manifest
206
+ end
207
+ end
208
+
209
+ # ActionDispatch::Routing::RouteWrapper.class_eval do
210
+ # class_attribute :assets_prefix
211
+ #
212
+ # self.assets_prefix = config.assets.prefix
213
+ # end
214
+
215
+ ActiveSupport.on_load(:action_view) do
216
+ include ::Condenser::Rails::Helper
217
+
218
+ # Copy relevant config to AV context
219
+ self.assets_prefix = config.assets.prefix
220
+ if config.assets.compile
221
+ self.assets_precompiled = config.assets.precompile
222
+ self.assets_precompiled_regexes = app.precompiled_assets
223
+ end
224
+
225
+ self.assets = app.assets
226
+ self.assets_manifest = app.assets_manifest
227
+
228
+ self.resolve_assets_with = config.assets.resolve_with
229
+ end
230
+ end
231
+
232
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: condenser-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Bracy
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-09-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: condenser
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 0.0.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 0.0.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: actionpack
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '6.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '6.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '6.0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '6.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: railties
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '6.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '6.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
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'
83
+ - !ruby/object:Gem::Dependency
84
+ name: byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sassc
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: uglifier
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: minitest-reporters
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
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
+ description:
140
+ email: jonbracy@gmail.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - LICENSE
146
+ - README.md
147
+ - lib/condenser/rails.rb
148
+ - lib/condenser/rails/context.rb
149
+ - lib/condenser/rails/helper.rb
150
+ - lib/condenser/rails/task.rb
151
+ - lib/condenser/rails/utils.rb
152
+ - lib/condenser/rails/version.rb
153
+ - lib/condenser/railtie.rb
154
+ homepage: https://github.com/malomalo/condenser-rails
155
+ licenses:
156
+ - MIT
157
+ metadata: {}
158
+ post_install_message:
159
+ rdoc_options: []
160
+ require_paths:
161
+ - lib
162
+ required_ruby_version: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: 2.5.0
167
+ required_rubygems_version: !ruby/object:Gem::Requirement
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ version: '0'
172
+ requirements: []
173
+ rubygems_version: 3.0.3
174
+ signing_key:
175
+ specification_version: 4
176
+ summary: Condenser integration for Rails
177
+ test_files: []