Skip to content

Commit 7d9836b

Browse files
committed
Use attr_extras for method objects
1 parent 06d7d4c commit 7d9836b

File tree

11 files changed

+93
-166
lines changed

11 files changed

+93
-166
lines changed

lib/super_diff.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
require "patience_diff"
1+
require "attr_extras/explicit"
22
require "diff-lcs"
3+
require "patience_diff"
34

45
require_relative "super_diff/csi"
56

lib/super_diff/diff_formatter.rb

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,27 @@
11
module SuperDiff
22
class DiffFormatter
3-
def self.call(*args)
4-
new(*args).call
5-
end
3+
extend AttrExtras.mixin
64

7-
def initialize(
8-
operations,
9-
indent_level:,
10-
add_comma: false,
11-
extra_classes: []
5+
method_object(
6+
:operations,
7+
[
8+
:indent_level!,
9+
add_comma: false,
10+
extra_classes: [],
11+
],
1212
)
13-
@operations = operations
14-
@indent_level = indent_level
15-
@add_comma = add_comma
16-
@extra_classes = extra_classes
17-
end
1813

1914
def call
2015
resolved_class.call(
2116
operations,
2217
indent_level: indent_level,
23-
add_comma: add_comma,
18+
add_comma: add_comma?,
2419
)
2520
end
2621

2722
private
2823

29-
attr_reader :operations, :indent_level, :add_comma, :extra_classes
24+
attr_query :add_comma?
3025

3126
def resolved_class
3227
(DiffFormatters::DEFAULTS + extra_classes).find do |klass|

lib/super_diff/diff_formatters/base.rb

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,28 @@ def self.applies_to?(_operations)
55
raise NotImplementedError
66
end
77

8-
def self.call(*args)
9-
new(*args).call
10-
end
8+
extend AttrExtras.mixin
119

12-
def initialize(
13-
operations,
14-
indent_level:,
15-
collection_prefix: "",
16-
add_comma: false
10+
method_object(
11+
:operations,
12+
[
13+
:indent_level!,
14+
collection_prefix: "",
15+
add_comma: false,
16+
],
1717
)
18-
@operations = operations
19-
@indent_level = indent_level
20-
@collection_prefix = collection_prefix
21-
@add_comma = add_comma
22-
end
2318

2419
def call
2520
raise NotImplementedError
2621
end
2722

23+
# rubocop:disable Lint/UselessAccessModifier
24+
2825
private
2926

30-
attr_reader :operations, :indent_level, :collection_prefix
27+
# rubocop:enable Lint/UselessAccessModifier
3128

32-
def add_comma?
33-
@add_comma
34-
end
29+
attr_query :add_comma?
3530
end
3631
end
3732
end

lib/super_diff/diff_formatters/collection.rb

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,27 @@ class Collection
44
ICONS = { delete: "-", insert: "+" }.freeze
55
STYLES = { insert: :inserted, delete: :deleted, noop: :normal }.freeze
66

7-
def self.call(*args, &block)
8-
new(*args, &block).call
9-
end
7+
extend AttrExtras.mixin
108

11-
def initialize(
12-
open_token:,
13-
close_token:,
14-
operations:,
15-
indent_level:,
16-
add_comma:,
17-
collection_prefix:,
18-
build_item_prefix:
9+
method_object(
10+
[
11+
:open_token!,
12+
:close_token!,
13+
:operations!,
14+
:indent_level!,
15+
:add_comma!,
16+
:collection_prefix!,
17+
:build_item_prefix!,
18+
]
1919
)
20-
@open_token = open_token
21-
@close_token = close_token
22-
@operations = operations
23-
@indent_level = indent_level
24-
@add_comma = add_comma
25-
@collection_prefix = collection_prefix
26-
@build_item_prefix = build_item_prefix
27-
end
2820

2921
def call
3022
lines.join("\n")
3123
end
3224

3325
private
3426

35-
attr_reader :open_token, :close_token, :operations, :indent_level,
36-
:add_comma, :collection_prefix, :build_item_prefix
27+
attr_query :add_comma?
3728

3829
def lines
3930
[
@@ -100,7 +91,7 @@ def indentation(offset: 0)
10091
end
10192

10293
def comma
103-
if add_comma
94+
if add_comma?
10495
","
10596
else
10697
""

lib/super_diff/differ.rb

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,18 @@
11
module SuperDiff
22
class Differ
3-
def self.call(*args)
4-
new(*args).call
5-
end
3+
extend AttrExtras.mixin
64

7-
def initialize(
8-
expected,
9-
actual,
10-
indent_level: 0,
11-
index_in_collection: nil,
12-
extra_classes: [],
13-
extra_operational_sequencer_classes: [],
14-
extra_diff_formatter_classes: []
5+
method_object(
6+
:expected,
7+
:actual,
8+
[
9+
indent_level: 0,
10+
index_in_collection: nil,
11+
extra_classes: [],
12+
extra_operational_sequencer_classes: [],
13+
extra_diff_formatter_classes: [],
14+
],
1515
)
16-
@expected = expected
17-
@actual = actual
18-
@indent_level = indent_level
19-
@index_in_collection = index_in_collection
20-
@extra_classes = extra_classes
21-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
22-
@extra_diff_formatter_classes = extra_diff_formatter_classes
23-
end
2416

2517
def call
2618
resolved_class.call(
@@ -35,10 +27,6 @@ def call
3527

3628
private
3729

38-
attr_reader :expected, :actual, :indent_level, :index_in_collection,
39-
:extra_classes, :extra_operational_sequencer_classes,
40-
:extra_diff_formatter_classes
41-
4230
def resolved_class
4331
(extra_classes + Differs::DEFAULTS).find do |klass|
4432
klass.applies_to?(expected, actual)

lib/super_diff/differs/base.rb

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,29 @@
11
module SuperDiff
22
module Differs
33
class Base
4-
def self.applies_to?(_value)
4+
def self.applies_to?(_expected, _actual)
55
raise NotImplementedError
66
end
77

8-
def self.call(*args)
9-
new(*args).call
10-
end
8+
extend AttrExtras.mixin
119

12-
def initialize(
13-
expected,
14-
actual,
15-
indent_level:,
16-
index_in_collection: nil,
17-
extra_operational_sequencer_classes: [],
18-
extra_diff_formatter_classes: []
10+
method_object(
11+
:expected,
12+
:actual,
13+
[
14+
:indent_level!,
15+
index_in_collection: nil,
16+
extra_operational_sequencer_classes: [],
17+
extra_diff_formatter_classes: [],
18+
],
1919
)
20-
@expected = expected
21-
@actual = actual
22-
@indent_level = indent_level
23-
@index_in_collection = index_in_collection
24-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
25-
@extra_diff_formatter_classes = extra_diff_formatter_classes
26-
end
2720

2821
def call
2922
raise NotImplementedError
3023
end
3124

3225
protected
3326

34-
attr_reader :expected, :actual, :indent_level, :index_in_collection,
35-
:extra_operational_sequencer_classes, :extra_diff_formatter_classes
36-
3727
def indentation
3828
" " * (indent_level * 2)
3929
end

lib/super_diff/equality_matcher.rb

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
module SuperDiff
22
class EqualityMatcher
3-
def self.call(*args)
4-
new(*args).call
5-
end
3+
extend AttrExtras.mixin
64

7-
def initialize(
8-
expected:,
9-
actual:,
10-
extra_classes: [],
11-
extra_operational_sequencer_classes: [],
12-
extra_diff_formatter_classes: []
5+
method_object(
6+
[
7+
:expected!,
8+
:actual!,
9+
extra_classes: [],
10+
extra_operational_sequencer_classes: [],
11+
extra_diff_formatter_classes: [],
12+
]
1313
)
14-
@expected = expected
15-
@actual = actual
16-
@extra_classes = extra_classes
17-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
18-
@extra_diff_formatter_classes = extra_diff_formatter_classes
19-
end
2014

2115
def call
2216
resolved_class.call(
@@ -29,9 +23,6 @@ def call
2923

3024
private
3125

32-
attr_reader :expected, :actual, :extra_classes,
33-
:extra_operational_sequencer_classes, :extra_diff_formatter_classes
34-
3526
def resolved_class
3627
matching_class || EqualityMatchers::Object
3728
end

lib/super_diff/equality_matchers/base.rb

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,16 @@ def self.applies_to?(_value)
55
raise NotImplementedError
66
end
77

8-
def self.call(*args)
9-
new(*args).call
10-
end
8+
extend AttrExtras.mixin
119

12-
def initialize(
13-
expected:,
14-
actual:,
15-
extra_operational_sequencer_classes: [],
16-
extra_diff_formatter_classes: []
10+
method_object(
11+
[
12+
:expected!,
13+
:actual!,
14+
extra_operational_sequencer_classes: [],
15+
extra_diff_formatter_classes: [],
16+
]
1717
)
18-
@expected = expected
19-
@actual = actual
20-
@extra_operational_sequencer_classes = extra_operational_sequencer_classes
21-
@extra_diff_formatter_classes = extra_diff_formatter_classes
22-
end
2318

2419
def call
2520
if expected == actual
@@ -31,9 +26,6 @@ def call
3126

3227
protected
3328

34-
attr_reader :expected, :actual, :extra_operational_sequencer_classes,
35-
:extra_diff_formatter_classes
36-
3729
def fail
3830
raise NotImplementedError
3931
end

lib/super_diff/operational_sequencer.rb

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,15 @@
11
module SuperDiff
22
class OperationalSequencer
3-
def self.call(*args)
4-
new(*args).call
5-
end
3+
extend AttrExtras.mixin
64

7-
def initialize(
8-
expected:,
9-
actual:,
10-
extra_classes: [],
11-
extra_diff_formatter_classes: []
5+
method_object(
6+
[
7+
:expected!,
8+
:actual!,
9+
extra_classes: [],
10+
extra_diff_formatter_classes: [],
11+
],
1212
)
13-
@expected = expected
14-
@actual = actual
15-
@extra_classes = extra_classes
16-
@extra_diff_formatter_classes = extra_diff_formatter_classes
17-
end
1813

1914
def call
2015
if resolved_class
@@ -31,9 +26,6 @@ def call
3126

3227
private
3328

34-
attr_reader :expected, :actual, :extra_classes,
35-
:extra_diff_formatter_classes
36-
3729
def resolved_class
3830
(extra_classes + OperationalSequencers::DEFAULTS).find do |klass|
3931
klass.applies_to?(expected, actual)

0 commit comments

Comments
 (0)