furoshiki 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/furoshiki/base_app.rb +58 -10
- data/lib/furoshiki/linux_app.rb +4 -5
- data/lib/furoshiki/mac_app.rb +4 -4
- data/lib/furoshiki/version.rb +1 -1
- data/lib/furoshiki/windows_app.rb +16 -0
- metadata +2 -6
- data/lib/furoshiki/zip.rb +0 -2
- data/lib/furoshiki/zip/directory.rb +0 -19
- data/lib/furoshiki/zip/directory_contents.rb +0 -20
- data/lib/furoshiki/zip/recursive.rb +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e63382b21f1841d960724ff462e12b8df250fc7094e47e6603de086999ebe5f9
|
4
|
+
data.tar.gz: ab1e14b3e6c931d660754a97010aefb74726e7f6aaf94013b4e5c02ab9c8aa41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27fbff8f947bcfa96a7a58d4b0c646ce08a33d46833ff230af0fecae5eb54b882bb6004b4886db163fb875e174afe96f8db0b2bca257031731d5a3e4f9dcb7fe
|
7
|
+
data.tar.gz: 01b6f85ff5e974a2bfd393fa01bc64b86b028f064e7522c1af4323dd3aea667318f4686d52b80676ef214803ace7dc569a8f15d1b2735d25dd555177b0f8c7c7
|
data/lib/furoshiki/base_app.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'furoshiki/configuration'
|
2
2
|
require 'furoshiki/exceptions'
|
3
|
-
require 'furoshiki/zip/directory'
|
4
3
|
require 'furoshiki/jar'
|
5
4
|
require 'fileutils'
|
6
5
|
require 'open-uri'
|
7
6
|
require 'net/http'
|
7
|
+
require 'rubygems/package'
|
8
|
+
require 'rubygems/package/tar_writer'
|
8
9
|
|
9
10
|
module Furoshiki
|
10
11
|
class BaseApp
|
@@ -24,6 +25,7 @@ module Furoshiki
|
|
24
25
|
@package_dir = default_package_dir
|
25
26
|
@default_template_path = cache_dir.join(template_filename)
|
26
27
|
@template_path = default_template_path
|
28
|
+
@archive_path = @package_dir.join(archive_name)
|
27
29
|
@tmp = @package_dir.join('tmp')
|
28
30
|
end
|
29
31
|
|
@@ -38,8 +40,7 @@ module Furoshiki
|
|
38
40
|
inject_jar
|
39
41
|
after_built
|
40
42
|
|
41
|
-
|
42
|
-
after_moved
|
43
|
+
create_archive tmp_app_path
|
43
44
|
ensure
|
44
45
|
remove_tmp
|
45
46
|
end
|
@@ -53,6 +54,9 @@ module Furoshiki
|
|
53
54
|
# @return [Pathname] default path to app template
|
54
55
|
attr_reader :default_template_path
|
55
56
|
|
57
|
+
# @return [Pathname] path to resulting archive file
|
58
|
+
attr_accessor :archive_path
|
59
|
+
|
56
60
|
# @return [Pathname] path to app template
|
57
61
|
attr_accessor :template_path
|
58
62
|
|
@@ -72,6 +76,10 @@ module Furoshiki
|
|
72
76
|
raise NotImplementedError
|
73
77
|
end
|
74
78
|
|
79
|
+
def archive_name
|
80
|
+
raise NotImplementedError
|
81
|
+
end
|
82
|
+
|
75
83
|
def template_basename
|
76
84
|
raise NotImplementedError
|
77
85
|
end
|
@@ -96,6 +104,10 @@ module Furoshiki
|
|
96
104
|
tmp.join app_name
|
97
105
|
end
|
98
106
|
|
107
|
+
def tmp_files
|
108
|
+
Dir[tmp_app_path.join("**/*")]
|
109
|
+
end
|
110
|
+
|
99
111
|
def app_path
|
100
112
|
package_dir.join app_name
|
101
113
|
end
|
@@ -104,6 +116,11 @@ module Furoshiki
|
|
104
116
|
config.working_dir
|
105
117
|
end
|
106
118
|
|
119
|
+
def executable_path
|
120
|
+
# Expected to be overridden on *nix systems
|
121
|
+
""
|
122
|
+
end
|
123
|
+
|
107
124
|
# Temp helpers
|
108
125
|
def create_tmp
|
109
126
|
tmp.mkpath
|
@@ -182,13 +199,14 @@ module Furoshiki
|
|
182
199
|
def after_built
|
183
200
|
end
|
184
201
|
|
185
|
-
def
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
202
|
+
def create_archive(source_path)
|
203
|
+
destination = package_dir.join(archive_name)
|
204
|
+
open_archive(destination) do |tar|
|
205
|
+
tmp_files.each do |source_item|
|
206
|
+
destination_item = source_item.sub(source_path.to_s, app_name)
|
207
|
+
write_item_to_archive(source_item, destination_item, tar)
|
208
|
+
end
|
209
|
+
end
|
192
210
|
end
|
193
211
|
|
194
212
|
def ensure_jar_exists
|
@@ -197,5 +215,35 @@ module Furoshiki
|
|
197
215
|
jar.package(tmp) unless File.exist?(path)
|
198
216
|
path
|
199
217
|
end
|
218
|
+
|
219
|
+
def destination_mode(destination)
|
220
|
+
if executable_path.to_s.end_with?(destination)
|
221
|
+
0755
|
222
|
+
else
|
223
|
+
0644
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def open_archive(destination)
|
228
|
+
File.open(destination, "wb") do |file|
|
229
|
+
Zlib::GzipWriter.wrap(file) do |gz|
|
230
|
+
Gem::Package::TarWriter.new(gz) do |tar|
|
231
|
+
yield tar
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
def write_item_to_archive(source_item, destination_item, tar)
|
238
|
+
if File.directory?(source_item)
|
239
|
+
tar.mkdir(destination_item, 0755)
|
240
|
+
else
|
241
|
+
contents = File.binread(source_item)
|
242
|
+
mode = destination_mode(destination_item)
|
243
|
+
tar.add_file_simple(destination_item, mode, contents.length) do |destination|
|
244
|
+
destination.write(contents)
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|
200
248
|
end
|
201
249
|
end
|
data/lib/furoshiki/linux_app.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'furoshiki/base_app'
|
2
|
-
require 'plist'
|
3
2
|
|
4
3
|
module Furoshiki
|
5
4
|
class LinuxApp < BaseApp
|
@@ -9,6 +8,10 @@ module Furoshiki
|
|
9
8
|
"#{config.name}-linux"
|
10
9
|
end
|
11
10
|
|
11
|
+
def archive_name
|
12
|
+
"#{app_name}.tar.gz"
|
13
|
+
end
|
14
|
+
|
12
15
|
def template_basename
|
13
16
|
'linux-app-template'
|
14
17
|
end
|
@@ -30,10 +33,6 @@ module Furoshiki
|
|
30
33
|
mv File.join(tmp_app_path, "app"), File.join(tmp_app_path, config.name)
|
31
34
|
end
|
32
35
|
|
33
|
-
def after_moved
|
34
|
-
executable_path.chmod 0755
|
35
|
-
end
|
36
|
-
|
37
36
|
def executable_path
|
38
37
|
app_path.join(config.name)
|
39
38
|
end
|
data/lib/furoshiki/mac_app.rb
CHANGED
@@ -9,6 +9,10 @@ module Furoshiki
|
|
9
9
|
"#{config.name}.app"
|
10
10
|
end
|
11
11
|
|
12
|
+
def archive_name
|
13
|
+
"#{config.name}-mac.tar.gz"
|
14
|
+
end
|
15
|
+
|
12
16
|
def template_basename
|
13
17
|
'mac-app-template'
|
14
18
|
end
|
@@ -51,10 +55,6 @@ module Furoshiki
|
|
51
55
|
end
|
52
56
|
end
|
53
57
|
|
54
|
-
def after_moved
|
55
|
-
executable_path.chmod 0755
|
56
|
-
end
|
57
|
-
|
58
58
|
def executable_path
|
59
59
|
app_path.join('Contents/MacOS/app')
|
60
60
|
end
|
data/lib/furoshiki/version.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'furoshiki/base_app'
|
2
|
+
require 'zip'
|
2
3
|
|
3
4
|
module Furoshiki
|
4
5
|
class WindowsApp < BaseApp
|
@@ -8,6 +9,10 @@ module Furoshiki
|
|
8
9
|
"#{config.name}-windows"
|
9
10
|
end
|
10
11
|
|
12
|
+
def archive_name
|
13
|
+
"#{app_name}.zip"
|
14
|
+
end
|
15
|
+
|
11
16
|
def template_basename
|
12
17
|
'windows-app-template'
|
13
18
|
end
|
@@ -32,5 +37,16 @@ module Furoshiki
|
|
32
37
|
def tmp_app_path
|
33
38
|
tmp.join "#{template_basename}"
|
34
39
|
end
|
40
|
+
|
41
|
+
def create_archive(source_path)
|
42
|
+
dest = package_dir.join(archive_name)
|
43
|
+
rm_f dest
|
44
|
+
::Zip::File.open(dest, ::Zip::File::CREATE) do |zipfile|
|
45
|
+
tmp_files.each do |source_item|
|
46
|
+
dest_item = source_item.sub(source_path.to_s, app_name)
|
47
|
+
zipfile.add(dest_item, source_item)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
35
51
|
end
|
36
52
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: furoshiki
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Team Shoes
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2017-
|
12
|
+
date: 2017-08-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,10 +129,6 @@ files:
|
|
129
129
|
- lib/furoshiki/version.rb
|
130
130
|
- lib/furoshiki/warbler_extensions.rb
|
131
131
|
- lib/furoshiki/windows_app.rb
|
132
|
-
- lib/furoshiki/zip.rb
|
133
|
-
- lib/furoshiki/zip/directory.rb
|
134
|
-
- lib/furoshiki/zip/directory_contents.rb
|
135
|
-
- lib/furoshiki/zip/recursive.rb
|
136
132
|
- lib/warbler/traits/furoshiki.rb
|
137
133
|
- vendor/appbundler-1.0.jar
|
138
134
|
homepage: http://github.com/shoes/furoshiki
|
data/lib/furoshiki/zip.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'furoshiki/zip/recursive'
|
2
|
-
|
3
|
-
module Furoshiki
|
4
|
-
module Zip
|
5
|
-
class Directory
|
6
|
-
# @param [#to_s] input_dir the directory to zip
|
7
|
-
# @param [#to_s] output_file the location of the output archive
|
8
|
-
def initialize(input_dir, output_file)
|
9
|
-
@input_dir = Pathname.new(input_dir)
|
10
|
-
@zip = Recursive.new(output_file)
|
11
|
-
end
|
12
|
-
|
13
|
-
# Zip the whole input directory, including the root
|
14
|
-
def write
|
15
|
-
@zip.write [@input_dir.basename], @input_dir.parent, ''
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
require 'furoshiki/zip/recursive'
|
2
|
-
|
3
|
-
module Furoshiki
|
4
|
-
module Zip
|
5
|
-
class DirectoryContents
|
6
|
-
# @param [#to_s] input_dir the directory to zip
|
7
|
-
# @param [#to_s] output_file the location of the output archive
|
8
|
-
def initialize(input_dir, output_file)
|
9
|
-
@input_dir = Pathname.new(input_dir)
|
10
|
-
@zip = Recursive.new(output_file)
|
11
|
-
end
|
12
|
-
|
13
|
-
# Zip the contents of the input directory, without the root.
|
14
|
-
def write
|
15
|
-
entries = @input_dir.children(false)
|
16
|
-
@zip.write entries, @input_dir, ''
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'pathname'
|
2
|
-
require 'zip'
|
3
|
-
|
4
|
-
module Furoshiki
|
5
|
-
module Zip
|
6
|
-
# Adapted from rubyzip's sample, ZipFileGenerator
|
7
|
-
#
|
8
|
-
# This is a utility class that uses rubyzip to recursively
|
9
|
-
# generate a zip file containing the given entries and all of
|
10
|
-
# their children.
|
11
|
-
#
|
12
|
-
# Best used through frontend classes Furoshiki::Zip::Directory or
|
13
|
-
# Furoshiki::Zip::DirectoryContents
|
14
|
-
#
|
15
|
-
# @example
|
16
|
-
# To zip the directory "/tmp/input" so that unarchiving
|
17
|
-
# gives you a single directory "input":
|
18
|
-
#
|
19
|
-
# output_file = '/tmp/out.zip'
|
20
|
-
#
|
21
|
-
# zip = Furoshiki::Zip::Recursive(output_file)
|
22
|
-
# entries = Pathname.new("/tmp/input").entries
|
23
|
-
# zip_prefix = ''
|
24
|
-
# disk_prefix = '/tmp'
|
25
|
-
# zf.write(entries, disk_prefix, zip_prefix, output_file)
|
26
|
-
class Recursive
|
27
|
-
def initialize(output_file)
|
28
|
-
@output_file = output_file.to_s
|
29
|
-
end
|
30
|
-
|
31
|
-
# @param [Array<Pathname>] entries the initial set of files to include
|
32
|
-
# @param [Pathname] disk_prefix a path prefix for existing entries
|
33
|
-
# @param [Pathname] zip_prefix a path prefix to add within archive
|
34
|
-
def write(entries, disk_prefix, zip_prefix)
|
35
|
-
io = ::Zip::File.open(@output_file, ::Zip::File::CREATE);
|
36
|
-
write_entries(entries, disk_prefix, zip_prefix, io)
|
37
|
-
io.close();
|
38
|
-
end
|
39
|
-
|
40
|
-
# A helper method to make the recursion work.
|
41
|
-
private
|
42
|
-
def write_entries(entries, disk_prefix, path, io)
|
43
|
-
entries.each do |e|
|
44
|
-
zip_path = path.to_s == "" ? e.basename : path.join(e.basename)
|
45
|
-
disk_path = disk_prefix.join(zip_path)
|
46
|
-
puts "Deflating #{disk_path}"
|
47
|
-
if disk_path.directory?
|
48
|
-
io.mkdir(zip_path)
|
49
|
-
subdir = disk_path.children(false)
|
50
|
-
write_entries(subdir, disk_prefix, zip_path, io)
|
51
|
-
else
|
52
|
-
io.get_output_stream(zip_path) { |f| f.puts(File.open(disk_path, "rb").read())}
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|