Class: Wcc::ModelGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/wcc/model_generator.rb

Constant Summary collapse

VALID_MODELS =
Dir.glob("#{__dir__}/templates/*")
.select { |f| File.directory? f }
.map { |f| File.basename f }
.sort
.freeze

Instance Method Summary collapse

Constructor Details

#initializeModelGenerator

Returns a new instance of ModelGenerator.

Raises:

  • (ArgumentError)


15
16
17
18
19
20
21
# File 'lib/generators/wcc/model_generator.rb', line 15

def initialize(*)
  super

  return if VALID_MODELS.include?(singular)

  raise ArgumentError, "Model must be one of #{VALID_MODELS.to_sentence}"
end

Instance Method Details

#create_model_migrationsObject



71
72
73
74
75
76
77
78
# File 'lib/generators/wcc/model_generator.rb', line 71

def create_model_migrations
  copy_file "#{singular}/migrations/generated_add_#{plural}.ts",
    "db/migrate/#{timestamp}01_generated_add_#{plural}.ts"

  Dir.glob("#{__dir__}/templates/#{singular}/migrations/*.rb").each do |f|
    copy_file f, "db/migrate/#{timestamp}_#{File.basename(f)}"
  end
end

#drop_model_overrides_in_app_modelsObject



80
81
82
# File 'lib/generators/wcc/model_generator.rb', line 80

def drop_model_overrides_in_app_models
  directory "#{singular}/models", 'app/models'
end

#ensure_initializer_existsObject



65
66
67
68
69
# File 'lib/generators/wcc/model_generator.rb', line 65

def ensure_initializer_exists
  return if inside('config/initializers') { File.exist?('wcc_contentful.rb') }

  copy_file 'wcc_contentful.rb', 'config/initializers/wcc_contentful.rb'
end

#ensure_migration_tools_installedObject



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/generators/wcc/model_generator.rb', line 23

def ensure_migration_tools_installed
  in_root do
    run 'npm init -y' unless File.exist?('package.json')
    package = JSON.parse(File.read('package.json'))
    deps = package['dependencies']

    unless deps.try(:[], '@watermarkchurch/contentful-migration').present?
      run 'npm install --save @watermarkchurch/contentful-migration ts-node ' \
          'typescript contentful-export'
    end
  end
end

#ensure_wrapper_script_in_bin_dirObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/generators/wcc/model_generator.rb', line 36

def ensure_wrapper_script_in_bin_dir
  copy_file 'contentful_shell_wrapper', 'bin/contentful' unless inside('bin') { File.exist?('contentful') }

  if inside('bin') { File.exist?('release') }
    release = inside('bin') { File.read('release') }
    unless release.include?('contentful migrate')
      insert_into_file('bin/release', after: 'bundle exec rake db:migrate') do
        <<~HEREDOC
          DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
          $DIR/contentful migrate -y
        HEREDOC
      end
    end
  else
    copy_file 'release', 'bin/release'
  end

  if in_root { File.exist?('Procfile') }
    procfile = in_root { File.read('Procfile') }
    unless procfile.include?('release:')
      insert_into_file('Procfile') do
        'release: bin/release'
      end
    end
  else
    copy_file 'Procfile'
  end
end