Class: Sidenotes::Railtie

Inherits:
Rails::Railtie
  • Object
show all
Defined in:
lib/sidenotes/railtie.rb

Constant Summary collapse

MIGRATE_TASKS =
%w[db:migrate db:migrate:up db:migrate:down db:rollback].freeze

Class Method Summary collapse

Class Method Details

.install_migrate_hooksObject



107
108
109
110
111
112
113
114
115
# File 'lib/sidenotes/railtie.rb', line 107

def self.install_migrate_hooks
  MIGRATE_TASKS.each do |task_name|
    next unless Rake::Task.task_defined?(task_name)

    Rake::Task[task_name].enhance do
      Rake::Task['sidenotes:generate'].invoke if Rake::Task.task_defined?('sidenotes:generate')
    end
  end
end


85
86
87
88
89
90
91
# File 'lib/sidenotes/railtie.rb', line 85

def self.print_drifts(verifier)
  verifier.drifts.each do |drift|
    puts "  #{File.basename(drift.sidecar_path)} - DRIFT:"
    drift.issues.each { |issue| puts "    #{issue}" }
    puts
  end
end


93
94
95
96
97
# File 'lib/sidenotes/railtie.rb', line 93

def self.print_missing_sidecars(verifier)
  verifier.missing_sidecars.each do |name|
    puts "  #{name} - MISSING (model exists, no sidecar file)"
  end
end


77
78
79
80
81
82
83
# File 'lib/sidenotes/railtie.rb', line 77

def self.print_pending_migrations(verifier)
  puts '  PENDING MIGRATIONS detected (run `rails db:migrate` first):'
  verifier.pending_migrations.each do |m|
    puts "    - #{m['version']} #{m['name']}"
  end
  puts
end


99
100
101
102
103
104
105
# File 'lib/sidenotes/railtie.rb', line 99

def self.print_summary(verifier)
  if verifier.drift?
    puts "#{verifier.issue_count} issue(s) found. Run `rake db:migrate && rake sidenotes:generate` to update."
  else
    puts 'All annotations are up to date.'
  end
end


67
68
69
70
71
72
73
74
75
# File 'lib/sidenotes/railtie.rb', line 67

def self.print_verify_report(verifier)
  puts "Checking #{verifier.checked_count} model annotations against database..."
  puts

  print_pending_migrations(verifier) if verifier.pending_migrations?
  print_drifts(verifier)
  print_missing_sidecars(verifier)
  print_summary(verifier)
end

.run_generateObject



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/sidenotes/railtie.rb', line 34

def self.run_generate
  generator = Sidenotes::Generator.new
  generator.generate_all

  puts "Sidenotes: Generated #{generator.models_generated.size} annotation(s)"
  generator.models_generated.each { |m| puts "  #{m}" }

  return unless generator.models_skipped.any?

  puts "Skipped #{generator.models_skipped.size} model(s):"
  generator.models_skipped.each { |m| puts "  #{m} (skipped)" }
end

.run_modelObject



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/sidenotes/railtie.rb', line 47

def self.run_model
  model_name = ENV.fetch('MODEL', nil)
  abort 'Usage: rake sidenotes:model MODEL=User' unless model_name

  generator = Sidenotes::Generator.new
  path = generator.generate_for(model_name)

  if path
    puts "Sidenotes: Generated #{path}"
  else
    puts "Sidenotes: Could not generate annotation for #{model_name}"
  end
end

.run_verifyObject



61
62
63
64
65
# File 'lib/sidenotes/railtie.rb', line 61

def self.run_verify
  verifier = Sidenotes::Verifier.new.verify_all
  print_verify_report(verifier)
  exit(1) if verifier.drift?
end