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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/exe/zzap +107 -0
  3. data/lib/zzap/version.rb +3 -0
  4. 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)
@@ -0,0 +1,3 @@
1
+ module Zzap
2
+ VERSION = "0.1.0"
3
+ end
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: []