Class: Fig::Repository

Inherits:
Object
  • Object
show all
Defined in:
lib/fig/repository.rb

Instance Method Summary collapse

Constructor Details

#initialize(os, local_repository_dir, remote_repository_url, remote_repository_user = nil) ⇒ Repository

Returns a new instance of Repository.



5
6
7
8
9
10
11
# File 'lib/fig/repository.rb', line 5

def initialize(os, local_repository_dir, remote_repository_url, remote_repository_user=nil)
  @os = os
  @local_repository_dir = local_repository_dir
  @remote_repository_url = remote_repository_url
  @remote_repository_user = remote_repository_user
  @parser = Parser.new
end

Instance Method Details

#bundle_resources(package_statements) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/fig/repository.rb', line 59

def bundle_resources(package_statements)
  resources = []
  new_package_statements = package_statements.reject do |statement|
    if statement.is_a?(Resource) && !is_url?(statement.url)
      resources << statement.url
      true
    else
      false
    end
  end
  if resources.size > 0
    file = "resources.tar.gz"
    file unless system "tar -zcf #{file} #{resources.join(' ')}"
    new_package_statements.unshift(Archive.new(file))
  end
  new_package_statements
end

#clean(package_name, version_name) ⇒ Object



13
14
15
16
17
# File 'lib/fig/repository.rb', line 13

def clean(package_name, version_name) 
  dir = File.join(@local_repository_dir, package_name)
  dir = File.join(dir, version_name) if version_name
  FileUtils.rm_rf(dir)
end

#list_packagesObject



19
20
21
22
23
24
25
26
27
# File 'lib/fig/repository.rb', line 19

def list_packages
  results = []
  @os.list(@local_repository_dir).each do |package_name|
    @os.list(File.join(@local_repository_dir, package_name)).each do |version_name|
      results << "#{package_name}/#{version_name}"
    end
  end
  results
end

#load_package(package_name, version_name) ⇒ Object



77
78
79
80
# File 'lib/fig/repository.rb', line 77

def load_package(package_name, version_name)
  update_package(package_name, version_name) if @remote_repository_url
  read_local_package(package_name, version_name)
end

#local_dir_for_package(package_name, version_name) ⇒ Object



115
116
117
# File 'lib/fig/repository.rb', line 115

def local_dir_for_package(package_name, version_name)
  File.join(@local_repository_dir, package_name, version_name)
end

#publish_package(package_statements, package_name, version_name) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/fig/repository.rb', line 29

def publish_package(package_statements, package_name, version_name) 
  temp_dir = temp_dir_for_package(package_name, version_name)
  @os.clear_directory(temp_dir)
  fig_file = File.join(temp_dir, ".fig")
  content = bundle_resources(package_statements).map do |statement| 
    if statement.is_a?(Archive) || statement.is_a?(Resource)
      if statement.is_a?(Resource) && !is_url?(statement.url)
        archive_name = statement.url
        archive_remote = "#{remote_dir_for_package(package_name, version_name)}/#{statement.url}"
      else
        archive_name = statement.url.split("/").last
        archive_remote = "#{remote_dir_for_package(package_name, version_name)}/#{archive_name}"
      end
      if is_url?(statement.url)
        archive_local = File.join(temp_dir, archive_name)
        @os.download(statement.url, archive_local)
      else
        archive_local = statement.url
      end
      @os.upload(archive_local, archive_remote, @remote_repository_user)
      statement.class.new(archive_name).unparse('')
    else
      statement.unparse('')
    end
  end
  @os.write(fig_file, content.join("\n"))
  @os.upload(fig_file, remote_fig_file_for_package(package_name, version_name), @remote_repository_user)
#      update_package(package_name, version_name)
end

#read_local_package(package_name, version_name) ⇒ Object



90
91
92
93
# File 'lib/fig/repository.rb', line 90

def read_local_package(package_name, version_name)
  dir = local_dir_for_package(package_name, version_name)
  read_package_from_directory(dir, package_name, version_name)
end

#read_package_from_directory(dir, package_name, version_name) ⇒ Object



101
102
103
# File 'lib/fig/repository.rb', line 101

def read_package_from_directory(dir, package_name, version_name)
  read_package_from_file(File.join(dir, ".fig"), package_name, version_name)
end

#read_package_from_file(file_name, package_name, version_name) ⇒ Object



105
106
107
108
109
110
111
112
113
# File 'lib/fig/repository.rb', line 105

def read_package_from_file(file_name, package_name, version_name)
  if not @os.exist?(file_name)
    $stderr.puts "Package not found: #{package_name}/#{version_name}" 
    exit 1
  end
  modified_time = @os.mtime(file_name)
  content = @os.read(file_name)
  @parser.parse_package(package_name, version_name, File.dirname(file_name), content)
end

#read_remote_package(package_name, version_name) ⇒ Object



95
96
97
98
99
# File 'lib/fig/repository.rb', line 95

def read_remote_package(package_name, version_name)
  url = remote_fig_file_for_package(package_name, version_name)
  content = @os.read_url(url)
  @parser.parse_package(package_name, version_name, nil, content)
end

#update_package(package_name, version_name) ⇒ Object



82
83
84
85
86
87
88
# File 'lib/fig/repository.rb', line 82

def update_package(package_name, version_name)
  remote_fig_file = remote_fig_file_for_package(package_name, version_name)
  local_fig_file = local_fig_file_for_package(package_name, version_name)
  if @os.download(remote_fig_file, local_fig_file)
    install_package(package_name, version_name)
  end
end