js_rails_routes 0.7.0 → 0.7.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a386d5fc5aec380f0c1747daa37cf0f8da385881
4
- data.tar.gz: 22e8b29009a14466642bd32795c8aeab3d0a9b0b
3
+ metadata.gz: 1768a1c21e72db96adfed68e4e68cf5ba15a2ad2
4
+ data.tar.gz: cecbb2cbd58e60f4e0449dcd12b8c903d1aa65bc
5
5
  SHA512:
6
- metadata.gz: '087716b33ddff3babd4d84cbf6c70ab39bbc5d2c766bb2ae4af803ac74fcbacb2e22e0fdc035811bce993f1f281193250184d6ec7f0e37b55b302ab2cfc8713e'
7
- data.tar.gz: a75bd8bd4df03ff80cf8d5dc39c6275923b539d8805933f3f1ffa0c3111470d474db3408c3f022e72f9475f2d6d99dfcc6744aa2d888939ba15d5736b5bf8835
6
+ metadata.gz: d599a65ae0bb2396c780f13c9cfee5a9431fd8c7e4c5ff1b5d6319c0f8650ea8db8db20b504f22e67c03357181b44d5c9a9a3aefe5cc56c5009120ea691a0fde
7
+ data.tar.gz: 06c1288cbf4107240254dbef471fca09b1d81a60301cf6c0a5a2b6ccb5a07eecdf3d731ab3628b3c265c930b623aefc951e887f71b2b936ccc0d410e784de272
data/.rubocop.yml CHANGED
@@ -1,3 +1,6 @@
1
+ require:
2
+ - rubocop-rspec
3
+
1
4
  AllCops:
2
5
  TargetRubyVersion: 2.3
3
6
 
@@ -10,3 +13,33 @@ Metrics/BlockLength:
10
13
 
11
14
  Style/Documentation:
12
15
  Enabled: false
16
+
17
+ Layout/MultilineMethodCallIndentation:
18
+ Exclude:
19
+ - 'spec/**/*'
20
+
21
+ RSpec/ExampleLength:
22
+ Enabled: false
23
+
24
+ RSpec/MultipleExpectations:
25
+ Enabled: false
26
+
27
+ RSpec/NamedSubject:
28
+ Enabled: false
29
+
30
+ RSpec/VerifiedDoubles:
31
+ Enabled: false
32
+
33
+ RSpec/NestedGroups:
34
+ Max: 4
35
+
36
+ RSpec/ContextWording:
37
+ Prefixes:
38
+ - when
39
+ - with
40
+ - without
41
+ - if
42
+ - and
43
+
44
+ RSpec/FilePath:
45
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -6,6 +6,9 @@ This change log adheres to [keepachangelog.com](http://keepachangelog.com).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.7.1] - 2018-07-26
10
+ - Refactor whole code base
11
+
9
12
  ## [0.7.0] - 2018-07-11
10
13
  ### Added
11
14
  - Support `camelize` option
@@ -51,7 +54,8 @@ This change log adheres to [keepachangelog.com](http://keepachangelog.com).
51
54
  ### Added
52
55
  - Implement "js:rails:routes" task
53
56
 
54
- [Unreleased]: https://github.com/yuku-t/js_rails_routes/compare/v0.7.0...HEAD
57
+ [Unreleased]: https://github.com/yuku-t/js_rails_routes/compare/v0.7.1...HEAD
58
+ [0.7.1]: https://github.com/yuku-t/js_rails_routes/compare/v0.7.0...v0.7.1
55
59
  [0.7.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.6.0...v0.7.0
56
60
  [0.6.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.5.0...v0.6.0
57
61
  [0.5.0]: https://github.com/yuku-t/js_rails_routes/compare/v0.4.0...v0.5.0
data/Gemfile CHANGED
@@ -2,3 +2,5 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
  gemspec
5
+
6
+ gem 'pry'
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # rake js:routes
2
2
 
3
3
  [![Gem](https://img.shields.io/gem/v/js_rails_routes.svg?maxAge=2592000)](https://rubygems.org/gems/js_rails_routes)
4
- [![Build Status](https://travis-ci.org/yuku-t/js_rails_routes.svg?branch=master)](https://travis-ci.org/yuku/js_rails_routes)
5
- [![Code Climate](https://codeclimate.com/github/yuku-t/js_rails_routes/badges/gpa.svg)](https://codeclimate.com/github/yuku/js_rails_routes)
6
- [![Test Coverage](https://codeclimate.com/github/yuku-t/js_rails_routes/badges/coverage.svg)](https://codeclimate.com/github/yuku/js_rails_routes/coverage)
7
- [![license](https://img.shields.io/github/license/yuku-t/js_rails_routes.svg?maxAge=2592000)](https://github.com/yuku/js_rails_routes/blob/master/LICENSE)
4
+ [![Build Status](https://travis-ci.org/yuku/js_rails_routes.svg?branch=master)](https://travis-ci.org/yuku/js_rails_routes)
5
+ [![Code Climate](https://codeclimate.com/github/yuku/js_rails_routes/badges/gpa.svg)](https://codeclimate.com/github/yuku/js_rails_routes)
6
+ [![Test Coverage](https://codeclimate.com/github/yuku/js_rails_routes/badges/coverage.svg)](https://codeclimate.com/github/yuku/js_rails_routes/coverage)
7
+ [![license](https://img.shields.io/github/license/yuku/js_rails_routes.svg?maxAge=2592000)](https://github.com/yuku/js_rails_routes/blob/master/LICENSE)
8
8
  [![Analytics](https://ga-beacon.appspot.com/UA-4932407-14/js_rails_routes/readme)](https://github.com/igrigorik/ga-beacon)
9
9
 
10
10
  Generate a ES6 module that contains Rails routes.
@@ -21,6 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
22
22
  spec.add_development_dependency 'rake', '~> 12.3'
23
23
  spec.add_development_dependency 'rspec', '~> 3.7'
24
- spec.add_development_dependency 'rubocop', '~> 0.57.2'
24
+ spec.add_development_dependency 'rubocop', '~> 0.58.1'
25
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.27'
25
26
  spec.add_development_dependency 'simplecov', '~> 0.16.1'
26
27
  end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'js_rails_routes/route_set'
4
+
5
+ module JSRailsRoutes
6
+ class Builder
7
+ # @return [Array<JSRailsRoutes::RouteSet>]
8
+ attr_reader :route_set_list
9
+
10
+ # @return [JSRailsRoutes::Language::Base]
11
+ attr_reader :language
12
+
13
+ # @param language [JSRailsRoutes::Language::Base]
14
+ # @param route_set_list [Array<JSRailsRoutes::RouteSet>]
15
+ def initialize(language, route_set_list = RouteSet.correct_matching_route_set_list)
16
+ @language = language
17
+ @route_set_list = route_set_list
18
+ end
19
+
20
+ # @return [Hash{String => String}]
21
+ def build
22
+ route_set_list.each_with_object({}) do |route_set, memo|
23
+ memo[route_set.name] = language.handle_route_set(route_set)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JSRailsRoutes
4
+ class Configuration
5
+ attr_accessor :include_paths,
6
+ :exclude_paths,
7
+ :include_names,
8
+ :exclude_names,
9
+ :exclude_engines,
10
+ :output_dir,
11
+ :camelize
12
+
13
+ def initialize
14
+ self.include_paths = /.*/
15
+ self.exclude_paths = /^$/
16
+ self.include_names = /.*/
17
+ self.exclude_names = /^$/
18
+ self.exclude_engines = /^$/
19
+ self.camelize = nil
20
+ self.output_dir = Rails.root.join('app', 'assets', 'javascripts')
21
+ end
22
+
23
+ # @param env [Hash{String=>String}]
24
+ def configure_with_env_vars(env = ENV)
25
+ %w[include_paths exclude_paths include_names exclude_names exclude_engines].each do |name|
26
+ public_send("#{name}=", Regexp.new(env[name])) if env[name]
27
+ end
28
+ self.output_dir = env['output_dir'] if env['output_dir']
29
+ self.camelize = env['camelize'].presence.to_sym if env['camelize']
30
+ end
31
+ end
32
+ end
@@ -1,108 +1,40 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'singleton'
3
+ require 'js_rails_routes/route_set'
4
+ require 'js_rails_routes/builder'
4
5
 
5
6
  module JSRailsRoutes
6
7
  class Generator
7
- COMPARE_REGEXP = %r{:(.*?)(/|$)}
8
-
9
- PROCESS_FUNC = <<-JAVASCRIPT.strip_heredoc.freeze
10
- function process(route, params, keys) {
11
- var query = [];
12
- for (var param in params) if (params.hasOwnProperty(param)) {
13
- if (keys.indexOf(param) === -1) {
14
- query.push(param + "=" + encodeURIComponent(params[param]));
15
- }
16
- }
17
- return query.length ? route + "?" + query.join("&") : route;
18
- }
19
- JAVASCRIPT
20
-
21
- include Singleton
22
-
23
- attr_accessor :include_paths,
24
- :exclude_paths,
25
- :include_names,
26
- :exclude_names,
27
- :exclude_engines,
28
- :output_dir,
29
- :camelize
30
-
31
- def initialize
32
- self.include_paths = /.*/
33
- self.exclude_paths = /^$/
34
- self.include_names = /.*/
35
- self.exclude_names = /^$/
36
- self.exclude_engines = /^$/
37
- self.camelize = nil
38
-
39
- self.output_dir = Rails.root.join('app', 'assets', 'javascripts')
40
- Rails.application.reload_routes!
8
+ # @param builder [JSRailsRoutes::Builder]
9
+ # @param writable [#write]
10
+ def initialize(builder, writable: File)
11
+ @builder = builder
12
+ @writable = writable
41
13
  end
42
14
 
15
+ # @param task [String]
16
+ # @return [Hash{String => String}]
43
17
  def generate(task)
44
- routes_with_engines.each do |rails_engine_name, routes|
45
- lines = ["// Don't edit manually. `rake #{task}` generates this file.", PROCESS_FUNC]
46
- lines += routes.map do |route_name, route_path|
47
- handle_route(route_name, route_path) if match?(route_name, route_path)
48
- end.compact
49
-
50
- lines += [''] # End with new line
51
- write(rails_engine_name, lines.join("\n"))
18
+ builder.build.each do |name, body|
19
+ file_name = File.join(config.output_dir, "#{convert(name)}-routes.js")
20
+ file_body = "// Don't edit manually. `rake #{task}` generates this file.\n#{body}"
21
+ writable.write(file_name, file_body)
52
22
  end
53
23
  end
54
24
 
55
25
  private
56
26
 
57
- def match?(route_name, route_path)
58
- return false if include_paths !~ route_path
59
- return false if exclude_paths =~ route_path
60
- return false if include_names !~ route_name
61
- return false if exclude_names =~ route_name
62
- true
63
- end
64
-
65
- def handle_route(route_name, route_path)
66
- keys = []
67
- while route_path =~ COMPARE_REGEXP
68
- keys.push("'#{Regexp.last_match(1)}'")
69
- route_path.sub!(COMPARE_REGEXP, "' + params.#{Regexp.last_match(1)} + '#{Regexp.last_match(2)}")
70
- end
71
-
72
- function_name = make_function_name(route_name)
73
- "export function #{function_name}(params) { return process('#{route_path}', params, [#{keys.join(',')}]); }"
74
- end
75
-
76
- def routes_with_engines
77
- @routes_with_engines ||= [default_routes] + subengine_routes
78
- end
79
-
80
- def make_function_name(route_name)
81
- url_helper_name = route_name + '_path'
82
- camelize.nil? ? url_helper_name : url_helper_name.camelize(camelize)
83
- end
84
-
85
- def make_routes(routes)
86
- routes
87
- .select(&:name)
88
- .map { |r| [r.name, r.path.spec.to_s.split('(')[0]] }
89
- .sort_by(&:first)
90
- end
91
-
92
- def write(rails_engine_name, string)
93
- file_name = File.join(output_dir, "#{rails_engine_name.gsub('::Engine', '').downcase}-routes.js")
94
- File.write(file_name, string)
95
- end
27
+ attr_reader :writable, :builder
96
28
 
97
- def subengine_routes
98
- Rails::Engine.subclasses
99
- .reject { |klass| klass.to_s.downcase =~ exclude_engines }
100
- .map { |engine| [engine.to_s, make_routes(engine.routes.routes)] }
101
- .reject { |_, routes| routes.empty? }
29
+ # @return [JSRailsRoutes::Configuration]
30
+ def config
31
+ JSRailsRoutes.config
102
32
  end
103
33
 
104
- def default_routes
105
- ['Rails', make_routes(Rails.application.routes.routes)]
34
+ # @param engine_name [String]
35
+ # @return [String]
36
+ def convert(engine_name)
37
+ engine_name.gsub('::Engine', '').underscore.tr('/', '-')
106
38
  end
107
39
  end
108
40
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JSRailsRoutes
4
+ module Language
5
+ class Base
6
+ # @param routes [JSRailsRoutes::RouteSet]
7
+ # @return [String]
8
+ def handle_route_set(routes) # rubocop:disable Lint/UnusedMethodArgument
9
+ raise NotImplementedError
10
+ end
11
+
12
+ private
13
+
14
+ # @return [JSRailsRoutes::Configuration]
15
+ def config
16
+ JSRailsRoutes.config
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'js_rails_routes/route'
4
+ require 'js_rails_routes/language/base'
5
+
6
+ module JSRailsRoutes
7
+ module Language
8
+ class JavaScript < Base
9
+ PROCESS_FUNC = <<~JAVASCRIPT
10
+ function process(route, params, keys) {
11
+ var query = [];
12
+ for (var param in params) if (params.hasOwnProperty(param)) {
13
+ if (keys.indexOf(param) === -1) {
14
+ query.push(param + "=" + encodeURIComponent(params[param]));
15
+ }
16
+ }
17
+ return query.length ? route + "?" + query.join("&") : route;
18
+ }
19
+ JAVASCRIPT
20
+
21
+ # @note Implementation for {JSRailsRoutes::Language::Base#generate}
22
+ def handle_route_set(routes)
23
+ routes.each_with_object([PROCESS_FUNC]) do |route, lines|
24
+ lines.push(handle_route(route))
25
+ end.join("\n") + "\n"
26
+ end
27
+
28
+ # @param route [JSRailsRoutes::Route]
29
+ # @return [String]
30
+ def handle_route(route)
31
+ path, keys = parse(route.path)
32
+ name = function_name(route.name)
33
+ "export function #{name}(params) { return process('#{path}', params, [#{keys.join(',')}]); }"
34
+ end
35
+
36
+ private
37
+
38
+ # @param route_path [String]
39
+ # @return [Array<(String, Array<String>)>]
40
+ def parse(route_path)
41
+ destructured_path = route_path.dup
42
+ keys = []
43
+ while destructured_path =~ JSRailsRoutes::PARAM_REGEXP
44
+ keys.push("'#{Regexp.last_match(1)}'")
45
+ destructured_path.sub!(
46
+ JSRailsRoutes::PARAM_REGEXP,
47
+ "' + params.#{Regexp.last_match(1)} + '#{Regexp.last_match(2)}"
48
+ )
49
+ end
50
+ [destructured_path, keys]
51
+ end
52
+
53
+ # @param route_name [String]
54
+ # @return [String]
55
+ def function_name(route_name)
56
+ url_helper_name = route_name + '_path'
57
+ config.camelize.nil? ? url_helper_name : url_helper_name.camelize(config.camelize)
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module JSRailsRoutes
4
+ # Encapsulate a single routing rule
5
+ class Route
6
+ # @return [String]
7
+ attr_reader :name
8
+
9
+ # @return [String]
10
+ attr_reader :path
11
+
12
+ # @param route [ActionDispatch::Journey::Route]
13
+ def initialize(route)
14
+ @name = route.name
15
+ @path = route.path.spec.to_s.split('(').first
16
+ end
17
+
18
+ # @return [Boolean]
19
+ def match? # rubocop:disable Metrics/AbcSize
20
+ return false if config.include_paths !~ path
21
+ return false if config.exclude_paths =~ path
22
+ return false if config.include_names !~ name
23
+ return false if config.exclude_names =~ name
24
+ true
25
+ end
26
+
27
+ private
28
+
29
+ # @return [JSRailsRoutes::Configuration]
30
+ def config
31
+ JSRailsRoutes.config
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'js_rails_routes/route'
4
+
5
+ module JSRailsRoutes
6
+ # Encapsulate a set of routes
7
+ class RouteSet
8
+ include ::Enumerable
9
+
10
+ # @return [Array<JSRailsRoutes::RouteSet>]
11
+ def self.correct_matching_route_set_list
12
+ [
13
+ RouteSet.new('Rails', ::Rails.application.routes),
14
+ ::Rails::Engine.subclasses.map do |engine|
15
+ RouteSet.new(engine.name, engine.routes)
16
+ end
17
+ ].flatten.select(&:match?)
18
+ end
19
+
20
+ # @!method each
21
+ # @yield [JSRailsRoutes::Route>]
22
+ # @note Implementation for {Enumerable}
23
+ delegate :each, to: :routes
24
+
25
+ # @return [String]
26
+ attr_reader :name
27
+
28
+ # @return [Array<JSRailsRoutes::Route>]
29
+ attr_reader :routes
30
+
31
+ # @param name [String] engine name
32
+ # @param routes [ActionDispatch::Routing::RouteSet]
33
+ def initialize(name, routes)
34
+ @name = name
35
+ @routes = routes.routes
36
+ .select(&:name)
37
+ .map { |route| Route.new(route) }
38
+ .select(&:match?)
39
+ end
40
+
41
+ # @return [Boolean]
42
+ def match?
43
+ name !~ config.exclude_engines && routes.present?
44
+ end
45
+
46
+ private
47
+
48
+ # @return [JSRailsRoutes::Configuration]
49
+ def config
50
+ JSRailsRoutes.config
51
+ end
52
+ end
53
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JSRailsRoutes
4
- VERSION = '0.7.0'
4
+ VERSION = '0.7.1'
5
5
  end
@@ -1,13 +1,47 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'js_rails_routes/engine'
4
+ require 'js_rails_routes/configuration'
4
5
  require 'js_rails_routes/generator'
5
6
  require 'js_rails_routes/version'
7
+ require 'js_rails_routes/language/javascript'
6
8
 
7
9
  module JSRailsRoutes
10
+ PARAM_REGEXP = %r{:(.*?)(/|$)}
11
+
8
12
  module_function
9
13
 
14
+ # @yield [Configuration]
10
15
  def configure
11
- yield Generator.instance if block_given?
16
+ yield config if block_given?
17
+ end
18
+
19
+ # Current configuration.
20
+ #
21
+ # @return [Configuration]
22
+ def config
23
+ @config ||= Configuration.new
24
+ end
25
+
26
+ # @param task [String]
27
+ def generate_javascript(task)
28
+ builder = Builder.new(Language::JavaScript.new)
29
+ Generator.new(builder).generate(task)
30
+ end
31
+
32
+ # Execute a given block within a new sandbox. For test purpose.
33
+ #
34
+ # @yield
35
+ def sandbox
36
+ raise 'Already in a sandbox' if @sandbox
37
+ @sandbox = true
38
+ prev = @config
39
+ @config = Configuration.new
40
+ begin
41
+ yield if block_given?
42
+ ensure
43
+ @config = prev
44
+ @sandbox = nil
45
+ end
12
46
  end
13
47
  end
@@ -3,14 +3,8 @@
3
3
  desc 'Generate a ES6 module that contains Rails routes'
4
4
  namespace :js do
5
5
  task routes: :environment do |task|
6
- generator = JSRailsRoutes::Generator.instance
7
- generator.include_paths = Regexp.new(ENV['include_paths']) if ENV['include_paths']
8
- generator.exclude_paths = Regexp.new(ENV['exclude_paths']) if ENV['exclude_paths']
9
- generator.include_names = Regexp.new(ENV['include_names']) if ENV['include_names']
10
- generator.exclude_names = Regexp.new(ENV['exclude_names']) if ENV['exclude_names']
11
- generator.output_dir = ENV['output_dir'] if ENV['output_dir']
12
- generator.camelize = ENV['camelize']&.to_sym if ENV['camelize']
13
- generator.generate(task)
14
- puts "Routes saved into #{generator.output_dir}."
6
+ JSRailsRoutes.config.configure_with_env_vars
7
+ JSRailsRoutes.generate_javascript(task)
8
+ puts "Routes saved into #{JSRailsRoutes.config.output_dir}."
15
9
  end
16
10
  end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe JSRailsRoutes::Builder do
4
+ subject(:builder) { described_class.new(language, route_set_list) }
5
+
6
+ include_context 'run in a sandbox'
7
+
8
+ let(:language) { instance_double('JSRailsRoutes::Language::Base', handle_route_set: body) }
9
+ let(:body) { 'hello' }
10
+ let(:route_set_list) { [rails_route_set, engine_route_set] }
11
+
12
+ let(:rails_route_set) do
13
+ route_set = ActionDispatch::Routing::RouteSet.new.tap do |routes|
14
+ routes.draw do
15
+ get '/articles' => 'articles#index'
16
+ end
17
+ end
18
+ JSRailsRoutes::RouteSet.new('Rails', route_set)
19
+ end
20
+
21
+ let(:engine_route_set) do
22
+ route_set = ActionDispatch::Routing::RouteSet.new.tap do |routes|
23
+ routes.draw do
24
+ get '/users' => 'users#index'
25
+ end
26
+ end
27
+ JSRailsRoutes::RouteSet.new('Users::Engine', route_set)
28
+ end
29
+
30
+ describe '#build' do
31
+ subject { builder.build }
32
+
33
+ it 'returns a hash between engine name and its content' do
34
+ is_expected.to match(rails_route_set.name => body, engine_route_set.name => body)
35
+ expect(language).to have_received(:handle_route_set).twice
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,79 @@
1
+ # frozen_string_literal: true
2
+
3
+ RSpec.describe JSRailsRoutes::Configuration do
4
+ subject(:config) { described_class.new }
5
+
6
+ describe '#configure_with_env_vars' do
7
+ subject { config.configure_with_env_vars(env) }
8
+
9
+ context 'with empty env' do
10
+ let(:env) { Hash[] }
11
+
12
+ it 'does not change' do
13
+ expect { subject }.to not_change(config, :include_paths)
14
+ .and not_change(config, :exclude_paths)
15
+ .and not_change(config, :include_names)
16
+ .and not_change(config, :exclude_names)
17
+ .and not_change(config, :exclude_engines)
18
+ .and not_change(config, :output_dir)
19
+ .and not_change(config, :camelize)
20
+ end
21
+ end
22
+
23
+ context 'with include_paths env' do
24
+ let(:env) { Hash['include_paths' => 'a'] }
25
+
26
+ it 'changes #include_paths' do
27
+ expect { subject }.to change(config, :include_paths).to eq(/a/)
28
+ end
29
+ end
30
+
31
+ context 'with exclude_paths env' do
32
+ let(:env) { Hash['exclude_paths' => 'a'] }
33
+
34
+ it 'changes #exclude_paths' do
35
+ expect { subject }.to change(config, :exclude_paths).to eq(/a/)
36
+ end
37
+ end
38
+
39
+ context 'with include_names env' do
40
+ let(:env) { Hash['include_names' => 'a'] }
41
+
42
+ it 'changes #include_names' do
43
+ expect { subject }.to change(config, :include_names).to eq(/a/)
44
+ end
45
+ end
46
+
47
+ context 'with exclude_names env' do
48
+ let(:env) { Hash['exclude_names' => 'a'] }
49
+
50
+ it 'changes #exclude_names' do
51
+ expect { subject }.to change(config, :exclude_names).to eq(/a/)
52
+ end
53
+ end
54
+
55
+ context 'with exclude_engines env' do
56
+ let(:env) { Hash['exclude_engines' => 'a'] }
57
+
58
+ it 'changes #exclude_engines' do
59
+ expect { subject }.to change(config, :exclude_engines).to eq(/a/)
60
+ end
61
+ end
62
+
63
+ context 'with output_dir env' do
64
+ let(:env) { Hash['output_dir' => 'path'] }
65
+
66
+ it 'changes #output_dir' do
67
+ expect { subject }.to change(config, :output_dir).to eq 'path'
68
+ end
69
+ end
70
+
71
+ context 'with camelize env' do
72
+ let(:env) { Hash['camelize' => 'lower'] }
73
+
74
+ it 'changes #camelize' do
75
+ expect { subject }.to change(config, :camelize).to eq :lower
76
+ end
77
+ end
78
+ end
79
+ end