class HappySeed::Generators::ApiGenerator

Public Class Methods

fingerprint() click to toggle source
# File lib/generators/happy_seed/api/api_generator.rb, line 8
def self.fingerprint
  gem_available? 'apitome'
end

Public Instance Methods

install_api() click to toggle source
# File lib/generators/happy_seed/api/api_generator.rb, line 12
      def install_api
        return if already_installed

        gem 'apitome'
        gem_group :development, :test do
          gem 'rspec-rails'
          gem 'factory_girl_rails'
          gem 'faker'
          gem 'rspec_api_documentation'
        end

        generate 'rspec:install'

        require_generator DeviseGenerator

        Bundler.with_clean_env do
          run 'bundle install --without production'
        end

        generate 'model UserToken user:belongs_to access_token:string'

        directory '.'

        route "scope module: :api, defaults: {format: :json} do
    %w(v1).each do |version|
      namespace version.to_sym do
        resources :users, only: %w(create update show) do
          collection do
            post :forgot_password
            put :reset_password
          end
        end
        resource :user_token, path: :token, only: %w(create destroy)
      end
    end
  end\n"

        inject_into_class 'app/models/user.rb', 'User' do
          '  has_many :user_tokens, dependent: :destroy'
        end

        gsub_file 'app/models/user_token.rb', /belongs_to :user\n/, "belongs_to :user, required: true

  validates :access_token, presence: true, uniqueness: {case_sensitive: false}

  before_validation :set_access_token

  private

  def set_access_token
    self.access_token ||= loop do
      random_string = SecureRandom.hex(4).downcase
      break random_string if self.class.where(access_token: random_string).empty?
    end
  end\n"

        append_to_file 'spec/rails_helper.rb', "\nRspecApiDocumentation.configure do |config|
  config.format = :json
  config.docs_dir = Pathname('docs/api')

  config.request_headers_to_include = %w(Authorization)
  config.response_headers_to_include = %w()
end"

        insert_into_file 'spec/factories/users.rb', before: /end\s*\z/ do
          "\n  factory :user_with_token, parent: :user do
    after :build do |user, evaluator|
      user.user_tokens.build
    end
  end\n"
        end

        rake 'db:migrate:reset', env: 'test'
        rake 'docs:generate', env: 'test'
      end

Private Instance Methods

gem_available?(name) click to toggle source
# File lib/generators/happy_seed/api/api_generator.rb, line 90
def gem_available?(name)
  Gem::Specification.find_by_name(name)
rescue Gem::LoadError
  false
rescue
  Gem.available?(name)
end