class MetaCommit::Factories::DiffFactory
Diff factory @attr [Array<Class>] available_diff_classes
diff classes that factory can build
Attributes
available_diff_classes[RW]
Public Class Methods
new(diff_classes)
click to toggle source
@param [Array<Class>] diff_classes
# File lib/meta_commit/factories/diff_factory.rb, line 8 def initialize(diff_classes) @available_diff_classes = diff_classes end
Public Instance Methods
create_diff(options)
click to toggle source
Factory method @param [Hash] options @return [Diff, nil] created diff or nil if matched diff not found
# File lib/meta_commit/factories/diff_factory.rb, line 15 def create_diff(options) context = change_context(options) @available_diff_classes.each do |diff_class| diff = diff_class.new if diff.supports_parser?(context.old_contextual_ast.parser_class) && diff.supports_parser?(context.new_contextual_ast.parser_class) && diff.supports_change(context) diff.change_context = context return diff end end nil end
Private Instance Methods
change_context(options)
click to toggle source
Convert hash to context object @param [Hash] options @return [MetaCommit::Contracts::ChangeContext]
# File lib/meta_commit/factories/diff_factory.rb, line 33 def change_context(options) context = MetaCommit::Contracts::ChangeContext.new context.type = options[:line].line_origin context.old_lineno = options[:line].old_lineno context.new_lineno = options[:line].new_lineno context.column = options[:column] context.commit_id_old = options[:commit_id_old] context.commit_id_new = options[:commit_id_new] context.old_contextual_ast = options[:old_contextual_ast] context.new_contextual_ast = options[:new_contextual_ast] context.old_file_path = options[:old_file_path] context.new_file_path = options[:new_file_path] context end