Sha256: 2eeae6a366cda5e6cb091301f436d2ba82e2ba4faafe71a9685c0c3e2eb06e12

Contents?: true

Size: 1.9 KB

Versions: 7

Compression:

Stored size: 1.9 KB

Contents

require 'active_support'
require 'uri'
require 'yaml'

module Provisional
  class Project
    attr_reader :options
    
    def initialize(options)
      @options = HashWithIndifferentAccess.new
      if options[:config]
        begin
          @options = @options.merge(YAML.load_file(options[:config]))
        rescue
          raise ArgumentError, "could not be loaded or parsed: #{options[:config]}"
        end
      end
      @options = @options.merge(options.reject{|k,v| v.nil?})

      @options[:scm] ||= 'git'
      @options[:template] ||= 'viget'

      unless is_valid_url?(@options['template'])
        if File.exist?(File.expand_path(@options['template']))
          @options['template_path'] = File.expand_path(@options['template'])
        else
          @options['template_path'] = File.expand_path(File.join(File.dirname(__FILE__),'templates',"#{@options['template']}.rb"))
        end
        raise ArgumentError, "is not valid: #{@options['template']}" unless File.exist?(@options['template_path'])
      else
        @options['template_path'] = @options['template']
      end

      raise ArgumentError, "name must be specified" unless @options['name']
      raise ArgumentError, "already exists: #{@options['name']}" if File.exist?(@options['name'])
      raise ArgumentError, "already exists: #{@options['name']}.repo" if @options['scm'] == 'svn' && File.exist?("#{@options['name']}.repo")

      begin
        require "provisional/scm/#{@options['scm']}"
      rescue MissingSourceFile
        raise ArgumentError, "is not supported: #{@options['scm']}"
      end

      scm_class = "Provisional::SCM::#{@options['scm'].classify}".constantize
      scm = scm_class.new(@options)
      scm.init
      scm.generate_rails
      scm.checkin
    end

    def is_valid_url?(url)
      begin
        [URI::HTTP, URI::HTTPS].include?(URI.parse(url).class)
      rescue URI::InvalidURIError
        false
      end
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
vigetlabs-provisional-2.1.0 lib/provisional/project.rb
vigetlabs-provisional-2.1.1 lib/provisional/project.rb
vigetlabs-provisional-2.1.2 lib/provisional/project.rb
vigetlabs-provisional-2.1.3 lib/provisional/project.rb
vigetlabs-provisional-2.1.4 lib/provisional/project.rb
vigetlabs-provisional-2.1.5 lib/provisional/project.rb
vigetlabs-provisional-2.1.6 lib/provisional/project.rb