Sha256: 7f7afdcbf3f068f6ee3f3cbbb875e0c8141ee6d4c1818a149ed7c70124040ceb

Contents?: true

Size: 1.59 KB

Versions: 1

Compression:

Stored size: 1.59 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
    end

    class Config < ActiveRecord::Base
      attr_accessible :start_web_frontend, :web_frontend_port
    end

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

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

    def clear
      Share.destroy_all
    end

    def shares
      Share.all
    end

    def global
      fail 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

1 entries across 1 versions & 1 rubygems

Version Path
gitdocs-0.5.0.pre6 lib/gitdocs/configuration.rb