Sha256: 69ddd2e1f4fa00c2f06634cfb9c9a06baca0dda92d8f1b20d1cca46cc9b3bd8e

Contents?: true

Size: 1.96 KB

Versions: 8

Compression:

Stored size: 1.96 KB

Contents

require "yaml"

module Shelly
  class Cloudfile < Model
    attr_accessor :content
    # Cloudfile attributes used for generating Cloudfile from a template
    attr_accessor :code_name, :ruby_version, :environment, :domains,
      :databases, :size

    # Public: Return true if Cloudfile is present in current directory
    def present?
      File.exists?(path)
    end

    # Public: Clouds in Cloudfile
    # Returns Array of clouds names from Cloudfile
    # nil if there is no cloudfile
    def clouds
      content.keys.sort if content
    end

    # Public: Generate example Cloudfile based on object attributes
    # Returns the generated Cloudfile as String
    def generate
      @email = current_user.email
      @thin = @size == "small" ? 2 : 4
      template = File.read(template_path)
      cloudfile = ERB.new(template, 0, "%<>-")
      cloudfile.result(binding)
    end

    # Public: Create Cloudfile in current path (or append if exists)
    # File is created based on assigned attributes
    def create
      File.open(path, "a+") { |f| f << generate }
    end

    # Public: Return databases for given Cloud in Cloudfile
    # Returns Array of databases
    def databases(cloud)
      content[cloud.to_s]["servers"].map do |server, settings|
        settings["databases"]
      end.flatten.uniq
    end

    # Public: Return databases to backup for given Cloud in Cloudfile
    # Returns Array of databases, except redis db
    def backup_databases(cloud)
      databases(cloud) - ['redis']
    end

    private

    # Internal: Load and parse Cloudfile
    def content
      return unless present?
      @content ||= YAML.load(File.open(path))
    end

    # Internal: Path to Cloudfile in current directory
    # Returns path as String
    def path
      File.join(Dir.pwd, "Cloudfile")
    end

    # Internal: Return path to Cloudfile template
    # Returns path as String
    def template_path
      File.join(File.dirname(__FILE__), "templates", "Cloudfile.erb")
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
shelly-0.1.24 lib/shelly/cloudfile.rb
shelly-0.1.24.pre lib/shelly/cloudfile.rb
shelly-0.1.23 lib/shelly/cloudfile.rb
shelly-0.1.22 lib/shelly/cloudfile.rb
shelly-0.1.21 lib/shelly/cloudfile.rb
shelly-0.1.21.pre lib/shelly/cloudfile.rb
shelly-0.1.20 lib/shelly/cloudfile.rb
shelly-0.1.19 lib/shelly/cloudfile.rb