Sha256: f852e353c66ef8635c99a38053b9cb439f7fbd9aeca244d9549256326762eb00

Contents?: true

Size: 1.33 KB

Versions: 1

Compression:

Stored size: 1.33 KB

Contents

require "rails/generators"
require "rails/generators/rails/model/model_generator"
require "generators/scenic/view/view_generator"
require "generators/scenic/materializable"

module Scenic
  module Generators
    # @api private
    class ModelGenerator < Rails::Generators::NamedBase
      include Scenic::Generators::Materializable
      source_root File.expand_path("templates", __dir__)

      def invoke_rails_model_generator
        invoke "model",
          [file_path.singularize],
          options.merge(
            fixture_replacement: false,
            migration: false
          )
      end

      def inject_model_methods
        if materialized? && generating?
          inject_into_class "app/models/#{file_path.singularize}.rb", class_name do
            evaluate_template("model.erb")
          end
        end
      end

      def invoke_view_generator
        invoke "scenic:view", [table_name], options
      end

      private

      def evaluate_template(source)
        source = File.expand_path(find_in_source_paths(source.to_s))
        context = instance_eval("binding", __FILE__, __LINE__)

        erb = ERB.new(
          ::File.binread(source),
          trim_mode: "-",
          eoutvar: "@output_buffer"
        )

        erb.result(context)
      end

      def generating?
        behavior != :revoke
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
scenic-1.8.0 lib/generators/scenic/model/model_generator.rb