Class: Purple::PurpleCabinet

Inherits:
Object
  • Object
show all
Defined in:
lib/purple.rb,
lib/purple/osx.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializePurpleCabinet

Returns a new instance of PurpleCabinet.



14
15
16
17
18
# File 'lib/purple.rb', line 14

def initialize
    @packages = Array.new
    @urls = Hash.new
    @files = Array.new
end

Instance Attribute Details

#cabinet_dirObject (readonly)

Returns the value of attribute cabinet_dir.



20
21
22
# File 'lib/purple.rb', line 20

def cabinet_dir
  @cabinet_dir
end

#filesObject (readonly)

Returns the value of attribute files.



20
21
22
# File 'lib/purple.rb', line 20

def files
  @files
end

#long_nameObject

Returns the value of attribute long_name.



19
20
21
# File 'lib/purple.rb', line 19

def long_name
  @long_name
end

#nameObject

Returns the value of attribute name.



19
20
21
# File 'lib/purple.rb', line 19

def name
  @name
end

#packagesObject (readonly)

Returns the value of attribute packages.



20
21
22
# File 'lib/purple.rb', line 20

def packages
  @packages
end

#urlsObject (readonly)

Returns the value of attribute urls.



20
21
22
# File 'lib/purple.rb', line 20

def urls
  @urls
end

Instance Method Details

#add_url(url) ⇒ Object



45
46
47
48
49
# File 'lib/purple.rb', line 45

def add_url url
    filename = File.basename URI.parse(url).path
    @urls[filename] = url
    @files << filename
end

#assert_dir(path) ⇒ Object

##



123
124
125
126
127
128
129
# File 'lib/purple.rb', line 123

def assert_dir path
    unless FileTest.exist? path
        puts ">- Creating folder #{path}"
        Dir.mkdir path 
    end
    (FileTest.directory? path) ? path : nil
end

#buildObject



87
88
89
90
91
# File 'lib/purple.rb', line 87

def build
    @packages.each { |p|
        return false if not p.build
    }
end

#configObject



81
82
83
84
85
# File 'lib/purple.rb', line 81

def config
    @packages.each { |p|
        return false if not p.config
    }
end

#create_packageObject

##



111
112
113
114
115
116
117
118
119
# File 'lib/purple.rb', line 111

def create_package
    p = PackageInfo.new
    class <<p
        include PackageActions
    end
    p.cabinet = self
    @packages << p
    @packages.last
end

#deployObject



110
111
112
113
114
# File 'lib/purple/osx.rb', line 110

def deploy
    packages.each do |pkg|
        system "open '#{File.join packagedir, pkg.name}.pkg'"
    end
end

#depsObject



99
100
101
# File 'lib/purple.rb', line 99

def deps
    true
end

#fetch(filename) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/purple.rb', line 57

def fetch filename
    if not FileTest.exist? "#{filesdir}/#{filename}"
        g = Getter.new urls[filename], filesdir 
        g.get
        status = 'Getting'
        loop do
            status, done = *(g.get_status)
            printf "\015\033[MFetching %-40s %3d%%  %s", filename,  done, status
            $defout.flush
            sleep 1
            break if 'Getting' != status
        end
        puts
        throw :stop, "There was an error while fetching file #{filename}" unless 'Done' == status 
    end
end

#fetch_allObject



39
40
41
42
43
# File 'lib/purple.rb', line 39

def fetch_all
    urls.each do |url|
        Getter.get url, filesdir
    end
end

#filesdirObject

-> aString # Get source dir



23
24
25
# File 'lib/purple.rb', line 23

def filesdir
    assert_dir File.join(@cabinet_dir, 'Files')
end

#makeObject



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/purple/osx.rb', line 81

def make
    packages.each do |pkg|
        system "rm -r '#{osx_stage}'"
        File.open "#{osx_stage}/Description.plist", "w" do |f|
            f.puts pkg.description
        end

        Dir.mkdir "#{osx_stage}/Resources"
        File.open "#{osx_stage}/Resources/Welcome.txt", "w" do |f|
            f.print <<-EOS
Hello, World!
            EOS
        end

        File.open "#{osx_stage}/Info.plist", "w" do |f|
            f.print PACKAGE_INFO_TEMPLATE.call(pkg)
        end

        File.open "#{osx_stage}/Description.plist", "w" do |f|
            f.print PACKAGE_DESCRIPTION_TEMPLATE.call(pkg)
        end

        system "/Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker " + 
            "-build -p '#{packagedir}/#{pkg.name}.pkg' -f '#{pkg.stage_root}' -r '#{osx_stage}/Resources' " +
            "-d '#{osx_stage}/Description.plist' -i '#{osx_stage}/Info.plist'"
    end
end

#osx_stageObject



75
76
77
78
79
# File 'lib/purple/osx.rb', line 75

def osx_stage
    assert_dir "#{@cabinet_dir}"
    assert_dir "#{@cabinet_dir}/OsxStage"
    assert_dir File.join(@cabinet_dir, 'OsxStage')
end

#packagedirObject



35
36
37
# File 'lib/purple.rb', line 35

def packagedir
    assert_dir File.join(@cabinet_dir, 'Package')
end

#prepareObject



74
75
76
77
78
79
# File 'lib/purple.rb', line 74

def prepare
    @packages.each do |p|
        p.files.each { |f| fetch f }
        p.prepare
    end
end

#run_steps(steps = [:prepare, :build, :deps, :make]) ⇒ Object



103
104
105
106
107
# File 'lib/purple.rb', line 103

def run_steps steps=[:prepare, :build, :deps, :make]
    steps.each do |step|
        self.method(step).call
    end
end

#setupObject



51
52
53
54
55
# File 'lib/purple.rb', line 51

def setup
    raise 'cabinet long_name not properly set' if not long_name
    @cabinet_dir = File.join(PURPLE_FOLDER, long_name)
    assert_dir @cabinet_dir
end

#srcdirObject



27
28
29
# File 'lib/purple.rb', line 27

def srcdir
    assert_dir File.join(@cabinet_dir, 'Source')
end

#stageObject



93
94
95
96
97
# File 'lib/purple.rb', line 93

def stage
    @packages.each { |p|
        return false if not p.stage
    }
end

#stage_rootObject



31
32
33
# File 'lib/purple.rb', line 31

def stage_root
    assert_dir File.join(@cabinet_dir, 'StageRoot')
end