zzap 0.1.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 +7 -0
- data/exe/zzap +107 -0
- data/lib/zzap/version.rb +3 -0
- metadata +75 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4b9986011cf3b6f1fe0775d5d65eadc682dfc2ae
|
4
|
+
data.tar.gz: 168c8885d21155511f0b79d9478d79b59fd89b6c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 83b292a455fd9bf898484dabfb9f490d1773291ddfbd93af687394c2f0ed5f8571ad5fccd1174f7a54338a8606b867d8fa73c7458da29642265a5265369d07ca
|
7
|
+
data.tar.gz: '0088ce8dee5c25ed434fec44eadf161fb688c7ac7b7921ccab92ad9fca2bb5791003d6fdcc27bb3c12fa87f27ad1351d7c40e705b63567e2222e27bce4020dde'
|
data/exe/zzap
ADDED
@@ -0,0 +1,107 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "pathname"
|
4
|
+
require "open-uri"
|
5
|
+
require "zlib"
|
6
|
+
require "rubygems/package" # TarReader
|
7
|
+
require "net/http"
|
8
|
+
require "tempfile"
|
9
|
+
|
10
|
+
module Zzap
|
11
|
+
class CLI
|
12
|
+
attr_accessor :target_name, :source
|
13
|
+
|
14
|
+
def initialize(target_name, source)
|
15
|
+
@target_name = target_name
|
16
|
+
@source = source
|
17
|
+
end
|
18
|
+
|
19
|
+
def run
|
20
|
+
abort("Target '#{target_name}' already exists! Aborting.") if File.exists?(target_name)
|
21
|
+
|
22
|
+
tarball = Tempfile.new("zzap")
|
23
|
+
|
24
|
+
fetch_source(tarball)
|
25
|
+
extract_tarball(tarball)
|
26
|
+
perform_rename
|
27
|
+
perform_sub
|
28
|
+
|
29
|
+
ensure
|
30
|
+
if tarball
|
31
|
+
tarball.close
|
32
|
+
tarball.unlink
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def perform_rename
|
37
|
+
# Work from most specific first
|
38
|
+
candidates = Dir[target_name + "/**/*app_prototype*"]
|
39
|
+
.sort_by { |p| -p.split("/").size }
|
40
|
+
|
41
|
+
candidates.each do |path|
|
42
|
+
FileUtils.mv(path, path.sub("app_prototype", target_name))
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def perform_sub
|
47
|
+
replacements = {
|
48
|
+
"app_prototype" => target_name,
|
49
|
+
"AppPrototype" => target_name.split(/[-_]/).map(&:capitalize).join
|
50
|
+
}
|
51
|
+
|
52
|
+
pattern = Regexp.union(*replacements.keys)
|
53
|
+
|
54
|
+
Dir[target_name + "/**/*"].each do |path|
|
55
|
+
next if File.directory?(path)
|
56
|
+
|
57
|
+
if File.foreach(path).grep(pattern).any?
|
58
|
+
File.write(path, File.read(path).gsub(pattern, replacements))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def fetch_source(tarball)
|
64
|
+
case source
|
65
|
+
when /\Ahttp/
|
66
|
+
warn "Fetching #{source}"
|
67
|
+
uri = URI.parse(source)
|
68
|
+
tarball.write(uri.read)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def extract_tarball(tarball)
|
73
|
+
File.open(tarball.path, "rb") do |file|
|
74
|
+
Zlib::GzipReader.wrap(file) do |gz|
|
75
|
+
Gem::Package::TarReader.new(gz) do |tar|
|
76
|
+
# Figure out leading root folder name
|
77
|
+
root = tar.find(&:file?).full_name.split(File::SEPARATOR).shift
|
78
|
+
|
79
|
+
tar.each do |entry|
|
80
|
+
if entry.file?
|
81
|
+
# Trim root folder name from full name
|
82
|
+
full_name = Pathname(target_name) + Pathname(entry.full_name).sub(root + "/", "")
|
83
|
+
|
84
|
+
FileUtils.mkdir_p(File.dirname(full_name))
|
85
|
+
File.open(full_name, "wb") do |f|
|
86
|
+
f.write(entry.read)
|
87
|
+
end
|
88
|
+
File.chmod(entry.header.mode, full_name)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.run(argv)
|
97
|
+
target_name = ARGV[0] || abort("Missing target")
|
98
|
+
repo = ARGV[1] || abort("Missing repo")
|
99
|
+
|
100
|
+
source = "https://api.github.com/repos/#{repo}/tarball"
|
101
|
+
|
102
|
+
new(target_name, source).run
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
Zzap::CLI.run(ARGV)
|
data/lib/zzap/version.rb
ADDED
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zzap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Daniels
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-07-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rubygems-tasks
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.2'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- adam@mediadrive.ca
|
44
|
+
executables:
|
45
|
+
- zzap
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- exe/zzap
|
50
|
+
- lib/zzap/version.rb
|
51
|
+
homepage: https://github.com/adam12/zzap
|
52
|
+
licenses:
|
53
|
+
- MIT
|
54
|
+
metadata: {}
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
requirements: []
|
70
|
+
rubyforge_project:
|
71
|
+
rubygems_version: 2.6.12
|
72
|
+
signing_key:
|
73
|
+
specification_version: 4
|
74
|
+
summary: Zzap! Zzap!
|
75
|
+
test_files: []
|