bemer 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +5 -5
  2. data/{LICENSE-RU → LICENSE-RU.txt} +0 -0
  3. data/{LICENSE → LICENSE.txt} +5 -5
  4. data/README.md +47 -16
  5. data/docs/BEMHTML.md +5 -0
  6. data/docs//320/232/320/276/320/275/321/202/320/265/320/272/321/201/321/202-/321/203/320/267/320/273/320/260.md +275 -0
  7. data/docs//320/232/320/276/320/275/321/204/320/270/320/263/321/203/321/200/320/260/321/206/320/270/321/217.md +158 -0
  8. data/docs//320/237/321/200/320/265/320/264/320/270/320/272/320/260/321/202/321/213.md +205 -0
  9. data/docs//320/240/320/265/320/266/320/270/320/274/321/213.md +274 -0
  10. data/docs//320/241/320/276/320/267/320/264/320/260/320/275/320/270/320/265-/320/270-/320/270/321/201/320/277/320/276/320/273/321/214/320/267/320/276/320/262/320/260/320/275/320/270/320/265-UI-/320/272/320/276/320/274/320/277/320/276/320/275/320/265/320/275/321/202.md +173 -0
  11. data/docs//320/244/320/260/320/270/314/206/320/273/320/276/320/262/320/260/321/217-/321/201/321/202/321/200/321/203/320/272/321/202/321/203/321/200/320/260.md +167 -0
  12. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-bem_mix.md +62 -0
  13. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-bem_mods.md +63 -0
  14. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-block_tag.md +215 -0
  15. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-component_asset_path.md +71 -0
  16. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-component_pack.md +101 -0
  17. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-component_partial_path.md +28 -0
  18. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-define_component.md +154 -0
  19. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-define_templates.md +96 -0
  20. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-elem_tag.md +38 -0
  21. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-refine_component.md +114 -0
  22. data/docs//320/245/320/265/320/273/320/277/320/265/321/200-render_component.md +108 -0
  23. data/docs//320/250/320/260/320/261/320/273/320/276/320/275/321/213.md +44 -0
  24. data/lib/bemer.rb +3 -1
  25. data/lib/bemer/builders.rb +8 -0
  26. data/lib/bemer/builders/tree.rb +0 -8
  27. data/lib/bemer/configuration.rb +3 -1
  28. data/lib/bemer/context_extentions/structure.rb +2 -3
  29. data/lib/bemer/entity.rb +2 -2
  30. data/lib/bemer/entity_builder.rb +5 -9
  31. data/lib/bemer/helpers.rb +10 -0
  32. data/lib/bemer/mixin_list.rb +1 -1
  33. data/lib/bemer/modifier_list.rb +2 -2
  34. data/lib/bemer/path_resolver.rb +23 -0
  35. data/lib/bemer/pipeline/handler.rb +4 -6
  36. data/lib/bemer/railtie.rb +22 -9
  37. data/lib/bemer/renderer.rb +1 -1
  38. data/lib/bemer/template_list.rb +2 -4
  39. data/lib/bemer/tree.rb +3 -3
  40. data/lib/bemer/tree/node.rb +5 -7
  41. data/lib/bemer/version.rb +1 -1
  42. data/spec/bemer/railtie_spec.rb +95 -0
  43. data/spec/dummy/config/application.rb +30 -12
  44. data/spec/dummy/config/initializers/backtrace_silencers.rb +1 -5
  45. data/spec/dummy/config/initializers/bemer.rb +1 -3
  46. data/spec/rails_helper.rb +5 -9
  47. metadata +87 -129
  48. data/.gitignore +0 -17
  49. data/.overcommit.yml +0 -59
  50. data/.rspec +0 -4
  51. data/.rubocop.yml +0 -21
  52. data/.rubocop_todo.yml +0 -11
  53. data/Gemfile +0 -12
  54. data/Rakefile +0 -12
  55. data/bemer.gemspec +0 -43
  56. data/spec/dummy/Rakefile +0 -8
  57. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  58. data/spec/dummy/app/helpers/application_helper.rb +0 -4
  59. data/spec/dummy/app/jobs/application_job.rb +0 -4
  60. data/spec/dummy/app/mailers/application_mailer.rb +0 -6
  61. data/spec/dummy/app/models/application_record.rb +0 -5
  62. data/spec/dummy/app/models/concerns/.keep +0 -0
  63. data/spec/dummy/app/views/layouts/mailer.html.erb +0 -13
  64. data/spec/dummy/app/views/layouts/mailer.text.erb +0 -1
  65. data/spec/dummy/bin/bundle +0 -5
  66. data/spec/dummy/bin/rails +0 -6
  67. data/spec/dummy/bin/rake +0 -6
  68. data/spec/dummy/bin/setup +0 -39
  69. data/spec/dummy/bin/update +0 -31
  70. data/spec/dummy/bin/yarn +0 -13
  71. data/spec/dummy/config/cable.yml +0 -10
  72. data/spec/dummy/config/database.yml +0 -25
  73. data/spec/dummy/config/environments/development.rb +0 -51
  74. data/spec/dummy/config/environments/production.rb +0 -84
  75. data/spec/dummy/config/environments/test.rb +0 -44
  76. data/spec/dummy/config/initializers/application_controller_renderer.rb +0 -7
  77. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -7
  78. data/spec/dummy/config/initializers/filter_parameter_logging.rb +0 -6
  79. data/spec/dummy/config/initializers/inflections.rb +0 -17
  80. data/spec/dummy/config/initializers/mime_types.rb +0 -5
  81. data/spec/dummy/config/initializers/wrap_parameters.rb +0 -16
  82. data/spec/dummy/config/locales/en.yml +0 -33
  83. data/spec/dummy/config/puma.rb +0 -58
  84. data/spec/dummy/config/routes.rb +0 -5
  85. data/spec/dummy/config/secrets.yml +0 -32
  86. data/spec/dummy/config/spring.rb +0 -8
  87. data/spec/dummy/lib/assets/.keep +0 -0
  88. data/spec/dummy/log/.keep +0 -0
  89. data/spec/dummy/package.json +0 -5
  90. data/spec/dummy/public/404.html +0 -67
  91. data/spec/dummy/public/422.html +0 -67
  92. data/spec/dummy/public/500.html +0 -66
  93. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  94. data/spec/dummy/public/apple-touch-icon.png +0 -0
  95. data/spec/dummy/public/favicon.ico +0 -0
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'singleton'
4
+ require 'rails'
4
5
 
5
6
  module Bemer
6
7
  class Configuration
@@ -17,6 +18,7 @@ module Bemer
17
18
  def initialize # rubocop:disable Metrics/MethodLength
18
19
  @asset_paths = []
19
20
  @bem = false
21
+ # Gem::Version.new('0.4.1') > Gem::Version.new('0.10.1')
20
22
  @can_use_new_matcher = RUBY_VERSION >= '2.4.0'
21
23
  @default_block_tag = :div
22
24
  @default_element_tag = :div
@@ -30,7 +32,7 @@ module Bemer
30
32
  end
31
33
 
32
34
  def path
33
- Rails.root.join(@path)
35
+ Rails.root ? Rails.root.join(@path) : @path
34
36
  end
35
37
  end
36
38
  end
@@ -8,10 +8,9 @@ module Bemer
8
8
 
9
9
  node.params.merge!(options)
10
10
 
11
- output = node.add_child_nodes
11
+ node.add_child_nodes
12
+ ensure
12
13
  node.params = old_params
13
-
14
- output
15
14
  end
16
15
 
17
16
  def ctx(**options)
@@ -50,8 +50,8 @@ module Bemer
50
50
 
51
51
  attr_reader :css_classes, :html_attrs, :mixins, :modifiers
52
52
 
53
- def extract_content(plain_text, &content)
54
- block_given? ? content : plain_text
53
+ def extract_content(plain_content, &block)
54
+ block_given? ? block : plain_content
55
55
  end
56
56
 
57
57
  def extract_options!(options) # rubocop:disable Metrics/AbcSize
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'active_support/core_ext/object/blank'
4
- require 'active_support/core_ext/hash/deep_merge'
4
+ require 'active_support/core_ext/string/filters'
5
5
 
6
6
  module Bemer
7
7
  class EntityBuilder < Entity
@@ -11,7 +11,7 @@ module Bemer
11
11
 
12
12
  return attributes unless bem?
13
13
 
14
- attributes.deep_merge!(js)
14
+ attributes.merge!(js)
15
15
  end
16
16
 
17
17
  def attrs=(new_attrs, save = true)
@@ -36,16 +36,12 @@ module Bemer
36
36
  bem_cascade_via_option? ? super : true
37
37
  end
38
38
 
39
- def bem_cascade=(new_bem_cascade, save = true)
40
- save ? @bem_cascade = new_bem_cascade : new_bem_cascade
41
- end
42
-
43
39
  def cls
44
40
  return super unless bem?
45
41
 
46
42
  js_class = 'i-bem' if @js.present? && bem_class.present?
47
43
 
48
- [bem_class, mods, mix, super, js_class].reject(&:blank?)
44
+ [bem_class, mods, mix, super, js_class].join(' ').squish
49
45
  end
50
46
 
51
47
  def cls=(new_cls, save = true)
@@ -61,9 +57,9 @@ module Bemer
61
57
  def js
62
58
  return {} if @js.blank? || bem_class.blank?
63
59
 
64
- attrs = @js.instance_of?(TrueClass) ? {} : super
60
+ js_attrs = @js.instance_of?(TrueClass) ? {} : super
65
61
 
66
- { data: { bem: { name => attrs } } }
62
+ { 'data-bem': { name => js_attrs }.to_json }
67
63
  end
68
64
 
69
65
  def js=(new_js, save = true)
@@ -10,10 +10,12 @@ module Bemer
10
10
  Bemer::Tag.new(block, element, options, &content).render
11
11
  end
12
12
 
13
+ # Использовать mix
13
14
  def bem_mix(*mix)
14
15
  Bemer::MixinList.new(mix).to_s
15
16
  end
16
17
 
18
+ # Использовать mods
17
19
  def bem_mods(*block_and_element, mods)
18
20
  block, element = *block_and_element
19
21
 
@@ -37,5 +39,13 @@ module Bemer
37
39
  def component_pack(&block)
38
40
  Bemer::ComponentPack.new(self).render(&block)
39
41
  end
42
+
43
+ def component_asset_path(name)
44
+ Bemer::PathResolver.new(self).resolve(name)
45
+ end
46
+
47
+ def component_partial_path(name)
48
+ Bemer::PathResolver.new(self).resolve(name, true)
49
+ end
40
50
  end
41
51
  end
@@ -14,7 +14,7 @@ module Bemer
14
14
  end
15
15
 
16
16
  def to_s
17
- @mix_as_string ||= to_a.join(' ')
17
+ @to_s ||= to_a.join(' ')
18
18
  end
19
19
 
20
20
  protected
@@ -12,11 +12,11 @@ module Bemer
12
12
  end
13
13
 
14
14
  def to_a
15
- @mods_as_array ||= to_h.map { |name, value| build_css_class(name, value) }
15
+ @to_a ||= to_h.map { |name, value| build_css_class(name, value) }
16
16
  end
17
17
 
18
18
  def to_s
19
- @mods_as_string ||= to_a.join(' ')
19
+ @to_s ||= to_a.join(' ')
20
20
  end
21
21
 
22
22
  def to_h
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Bemer
4
+ class PathResolver
5
+ def initialize(view)
6
+ @view = view
7
+ end
8
+
9
+ def resolve(name, partial = false)
10
+ virtual_path = view.instance_variable_get(:@virtual_path)
11
+ directory = [File.dirname(virtual_path)]
12
+ file_name = name.to_s
13
+
14
+ return file_name unless view.lookup_context.exists?(file_name, directory, partial)
15
+
16
+ File.join(directory, file_name).to_s
17
+ end
18
+
19
+ protected
20
+
21
+ attr_reader :view
22
+ end
23
+ end
@@ -54,20 +54,18 @@ module Bemer
54
54
 
55
55
  node.params.merge!(params)
56
56
 
57
- output = template.nil? ? CommonTemplate.new(mode).apply!(node) : template.apply(node)
57
+ template.nil? ? CommonTemplate.new(mode).apply!(node) : template.apply(node)
58
+ ensure
58
59
  node.params = old_params
59
-
60
- output
61
60
  end
62
61
 
63
62
  def apply_template!(mode, node)
64
63
  node.applied_modes[mode] = true
65
64
  template = find_template(mode, node)
66
- output = template ? template.apply!(node) : nil
67
65
 
66
+ template ? template.apply!(node) : nil
67
+ ensure
68
68
  disable_related_modes!(mode, node)
69
-
70
- output
71
69
  end
72
70
 
73
71
  def disable_related_modes!(mode, node)
@@ -1,25 +1,38 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rails/railtie'
4
+ require 'rails/version'
5
+ require 'active_support/lazy_load_hooks'
6
+ require 'action_controller/railtie'
7
+
3
8
  module Bemer
4
9
  class Railtie < ::Rails::Railtie
10
+ class << self
11
+ def assets_path_initializer
12
+ case ::Rails::VERSION::MAJOR
13
+ when 5 then :append_assets_path
14
+ when 3..4 then :load_config_initializers
15
+ end
16
+ end
17
+ end
18
+
5
19
  config.eager_load_namespaces << Bemer if config.respond_to?(:eager_load_namespaces)
6
20
 
7
21
  config.after_initialize do
8
- ActionController::Base.prepend_view_path([Bemer.path, *Bemer.paths])
9
- ActionMailer::Base.prepend_view_path([Bemer.path, *Bemer.paths])
22
+ paths = [Bemer.path, *Bemer.paths]
23
+
24
+ ActionController::Base.prepend_view_path(paths)
25
+
26
+ next unless defined?(ActionMailer::Base)
27
+
28
+ ActionMailer::Base.prepend_view_path(paths)
10
29
  end
11
30
 
12
31
  initializer 'bemer.helpers' do
13
32
  ActiveSupport.on_load(:action_view) { include Bemer::Helpers }
14
33
  end
15
34
 
16
- initializer_name =
17
- case ::Rails::VERSION::MAJOR
18
- when 5 then :append_assets_path
19
- when 3..4 then :load_config_initializers
20
- end
21
-
22
- initializer 'bemer.prepend_asset_paths', group: :all, after: initializer_name do |app|
35
+ initializer 'bemer.prepend_asset_paths', group: :all, after: assets_path_initializer do |app|
23
36
  next unless defined?(::Sprockets) && Bemer.prepend_asset_paths?
24
37
 
25
38
  app.config.assets.paths.unshift(Bemer.path.to_s, *Bemer.asset_paths)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'action_view/helpers/tag_helper'
3
+ require 'action_view'
4
4
 
5
5
  module Bemer
6
6
  class Renderer
@@ -16,11 +16,9 @@ module Bemer
16
16
 
17
17
  add_default_templates
18
18
 
19
- output = view.render(template: template, locals: { **options })
20
-
19
+ view.render(template: template, locals: { **options })
20
+ ensure
21
21
  remove_template_catalog!
22
-
23
- output
24
22
  end
25
23
 
26
24
  protected
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/string/output_safety'
3
+ require 'action_view/buffers'
4
4
  require 'active_support/dependencies/autoload'
5
5
 
6
6
  module Bemer
@@ -28,7 +28,7 @@ module Bemer
28
28
  return unless block_given?
29
29
 
30
30
  builder = Builders::Tree.new(self)
31
- output = ActiveSupport::SafeBuffer.new
31
+ output = ::ActionView::OutputBuffer.new
32
32
 
33
33
  output << block.binding.receiver.capture(builder, &block)
34
34
  output << render_root_nodes
@@ -86,7 +86,7 @@ module Bemer
86
86
  end
87
87
 
88
88
  def render_root_nodes
89
- output = ActiveSupport::SafeBuffer.new
89
+ output = ::ActionView::OutputBuffer.new
90
90
  position = 0
91
91
 
92
92
  while position < root_nodes.length
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/core_ext/string/output_safety'
3
+ require 'action_view/buffers'
4
4
 
5
5
  module Bemer
6
6
  class Tree
@@ -48,11 +48,9 @@ module Bemer
48
48
  old_parent_node = tree.parent_node
49
49
  tree.parent_node = self
50
50
 
51
- output = yield
52
-
51
+ yield
52
+ ensure
53
53
  tree.parent_node = old_parent_node
54
-
55
- output
56
54
  end
57
55
 
58
56
  def print(level = 0)
@@ -74,7 +72,7 @@ module Bemer
74
72
  protected
75
73
 
76
74
  def capture_content
77
- output = ActiveSupport::SafeBuffer.new
75
+ output = ::ActionView::OutputBuffer.new
78
76
  plain_text = replace_parent_and_execute { add_child_nodes } if need_add_child_nodes?
79
77
 
80
78
  output << entity_builder.content if need_include_builder_content?
@@ -94,7 +92,7 @@ module Bemer
94
92
  return if children.empty?
95
93
 
96
94
  position = 0
97
- output = ActiveSupport::SafeBuffer.new
95
+ output = ::ActionView::OutputBuffer.new
98
96
 
99
97
  replace_parent_and_execute do
100
98
  while position < children.length
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bemer
4
- VERSION = '0.1.0'.freeze
4
+ VERSION = '0.2.0'.freeze
5
5
  end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe Bemer::Railtie do
4
+ def view_paths_for(klass)
5
+ klass.view_paths.map { |view_path| view_path.instance_variable_get(:@path) }
6
+ end
7
+
8
+ def find_initializer(name)
9
+ described_class.initializers.find { |initializer| initializer.name.eql?(name) }
10
+ end
11
+
12
+ let(:assets_path_initializer_name) { ::Rails::VERSION::MAJOR.eql?(5) ? :append_assets_path : :load_config_initializers }
13
+
14
+ describe '.assets_path_initializer' do
15
+ it { expect(described_class.assets_path_initializer).to be(assets_path_initializer_name) }
16
+ end
17
+
18
+ describe '.eager_load_namespaces' do
19
+ it { expect(described_class.config.eager_load_namespaces).to include(Bemer) if described_class.config.respond_to?(:eager_load_namespaces) }
20
+ end
21
+
22
+ describe 'view paths' do
23
+ let(:view_path) { Rails.root.join('app', 'views').to_s }
24
+ let(:bemer_view_paths) { [Bemer.path, *Bemer.paths].map(&:to_s) }
25
+ let(:mailer_view_paths) { view_paths_for(ActionMailer::Base) }
26
+ let(:controller_view_paths) { view_paths_for(ActionController::Base) }
27
+
28
+ it { expect(controller_view_paths).to start_with(*bemer_view_paths, view_path) }
29
+ it { expect(mailer_view_paths).to start_with(*bemer_view_paths, view_path) }
30
+ end
31
+
32
+ describe '.initializers' do
33
+ let(:initializer_names) { %w[bemer.helpers bemer.prepend_asset_paths bemer.assets_precompile] }
34
+
35
+ it { expect(described_class.initializers.map(&:name)).to match_array(initializer_names) }
36
+ end
37
+
38
+ describe 'bemer.helpers initializer' do
39
+ subject(:initializer) { find_initializer('bemer.helpers') }
40
+
41
+ let(:action_view) { ActionView::Base.new }
42
+
43
+ helper_methods = %i[
44
+ block_tag elem_tag bem_mix bem_mods render_component
45
+ refine_component define_templates define_component
46
+ component_pack component_asset_path component_partial_path
47
+ ]
48
+
49
+ it { expect(initializer.after).to be_nil }
50
+ it { is_expected.not_to be_belongs_to(:all) }
51
+
52
+ helper_methods.each do |helper_method|
53
+ it { expect(action_view).to be_respond_to(helper_method) }
54
+ end
55
+ end
56
+
57
+ describe 'bemer.prepend_asset_paths initializer' do
58
+ subject(:initializer) { find_initializer('bemer.prepend_asset_paths') }
59
+
60
+ let(:app) { Dummy::Application }
61
+
62
+ let(:asset_paths) do
63
+ assets_root = Rails.root.join('app', 'assets')
64
+ javascripts_path = assets_root.join('javascripts').to_s
65
+ stylesheets_path = assets_root.join('stylesheets').to_s
66
+
67
+ [Bemer.path.to_s, *Bemer.asset_paths, javascripts_path, stylesheets_path]
68
+ end
69
+
70
+ it { expect(initializer.after).to eql(assets_path_initializer_name) }
71
+ it { is_expected.to be_belongs_to(:all) }
72
+ it { expect(app.config.assets.paths).to start_with(*asset_paths) if defined?(::Sprockets) }
73
+
74
+ context 'when prepend_asset_paths is set to true' do
75
+ before { Bemer.config.prepend_asset_paths = true }
76
+
77
+ it { expect(initializer.run(app).uniq).to start_with(*asset_paths) if defined?(::Sprockets) }
78
+ it { expect(initializer.run(app)).to be_nil unless defined?(::Sprockets) }
79
+ end
80
+
81
+ context 'when prepend_asset_paths is set to false' do
82
+ before { Bemer.config.prepend_asset_paths = false }
83
+
84
+ it { expect(initializer.run(app)).to be_nil }
85
+ end
86
+ end
87
+
88
+ describe 'bemer.assets_precompile initializer' do
89
+ subject(:initializer) { find_initializer('bemer.assets_precompile') }
90
+
91
+ it { expect(initializer.after).to be :load_config_initializers }
92
+ it { is_expected.to be_belongs_to(:all) }
93
+ it { expect(Rails.application.config.assets.precompile[0].class).to be(Bemer::AssetMatcher) if ::Rails::VERSION::MAJOR < 4 && defined?(::Sprockets) }
94
+ end
95
+ end
@@ -2,26 +2,44 @@
2
2
 
3
3
  require_relative 'boot'
4
4
 
5
- # Pick the frameworks you want:
6
- require 'active_record/railtie'
7
5
  require 'action_controller/railtie'
8
6
  require 'action_view/railtie'
9
7
  require 'action_mailer/railtie'
10
- require 'active_job/railtie'
11
- # require "action_cable/engine"
12
- # require "rails/test_unit/railtie"
13
- # require "sprockets/railtie"
8
+
9
+ begin
10
+ require 'sprockets/railtie'
11
+ rescue LoadError # rubocop:disable Lint/HandleExceptions
12
+ end
14
13
 
15
14
  Bundler.require(*Rails.groups)
15
+
16
16
  require 'bemer'
17
17
 
18
18
  module Dummy
19
- class Application < Rails::Application
20
- # Initialize configuration defaults for originally generated Rails version.
21
- config.load_defaults 5.1
19
+ class Application < ::Rails::Application
20
+ config.cache_classes = true
21
+
22
+ # Do not eager load code on boot. This avoids loading your whole application
23
+ # just for the purpose of running a single test. If you are using a tool that
24
+ # preloads Rails for running tests, you may have to set it to true.
25
+ config.eager_load = false
26
+
27
+ # Show full error reports and disable caching.
28
+ config.consider_all_requests_local = true
29
+ config.action_controller.perform_caching = false
30
+
31
+ # Raise exceptions instead of rendering exception templates.
32
+ config.action_dispatch.show_exceptions = false
33
+
34
+ # Disable request forgery protection in test environment.
35
+ config.action_controller.allow_forgery_protection = false
36
+
37
+ # Print deprecation notices to the stderr.
38
+ config.active_support.deprecation = :stderr
22
39
 
23
- # Settings in config/environments/* take precedence over those specified here.
24
- # Application configuration should go into files in config/initializers
25
- # -- all .rb files in that directory are automatically loaded.
40
+ unless ENV['RAILS_ENABLE_TEST_LOG']
41
+ config.logger = Logger.new(nil)
42
+ config.log_level = :fatal
43
+ end
26
44
  end
27
45
  end