Module: Transpec::Syntax::RSpecConfigure::ConfigModification::ConfigAddition

Included in:
Transpec::Syntax::RSpecConfigure::ConfigModification
Defined in:
lib/transpec/syntax/rspec_configure/config_modification.rb

Overview

TODO: Refactor this to remove messy overrides in Framework.

Instance Method Summary collapse

Instance Method Details

#add_config!(config_name, value = nil, comment = nil) ⇒ Object



81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/transpec/syntax/rspec_configure/config_modification.rb', line 81

def add_config!(config_name, value = nil, comment = nil)
  lines = generate_config_lines(config_name, value, comment)
  lines.unshift('') unless empty_block_body?
  lines.map! { |line| line + "\n" }

  insertion_position = beginning_of_line_range(block_node_to_insert_code.loc.end)
  source_rewriter.insert_before(insertion_position, lines.join(''))

  block_node_to_insert_code.[:added_config] = true

  add_record(nil, config_record_syntax(config_name, value))
end

#block_node_to_insert_code ⇒ Object



119
120
121
# File 'lib/transpec/syntax/rspec_configure/config_modification.rb', line 119

def block_node_to_insert_code
  block_node
end

#body_indentation ⇒ Object



115
116
117
# File 'lib/transpec/syntax/rspec_configure/config_modification.rb', line 115

def body_indentation
  indentation_of_line(block_node) + (' ' * 2)
end

#config_variable_name ⇒ Object



111
112
113
# File 'lib/transpec/syntax/rspec_configure/config_modification.rb', line 111

def config_variable_name
  block_arg_name
end

#empty_block_body? ⇒ Boolean

Returns:

  • (Boolean)


123
124
125
126
127
# File 'lib/transpec/syntax/rspec_configure/config_modification.rb', line 123

def empty_block_body?
  block_node = block_node_to_insert_code
  (block_node.loc.end.line - block_node.loc.begin.line <= 1) &&
    !block_node.[:added_config]
end

#generate_config_lines(config_name, value = nil, comment = nil) ⇒ Object



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/transpec/syntax/rspec_configure/config_modification.rb', line 94

def generate_config_lines(config_name, value = nil, comment = nil)
  lines = []

  if comment
    comment_lines = comment.each_line.map do |line|
      "#{body_indentation}# #{line.chomp}".rstrip
    end
    lines.concat(comment_lines)
  end

  config_line = body_indentation + "#{config_variable_name}.#{config_name}"
  config_line << " = #{value}" unless value.nil?
  lines << config_line

  lines
end