Sha256: 948e6743bf470427e1649f5c6f9bdef10f5d2087cc3faba84a194a109bbdc260

Contents?: true

Size: 1.86 KB

Versions: 3

Compression:

Stored size: 1.86 KB

Contents

require 'active_record'
require 'grit'

module Gitdocs
  class Configuration
    attr_reader :config_root

    def initialize(config_root = nil)
      @config_root = config_root || File.expand_path(".gitdocs", ENV["HOME"])
      FileUtils.mkdir_p(@config_root)
      ActiveRecord::Base.establish_connection(
        :adapter => 'sqlite3',
        :database => ENV["TEST"] ? ':memory:' : File.join(@config_root, 'config.db')
      )
      ActiveRecord::Migrator.migrate(File.expand_path("../migration", __FILE__))
      import_old_shares unless ENV["TEST"]
    end

    class Share < ActiveRecord::Base
      attr_accessible :polling_interval, :path, :notification, :branch_name, :remote_name

      def available_remotes
        repo = Grit::Repo.new(path)
        repo.remotes.map{|r| r.name}
      rescue
        nil
      end

      def available_branches
        repo = Grit::Repo.new(path)
        repo.heads.map{|r| r.name}
      rescue
        nil
      end
    end

    class Config < ActiveRecord::Base
      attr_accessible :load_browser_on_startup
    end

    def add_path(path, opts = nil)
      path = self.normalize_path(path)
      path_opts = {:path => path}
      path_opts.merge!(opts) if opts
      Share.new(path_opts).save!
    end

    def remove_path(path)
      path = self.normalize_path(path)
      Share.where(:path => path).destroy_all
    end

    def clear
      Share.destroy_all
    end

    def shares
      Share.all
    end

    def global
      raise if Config.all.size > 1
      Config.create! if Config.all.empty?
      Config.all.first
    end

    def normalize_path(path)
      File.expand_path(path, Dir.pwd)
    end

    private
    def import_old_shares
      full_path = File.expand_path('paths', config_root)
      if File.exist?(full_path)
        File.read(full_path).split("\n").each { |path| Share.find_or_create_by_path(path) }
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gitdocs-0.3.6 lib/gitdocs/configuration.rb
gitdocs-0.3.5 lib/gitdocs/configuration.rb
gitdocs-0.3.4 lib/gitdocs/configuration.rb