zzap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []