moto 0.0.45 → 0.0.51

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
  SHA1:
3
- metadata.gz: 570e7afde242d9a25456c73cf5775608e9c0d7b2
4
- data.tar.gz: 2b98124618ef7ba8c535daa0d6108258f67c7d89
3
+ metadata.gz: a076c0650fb6ef90310fa2e9ef0f36665c02d7d1
4
+ data.tar.gz: f1582e2cb2ff664724a89636b26e3850ef03049e
5
5
  SHA512:
6
- metadata.gz: bb1b7e3f51d037c34b682a11d07e1aa28d670e9ba642f0df105f74794f75b2bba18838dc2ffa9ac17f23dd158360bbeb53a1bf706540105268d138b193c41702
7
- data.tar.gz: 1a3ee13460b66f2be096c9856e2c891fa21b5bdf7d1d821295c4841b92649bf859df11d2beb54a39ae993f93442e817296af823fc580bdf87e9b32853ca25296
6
+ metadata.gz: a889e5ad07bbb420b3d05f4ad4b1edf357f29c189190f05735de1f0e6d779bbd669615c66cd6da7c57d668b58ff2bca68c3c7f63a2fb513b019283fa44c266b3
7
+ data.tar.gz: 77e51385da1ae1a87dbafcfdf9e63d81ad134e7790d4456d1f2abc09a312e5ae5fbaf590326586d8c630b2aeabdb108e688b52f3dd0c28010c400425a85dfa98
data/lib/cli.rb CHANGED
@@ -32,6 +32,7 @@ require_relative './exceptions/moto'
32
32
  require_relative './exceptions/test_skipped'
33
33
  require_relative './exceptions/test_forced_failure'
34
34
  require_relative './exceptions/test_forced_passed'
35
+ require_relative 'config'
35
36
 
36
37
  module Moto
37
38
 
@@ -74,9 +75,9 @@ module Moto
74
75
  initializer.init
75
76
  end
76
77
 
77
- test_reporter = Moto::Reporting::TestReporter.new(argv[:listeners], argv[:config], argv[:name])
78
+ test_reporter = Moto::Reporting::TestReporter.new(argv[:listeners], argv[:name])
78
79
 
79
- runner = Moto::Runner::TestRunner.new(test_paths_absolute, argv[:environments], argv[:config], test_reporter)
80
+ runner = Moto::Runner::TestRunner.new(test_paths_absolute, argv[:environments], test_reporter)
80
81
  runner.run
81
82
  end
82
83
 
@@ -24,6 +24,13 @@ module Moto
24
24
  # abstract
25
25
  end
26
26
 
27
+ # Retrieves specified key's value for current test environment
28
+ # @param [String] key Key which's value will be returned from merged config files
29
+ # @return [String] key's value
30
+ def const(key)
31
+ Moto::Lib::Config.environment_const(key)
32
+ end
33
+
27
34
  end
28
35
  end
29
36
  end
@@ -1,4 +1,5 @@
1
1
  require 'capybara'
2
+ require_relative '../../lib/config'
2
3
 
3
4
  module Moto
4
5
  module Clients
@@ -13,15 +14,22 @@ module Moto
13
14
 
14
15
  def init
15
16
  register_grid_driver
17
+ register_chrome_driver
16
18
  end
17
19
 
20
+ # @return [Hash] Config section for Capybara driver.
21
+ def config
22
+ Moto::Lib::Config.moto[:clients][:website][:capybara]
23
+ end
24
+ private :config
25
+
18
26
  def start_run
19
27
  # TODO: make session driver configurable
20
- if context.moto_app_config_rb[:moto][:clients][:website][:capybara][:default_selector]
21
- Capybara.default_selector = context.moto_app_config_rb[:moto][:clients][:website][:capybara][:default_selector]
28
+ if config[:default_selector]
29
+ Capybara.default_selector = config[:default_selector]
22
30
  end
23
31
 
24
- Thread.current['capybara_session'] = Capybara::Session.new(context.moto_app_config_rb[:moto][:clients][:website][:capybara][:default_driver])
32
+ Thread.current['capybara_session'] = Capybara::Session.new(config[:default_driver])
25
33
  @pages = {}
26
34
  end
27
35
 
@@ -30,7 +38,6 @@ module Moto
30
38
  end
31
39
 
32
40
  def start_test(test)
33
- # @context.current_test.logger.info("Hi mom, I'm opening some pages!")
34
41
  Thread.current['capybara_session'].reset_session!
35
42
  end
36
43
 
@@ -50,10 +57,8 @@ module Moto
50
57
  @pages[page_class_name]
51
58
  end
52
59
 
53
- private
54
-
55
60
  def register_grid_driver
56
- grid_config = context.moto_app_config_rb[:moto][:clients][:website][:capybara][:grid]
61
+ grid_config = config[:grid]
57
62
  return if grid_config.nil?
58
63
  if grid_config[:capabilities].nil?
59
64
  capabilities = Selenium::WebDriver::Remote::Capabilities.firefox
@@ -67,6 +72,16 @@ module Moto
67
72
  :desired_capabilities => capabilities)
68
73
  end
69
74
  end
75
+ private :register_grid_driver
76
+
77
+ def register_chrome_driver
78
+ Capybara.register_driver :chrome do |app|
79
+ client = Selenium::WebDriver::Remote::Http::Default.new
80
+ Capybara::Selenium::Driver.new(app, browser: :chrome, http_client: client)
81
+ end
82
+ end
83
+ private :register_chrome_driver
84
+
70
85
 
71
86
  def handle_test_exception(test, exception)
72
87
  #Thread.current['capybara_session'].save_screenshot "#{test.dir}/#{test.filename}_#{Time.new.strftime('%Y%m%d_%H%M%S')}.png"
@@ -0,0 +1,53 @@
1
+ module Moto
2
+ module Lib
3
+ class Config
4
+
5
+ def self.load_configuration
6
+ if File.exists? "#{MotoApp::DIR}/config/moto.rb"
7
+ @@moto = eval(File.read("#{MotoApp::DIR}/config/moto.rb"))
8
+
9
+ @@env_consts = {}
10
+ Dir.glob('config/*.yml').each do |f|
11
+ @@env_consts.deep_merge! YAML.load_file(f)
12
+ end
13
+
14
+ else
15
+ raise "Config file (config/moto.rb) not present.\nDoes current working directory contain Moto application?"
16
+ end
17
+ end
18
+
19
+ # @return [Hash] Hash representing data from MotoApp/config/moto.rb file
20
+ def self.moto
21
+ @@moto
22
+ end
23
+
24
+ #
25
+ # @param [String] key Name of the key which's value is to be retrieved
26
+ # @return [String] Value of the key
27
+ def self.environment_const(key)
28
+ key = key.to_s
29
+ env = Thread.current['test_environment']
30
+
31
+ if env != :__default
32
+ key = "#{env.to_s}.#{key}"
33
+ end
34
+
35
+ code = if key.include? '.'
36
+ "@@env_consts#{key.split('.').map { |a| "['#{a}']" }.join('')}"
37
+ else
38
+ "@@env_consts['#{key}']"
39
+ end
40
+
41
+ begin
42
+ value = eval code
43
+ raise if value.nil?
44
+ rescue
45
+ raise "There is no const defined for key: #{key}. Environment: #{ (env == :__default) ? '<none>' : env }"
46
+ end
47
+
48
+ value
49
+ end
50
+
51
+ end
52
+ end
53
+ end
@@ -1,17 +1,17 @@
1
- module Moto
2
- module EmptyListener
3
-
4
- def start_run
5
- end
6
-
7
- def end_run
8
- end
9
-
10
- def start_test(test)
11
- end
12
-
13
- def end_test(test)
14
- end
15
-
16
- end
1
+ module Moto
2
+ module EmptyListener
3
+
4
+ def start_run
5
+ end
6
+
7
+ def end_run
8
+ end
9
+
10
+ def start_test(test)
11
+ end
12
+
13
+ def end_test(test)
14
+ end
15
+
16
+ end
17
17
  end
@@ -1,7 +1,7 @@
1
- module Moto
2
- module Exceptions
3
- class MotoException < RuntimeError
4
-
5
- end
6
- end
1
+ module Moto
2
+ module Exceptions
3
+ class MotoException < RuntimeError
4
+
5
+ end
6
+ end
7
7
  end
@@ -1,7 +1,7 @@
1
- module Moto
2
- module Exceptions
3
- class TestForcedFailure < MotoException
4
-
5
- end
6
- end
1
+ module Moto
2
+ module Exceptions
3
+ class TestForcedFailure < MotoException
4
+
5
+ end
6
+ end
7
7
  end
@@ -1,7 +1,7 @@
1
- module Moto
2
- module Exceptions
3
- class TestForcedPassed < MotoException
4
-
5
- end
6
- end
1
+ module Moto
2
+ module Exceptions
3
+ class TestForcedPassed < MotoException
4
+
5
+ end
6
+ end
7
7
  end
@@ -1,7 +1,7 @@
1
- module Moto
2
- module Exceptions
3
- class TestSkipped < MotoException
4
-
5
- end
6
- end
1
+ module Moto
2
+ module Exceptions
3
+ class TestSkipped < MotoException
4
+
5
+ end
6
+ end
7
7
  end
@@ -10,11 +10,6 @@ module Moto
10
10
  @context.logger
11
11
  end
12
12
 
13
- # Read const value specific for current environment from `config/const.yml` file
14
- def const(key)
15
- @context.const(key)
16
- end
17
-
18
13
  # Access currently executed test
19
14
  def test
20
15
  @context.test
@@ -24,5 +24,12 @@ module Moto
24
24
  raise "Invalid state: page #{self.class.name} is not loaded." unless loaded?
25
25
  end
26
26
 
27
+ # Retrieves specified key's value for current test environment
28
+ # @param [String] key Key which's value will be returned from merged config files
29
+ # @return [String] key's value
30
+ def const(key)
31
+ Moto::Lib::Config.environment_const(key)
32
+ end
33
+
27
34
  end
28
35
  end
@@ -3,7 +3,7 @@ require 'yaml'
3
3
 
4
4
  require_relative '../lib/cli'
5
5
  require_relative '../lib/app_generator'
6
-
6
+ require_relative '../lib/config'
7
7
  module Moto
8
8
 
9
9
  class Parser
@@ -29,12 +29,7 @@ module Moto
29
29
 
30
30
  def self.run_parse(argv)
31
31
 
32
- # TODO: fix this dumb verification of current working directory.
33
- if !File.exists? "#{MotoApp::DIR}/config/moto.rb"
34
- msg = "Config file (config/moto.rb) not present.\n"
35
- msg << 'Does current working directory contain Moto application?'
36
- raise msg
37
- end
32
+ Moto::Lib::Config.load_configuration
38
33
 
39
34
  require 'bundler/setup'
40
35
  Bundler.require
@@ -43,29 +38,24 @@ module Moto
43
38
  options = {}
44
39
  options[:listeners] = []
45
40
  # TODO Mandatory env var in app config
46
- options[:config] = eval(File.read("#{MotoApp::DIR}/config/moto.rb"))
47
41
  options[:environments] = []
48
42
  options[:name] = ''
49
43
 
50
44
  # Parse arguments
51
- # TODO eval ?
52
- # TODO const
53
- # TODO listeners should be consts - not strings
54
45
  OptionParser.new do |opts|
55
46
  opts.on('-t', '--tests Tests', Array) { |v| options[:tests ] = v }
56
47
  opts.on('-g', '--tags Tags', Array) { |v| options[:tags ] = v }
57
48
  opts.on('-l', '--listeners Listeners', Array) { |v| options[:listeners] = v }
58
49
  opts.on('-e', '--environments Environment', Array) { |v| options[:environments] = v }
59
- opts.on('-c', '--const Const') { |v| options[:const] = v }
60
50
  opts.on('-n', '--name Name') { |v| options[:name] = v }
61
- opts.on('-f', '--config Config') { |v| options[:config].deep_merge!( eval( File.read(v) ) ) }
51
+ # opts.on('-f', '--config Config') { |v| options[:config].deep_merge!( eval( File.read(v) ) ) }
62
52
  end.parse!
63
53
 
64
54
  if options[:name].empty?
65
55
  options[:name] = evaluate_name(options[:tags], options[:tests])
66
56
  end
67
57
 
68
- if options[ :config ][ :moto ][ :test_runner ][ :mandatory_environment ] && options[ :environments ].empty?
58
+ if Moto::Lib::Config.moto[:test_runner][:mandatory_environment] && options[:environments].empty?
69
59
  puts 'Environment is mandatory for this project.'
70
60
  exit 1
71
61
  end
@@ -5,13 +5,10 @@ module Moto
5
5
  # Base class for listeners that report results of testing 'outside' of the application.
6
6
  class Base
7
7
 
8
- attr_reader :config
9
8
  attr_reader :custom_run_name
10
9
 
11
- # @param [Hash] config
12
10
  # @param [String] custom_run_name Optional run name to be passed to listeners
13
- def initialize(config, custom_run_name = '')
14
- @config = config
11
+ def initialize(custom_run_name = '')
15
12
  @custom_run_name = custom_run_name
16
13
  end
17
14
 
@@ -6,7 +6,8 @@ module Moto
6
6
  class JunitXml < Base
7
7
 
8
8
  def end_run(run_status)
9
- path = config[:output_file]
9
+
10
+ path = Moto::Lib::Config.moto[:test_reporter][:listeners][:junit_xml][:output_file]
10
11
 
11
12
  run_status_hash = {
12
13
  errors: run_status.tests_error.length,
@@ -7,8 +7,9 @@ module Moto
7
7
  class Webui < Base
8
8
 
9
9
  def start_run
10
- # POST http://sandbox.dev:3000/api/runs/create
11
- @url = config[:url]
10
+
11
+ @url = Moto::Lib::Config.moto[:test_reporter][:listeners][:webui][:url]
12
+
12
13
  data = {
13
14
  name: custom_run_name,
14
15
  result: :running,
@@ -7,12 +7,11 @@ module Moto
7
7
  class TestReporter
8
8
  # @param [Array] listeners An array of strings, which represent qualified names of classes (listeners) that will be instantiated.
9
9
  # empty array is passed then :default_listeners will be taken from config
10
- # @param [Hash] config to be passed to listeners during creation
11
10
  # @param [String] custom_run_name Optional, to be passed to listeners during creation
12
- def initialize(listeners, config, custom_run_name)
11
+ def initialize(listeners, custom_run_name)
13
12
 
14
13
  if listeners.empty?
15
- config[:moto][:test_runner][:default_listeners].each do |listener_class_name|
14
+ config[:default_listeners].each do |listener_class_name|
16
15
  listeners << listener_class_name
17
16
  end
18
17
  else
@@ -22,7 +21,6 @@ module Moto
22
21
  end
23
22
 
24
23
  @listeners = []
25
- @config = config
26
24
  @custom_run_name = custom_run_name
27
25
  listeners.each { |l| add_listener(l) }
28
26
  end
@@ -31,14 +29,7 @@ module Moto
31
29
  # All listeners on the list will have events reported to them.
32
30
  # @param [Moto::Listener::Base] listener class to be added
33
31
  def add_listener(listener)
34
- @listeners << listener.new(listener_config(listener), @custom_run_name)
35
- end
36
-
37
- # @return [Hash] hash containing part of the config meant for a specific listener
38
- # @param [Moto::Listener::Base] listener class for which config is to be retrieved
39
- def listener_config(listener)
40
- listener_symbol = listener.name.demodulize.underscore.to_sym
41
- @config[:moto][:listeners][listener_symbol]
32
+ @listeners << listener.new(@custom_run_name)
42
33
  end
43
34
 
44
35
  # Reports start of the whole run (set of tests) to attached listeners
@@ -78,6 +69,12 @@ module Moto
78
69
  end
79
70
  end
80
71
 
72
+ # @return [Hash] Hash with config for TestReporter
73
+ def config
74
+ Moto::Lib::Config.moto[:test_reporter]
75
+ end
76
+ private :config
77
+
81
78
  end
82
79
  end
83
80
  end
@@ -8,10 +8,9 @@ module Moto
8
8
 
9
9
  # @param [Array] test_paths_absolute
10
10
  # @param [Array] environments Array
11
- # @param [Integer] test_repeats
12
- def initialize(test_paths_absolute, environments, test_repeats)
11
+ def initialize(test_paths_absolute, environments)
13
12
  super()
14
- @test_repeats = test_repeats
13
+ @test_repeats = Moto::Lib::Config.moto[:test_runner][:test_repeats]
15
14
  @current_test_repeat = 1
16
15
  @queue = Queue.new
17
16
  @test_paths_absolute = test_paths_absolute
@@ -6,23 +6,20 @@ module Moto
6
6
  class TestRunner
7
7
 
8
8
  attr_reader :logger
9
- attr_reader :config
10
9
  attr_reader :test_reporter
11
10
 
12
- def initialize(test_paths_absolute, environments, config, test_reporter)
11
+ def initialize(test_paths_absolute, environments, test_reporter)
13
12
  @test_paths_absolute = test_paths_absolute
14
- @config = config
15
13
  @test_reporter = test_reporter
16
14
 
17
15
  # TODO: initialize logger from config (yml or just ruby code)
18
16
  @logger = Logger.new(File.open("#{MotoApp::DIR}/moto.log", File::WRONLY | File::APPEND | File::CREAT))
19
-
20
17
  @environments = environments.empty? ? environments << :__default : environments
21
18
  end
22
19
 
23
20
  def run
24
- test_provider = TestProvider.new(@test_paths_absolute, @environments, @config[:moto][:test_runner][:test_repeats])
25
- threads_max = @config[:moto][:test_runner][:thread_count] || 1
21
+ test_provider = TestProvider.new(@test_paths_absolute, @environments)
22
+ threads_max = Moto::Lib::Config.moto[:test_runner][:thread_count] || 1
26
23
 
27
24
  # remove log/screenshot files from previous execution
28
25
  @test_paths_absolute.each do |test_path|
@@ -38,7 +35,7 @@ module Moto
38
35
  Thread.new do
39
36
  Thread.current[:id] = index
40
37
  loop do
41
- tc = ThreadContext.new(@config, test_provider.get_test, @test_reporter)
38
+ tc = ThreadContext.new(test_provider.get_test, @test_reporter)
42
39
  tc.run
43
40
  end
44
41
  end
@@ -1,5 +1,6 @@
1
1
  require 'erb'
2
2
  require 'fileutils'
3
+ require_relative '../../lib/config'
3
4
 
4
5
  module Moto
5
6
  module Runner
@@ -8,11 +9,8 @@ module Moto
8
9
  # all resources specific for single thread will be initialized here. E.g. browser session
9
10
  attr_reader :logger
10
11
  attr_reader :test
11
- attr_reader :moto_app_config_yml
12
- attr_reader :moto_app_config_rb
13
12
 
14
- def initialize(config, test, test_reporter)
15
- @config = config
13
+ def initialize(test, test_reporter)
16
14
  @test = test
17
15
  @clients = {}
18
16
  @test.context = self
@@ -20,15 +18,7 @@ module Moto
20
18
 
21
19
  # TODO: temporary fix
22
20
  Thread.current['context'] = self
23
-
24
- # TODO: temporary fix (Configs rework incoming)
25
- @moto_app_config_yml = {}
26
- Dir.glob('config/*.yml').each do |f|
27
- @moto_app_config_yml.deep_merge! YAML.load_file(f)
28
- end
29
-
30
- # TODO: temporary fix (Configs rework incoming)
31
- @moto_app_config_rb = eval(File.read("#{MotoApp::DIR}/config/moto.rb"))
21
+ Thread.current['test_environment'] = @test.env
32
22
  end
33
23
 
34
24
  def client(name)
@@ -69,26 +59,10 @@ module Moto
69
59
  end
70
60
  end
71
61
 
72
- def const(key)
73
- key = key.to_s
74
- key = "#{@test.env.to_s}.#{key}" if @test.env != :__default
75
- code = if key.include? '.'
76
- "@moto_app_config_yml#{key.split('.').map { |a| "['#{a}']" }.join('')}"
77
- else
78
- "@moto_app_config_yml['#{key}']"
79
- end
80
- begin
81
- v = eval code
82
- raise if v.nil?
83
- rescue
84
- raise "There is no const defined for key: #{key}. Environment: #{ (@test.env == :__default) ? '<none>' : @test.env }"
85
- end
86
- v
87
- end
88
-
62
+ #
89
63
  def run
90
- max_attempts = @config[:moto][:thread_context][:max_attempts] || 1
91
- sleep_time = @config[:moto][:thread_context][:sleep_before_attempt] || 0
64
+ max_attempts = config[:test_attempt_max] || 1
65
+ sleep_time = config[:test_attempt_sleep] || 0
92
66
 
93
67
  log_directory = File.dirname(@test.log_path)
94
68
  if !File.directory?(log_directory)
@@ -96,7 +70,7 @@ module Moto
96
70
  end
97
71
 
98
72
  @logger = Logger.new(File.open(@test.log_path, File::WRONLY | File::TRUNC | File::CREAT))
99
- @logger.level = @config[:moto][:thread_context][:log_level] || Logger::DEBUG
73
+ @logger.level = config[:test_log_level] || Logger::DEBUG
100
74
 
101
75
  # Reporting: start_test
102
76
  @test_reporter.report_start_test(@test.status)
@@ -145,6 +119,12 @@ module Moto
145
119
 
146
120
  end
147
121
 
122
+ # @return [Hash] Hash with config for ThreadContext
123
+ def config
124
+ Moto::Lib::Config.moto[:test_runner]
125
+ end
126
+ private :config
127
+
148
128
  end
149
129
  end
150
130
  end
@@ -1,27 +1,27 @@
1
- module Moto
2
- module RunnerLogging
3
-
4
-
5
- # TODO: merge it somehow with TestLogging. Parametrize logger object?
6
- def self.included(cls)
7
- def cls.method_added(name)
8
- excluded_methods = Moto::EmptyListener.instance_methods(false)
9
- excluded_methods << :new
10
- excluded_methods << :initialize
11
- # TODO: configure more excluded classes/methods
12
- return if @added
13
- @added = true # protect from recursion
14
- original_method = "original_#{name}"
15
- alias_method original_method, name
16
- define_method(name) do |*args|
17
- @context.runner.logger.debug("#{self.class.name}::#{__callee__} ENTER >>> #{args}") unless excluded_methods.include? name
18
- result = send original_method, *args
19
- @context.runner.logger.debug("#{self.class.name}::#{__callee__} LEAVE <<< #{result} ") unless excluded_methods.include? name
20
- result
21
- end
22
- @added = false
23
- end
24
-
25
- end
26
- end
1
+ module Moto
2
+ module RunnerLogging
3
+
4
+
5
+ # TODO: merge it somehow with TestLogging. Parametrize logger object?
6
+ def self.included(cls)
7
+ def cls.method_added(name)
8
+ excluded_methods = Moto::EmptyListener.instance_methods(false)
9
+ excluded_methods << :new
10
+ excluded_methods << :initialize
11
+ # TODO: configure more excluded classes/methods
12
+ return if @added
13
+ @added = true # protect from recursion
14
+ original_method = "original_#{name}"
15
+ alias_method original_method, name
16
+ define_method(name) do |*args|
17
+ @context.runner.logger.debug("#{self.class.name}::#{__callee__} ENTER >>> #{args}") unless excluded_methods.include? name
18
+ result = send original_method, *args
19
+ @context.runner.logger.debug("#{self.class.name}::#{__callee__} LEAVE <<< #{result} ") unless excluded_methods.include? name
20
+ result
21
+ end
22
+ @added = false
23
+ end
24
+
25
+ end
26
+ end
27
27
  end
@@ -166,6 +166,13 @@ module Moto
166
166
  end
167
167
  end
168
168
 
169
+ # Read a constants value from YML configuration files while taking the current execution environment into the account.
170
+ # @param [String] key Key to be searched for.
171
+ # @return [String] Value of the key or nil if not found
172
+ def const(key)
173
+ Moto::Lib::Config.environment_const(key)
174
+ end
175
+
169
176
  end
170
177
  end
171
178
  end
@@ -1,3 +1,3 @@
1
1
  module Moto
2
- VERSION = '0.0.45'
2
+ VERSION = '0.0.51'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.45
4
+ version: 0.0.51
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bartek Wilczek
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-04-28 00:00:00.000000000 Z
14
+ date: 2016-04-29 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -88,6 +88,7 @@ files:
88
88
  - lib/cli.rb
89
89
  - lib/clients/base.rb
90
90
  - lib/clients/website.rb
91
+ - lib/config.rb
91
92
  - lib/empty_listener.rb
92
93
  - lib/exceptions/moto.rb
93
94
  - lib/exceptions/test_forced_failure.rb