lib/generators/stripe_saas/install_generator.rb
require 'rails/generators'
module StripeSaas
class InstallGenerator < Rails::Generators::Base
def self.source_paths
[StripeSaas::Engine.root, File.expand_path("../templates", __FILE__)]
end
include Rails::Generators::Migration
argument :subscription_owner_model, :type => :string, :required => true, :desc => "Owner of the subscription"
desc "StripeSaas installation generator"
# Override the attr_accessor generated by 'argument' so that
# subscription_owner_model is always returned lowercase.
def subscription_owner_model
@subscription_owner_model.downcase
end
def install
unless defined?(StripeSaas)
gem("stripe_saas")
end
require "securerandom"
@api_key = SecureRandom.uuid
template "config/initializers/stripe_saas.rb"
# Generate subscription.
generate("model", "subscription stripe_id:string plan_id:integer last_four:string card_type:string current_price_cents:integer #{subscription_owner_model}_id:integer")
template "app/models/subscription.rb"
# Add the plans.
generate("model", "plan stripe_id:string name:string price_cents:integer interval:string interval_count:integer trial_period_days:integer metadata_as_json:text statement_descriptor:text highlight:boolean display_order:integer")
template "app/models/plan.rb"
# Add features
generate("model", "feature name:string description:string feature_type:string unit:string display_order:integer use_unit:boolean")
template "app/models/feature.rb"
# Add Plan Features
generate("model", "plan_feature value:string display_value:string plan_id:integer feature_id:integer")
template "app/models/plan_feature.rb"
# Update the owner relationship.
inject_into_class "app/models/#{subscription_owner_model}.rb", Plan, "has_one :subscription\n"
route <<-RUBY
mount StripeSaas::Engine, at: 'stripe_saas'
scope module: 'stripe_saas' do
get 'pricing' => 'subscriptions#index', as: 'pricing'
end
RUBY
end
end
end