class Mamiya::Storages::Filesystem

Public Class Methods

find(config={}) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 8
def self.find(config={})
  Hash[Dir[File.join(config[:path], '*')].map do |app_path|
    app = File.basename(app_path)
    [app, self.new(config.merge(application: app))]
  end]
end

Public Instance Methods

fetch(package_name, destination) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 38
def fetch(package_name, destination)
  package_name = normalize_package_name(package_name)
  raise NotFound unless package_exist?(package_name)

  package_path = File.join(destination, "#{package_name}.tar.gz")
  meta_path = File.join(destination, "#{package_name}.json")

  if File.exists?(package_path) && File.exists?(meta_path)
    raise AlreadyFetched
  end

  FileUtils.cp storage_path.join("#{package_name}.tar.gz"), package_path
  FileUtils.cp storage_path.join("#{package_name}.json"), meta_path
  
  return Mamiya::Package.new(package_path)
end
meta(package_name) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 55
def meta(package_name)
  package_name = normalize_package_name(package_name)
  return unless package_exist?(package_name)

  JSON.parse storage_path.join("#{package_name}.json").read
end
packages() click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 15
def packages
  storage_path.children(false).group_by { |child|
    child.to_s.sub(Package::PATH_SUFFIXES,'')
  }.select { |key, files|
    files.find { |file| file.to_s.end_with?('.tar.gz') } &&
    files.find { |file| file.to_s.end_with?('.json') }
  }.keys.sort
end
push(package) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 24
def push(package)
  raise TypeError, "package should be a kind of Mamiya::Package" unless package.kind_of?(Mamiya::Package)
  raise NotBuilt, "package not built" unless package.exists?

  if package_exist?(package.name)
    raise AlreadyExists 
  end

  storage_path.mkpath

  FileUtils.cp package.path, storage_path.join("#{package.name}.tar.gz")
  FileUtils.cp package.meta_path, storage_path.join("#{package.name}.json")
end
remove(package_name) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 62
def remove(package_name)
  package_name = normalize_package_name(package_name)

  package_path = storage_path.join("#{package_name}.tar.gz")
  meta_path = storage_path.join("#{package_name}.json")

  if [package_path, meta_path].all? { |_| !_.exist? }
    raise Mamiya::Storages::Abstract::NotFound
  end

  package_path.delete if package_path.exist?
  meta_path.delete if meta_path.exist?
end

Private Instance Methods

normalize_package_name(name) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 87
def normalize_package_name(name)
  name.sub(/\.(?:tar\.gz|json)\z/, '')
end
package_exist?(name) click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 82
def package_exist?(name)
  storage_path.join("#{name}.tar.gz").exist? &&
    storage_path.join("#{name}.json").exist?
end
storage_path() click to toggle source
# File lib/mamiya/storages/filesystem.rb, line 78
def storage_path
  @storage_path ||= Pathname.new(@config[:path]).join(@config[:application])
end