►
Description
Today we attempt a refactor of a complex method.
https://gitlab.com/gitlab-org/gitlab/-/issues/395693
A
So
Chad
and
Cassio
we
were
just
discussing
for
the
pairing
session.
What
to
work
on
and
I
had
shared
two
issues
yesterday,
one
about
changing
some
search
team
application
settings
over
to
a
new
table
because
I
think
application
settings
is
like
570
columns
and
someone
from
my
team
Dimitri.
He
suggested
moving
everything
to
Json,
B
and
Chad.
You
asked
if
that
had
been
discouraged.
I
haven't
seen
it
be
discouraged.
A
B
C
Far
as
I
remember
with
zinc
coverage,
Jason
B,
when
the
structure
is
not
well
defined
with
Dynamic
fields
and
it's
kind
of
stuff,
but
if
we're
using
Json
B,
we
thought
well
to
find
structure.
I.
Think
it's
fine.
As
far
as
I
remember
from
the
documentation.
A
Yeah
my
concern
was
I,
wanted
to
make
sure
that
we
had
like
enough
rules
around
what
could
be
stored
inside
the
field
so
that
it
doesn't
become
like
a
free-for-all.
That's
been
my
experience
with
sometimes
storing
stuff
in
Json
B
fields.
If
there's
not
like
specific,
like
validation
applied
to
it,
that
it
can
be
hard
to
be
confident
about
like
what's
in
there,
but
I
could
I
can
share
those
issues
with
y'all
later,
but
I'm
also
happy
to
work
on
the
refactor
method
that
I
shared
it's
or
chat
or
Cassie.
A
A
Yeah,
just
in
case
you're
interested
in
reading
up
on
the
issue,
because
I
think
it
might
be
applicable
to
other
teams
that
store
things
in
application
settings
for
your
fundraising.
D
B
A
And
I
think
that
was
what
I
was
raising
up
as
like
of
making
sure
that
we
have
that
because
I've
had
times
where
would
didn't,
have
that
and
then
I
look
at
the
table
and
I'm
like
what
is
in
here
right
now.
Do
you
have
been
storing
stuff
in
here?
That's
not
even
related
to
what
the
column
is
supposed
to
be
like
it
yeah
it
just
becomes
very
hard
to
manage,
and
then
once
it's
like
that,
I
don't
know
how
you
kind
of
get
away
from
it,
but.
C
D
C
D
D
C
But
you
can
index
those
there.
You
can
index
the
fields
inside
of
the
Json
as
well,
but
I.
Think
if
the
Json
structure
is
too
big,
then
you
have
performance.
You
can
have
performance
issues
like
if
you
have
too
many
fields
inside
of
the
Json
beating
but
I'm,
not
sure
about
that.
It's
been
a
while,
since
I
touched
those
things.
A
C
In
my
personal
opinion,
I
think
Json
beats
good
for
very
well
defined
small
set
of
dudes
like
addresses
or
this
kind
of
stuff.
When
you
start
doing
settings
on
Json,
it's
a
little
bit
complicated
because
settings
tends
to
grow
so
I
think
another
table
can
work
a
little
bit
better
because
at
the
end
of
the
day
that
Json
starts
growing,
you
decide
to
move
to
another
table.
It's
two
steps.
Instead
of
one
foreign.
A
Started
on
this
refactor,
let
me
get
my
environment
set
up
very
quickly
and
then
I'll
share
my
screen.
Oh
this
one
there's
so
many
RoboCop
disables
in
this
method.
It
makes
me
sad,
oh
okay,
so
just
to
show
folks
the
issue
that
we
were
talking
about.
Yeah
the
method.
A
We
have
a
method
used
in
ee,
lib
elastic
latest
git
class
proxy,
which
is
named
blob
query
and
it's
extremely
difficult
to
read:
I
actually
really
dislike
having
to
come
in
and
work
on
things
in
here,
because
every
time
I
look
at
it
makes
me
feel
bad
and
guilty
because
I
don't
like
how
the
method
reads,
but
we
never
have
time
to
come
back
and
fix
it.
Often
when
we're
making
changes
in
here,
it's
never
a
priority.
A
I
think
for
folks
to
come
and
fix
this,
and
we
can
start
by
looking
at
just
the
five
I
guess,
the
the
method
itself.
We
have
three
rubricot,
disables
and
I
feel
like
every
time.
We
add
something
in
here
it
just
like
makes
the
problem
worse.
So
I
don't
know
when
we
do
refactors
like
this,
like
what's
the
best
way
to
get
started
but
like
this
is
terrible
and
I
yeah
I.
B
D
It
would
be
nice.
The
first
place
to
start
is,
would
try
to
would
be
to
share
like
it
has
100
Latin
coverage,
but
does
it
have
100
Branch
coverage
for
the
tests?
Okay,.
B
D
You
even
know,
if
simple
have
any
pants
to
flag
to
it,
to
say
every
branch
is
covered,
because
that
will
give
you
a
nice
safety
net
to
know
that
you're
not
breaking
any
of
the
logic,
because
you
can
cover
a
line.
But
if
it's
a
ternary
or
something
else,
you
could
be
missing
some
some
holes
in
your
testing.
B
B
A
Okay
so
I
know.
A
Like
my
inclination,
when
I'm
trying
to
make
these
smaller
because
I
have
done
it
and
some
of
the
other
methods
that
we
use,
where
I
look
at
something
and
I'm
like
this-
is
really
not
great
I
just
start
ripping
things
into
private
methods
to
at
least
like
chunk
things
up
into
like
I'm,
not
going
to
change
any
code.
A
So
the
first
thing
that
I
was
maybe
looking
at
was
this.
Do
block.
A
I
know
this
feature,
this
feature:
plug
is
old,
but
I'm
not
going
to
touch
it
right
now
is
to
just
make
this
a
method.
Yeah.
C
C
There
is
another
one
down
below
the
huge
one
as
well.
Removing
those
two
blocks
probably
already
will
simplify
yeah.
D
D
D
D
Oh
yeah
I
use
it
all
the
time
so
extract
that,
and
this
will
fail
like
if
there's
a
guard
Clause
that
returns
in
the
middle
or,
if
there's
a
an
exception
of
it.
So
not
so
it's
a
clean
one,
so
give
it
whatever
method.
So
what
does
this
do?.
A
This
I
guess
it
generates
the
initial
search.
Query
I,
like
literally
hate
naming
things
I.
A
B
A
Happens
is
like
what
we're
doing
is
we're
getting
the
initial
query
that
we're
going
to
pass
to
elasticsearch
and
then
based
on
different
options
and
other
items
that
are
sent
into
this
method
and
this
options
up
here
we're
adding
on
to
that.
So
we're
like
generating
the
initial
query.
D
A
D
Magic,
that's
that's
the
best
thing,
one
of
the
many
best
things
about
jet
brains,
that's
track
method
and
then
on
the
remote
development.
Stuff.
We've
also
started
not
directly
related
to
this,
but
we
we
added
yard
annotations.
A
D
Extract
and
that
you
know
that's
fine
yeah.
B
D
A
Feel
like-
and
you
know,
I've
talked
to
you
about
this
before
I
have
noticed
and
Cassie
I,
don't
know.
If
you
read
into
this
a
lot
of
the
files
that
my
team
works
on,
they
are
in
so
many
RoboCop
excludes
that
you
don't
get
the
alerts
in
your
editor
and
then
the
problem
just
gets
worse,
as
we
add
code,
because
I
think
people
don't
realize.
D
The
next
time
you
touch
the
file
it'll
fail
danger
and
fail
in
CI.
So
you
should
save
this.
If
you
have
RoboCop
enabled
and
jetbrains
yeah,
you
should
save
this
and
then
look
at
your
inspect
code.
D
A
Work
on
files
is
like
remove
things
and
remove
all
the
references
and
see
if
I
can
fix
them
as
part
of
that
Mr
are
too
big,
but
we
could
just
start
with
like
reducing
this
okay.
So
it's
still.
B
A
No,
but
it's
still
very
complicated,
so
what
this
is
worth.
D
I
think
the
the
276
like
that's,
got
a
Boolean
in
it,
so
that's
contributing
to
the
complexity.
I
think
it's
Millions,
so.
D
A
B
A
B
A
D
A
Yeah
but
I
wonder
if
maybe.
D
Like
those
are
those
branching
and
bullions
or
the
thing
that
contribute,
so
what
you
can
do
is
counter
aggregation.
Query.
B
A
D
Right,
maybe
that
one's
not
it's
not
worth
pulling
it
out.
If
it's
not
single
a
single
place,
it's
called.
A
B
I
don't
know
I'll.
A
Just
search
for
that,
and
you
it's
not
on
this
project
because
we
have
zoops
turned
on
okay,
let
me
find
another
project
that
doesn't
have
this
enabled.
A
A
I'm
having
a
bad
day
for
showing
things,
but
essentially
when
you
run
a
search
there,
if
it's
back
by
elastic
it
does
it
allows
you
to
do
code
aggregation
like
the
type
of
code,
the
type
of
file
the
interpreted
like
what
the
file
is
contains,
and
this
blob
query
is
used
in
both
cases.
It's
used
from
you
doing
the
actual
search
which
is
like
get
me
the
records,
and
it's
also
used
when
you're
saying,
like
I,
need
to
get
the
aggregations
of
what
type
of
code
is
available
for
this
like
search.
A
So
that's
what
and
then
there
also
was
this
count.
Only
that's
if
we're
doing
account
request,
which
is
what's
used
to
populate
the
number
in
the
tab
or
the
like
the
sidebar
of
how
many
results
came
back
like
we
don't
this.
This
query
is
used
by
like
three
different
types
of
searches
and
maybe
that's
part
of
the
problem.
It's
like
a
very
generalized
like
create
this
blob
query
and
it
has
a
bunch
of
if
statements
in
it
that
are
like
if
it's
a
count.
A
Don't
do
this
part
if
it's
an
aggregation
kind
of
don't
do
that
part!
Yeah
I,
don't
know
if
this
is
like
a
good
or
bad
thing,
because
it's
very
confusing
to
add
stuff
here
and
it's
kind
of
scary.
Sometimes
it.
D
Almost
seems
like
this
whole
blob
query
needs
to
be
extracted
to
its
own
class
and
then,
when
we
extract
private
methods
with
it,
it's
not
getting
mixed
in
with
all
of
the
other
non-cohesive
stuff.
That's
in
this
class
and
then
yeah
more
just
all
these
little
parts
of
this
method,
pull
them
out
to
private.
C
Yeah
I
was
about
to
say
the
same
thing
like
the
amount
of
states
that
this
method
is
checking
and
verifying
to
build
something,
it's
seems
to
be
to
be
just
a
method
somewhere.
Maybe
a
class
would
be
a
better
place.
Okay,.
A
A
D
C
Yeah
sorry,
in
this
case,
we're
already
in
the
library
folder
so
I
will
probably
just
do
at
least
for
a
start
is
a
blob
query
Builder
or
something
like
that.
Okay,.
D
D
D
B
D
It
it
like,
does
it
in
module
like
right,
click
on
it
and
see
what
it
says.
This
thing
yeah
like
refactor,
there's
like
eggs,
there's
like
a
straight
module
like
do
that
and
see
if
it
pulls
it
out
and
then
you
can
just
copy
it
into
a
thing
yeah
it.
D
This
is
when
I
haven't
played
around
with
this
much
I
usually
just
end
up
pulling
the
method
out,
but
it's
like
that's
the
one
member
that
it
pulls
out.
You
have
the
one
method
highlighted.
A
Yeah
I
might
not
leave
it
here,
but
I
think
this
is
a
good
spot
to
kind
of
try
to
move
it
into
well.
D
A
B
C
A
B
D
Well,
let's
just
see
what
it
does.
If
you
click
this,
does
it
pull
it
out
or
will
it
give
you
a
complaint,
I'm
curious.
A
D
B
A
D
A
A
D
A
Yeah
I
feel
like
this
applies
simple
query.
String
I
feel
like
that's
I'm,
not
sure
where
that,
like
I,
don't
come
in
here
enough
I
just
had
you
know,
I
haven't
been
here
in
like
a
month.
Change.
D
D
A
C
A
D
A
So
we
have
in
here
this
is
not
a
method,
that's
not
a
method,
this
disabled!
This
is
private,
so
these
I
actually
wrote
not
all
of
these,
but
we've
started
to
make
these
checks,
because
this
line
is
so
long.
We'll
just
make
this
track
that
be
like
okay,
it's
now
a
private
method
that
we're
going
to
use
for
the
checks
that
we
have
to
use.
D
A
I
guess
that
makes
sense,
because
I
feel
like
it's
really
all
of
these
public
methods
aren't
going
to
change.
It's
all
these
private
methods
that
are
used
by
these
and
I
think
we
can't
move
all
of
them
because
these
ones
that
are
used
for
searching
commits
they
might
use
some
of
the
same
things.
But
I
I,
don't
I,
don't
know
and.
A
As
black
so
like
yeah,
we
have
this
concept
of
like
the
git
class
proxy,
which
handles
all
of
the
searching.
That's
done
for
things
that
are
backed
by
Italy.
So
for
us,
that's
wikis
and
blobs
and
commits,
and
those
search,
queries
that
are
built
up
for
elastic
are
all
handled
by
this
particular
class.
Proxy
module.
B
B
D
There,
oh,
like
I'm,
saying
like
just
delete
the
the
Vlog
query
method,
just
like
change
it
to
build
right
and
that's
that's
the
whole
interface
of
this
class
I.
B
D
And
so
the
like,
when
the
remote
development
stuff,
like
the
the
refactoring,
we're
doing
to
the
sort
of
a
more
functional
way,
all
of
our
business
logic
is
in
class
methods
there.
It's
all
stateless
class
stuff.
So
not
saying
you
should
do
it
here,
but
it
does
make
it
easier
to
reason
about
this
stuff
because
you're
like
okay,
there
can
be
no
State,
because
everything
is
a
class
method.
So
therefore,
I
can
you
know
just
pass
around
whatever
I
need,
but
you
can
have
the
same
idea
here.
It
doesn't
have
to
be
a
class
method.
A
D
B
D
No
like
this,
no
no
like
that.
Don't
worry
about
all
like
the
Vlog.
D
D
A
A
D
D
Let's
be
methodical
about
it
now
we
need
to
run
run
the
test
for
get
class
proxy
and
make
sure
we
didn't
break
anything
because
Ruby
mine's,
not
it
doesn't
have
any
red
checks
that
I
see
yeah
and
didn't
before
it
had
two
now
it
has
like
when
you
go
back
to
the
here,
there's
like
11
warnings.
Now
when
there
used
to
be
two,
what
are
they
if
you
hit
F2
to
go
through
them?
Okay,
parameter.
A
B
A
A
Why
things
are
like
getting
complained
and
then
there
should
have
been
options?
Okay,
so
now.
D
D
A
Oh,
you
want
to
test
this
thing.
I
will
tell
you
right
now.
I
know
this
is
not
the
only
test
that
tests
this
file,
but
we'll
see
what
happens
well.
This
is
the
one
that,
if
this
works,
I
would
be
more
confident.
I
just
know
like
this
has
the
way
the
tests
are
written
for
these
elastic
search.
Queries.
I've
I've
been
like
working
with
folks
to
see
if
we
to
like
try
to
like
chip
away
at
the
fact
that
the
testing
for
this
is
a
little
bit
lacking
when
it
comes
to
these
direct
proxy
classes.
D
So
what
I've
tried
to
done
is
like
I
have
I
try
to
have
a
unit
test
of
it.
It
should
provide
full
line
coverage
of
the
class
that's
under
test.
Sometimes
you
have
to
rely
on
an
integration
test,
but
yeah
I.
A
Think
a
lot
of
ours
rely
on
integration
tests,
but
what
we've
tried
been
trying
to
add
is
these
are
essentially
creating
elastic
search,
queries
that
are
being
used
to
search
for
things.
I've
been
trying
to
like
add
these
assertions
to
make
sure
that
the
queries
contain
the
right
building
blocks,
based
on
like
what
you're
sending
into
the
method.
A
I,
don't
think
we
have
full
coverage.
I
will
just
say
that
if.
B
D
D
A
Asdf
complained
about
not
having
the
right
version
of
golang,
so
I'm
going
to
install
that
and
see.
If
that
fixes
it
I
don't
know.
I
just
did
an
update.
I
get
like
I
pulled
the
master
branch
and
I'm
wondering
if
maybe
did.
A
D
A
But
I
guess
what
what
I
feel
like
is
going
to
be
really
nice.
If
we
pull
this
particular
method
out
into
this
query
Builder,
then
we
can
do
all
of
the
testing
on
what's
essentially
like
a
Json
object
like
a
hash
that
it
has
the
right
things
and
we
don't
have
to
go
through
like
oh,
we
made
a
search
and
you
have
to
stand
elastic
up,
and
that
is
a
very
expensive.
D
Ci,
that
is
the
goal
of
pulling
this
out
and
like
you,
should
actually
architect
that
way
like
what
piece
of
logic
can
I
pull
out,
that
it's
interface
is
pure.
It's
pure
business
logic
and
its
interface
are
playing
data
structures.
Then
I
can
unit
test
that
and
then
I
rely
on.
The
mineral
of
the
pyramid
is
everything
wired
together
with
maybe
some
real
stuff
and
the
top
of
the
pyramid
like
when
I
post,
the
UI
to
okay,
the
other
stuff.
A
Maybe
I've
been
approaching
these
refractors
like
a
lot
I.
Guess
it's
just
starting
at
like
the
base
level,
which
is
pulling
things
into
methods,
so
at
least
I
can
read
the
method.
That's
like.
First,
we
do
this
step.
Then
we
do
this
step,
but
it
still
is
not
fixing
the
testability
of
it
still
not
easy.
D
C
C
I
agree
as
much
as
we
can
extract
business
logic
to
simplified
objects,
only
memory
that
has
less
dependencies
of
databases
or
any
other
third-party
stuff,
the
better
even
having
more
tests.
The
test
Suite
will
be
faster
because
the
objects
are
lighter.
A
I
I
honestly
feel
like
any
test
where
we
can
avoid
using
this
trait.
This
is
a
very
expensive
trait
for
us
to
use
any
of
the
elastic
traits.
I
guess
it
didn't
occur
to
me
to
pull
it
down
to
a
separate
class.
D
Yeah,
my
goal
is
to
have
classes
of
business
logic
that
have
no
dependency
on
Rails
whatsoever
and
I
can
run
them
with
fast
tests,
spec
fast
spec
Helper,
and
then
they
run
in
a
half
a
second.
C
D
C
Yeah
we
are,
we
are
very
dependent
on
radio's,
internals
and
settings
as
well
and
a
lot
of
other
stuff
on
some
business
logic
that
make
those
things
very
hard.
A
And
I
can
already
tell
this.
This
is
all
going
to
fail
only
because
so
this
Builder
class
reference
this
build
method
now
references
so
like
these
came
over
I
think
I've
copied
these
over.
So
these
methods
came
over
this
like
this
one
came
over
this
one
came
over.
A
This
applies
simple
query.
String
method
like
this,
then
is
still
in
Gate
class
proxy,
so
I
think
it
oh
well,
that's
probably
why
that
failed,
but
I
think
I
think
my
fail.
So
I
used
the
wrong
thing
in
here.
D
B
Building
this.
A
A
A
I,
don't
think
so.
It's
used
in
search
commit.
D
So
what
you,
how
is
that,
let's
look
at
how
it's
used?
Can
you
in
the
lab
query
original
method?
Can
you
call
that
and
pass
whatever
uses
in
yeah.
A
A
D
We're
unraveling
the
sweaters,
so
you
you
can
hold
that
method
into
a
module.
If
you
want
like
a
helper
module
and
then
it
could
be
used
or
you
could
there's
other
things,
you
could
do
that
are
more
weird.
You
could
like
inject
it,
but
or
you
could
inline
the
logic.
How
complicated
is
the
logic
for
that.
B
D
Right
so
you
could
yeah.
A
Well,
I,
don't
know
if
it
does
I
think
it's
not
self-contained.
It
calls
that
a
method
that,
in
the
class
that
this
inherits
from
this
class
proxy
of
application
class
proxy
is
I
believe.
B
D
A
D
Again,
I'm
not
suggesting
this,
but
like
the
nice
thing
about
you
having
your
the
way,
we're
going
with
the
remote
development
with
all
class
methods
for
the
domain
logic,
like
you
don't
have
this
inheritance
problem,
you
could
just
like
call
that
over
there
yeah
right,
like
you,
could
call
back
to
it
or
or
move
it
around.
No.
D
In
this
case,
what
you
can
do
to
solve
it
in
you
know
an
instance.
You
know
an
owl
Paradigm.
You
could
take
that
method.
That's
used,
as
well
as
the
method
on
the
superclass,
throw
them
in
a
module
somewhere
like
introduce
a
new
module
like
the
class
helper
and
then
Mitch
them
in
where
they're
needed
and.
C
D
C
D
Yeah,
whatever
it
does
like
what
was
the
thing
so.
D
D
Really
one
line,
I
think
I
think
you
can
inline
this
in
the
other
method
that
in
the
get
proxy
like
it's
just
a
map,
this
doesn't
need
to
be
a
method
on
the
superclass.
That's
my
call.
B
A
Yeah
I
don't
know,
I
feel
like
because
I
think
this
is
probably
used
in
a
bunch
of
places.
Yeah.
D
A
D
So
you
could
make
this
a
class
method
either
here
on
the
Builder
class
and
just
call
it
from
both
places.
I
don't
know,
but
a
little
weird,
but
that
would
like
or
you
can
make
in
a
module
like
okay,.
C
Sorry,
this
git
class
proxy,
it's
a
module
or
a
it's.
A
C
But
my
point
just
coming
back
to
that
method.
Maybe
we
can
just
make
that
matter
public
and
call
it
directly
from
this
module
for
now
and
just
see
how
it
behaves
and.
C
A
D
A
D
Inclination
is
like
I'm,
I'm
kind
of
over
the
whole.
The
rails.
Paradigm
of
everything
is
a
mixing
and
there's
just
like
multiple
inheritance,
and
you
don't
know
where
anything
comes
from
and
that's
why
I'm
more
like
concrete
things
and
like
as
you
can
see
on
our
own
development,
like
Ashley,
makes
them
class
methods.
So
there's
no
State
whatsoever
and
everything's
explicit,
but
I
was
just
saying
that
yeah.
B
D
D
C
Ahead,
if
you
want
to
make
it
callable
from
the
namespace
from
the
module
name
itself,
you
can
just
make
this
method
model
method
or
you
can
extend
self
and
then
you
can
do
like
git
proxy
git
class
proxy
dot,
apply
simple
query
and
it
will
work.
C
B
C
Just
yeah,
you
don't
don't
have
the
block,
you
don't
need
the
book
like
that
again.
My
idea
is
just
do
a
first
step
to
make
all
the
tests
work
and
then
we
see
all
the
problems
that
this
really
creates,
which
is
the
circle
of
dependency
and
all
the
dependencies
that
that
builder
needs,
and
that
will
be
very
explicit
and
then
we
can
extract
those
as
well
and
unreal
all
the
things
that
we
need
tomorrow,
I.
D
C
D
A
Method
that,
like
we,
have
a
lot
of
I,
think
we're
gonna
have
a
lot
of
those.
This
authorization
filter
method
exists
in
the
application
class
proxy
that
we
look
at.
Let
me
see
this
so.
D
Going
in,
like
Casio
was
saying
like
use
that
same
approach,
and
then
it's
like
it's
explicit,
like
all
of
these
places,
where
you
have
this
couple
logic,
and
then
you
can
decide
what
to
do
for
each
of
those
they
can
turn
into
their
own
class.
That's
used.
They
can
turn
into
a
visual
whatever.
However,
you
want
to
move
that.
B
A
D
C
B
A
Okay,
I'm
just
gonna
leave
this
note
for
myself
Yep.
This
is
probably
something
that
I
might
bring
back
to
a
future
pairing
session
since
I
know,
we'll
only
have
an
hour
and
I
originally
was
like.
They
might
be
able
to
finish
this
because
I'm
very
positive
thinking
today
and
that's
not
gonna
happen.
I.
A
Yeah
I
just
saw
the
like
alert.
Okay,
so.
A
B
A
Think
what
the
the
next
step
for
this
is
to
make
sure
that
all
of
these
are
either
self-contained
and
I
feel
like
these
methods
that
are
I,
think
they're
public
right
now,
but
I
want
to
make
them
private.
These
I'm
really
okay,
with
moving
along
because
they're
really
just
made
for
use
in
this
method
and
they're
just
around
essentially
whether
some
background
migrations
have
finished
so.
A
Yeah,
so
that
one's
okay,
that
one's
okay,
that
one's
okay,
this
one
we
fixed
up
this
authorization
filter
is
going
to
be
like
problematic.
So
and
okay,
it's
only
used
in
two
places
right
now
and
I.
Guess
that's!
Okay!
A
So
we'll
do
the
same!
Oh,
we
can't
do
an
extend
self
here,
because
oh.
A
C
A
C
C
Section,
maybe
what
we
should
do,
it's
like
just
check
what
is
including
that
that
module
the
git
class
proxy
module,
which
is
weird
because
it's
called
git
class,
but
it's
a
module
what's
including
that,
and
why
do
we
have
things
that
are
including
that
module?
But
it's
also
depending
on
methods
that
I
Rarity
inherited.
That
word,
it's
very
hard
for
me,
sorry
inherited
from
the
application
correct
proxy.
So
we
have
those
two
dependencies
and
one
dependence
depend
on
the
other.
A
D
D
A
C
A
A
D
D
If
you
pull
that
logic
up
to
the
higher
level
in
the
hierarchy,
like
you're
you're,
saying
that
everything
that
inherits
from
that
need,
that
gets
that
mixed
in
which
isn't
good
yeah
alternate
approaches
like
everything
that
is
at
that
top
level
of
the
hierarchy.
That
maybe
doesn't
need
to
be
there
or
is
used
from
other
places,
fold
that
out
to
modules
and
only
mix
it
in
when
it's
needed.
So
then
you're
not
pulling
that
logic
up
in
the.
A
C
Just
one
another
note,
sorry,
most
of
the
things
that
we
were
checking
were
being
used
only
in
two
places
and
that's
also
a
good
and
bad
thing
at
this
point,
because
if
we're
trying
to
refactor
it
and
those
things
are
only
being
used
in
two
places,
maybe
one
step
is
like
duplicating
those
methods
on
those
two
places
and
deleting
the
dependency
and
see
how
this
code
will
be
and
see
exactly
what
they
are
in
common
and
if
those
are
really
the
same
logic
or
it's
just
some
codes
that
people
think
I
duplicated,
because
if
it's
just
structural
logic,
it's
fine
to
be
to
be
duplicated,
sent
me.
C
A
D
A
I
think
I've
in
in
some
of
the
reviews,
I've
done
in
these
classes.
I
actually
made
comment
that,
like
in
terms
of
making
things
dry,
it
sometimes
makes
it
more
hard
to
read
in
the
case
of
like
this
particular
area
of
the
code
and
I
asked
like
maybe
it's
okay,
that
we
leave
things
duplicated
for
now,
because
otherwise
trying
to
trace
where
this
thing
lives.
You
end
up.
It's
very
difficult,
I.
D
A
The
end
of
time,
so
I
really
both
of
you
working
with
me
through
this
I-
am
gonna,
probably
push
up
a
branch
and
just
leave
it
for
now,
because
I
have
other
things
I
have
to
get
to,
but
you've
really.
Given
me
a
lot
to
think
about
in
terms
of
the
code
organization,
I.
D
Think
the
last
takeaway
here
is
like,
even
though
we
went
to
the
wrong
abstraction,
like
we've
refactoring
helps
you
understand
the
dependencies
like
you
wouldn't
have
realized
these.
If
you
hadn't
started
on
the
path
refractory,
so
it's
fine
that
it
was
throwaway.
You
understand
it
better.
Now,
yeah.