Sha256: d85205c93ad0580c9810ce5521e329defac82d35f9f915436490f79a62754596

Contents?: true

Size: 1.67 KB

Versions: 1

Compression:

Stored size: 1.67 KB

Contents

require 'rails/generators/base'
require 'rails/generators/active_record'

module Freemium
  module Generators
    MODELS = %w(transaction coupon coupon_redemption credit_card
                subscription subscription_change subscription_plan)

    class InstallGenerator < Rails::Generators::Base
      include Rails::Generators::Migration
      source_root File.expand_path('../templates', __FILE__)

      def create_freemium_initializer
        copy_file 'freemium.rb', 'config/initializers/freemium.rb'
      end

      def create_models
        Freemium::Generators::MODELS.each do |model_name|
          if !File.exists?("app/models/#{model_name}.rb")
            copy_file "models/#{model_name}.rb", "app/models/#{model_name}.rb"
            create_migration "create_#{model_name.pluralize}.rb"
          end
        end
      end

      private

      def create_migration(migration_name, config = {})
        unless migration_exists?(migration_name)
          migration_template(
            "db/migrate/#{migration_name}",
            "db/migrate/#{migration_name}",
            config
          )
        end
      end

      def migration_exists?(name)
        existing_migrations.include?(name)
      end

      def existing_migrations
        @existing_migrations ||= Dir.glob("db/migrate/*.rb").map do |file|
          migration_name_without_timestamp(file)
        end
      end

      def migration_name_without_timestamp(file)
        file.sub(%r{^.*(db/migrate/)(?:\d+_)?}, '')
      end

      # for generating a timestamp when using `create_migration`
      def self.next_migration_number(dir)
        ActiveRecord::Generators::Base.next_migration_number(dir)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
freemium-ajb-0.0.4 lib/generators/freemium/install/install_generator.rb