Class: Mongory::Generators::MatcherGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Defined in:
lib/generators/mongory/matcher/matcher_generator.rb

Overview

Generates a new Mongory matcher.

Examples:

rails g mongory:matcher class_in
# Creates:
#   lib/mongory/matchers/class_in_matcher.rb
#   spec/mongory/matchers/class_in_matcher_spec.rb
#   config/initializers/mongory.rb (if not exists)

See Also:

Instance Method Summary collapse

Instance Method Details

#create_matchervoid

This method returns an undefined value.

Generates the matcher files and updates the initializer.



24
25
26
27
28
29
30
31
# File 'lib/generators/mongory/matcher/matcher_generator.rb', line 24

def create_matcher
  @matcher_name = "#{class_name}Matcher"
  @operator_name = name.underscore
  @mongo_operator = "$#{name.camelize(:lower)}"

  template 'matcher.rb.erb', "lib/mongory/matchers/#{file_name}_matcher.rb"
  template 'matcher_spec.rb.erb', "spec/mongory/matchers/#{file_name}_matcher_spec.rb"
end

#update_initializervoid

This method returns an undefined value.

Updates or creates the Mongory initializer.



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/generators/mongory/matcher/matcher_generator.rb', line 36

def update_initializer
  initializer_path = 'config/initializers/mongory.rb'
  inject_line = "require \"#\{Rails.root\}/lib/mongory/matchers/#{file_name}_matcher\""
  front_line = '# frozen_string_literal: true'

  Mongory::Generators::InstallGenerator.start unless File.exist?(initializer_path)
  content = File.read(initializer_path)
  return if content.include?(inject_line)

  required_file_lines = content.scan(/.*require\s+["'].*_matcher["'].*/)
  if required_file_lines.empty?
    inject_line = "\n#{inject_line}"
  else
    front_line = required_file_lines.last
  end

  inject_into_file initializer_path, "#{inject_line}\n", after: "#{front_line}\n"
end