activejob-perform_later 1.0.1 → 1.0.2

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: 0bf0068119703052a61e0ff042f4ff652ae380d5
4
- data.tar.gz: ece4cf16091688d47ba1e33c524441b3a4c10538
3
+ metadata.gz: d508092f2ef6a4fc5bd5f60ec442ea4ee10f8975
4
+ data.tar.gz: 3486db8eba486b5f7a7102855742eda024d29d20
5
5
  SHA512:
6
- metadata.gz: e03d6dcc0804be43bdca4cbce6822da6d52520a9378f23e36f14a33ca7a85ee182910fa705d8ba44e23d370c2eb18dbec1aafa6f499f6be9d0c6af3781207c64
7
- data.tar.gz: e4c23d5af8909444f14de42ec9d83728261da6b9ce80fd53543edcbfe3bfaedc5f477d73efea29ff5add702859d651561d7b00848e93e254fac6a270e2f48115
6
+ metadata.gz: 2e60e0bca26484a94c12cbbe3f9971d96eed6d980435314db8f4224e62c35cf7be4cba799d6f091475f59408cb7a513ba3a73b4c26dd3e92007b62b49119af2b
7
+ data.tar.gz: 69dfc83edede4301f1ac69d0ba76fed5bf41c4cb43f9cd9a53b519a412bf03af325719353f3543183f20add6a80f263569bf3f0c5076fe2a19b8fcf58859d240
@@ -0,0 +1,119 @@
1
+ AllCops:
2
+ TargetRubyVersion: 2.2
3
+ # RuboCop has a bunch of cops enabled by default. This setting tells RuboCop
4
+ # to ignore them, so only the ones explicitly set in this file are enabled.
5
+ DisabledByDefault: true
6
+ Exclude:
7
+ - '**/templates/**/*'
8
+ - '**/vendor/**/*'
9
+
10
+ # Prefer &&/|| over and/or.
11
+ Style/AndOr:
12
+ Enabled: true
13
+
14
+ # Do not use braces for hash literals when they are the last argument of a
15
+ # method call.
16
+ Style/BracesAroundHashParameters:
17
+ Enabled: true
18
+
19
+ # Align `when` with `case`.
20
+ Style/CaseIndentation:
21
+ Enabled: true
22
+
23
+ # Align comments with method definitions.
24
+ Style/CommentIndentation:
25
+ Enabled: true
26
+
27
+ # No extra empty lines.
28
+ Style/EmptyLines:
29
+ Enabled: true
30
+
31
+ # In a regular class definition, no empty lines around the body.
32
+ Style/EmptyLinesAroundClassBody:
33
+ Enabled: true
34
+
35
+ # In a regular module definition, no empty lines around the body.
36
+ Style/EmptyLinesAroundModuleBody:
37
+ Enabled: true
38
+
39
+ # Use Ruby >= 1.9 syntax for hashes. Prefer { a: :b } over { :a => :b }.
40
+ Style/HashSyntax:
41
+ Enabled: true
42
+
43
+ # Method definitions after `private` or `protected` isolated calls need one
44
+ # extra level of indentation.
45
+ Style/IndentationConsistency:
46
+ Enabled: true
47
+ EnforcedStyle: rails
48
+
49
+ # Two spaces, no tabs (for indentation).
50
+ Style/IndentationWidth:
51
+ Enabled: true
52
+
53
+ Style/SpaceAfterColon:
54
+ Enabled: true
55
+
56
+ Style/SpaceAfterComma:
57
+ Enabled: true
58
+
59
+ Style/SpaceAroundEqualsInParameterDefault:
60
+ Enabled: true
61
+
62
+ Style/SpaceAroundKeyword:
63
+ Enabled: true
64
+
65
+ Style/SpaceAroundOperators:
66
+ Enabled: true
67
+
68
+ Style/SpaceBeforeFirstArg:
69
+ Enabled: true
70
+
71
+ # Defining a method with parameters needs parentheses.
72
+ Style/MethodDefParentheses:
73
+ Enabled: true
74
+
75
+ # Use `foo {}` not `foo{}`.
76
+ Style/SpaceBeforeBlockBraces:
77
+ Enabled: true
78
+
79
+ # Use `foo { bar }` not `foo {bar}`.
80
+ Style/SpaceInsideBlockBraces:
81
+ Enabled: true
82
+
83
+ # Use `{ a: 1 }` not `{a:1}`.
84
+ Style/SpaceInsideHashLiteralBraces:
85
+ Enabled: true
86
+
87
+ Style/SpaceInsideParens:
88
+ Enabled: true
89
+
90
+ # Check quotes usage according to lint rule below.
91
+ Style/StringLiterals:
92
+ Enabled: true
93
+ EnforcedStyle: double_quotes
94
+
95
+ # Detect hard tabs, no hard tabs.
96
+ Style/Tab:
97
+ Enabled: true
98
+
99
+ # Blank lines should not have any spaces.
100
+ Style/TrailingBlankLines:
101
+ Enabled: true
102
+
103
+ # No trailing whitespace.
104
+ Style/TrailingWhitespace:
105
+ Enabled: true
106
+
107
+ # Use quotes for string literals when they are enough.
108
+ Style/UnneededPercentQ:
109
+ Enabled: true
110
+
111
+ # Align `end` with the matching keyword or starting expression except for
112
+ # assignments, where it should be aligned with the LHS.
113
+ Lint/EndAlignment:
114
+ Enabled: true
115
+ AlignWith: variable
116
+
117
+ # Use my_method(my_arg) not my_method( my_arg ) or my_method my_arg.
118
+ Lint/RequireParentheses:
119
+ Enabled: true
data/README.md CHANGED
@@ -1,3 +1,6 @@
1
+ [![Build Status](https://travis-ci.org/cristianbica/activejob-perform_later.svg?branch=master)](https://travis-ci.org/cristianbica/activejob-perform_later)
2
+
3
+
1
4
  # Activejob::PerformLater
2
5
 
3
6
  Make any method perfomed later.
@@ -1,6 +1,6 @@
1
1
  require "activejob/perform_later/version"
2
- require 'active_support'
3
- require 'active_job'
2
+ require "active_support"
3
+ require "active_job"
4
4
 
5
5
  module Activejob
6
6
  module PerformLater
@@ -9,7 +9,10 @@ module Activejob
9
9
  autoload :Job
10
10
  autoload :Proxy
11
11
  autoload :Mixin
12
+ autoload :Util
12
13
  end
13
14
  end
14
15
 
15
16
  Object.send(:include, Activejob::PerformLater::Mixin)
17
+ Object.send(:extend, Activejob::PerformLater::Mixin)
18
+ Module.send(:extend, Activejob::PerformLater::Mixin)
@@ -1,34 +1,14 @@
1
1
  module Activejob
2
2
  module PerformLater
3
3
  module Mixin
4
- extend ActiveSupport::Concern
5
-
6
- module ClassMethods
7
- def perform_later(*args)
8
- if args[0].is_a?(Symbol)
9
- raise ArgumentError, "#{self} does not have a `#{args[0]}` class method" unless respond_to?(args[0])
10
- method = args[0]
11
- options = args[1]||{}
12
-
13
- aliased_method, punctuation = method.to_s.sub(/([?!=])$/, ''), $1
14
- now_method, later_method = "#{aliased_method}_now#{punctuation}", "#{aliased_method}_later#{punctuation}"
15
-
16
- singleton_class.send(:define_method, later_method) do |*args|
17
- Job.new(self.name, now_method, args).enqueue options
18
- end
19
-
20
- singleton_class.send(:alias_method, now_method, method)
21
- singleton_class.send(:alias_method, method, later_method)
22
- else
23
- options = args[0]||{}
24
- Proxy.new(self.name, options)
25
- end
4
+ def perform_later(*method_names)
5
+ options = method_names.extract_options!
6
+ if method_names.empty?
7
+ Activejob::PerformLater::Util.proxy_calls(self, options)
8
+ else
9
+ Activejob::PerformLater::Util.perform_methods_later(self, method_names, options)
26
10
  end
27
11
  end
28
-
29
- def perform_later(options={})
30
- Proxy.new(self, options)
31
- end
32
12
  end
33
13
  end
34
14
  end
@@ -2,7 +2,7 @@ module Activejob
2
2
  module PerformLater
3
3
  class Proxy < BasicObject
4
4
  def initialize(target, options)
5
- @target = target
5
+ @target = Util.proxiable_object(target)
6
6
  @options = options
7
7
  end
8
8
 
@@ -0,0 +1,33 @@
1
+ module Activejob
2
+ module PerformLater
3
+ module Util
4
+ extend self
5
+
6
+ def proxy_calls(obj, options)
7
+ Proxy.new(obj, options)
8
+ end
9
+
10
+ def perform_methods_later(obj, method_names, options)
11
+ raise ArgumentError, "You can only declare class methods as delayed" unless obj.class == Class || obj.class == Module
12
+ method_names.each do |method_name|
13
+ perform_method_later(obj, method_name, options)
14
+ end
15
+ end
16
+
17
+ def perform_method_later(obj, method_name, options)
18
+ raise ArgumentError, "#{self} must respond to `#{method_name}`" unless obj.respond_to?(method_name)
19
+ aliased_method, punctuation = method_name.to_s.sub(/([?!=])$/, ""), $1
20
+ now_method, later_method = "#{aliased_method}_now#{punctuation}", "#{aliased_method}_later#{punctuation}"
21
+ obj.singleton_class.send(:define_method, later_method) do |*args|
22
+ Job.new(::Activejob::PerformLater::Util.proxiable_object(obj), now_method, args).enqueue options
23
+ end
24
+ obj.singleton_class.send(:alias_method, now_method, method_name)
25
+ obj.singleton_class.send(:alias_method, method_name, later_method)
26
+ end
27
+
28
+ def proxiable_object(obj)
29
+ obj.class == ::Class || obj.class == ::Module ? obj.name : obj
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,5 +1,5 @@
1
1
  module Activejob
2
2
  module PerformLater
3
- VERSION = "1.0.1"
3
+ VERSION = "1.0.2"
4
4
  end
5
5
  end
@@ -1,7 +1,7 @@
1
- require 'helper'
2
- require 'classes/test_class'
1
+ require "helper"
2
+ require "support/test_class"
3
3
 
4
- class ClassMethodsAlwaysTest < ActiveSupport::TestCase
4
+ class ClassesClassMethodsAlwaysTest < ActiveSupport::TestCase
5
5
  include ActiveJob::TestHelper
6
6
 
7
7
  def test_creates_later_and_now_methods
@@ -29,7 +29,7 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
29
29
  end
30
30
 
31
31
  def test_enqueues_the_job_on_a_queue
32
- assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestClass", "three_now", [1, 2]], queue: 'non_default') do
32
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestClass", "three_now", [1, 2]], queue: "non_default") do
33
33
  TestClass.three(1, 2)
34
34
  end
35
35
  end
@@ -49,7 +49,7 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
49
49
  end
50
50
 
51
51
  def test_performs_the_job_on_a_queue
52
- assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestClass", "three_now", [1, 2]], queue: 'non_default') do
52
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestClass", "three_now", [1, 2]], queue: "non_default") do
53
53
  TestClass.three(1, 2)
54
54
  end
55
55
  end
@@ -1,7 +1,7 @@
1
- require 'helper'
2
- require 'classes/test_class'
1
+ require "helper"
2
+ require "support/test_class"
3
3
 
4
- class ClassMethodsAlwaysTest < ActiveSupport::TestCase
4
+ class ClassesClassMethodsOnDemandTest < ActiveSupport::TestCase
5
5
  include ActiveJob::TestHelper
6
6
 
7
7
  def test_enqueues_the_job
@@ -25,12 +25,11 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
25
25
  end
26
26
 
27
27
  def test_enqueues_the_job_on_a_queue
28
- assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestClass", "five", [1, 2]], queue: 'non_default') do
29
- TestClass.perform_later(queue: "non_default").five(1, 2)
28
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestClass", "five", [1, 2]], queue: "non_default") do
29
+ TestClass.perform_later(queue: "non_default").five(1, 2)
30
30
  end
31
31
  end
32
32
 
33
-
34
33
  def test_performs_the_job
35
34
  assert_performed_jobs 1 do
36
35
  TestClass.perform_later.five
@@ -52,8 +51,8 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
52
51
  end
53
52
 
54
53
  def test_performs_the_job_on_a_queue
55
- assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestClass", "five", [1, 2]], queue: 'non_default') do
56
- TestClass.perform_later(queue: "non_default").five(1, 2)
54
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestClass", "five", [1, 2]], queue: "non_default") do
55
+ TestClass.perform_later(queue: "non_default").five(1, 2)
57
56
  end
58
57
  end
59
58
  end
@@ -1,7 +1,7 @@
1
- require 'helper'
2
- require 'classes/test_class'
1
+ require "helper"
2
+ require "support/test_class"
3
3
 
4
- class ClassMethodsAlwaysTest < ActiveSupport::TestCase
4
+ class ClassesInstanceMethodsOnDemandTest < ActiveSupport::TestCase
5
5
  include ActiveJob::TestHelper
6
6
 
7
7
  def test_enqueues_the_job
@@ -11,7 +11,7 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
11
11
  end
12
12
 
13
13
  def test_enqueues_the_job_with_arguments
14
- assert_enqueued_with(job: Activejob::PerformLater::Job, args: [{"_aj_globalid"=>"gid://ajpl/TestClass/0"}, 'six', [1, 2]]) do
14
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: [TestClass.new, "six", [1, 2]]) do
15
15
  TestClass.new.perform_later.six(1, 2)
16
16
  end
17
17
  end
@@ -25,12 +25,11 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
25
25
  end
26
26
 
27
27
  def test_enqueues_the_job_on_a_queue
28
- assert_enqueued_with(job: Activejob::PerformLater::Job, queue: 'non_default') do
29
- TestClass.new.perform_later(queue: "non_default").six
28
+ assert_enqueued_with(job: Activejob::PerformLater::Job, queue: "non_default") do
29
+ TestClass.new.perform_later(queue: "non_default").six
30
30
  end
31
31
  end
32
32
 
33
-
34
33
  def test_performs_the_job
35
34
  assert_performed_jobs 1 do
36
35
  TestClass.new.perform_later.six
@@ -38,7 +37,7 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
38
37
  end
39
38
 
40
39
  def test_performs_the_job_with_arguments
41
- assert_performed_with(job: Activejob::PerformLater::Job, args: [{"_aj_globalid"=>"gid://ajpl/TestClass/0"}, 'six', [1, 2]]) do
40
+ assert_performed_with(job: Activejob::PerformLater::Job, args: [TestClass.new, "six", [1, 2]]) do
42
41
  TestClass.new.perform_later.six(1, 2)
43
42
  end
44
43
  end
@@ -52,9 +51,8 @@ class ClassMethodsAlwaysTest < ActiveSupport::TestCase
52
51
  end
53
52
 
54
53
  def test_performs_the_job_on_a_queue
55
- assert_performed_with(job: Activejob::PerformLater::Job, queue: 'non_default') do
54
+ assert_performed_with(job: Activejob::PerformLater::Job, queue: "non_default") do
56
55
  TestClass.new.perform_later(queue: "non_default").six
57
56
  end
58
57
  end
59
-
60
58
  end
@@ -0,0 +1,56 @@
1
+ require "helper"
2
+ require "support/test_module"
3
+
4
+ class ModulesAlwaysTest < ActiveSupport::TestCase
5
+ include ActiveJob::TestHelper
6
+
7
+ def test_creates_later_and_now_methods
8
+ assert_respond_to TestModule, :one_later
9
+ assert_respond_to TestModule, :one_now
10
+ end
11
+
12
+ def test_creates_later_and_now_methods_with_punctuation
13
+ assert_respond_to TestModule, :four_later?
14
+ assert_respond_to TestModule, :four_now?
15
+ end
16
+
17
+ def test_enqueues_the_job
18
+ assert_enqueued_jobs 1 do
19
+ TestModule.one
20
+ end
21
+ end
22
+
23
+ def test_enqueues_the_job_with_delay
24
+ travel_to Time.now do
25
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestModule", "two_now", [1, 2]], at: 60.seconds.from_now.to_f) do
26
+ TestModule.two(1, 2)
27
+ end
28
+ end
29
+ end
30
+
31
+ def test_enqueues_the_job_on_a_queue
32
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestModule", "three_now", [1, 2]], queue: "non_default") do
33
+ TestModule.three(1, 2)
34
+ end
35
+ end
36
+
37
+ def test_performs_the_job
38
+ assert_performed_jobs 1 do
39
+ TestModule.one
40
+ end
41
+ end
42
+
43
+ def test_performs_the_job_with_delay
44
+ travel_to Time.now do
45
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestModule", "two_now", [1, 2]], at: 60.seconds.from_now.to_f) do
46
+ TestModule.two(1, 2)
47
+ end
48
+ end
49
+ end
50
+
51
+ def test_performs_the_job_on_a_queue
52
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestModule", "three_now", [1, 2]], queue: "non_default") do
53
+ TestModule.three(1, 2)
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,58 @@
1
+ require "helper"
2
+ require "support/test_module"
3
+
4
+ class ModulesOnDemandTest < ActiveSupport::TestCase
5
+ include ActiveJob::TestHelper
6
+
7
+ def test_enqueues_the_job
8
+ assert_enqueued_jobs 1 do
9
+ TestModule.perform_later.five
10
+ end
11
+ end
12
+
13
+ def test_enqueues_the_job_with_arguments
14
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestModule", "five", [1, 2]]) do
15
+ TestModule.perform_later.five(1, 2)
16
+ end
17
+ end
18
+
19
+ def test_enqueues_the_job_with_delay
20
+ travel_to Time.now do
21
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestModule", "five", [1, 2]], at: 60.seconds.from_now.to_f) do
22
+ TestModule.perform_later(wait: 60.seconds).five(1, 2)
23
+ end
24
+ end
25
+ end
26
+
27
+ def test_enqueues_the_job_on_a_queue
28
+ assert_enqueued_with(job: Activejob::PerformLater::Job, args: ["TestModule", "five", [1, 2]], queue: "non_default") do
29
+ TestModule.perform_later(queue: "non_default").five(1, 2)
30
+ end
31
+ end
32
+
33
+ def test_performs_the_job
34
+ assert_performed_jobs 1 do
35
+ TestModule.perform_later.five
36
+ end
37
+ end
38
+
39
+ def test_performs_the_job_with_arguments
40
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestModule", "five", [1, 2]]) do
41
+ TestModule.perform_later.five(1, 2)
42
+ end
43
+ end
44
+
45
+ def test_performs_the_job_with_delay
46
+ travel_to Time.now do
47
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestModule", "five", [1, 2]], at: 60.seconds.from_now.to_f) do
48
+ TestModule.perform_later(wait: 60.seconds).five(1, 2)
49
+ end
50
+ end
51
+ end
52
+
53
+ def test_performs_the_job_on_a_queue
54
+ assert_performed_with(job: Activejob::PerformLater::Job, args: ["TestModule", "five", [1, 2]], queue: "non_default") do
55
+ TestModule.perform_later(queue: "non_default").five(1, 2)
56
+ end
57
+ end
58
+ end
@@ -19,7 +19,7 @@ class TestClass
19
19
 
20
20
  def self.three(*)
21
21
  end
22
- perform_later :three, queue: 'non_default'
22
+ perform_later :three, queue: "non_default"
23
23
 
24
24
  def self.four?(*)
25
25
  end
@@ -0,0 +1,20 @@
1
+ module TestModule
2
+ def self.one(*)
3
+ end
4
+ perform_later :one
5
+
6
+ def self.two(*)
7
+ end
8
+ perform_later :two, wait: 60
9
+
10
+ def self.three(*)
11
+ end
12
+ perform_later :three, queue: "non_default"
13
+
14
+ def self.four?(*)
15
+ end
16
+ perform_later :four?
17
+
18
+ def self.five(*)
19
+ end
20
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activejob-perform_later
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cristian Bica
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-02 00:00:00.000000000 Z
11
+ date: 2016-12-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activejob
@@ -60,6 +60,7 @@ extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
62
  - ".gitignore"
63
+ - ".rubocop.yml"
63
64
  - ".travis.yml"
64
65
  - Gemfile
65
66
  - LICENSE.txt
@@ -70,12 +71,16 @@ files:
70
71
  - lib/activejob/perform_later/job.rb
71
72
  - lib/activejob/perform_later/mixin.rb
72
73
  - lib/activejob/perform_later/proxy.rb
74
+ - lib/activejob/perform_later/util.rb
73
75
  - lib/activejob/perform_later/version.rb
74
- - test/cases/class_methods_always_test.rb
75
- - test/cases/class_methods_on_demand_test.rb
76
- - test/cases/instance_methods_on_demand_test.rb
77
- - test/classes/test_class.rb
76
+ - test/cases/classes/class_methods_always_test.rb
77
+ - test/cases/classes/class_methods_on_demand_test.rb
78
+ - test/cases/classes/instance_methods_on_demand_test.rb
79
+ - test/cases/modules/always_test.rb
80
+ - test/cases/modules/on_demand_test.rb
78
81
  - test/helper.rb
82
+ - test/support/test_class.rb
83
+ - test/support/test_module.rb
79
84
  homepage: ''
80
85
  licenses:
81
86
  - MIT
@@ -96,14 +101,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
96
101
  version: '0'
97
102
  requirements: []
98
103
  rubyforge_project:
99
- rubygems_version: 2.4.5
104
+ rubygems_version: 2.5.1
100
105
  signing_key:
101
106
  specification_version: 4
102
107
  summary: Make any method perfomed later.
103
108
  test_files:
104
- - test/cases/class_methods_always_test.rb
105
- - test/cases/class_methods_on_demand_test.rb
106
- - test/cases/instance_methods_on_demand_test.rb
107
- - test/classes/test_class.rb
109
+ - test/cases/classes/class_methods_always_test.rb
110
+ - test/cases/classes/class_methods_on_demand_test.rb
111
+ - test/cases/classes/instance_methods_on_demand_test.rb
112
+ - test/cases/modules/always_test.rb
113
+ - test/cases/modules/on_demand_test.rb
108
114
  - test/helper.rb
109
- has_rdoc:
115
+ - test/support/test_class.rb
116
+ - test/support/test_module.rb