thermos 0.5.2 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 69d08a67a8ad98400b2b0eda1e63af9b22cb127e82d72117c6dbb8fecb71a808
4
- data.tar.gz: 8a8369af0507aae7ef1c81ddf0bc7833adea0bd5941708c183c8c011b3e7db22
3
+ metadata.gz: 8436d0765dee9eafadbbb9994cce8aaed1e5746d96bc735fccdf55a945dcb4a8
4
+ data.tar.gz: 19fd374d31d2885979d791ab9dc0bfe021c9c61053b97ed4f96a0a5d862afa75
5
5
  SHA512:
6
- metadata.gz: 0c9f06c52aa92a34a3beacd1384b8f4de92318484a536d657a1a8c3b5a5017ec09d42f6b99b95966b8e3572fdaf57d8c01dd2a0c8ec6b9eb99490ac413e1ca88
7
- data.tar.gz: 3215b079c3890c74045ff902bcf259dc83d1d40e4ff5ee0c69be0833a959aa4e25dd7e92fbe9738fd18352223a6c050810d2065a9ab4bf25d45e0d87003d2889
6
+ metadata.gz: dd71bd6038960d9c556b3d55b697a6126d14573bb12ddc131e52a592629e39cc15e054c54cb0ee44aaf90a7b9879a43fc72571a9920c3ceae7b3a0721fb09cc2
7
+ data.tar.gz: 6de309fc56d581825c7497cd137595769ca81eff2298f9ba791b5809511bf1281e9b7376feac34849592c660605c9f53b5304e751f3e53df55cea8d377bf5413
data/Rakefile CHANGED
@@ -27,6 +27,10 @@ Rake::TestTask.new(:test) do |t|
27
27
  t.verbose = false
28
28
  end
29
29
 
30
+ task(:format) do
31
+ system('bundle exec rbprettier --write {lib,test}/**/*.rb')
32
+ end
33
+
30
34
  task(:default) do
31
35
  Dir.chdir('test/dummy')
32
36
  system('rake db:migrate')
@@ -2,33 +2,44 @@
2
2
 
3
3
  module Thermos
4
4
  class Beverage
5
- attr_reader :key, :model, :deps, :action, :lookup_key, :filter
5
+ attr_reader :key, :model, :deps, :action, :lookup_key, :filter, :queue
6
6
 
7
- def initialize(key:, model:, deps:, action:, lookup_key: nil, filter: nil)
7
+ def initialize(
8
+ key:,
9
+ model:,
10
+ deps:,
11
+ action:,
12
+ lookup_key: nil,
13
+ filter: nil,
14
+ queue: nil
15
+ )
8
16
  @key = key
9
17
  @model = model
10
18
  @lookup_key = lookup_key || :id
11
19
  @filter = filter || nil
12
20
  @deps = generate_deps(model, deps)
13
21
  @action = action
22
+ @queue = queue || ActiveJob::Base.default_queue_name
14
23
 
15
24
  set_observers
16
25
  end
17
26
 
18
27
  def lookup_keys_for_dep_model(dep_model)
19
- @deps.select do |dep|
20
- dep.klass == dep_model.class
21
- end.flat_map do |dep|
22
- lookup_keys = []
28
+ @deps
29
+ .select { |dep| dep.klass == dep_model.class }
30
+ .flat_map do |dep|
31
+ lookup_keys = []
23
32
 
24
- @model.joins(dep.path)
25
- .where(dep.table => { id: dep_model.id })
26
- .find_each do |model|
27
- lookup_keys << model.send(@lookup_key) if should_fill?(model)
28
- end
33
+ @model
34
+ .joins(dep.path)
35
+ .where(dep.table => { id: dep_model.id })
36
+ .find_each do |model|
37
+ lookup_keys << model.send(@lookup_key) if should_fill?(model)
38
+ end
29
39
 
30
- lookup_keys
31
- end.uniq
40
+ lookup_keys
41
+ end
42
+ .uniq
32
43
  end
33
44
 
34
45
  def should_fill?(model)
@@ -50,23 +61,25 @@ module Thermos
50
61
  deps.reduce([]) do |acc, dep|
51
62
  if dep.is_a? Symbol
52
63
  acc << Dependency.new(
53
- model: root || model,
54
- ref: model.reflect_on_association(dep),
55
- path: path || dep)
64
+ model: root || model,
65
+ ref: model.reflect_on_association(dep),
66
+ path: path || dep,
67
+ )
56
68
  elsif dep.is_a? Array
57
- dep.each do |d|
69
+ dep.each do |d|
58
70
  acc << Dependency.new(
59
- model: root || model,
60
- ref: model.reflect_on_association(d),
61
- path: path || d)
71
+ model: root || model,
72
+ ref: model.reflect_on_association(d),
73
+ path: path || d,
74
+ )
62
75
  end
63
76
  elsif dep.is_a? Hash
64
- dep.each do |k,v|
77
+ dep.each do |k, v|
65
78
  ref = model.reflect_on_association(k)
66
79
  acc << Dependency.new(
67
- model: root || model,
68
- ref: ref,
69
- path: path || k
80
+ model: root || model,
81
+ ref: ref,
82
+ path: path || k,
70
83
  )
71
84
  acc.concat(generate_deps(ref.class_name.constantize, v, model, dep))
72
85
  end
@@ -4,9 +4,7 @@ module Thermos
4
4
  module Notifier
5
5
  extend ActiveSupport::Concern
6
6
 
7
- included do
8
- after_commit :notify_thermos, on: %i[create update]
9
- end
7
+ included { after_commit :notify_thermos, on: %i[create update] }
10
8
 
11
9
  private
12
10
 
@@ -10,16 +10,24 @@ module Thermos
10
10
  def refill_primary_caches(model)
11
11
  BeverageStorage.instance.beverages.each do |beverage|
12
12
  if beverage.model == model.class && beverage.should_fill?(model)
13
- Thermos::RebuildCacheJob.perform_later(beverage.key, model.send(beverage.lookup_key))
13
+ Thermos::RebuildCacheJob.set(queue: beverage.queue).perform_later(
14
+ beverage.key,
15
+ model.send(beverage.lookup_key),
16
+ )
14
17
  end
15
18
  end
16
19
  end
17
20
 
18
21
  def refill_dependency_caches(model)
19
22
  BeverageStorage.instance.beverages.each do |beverage|
20
- beverage.lookup_keys_for_dep_model(model).each do |lookup_key|
21
- Thermos::RebuildCacheJob.perform_later(beverage.key, lookup_key)
22
- end
23
+ beverage
24
+ .lookup_keys_for_dep_model(model)
25
+ .each do |lookup_key|
26
+ Thermos::RebuildCacheJob.set(queue: beverage.queue).perform_later(
27
+ beverage.key,
28
+ lookup_key,
29
+ )
30
+ end
23
31
  end
24
32
  end
25
33
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Thermos
4
- VERSION = '0.5.2'
4
+ VERSION = "1.0.0"
5
5
  end
data/lib/thermos.rb CHANGED
@@ -1,27 +1,62 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'thermos/beverage'
4
- require 'thermos/beverage_storage'
5
- require 'thermos/dependency'
6
- require 'thermos/notifier'
7
- require 'thermos/refill_job'
8
- require 'thermos/rebuild_cache_job'
3
+ require "thermos/beverage"
4
+ require "thermos/beverage_storage"
5
+ require "thermos/dependency"
6
+ require "thermos/notifier"
7
+ require "thermos/refill_job"
8
+ require "thermos/rebuild_cache_job"
9
9
 
10
10
  module Thermos
11
- def self.keep_warm(key:, model:, id:, deps: [], lookup_key: nil, filter: nil, &block)
12
- fill(key: key, model: model, deps: deps, lookup_key: lookup_key, filter: filter, &block)
11
+ def self.keep_warm(
12
+ key:,
13
+ model:,
14
+ id:,
15
+ deps: [],
16
+ lookup_key: nil,
17
+ filter: nil,
18
+ queue: nil,
19
+ &block
20
+ )
21
+ fill(
22
+ key: key,
23
+ model: model,
24
+ deps: deps,
25
+ lookup_key: lookup_key,
26
+ filter: filter,
27
+ queue: queue,
28
+ &block
29
+ )
13
30
  drink(key: key, id: id)
14
31
  end
15
32
 
16
- def self.fill(key:, model:, deps: [], lookup_key: nil, filter: nil, &block)
33
+ def self.fill(
34
+ key:,
35
+ model:,
36
+ deps: [],
37
+ lookup_key: nil,
38
+ filter: nil,
39
+ queue: nil,
40
+ &block
41
+ )
17
42
  BeverageStorage.instance.add_beverage(
18
- Beverage.new(key: key, model: model, deps: deps, action: block, lookup_key: lookup_key, filter: filter)
43
+ Beverage.new(
44
+ key: key,
45
+ model: model,
46
+ deps: deps,
47
+ action: block,
48
+ lookup_key: lookup_key,
49
+ filter: filter,
50
+ queue: queue,
51
+ ),
19
52
  )
20
53
  end
21
54
 
22
55
  def self.drink(key:, id:)
23
- Rails.cache.fetch([key, id]) do
24
- BeverageStorage.instance.get_beverage(key).action.call(id)
25
- end
56
+ Rails
57
+ .cache
58
+ .fetch([key, id]) do
59
+ BeverageStorage.instance.get_beverage(key).action.call(id)
60
+ end
26
61
  end
27
62
  end
@@ -0,0 +1,307 @@
1
+ require "test_helper"
2
+
3
+ class DependenciesTest < ActiveSupport::TestCase
4
+ self.use_transactional_tests = true
5
+ teardown :clear_cache
6
+
7
+ test "rebuilds the cache on has_many model change" do
8
+ mock = Minitest::Mock.new
9
+ category = categories(:baseball)
10
+ category_item = category_items(:baseball_glove)
11
+
12
+ Thermos.fill(key: "key", model: Category, deps: [:category_items]) do |id|
13
+ mock.call(id)
14
+ end
15
+
16
+ mock.expect(:call, 1, [category.id])
17
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
18
+ mock.verify
19
+
20
+ mock.expect(:call, 2, [category.id])
21
+ category_item.update!(name: "foo")
22
+ mock.verify
23
+
24
+ mock.expect(:call, 3, [category.id])
25
+ assert_equal 2, Thermos.drink(key: "key", id: category.id)
26
+ assert_raises(MockExpectationError) { mock.verify }
27
+ end
28
+
29
+ test "does not rebuild the cache for an unrelated has_many model change" do
30
+ mock = Minitest::Mock.new
31
+ category = categories(:baseball)
32
+ category_item = CategoryItem.create(category: nil)
33
+
34
+ Thermos.fill(key: "key", model: Category, deps: [:category_items]) do |id|
35
+ mock.call(id)
36
+ end
37
+
38
+ mock.expect(:call, 1, [category.id])
39
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
40
+ mock.verify
41
+
42
+ mock.expect(:call, 2, [category.id])
43
+ category_item.update!(name: "foo")
44
+ assert_raises(MockExpectationError) { mock.verify }
45
+
46
+ mock.expect(:call, 3, [category.id])
47
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
48
+ assert_raises(MockExpectationError) { mock.verify }
49
+ end
50
+
51
+ test "re-builds the cache for new has_many records" do
52
+ mock = Minitest::Mock.new
53
+ category = categories(:baseball)
54
+
55
+ Thermos.fill(key: "key", model: Category, deps: [:category_items]) do |id|
56
+ mock.call(id)
57
+ end
58
+
59
+ mock.expect(:call, 1, [category.id])
60
+ CategoryItem.create!(category: category)
61
+ mock.verify
62
+
63
+ mock.expect(:call, 2, [category.id])
64
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
65
+ assert_raises(MockExpectationError) { mock.verify }
66
+ end
67
+
68
+ test "re-builds the cache for has_many record changes when filter condition is met" do
69
+ mock = Minitest::Mock.new
70
+ category = categories(:baseball)
71
+ filter = ->(model) { model.ball? }
72
+
73
+ Thermos.fill(
74
+ key: "key",
75
+ model: Category,
76
+ deps: [:category_items],
77
+ filter: filter,
78
+ ) { |id| mock.call(id) }
79
+
80
+ mock.expect(:call, 1, [category.id])
81
+ CategoryItem.create!(category: category)
82
+ mock.verify
83
+
84
+ category.update!(name: "hockey")
85
+
86
+ mock.expect(:call, 1, [category.id])
87
+ CategoryItem.create!(category: category)
88
+ assert_raises(MockExpectationError) { mock.verify }
89
+ end
90
+
91
+ test "rebuilds the cache on belongs_to model change" do
92
+ mock = Minitest::Mock.new
93
+ category = categories(:baseball)
94
+ store = stores(:sports)
95
+
96
+ Thermos.fill(key: "key", model: Category, deps: [:store]) do |id|
97
+ mock.call(id)
98
+ end
99
+
100
+ mock.expect(:call, 1, [category.id])
101
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
102
+ mock.verify
103
+
104
+ mock.expect(:call, 2, [category.id])
105
+ store.update!(name: "foo")
106
+ mock.verify
107
+
108
+ mock.expect(:call, 3, [category.id])
109
+ assert_equal 2, Thermos.drink(key: "key", id: category.id)
110
+ assert_raises(MockExpectationError) { mock.verify }
111
+ end
112
+
113
+ test "does not rebuild the cache for an unrelated belongs_to model change" do
114
+ mock = Minitest::Mock.new
115
+ category = categories(:baseball)
116
+ store = Store.create!
117
+
118
+ Thermos.fill(key: "key", model: Category, deps: [:store]) do |id|
119
+ mock.call(id)
120
+ end
121
+
122
+ mock.expect(:call, 1, [category.id])
123
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
124
+ mock.verify
125
+
126
+ mock.expect(:call, 2, [category.id])
127
+ store.update!(name: "foo")
128
+ assert_raises(MockExpectationError) { mock.verify }
129
+
130
+ mock.expect(:call, 3, [category.id])
131
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
132
+ assert_raises(MockExpectationError) { mock.verify }
133
+ end
134
+
135
+ test "re-builds the cache for new belongs_to records" do
136
+ mock = Minitest::Mock.new
137
+ category = categories(:baseball)
138
+
139
+ Thermos.fill(key: "key", model: Category, deps: [:store]) do |id|
140
+ mock.call(id)
141
+ end
142
+
143
+ mock.expect(:call, 1, [category.id])
144
+ mock.expect(:call, 1, [category.id])
145
+ Store.create!(name: "foo", categories: [category])
146
+ mock.verify
147
+
148
+ mock.expect(:call, 2, [category.id])
149
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
150
+ assert_raises(MockExpectationError) { mock.verify }
151
+ end
152
+
153
+ test "re-builds the cache for belongs_to record changes when filter condition is met" do
154
+ mock = Minitest::Mock.new
155
+ category = categories(:baseball)
156
+ filter = ->(model) { model.ball? }
157
+
158
+ Thermos.fill(
159
+ key: "key",
160
+ model: Category,
161
+ deps: [:store],
162
+ filter: filter,
163
+ ) { |id| mock.call(id) }
164
+
165
+ mock.expect(:call, 1, [category.id])
166
+ mock.expect(:call, 1, [category.id])
167
+ Store.create!(name: "foo", categories: [category])
168
+ mock.verify
169
+
170
+ category.update!(name: "hockey")
171
+
172
+ mock.expect(:call, 2, [category.id])
173
+ Store.create!(name: "bar", categories: [category])
174
+ assert_raises(MockExpectationError) { mock.verify }
175
+ end
176
+
177
+ test "rebuilds the cache on has_many through model change" do
178
+ mock = Minitest::Mock.new
179
+ category = categories(:baseball)
180
+ product = products(:glove)
181
+
182
+ Thermos.fill(key: "key", model: Category, deps: [:products]) do |id|
183
+ mock.call(id)
184
+ end
185
+
186
+ mock.expect(:call, 1, [category.id])
187
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
188
+ mock.verify
189
+
190
+ mock.expect(:call, 2, [category.id])
191
+ product.update!(name: "foo")
192
+ mock.verify
193
+
194
+ mock.expect(:call, 3, [category.id])
195
+ assert_equal 2, Thermos.drink(key: "key", id: category.id)
196
+ assert_raises(MockExpectationError) { mock.verify }
197
+ end
198
+
199
+ test "does not rebuild the cache for an unrelated has_many through model change" do
200
+ mock = Minitest::Mock.new
201
+ category = categories(:baseball)
202
+ product = Product.create!
203
+
204
+ Thermos.fill(key: "key", model: Category, deps: [:products]) do |id|
205
+ mock.call(id)
206
+ end
207
+
208
+ mock.expect(:call, 1, [category.id])
209
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
210
+ mock.verify
211
+
212
+ mock.expect(:call, 2, [category.id])
213
+ product.update!(name: "foo")
214
+ assert_raises(MockExpectationError) { mock.verify }
215
+
216
+ mock.expect(:call, 3, [category.id])
217
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
218
+ assert_raises(MockExpectationError) { mock.verify }
219
+ end
220
+
221
+ test "re-builds the cache for new has_many through records" do
222
+ mock = Minitest::Mock.new
223
+ category = categories(:baseball)
224
+
225
+ Thermos.fill(key: "key", model: Category, deps: [:products]) do |id|
226
+ mock.call(id)
227
+ end
228
+
229
+ mock.expect(:call, 1, [category.id])
230
+ Product.create!(categories: [category])
231
+ mock.verify
232
+
233
+ mock.expect(:call, 2, [category.id])
234
+ assert_equal 1, Thermos.drink(key: "key", id: category.id)
235
+ assert_raises(MockExpectationError) { mock.verify }
236
+ end
237
+
238
+ test "re-builds the cache for has_many through record changes when filter condition is met" do
239
+ mock = Minitest::Mock.new
240
+ category = categories(:baseball)
241
+ filter = ->(model) { model.ball? }
242
+
243
+ Thermos.fill(
244
+ key: "key",
245
+ model: Category,
246
+ deps: [:products],
247
+ filter: filter,
248
+ ) { |id| mock.call(id) }
249
+
250
+ mock.expect(:call, 1, [category.id])
251
+ Product.create!(categories: [category])
252
+ mock.verify
253
+
254
+ category.update!(name: "hockey")
255
+
256
+ mock.expect(:call, 2, [category.id])
257
+ Product.create!(categories: [category])
258
+ assert_raises(MockExpectationError) { mock.verify }
259
+ end
260
+
261
+ test "handles indirect associations" do
262
+ mock = Minitest::Mock.new
263
+ category = categories(:baseball)
264
+ store = category.store
265
+
266
+ Thermos.fill(
267
+ key: "key",
268
+ model: Store,
269
+ deps: [categories: [:products]],
270
+ ) { |id| mock.call(id) }
271
+
272
+ mock.expect(:call, 1, [store.id])
273
+ category.update!(name: "foo")
274
+ mock.verify
275
+
276
+ mock.expect(:call, 2, [store.id])
277
+ assert_equal 1, Thermos.drink(key: "key", id: store.id)
278
+ assert_raises(MockExpectationError) { mock.verify }
279
+ Product.create!(categories: [category])
280
+ mock.verify
281
+
282
+ mock.expect(:call, 3, [store.id])
283
+ assert_equal 2, Thermos.drink(key: "key", id: store.id)
284
+ assert_raises(MockExpectationError) { mock.verify }
285
+ end
286
+
287
+ test "only rebuilds cache for stated dependencies, even if another cache has an associated model of the primary" do
288
+ category_mock = Minitest::Mock.new
289
+ product_mock = Minitest::Mock.new
290
+ category = categories(:baseball)
291
+ product = products(:glove)
292
+
293
+ Thermos.fill(key: "category_key", model: Category) do |id|
294
+ category_mock.call(id)
295
+ end
296
+
297
+ Thermos.fill(key: "product_key", model: Product) do |id|
298
+ product_mock.call(id)
299
+ end
300
+
301
+ category_mock.expect(:call, 2, [category.id])
302
+ product_mock.expect(:call, 2, [product.id])
303
+ product.update!(name: "foo")
304
+ assert_raises(MockExpectationError) { category_mock.verify }
305
+ product_mock.verify
306
+ end
307
+ end
@@ -11,12 +11,10 @@ class Category < ActiveRecord::Base
11
11
  {
12
12
  name: name,
13
13
  store_name: store.name,
14
- category_items: category_items.map do |item|
15
- {
16
- name: item.name,
17
- product_name: item.product.name
18
- }
19
- end
14
+ category_items:
15
+ category_items.map do |item|
16
+ { name: item.name, product_name: item.product.name }
17
+ end,
20
18
  }
21
19
  end
22
20
  end
@@ -1,6 +1,6 @@
1
- require File.expand_path('../boot', __FILE__)
1
+ require File.expand_path("../boot", __FILE__)
2
2
 
3
- require 'rails/all'
3
+ require "rails/all"
4
4
 
5
5
  Bundler.require(*Rails.groups)
6
6
  require "thermos"
@@ -10,14 +10,11 @@ module Dummy
10
10
  # Settings in config/environments/* take precedence over those specified here.
11
11
  # Application configuration should go into files in config/initializers
12
12
  # -- all .rb files in that directory are automatically loaded.
13
-
14
13
  # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
15
14
  # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
16
15
  # config.time_zone = 'Central Time (US & Canada)'
17
-
18
16
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
19
17
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
20
18
  # config.i18n.default_locale = :de
21
19
  end
22
20
  end
23
-
@@ -1,5 +1,5 @@
1
1
  # Set up gems listed in the Gemfile.
2
- ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
2
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../../Gemfile", __FILE__)
3
3
 
4
- require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
5
- $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__)
4
+ require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
5
+ $LOAD_PATH.unshift File.expand_path("../../../../lib", __FILE__)
@@ -1,5 +1,5 @@
1
1
  # Load the Rails application.
2
- require File.expand_path('../application', __FILE__)
2
+ require File.expand_path("../application", __FILE__)
3
3
 
4
4
  # Initialize the Rails application.
5
5
  Rails.application.initialize!
@@ -10,7 +10,7 @@ Rails.application.configure do
10
10
  config.eager_load = false
11
11
 
12
12
  # Show full error reports and disable caching.
13
- config.consider_all_requests_local = true
13
+ config.consider_all_requests_local = true
14
14
  config.action_controller.perform_caching = false
15
15
 
16
16
  # Don't care if the mailer can't send.
@@ -25,16 +25,16 @@ Rails.application.configure do
25
25
  # Debug mode disables concatenation and preprocessing of assets.
26
26
  # This option may cause significant delays in view rendering with a large
27
27
  # number of complex assets.
28
- config.assets.debug = true
28
+ # config.assets.debug = true
29
29
 
30
30
  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
31
31
  # yet still be able to expire them through the digest params.
32
- config.assets.digest = true
32
+ # config.assets.digest = true
33
33
 
34
34
  # Adds additional error checking when serving assets at runtime.
35
35
  # Checks for improperly declared sprockets dependencies.
36
36
  # Raises helpful error messages.
37
- config.assets.raise_runtime_errors = true
37
+ # config.assets.raise_runtime_errors = true
38
38
 
39
39
  # Raises error for missing translations
40
40
  # config.action_view.raise_on_missing_translations = true
@@ -11,7 +11,7 @@ Rails.application.configure do
11
11
  config.eager_load = true
12
12
 
13
13
  # Full error reports are disabled and caching is turned on.
14
- config.consider_all_requests_local = false
14
+ config.consider_all_requests_local = false
15
15
  config.action_controller.perform_caching = true
16
16
 
17
17
  # Enable Rack::Cache to put a simple HTTP cache in front of your application
@@ -22,18 +22,19 @@ Rails.application.configure do
22
22
 
23
23
  # Disable serving static files from the `/public` folder by default since
24
24
  # Apache or NGINX already handles this.
25
- config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present?
25
+ config.serve_static_files = ENV["RAILS_SERVE_STATIC_FILES"].present?
26
26
 
27
27
  # Compress JavaScripts and CSS.
28
- config.assets.js_compressor = :uglifier
28
+ # config.assets.js_compressor = :uglifier
29
+
29
30
  # config.assets.css_compressor = :sass
30
31
 
31
32
  # Do not fallback to assets pipeline if a precompiled asset is missed.
32
- config.assets.compile = false
33
+ # config.assets.compile = false
33
34
 
34
35
  # Asset digests allow you to set far-future HTTP expiration dates on all assets,
35
36
  # yet still be able to expire them through the digest params.
36
- config.assets.digest = true
37
+ # config.assets.digest = true
37
38
 
38
39
  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
39
40