Class: MetaCommit::Factories::DiffFactory

Inherits:
Object
  • Object
show all
Defined in:
lib/meta_commit/factories/diff_factory.rb

Overview

Diff factory

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(diff_classes) ⇒ DiffFactory

Returns a new instance of DiffFactory.



7
8
9
# File 'lib/meta_commit/factories/diff_factory.rb', line 7

def initialize(diff_classes)
  @available_diff_classes = diff_classes
end

Instance Attribute Details

#available_diff_classesArray<Class>

diff classes that factory can build

Returns:

  • (Array<Class>)

    the current value of available_diff_classes



4
5
6
# File 'lib/meta_commit/factories/diff_factory.rb', line 4

def available_diff_classes
  @available_diff_classes
end

Instance Method Details

#create_diff_of_type(type, options) ⇒ Diff?

Factory method

Parameters:

  • type (Symbol)
  • options (Hash)

Returns:

  • (Diff, nil)

    created diff or nil if matched diff not found



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/meta_commit/factories/diff_factory.rb', line 15

def create_diff_of_type(type, options)
  @available_diff_classes.each do |diff_class|
    diff = diff_class.new
    if diff.supports_parser?(options[:old_ast_path].parser_class) &&
        diff.supports_parser?(options[:new_ast_path].parser_class) &&
        diff.supports_change(type, options[:old_file_path], options[:new_file_path], options[:old_ast_path], options[:new_ast_path])
      line = options[:line]
      diff.diff_type = line.line_origin
      diff.commit_old = options[:commit_id_old]
      diff.commit_new = options[:commit_id_new]
      diff.old_file = options[:old_file_path]
      diff.new_file = options[:new_file_path]
      diff.old_lineno = line.old_lineno
      diff.new_lineno = line.new_lineno
      diff.old_ast_path = options[:old_ast_path]
      diff.new_ast_path = options[:new_ast_path]
      return diff
    end
  end
  nil
end