skele 0.1.0 → 0.2.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.
- data/VERSION +1 -1
- data/bin/skele +74 -70
- data/lib/skele.rb +150 -1
- data/skele.gemspec +1 -1
- metadata +10 -10
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/bin/skele
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
|
3
|
+
require 'skele'
|
4
|
+
|
5
|
+
skeleton = Skele::Runner.new(ARGV[0], Dir.getwd)
|
6
|
+
skeleton.summon
|
7
|
+
|
5
8
|
|
6
9
|
def colorize(text, color_code)
|
7
10
|
"\e[#{color_code}m#{text}\e[0m"
|
@@ -19,73 +22,74 @@ def blue(text)
|
|
19
22
|
colorize text, 34
|
20
23
|
end
|
21
24
|
|
22
|
-
def relative_path(abspath,relativeto)
|
23
|
-
|
24
|
-
|
25
|
+
# def relative_path(abspath,relativeto)
|
26
|
+
# path = abspath.split(File::SEPARATOR)
|
27
|
+
# rel = relativeto.split(File::SEPARATOR)
|
25
28
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
29
|
+
# while (path.length > 0) && (path.first == rel.first)
|
30
|
+
# path.shift
|
31
|
+
# rel.shift
|
32
|
+
# end
|
33
|
+
|
34
|
+
# path.join(File::SEPARATOR)
|
35
|
+
# end
|
36
|
+
|
37
|
+
# def indent(string)
|
38
|
+
# string.split("\n").each do |line|
|
39
|
+
# indented += INDENTATION + line + "\n"
|
40
|
+
# end
|
41
|
+
|
42
|
+
# return indented
|
43
|
+
# end
|
44
|
+
|
45
|
+
# SKELETON = ARGV[0]
|
46
|
+
|
47
|
+
# if SKELETON.nil?
|
48
|
+
# STDOUT.puts "Usage: skele <name>"
|
49
|
+
# else
|
50
|
+
|
51
|
+
# SKELETON_ROOT = ENV['HOME'] + File::SEPARATOR + ".skele" + File::SEPARATOR
|
52
|
+
# SKELETON_DIR = SKELETON_ROOT + SKELETON
|
53
|
+
# SKELETON_TARGET = Dir.getwd + File::SEPARATOR
|
54
|
+
|
55
|
+
# if File.directory? SKELETON_DIR
|
56
|
+
# STDOUT.puts "\nSummoning skeleton '#{SKELETON}' from '#{SKELETON_DIR}', copying files:\n\n"
|
57
|
+
|
58
|
+
# Find.find(SKELETON_DIR) do |file|
|
59
|
+
# relative_path = relative_path file, SKELETON_DIR
|
60
|
+
|
61
|
+
# # skip the containing directory
|
62
|
+
# next if relative_path.empty?
|
63
|
+
|
64
|
+
# # skip .git directory
|
65
|
+
# next if relative_path.split(File::SEPARATOR)[0] == ".git"
|
66
|
+
|
67
|
+
# # copy files
|
68
|
+
# if(File.directory? file)
|
69
|
+
# if File.exists?(SKELETON_TARGET + relative_path)
|
70
|
+
# STDOUT.puts indent "#{red("exists")} #{SKELETON_TARGET + relative_path}"
|
71
|
+
# else
|
72
|
+
# Dir::mkdir(SKELETON_TARGET + relative_path)
|
73
|
+
# STDOUT.puts indent " #{green("mkdir")} #{SKELETON_TARGET + relative_path}"
|
74
|
+
# end
|
75
|
+
# else
|
76
|
+
# if File.exists?(SKELETON_TARGET + relative_path)
|
77
|
+
# STDOUT.puts indent "#{red("exists")} #{SKELETON_TARGET + relative_path}"
|
78
|
+
# else
|
79
|
+
# FileUtils::copy(file, SKELETON_TARGET + relative_path)
|
80
|
+
# STDOUT.puts indent "#{green("create")} #{SKELETON_TARGET + relative_path}"
|
81
|
+
# end
|
82
|
+
# end
|
83
|
+
# end
|
84
|
+
|
85
|
+
# # if there is a gemfile, run bundle install just to be nice
|
86
|
+
# if File.exists? SKELETON_TARGET + "Gemfile"
|
87
|
+
# STDOUT.puts "\nInstalling bundle from gemfile\n\n"
|
88
|
+
# STDOUT.puts indent `bundle instal --path=vendor/bundle`
|
89
|
+
# end
|
86
90
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
end
|
91
|
+
# STDOUT.puts "\n#{green("Skeleton summoned! Have fun!")}\n\n"
|
92
|
+
# else
|
93
|
+
# STDOUT.puts "#{red("Error")} skeleton: '#{SKELETON}' not found, expected in: #{SKELETON_DIR}"
|
94
|
+
# end
|
95
|
+
# end
|
data/lib/skele.rb
CHANGED
@@ -1 +1,150 @@
|
|
1
|
-
|
1
|
+
require "find"
|
2
|
+
require "fileutils"
|
3
|
+
|
4
|
+
module Skele
|
5
|
+
SKELETON_ROOT = ENV['HOME'] + File::SEPARATOR + ".skele" + File::SEPARATOR
|
6
|
+
INDENTATION = " "
|
7
|
+
|
8
|
+
class Skeleton
|
9
|
+
attr_reader :skeleton, :skeleton_dir, :destination
|
10
|
+
|
11
|
+
def initialize(skeleton, destination, root=SKELETON_ROOT)
|
12
|
+
@skeleton = skeleton
|
13
|
+
@skeleton_dir = root + @skeleton
|
14
|
+
@destination = destination + File::SEPARATOR
|
15
|
+
@ignore = [".git", ".hg"]
|
16
|
+
end
|
17
|
+
|
18
|
+
def relative_path(abspath,relativeto)
|
19
|
+
path = abspath.split(File::SEPARATOR)
|
20
|
+
rel = relativeto.split(File::SEPARATOR)
|
21
|
+
|
22
|
+
while (path.length > 0) && (path.first == rel.first)
|
23
|
+
path.shift
|
24
|
+
rel.shift
|
25
|
+
end
|
26
|
+
|
27
|
+
path.join(File::SEPARATOR)
|
28
|
+
end
|
29
|
+
|
30
|
+
def summon
|
31
|
+
copy_files
|
32
|
+
bundle_install
|
33
|
+
end
|
34
|
+
|
35
|
+
def copy_files
|
36
|
+
if File.directory? @skeleton_dir
|
37
|
+
result = Array.new
|
38
|
+
|
39
|
+
Find.find(@skeleton_dir) do |file|
|
40
|
+
relative_path = relative_path file, @skeleton_dir
|
41
|
+
|
42
|
+
# skip the containing directory
|
43
|
+
next if relative_path.empty?
|
44
|
+
|
45
|
+
# skip .git directory
|
46
|
+
next if @ignore.include? relative_path.split(File::SEPARATOR)[0]
|
47
|
+
|
48
|
+
# copy files
|
49
|
+
if(File.directory? file)
|
50
|
+
if File.exists?(@destination + relative_path)
|
51
|
+
result.push({:action => "exists", :file => relative_path})
|
52
|
+
else
|
53
|
+
Dir::mkdir(@destination + relative_path)
|
54
|
+
result.push({:action => "mkdir", :file => relative_path})
|
55
|
+
end
|
56
|
+
else
|
57
|
+
if File.exists?(@destination + relative_path)
|
58
|
+
result.push({:action => "exists", :file => relative_path})
|
59
|
+
else
|
60
|
+
FileUtils::copy(file, @destination + relative_path)
|
61
|
+
result.push({:action => "create", :file => relative_path})
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
return result
|
68
|
+
end
|
69
|
+
|
70
|
+
def bundle_install
|
71
|
+
if File.exists? @destination + "Gemfile"
|
72
|
+
return `bundle install --path=vendor/bundle`
|
73
|
+
end
|
74
|
+
|
75
|
+
return nil
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
class Runner
|
80
|
+
def initialize(skeleton, destination, root=SKELETON_ROOT)
|
81
|
+
@skeleton = Skeleton.new(skeleton, destination, root)
|
82
|
+
end
|
83
|
+
|
84
|
+
def summon
|
85
|
+
STDOUT.puts "\nSummoning skeleton '#{@skeleton.skeleton}' from '#{@skeleton.destination}'"
|
86
|
+
|
87
|
+
copy_files
|
88
|
+
bundle_install
|
89
|
+
|
90
|
+
STDOUT.puts "\nSkeleton complete. Enjoy!\n\n"
|
91
|
+
end
|
92
|
+
|
93
|
+
def bundle_install
|
94
|
+
STDOUT.puts "\nRunning bundle install\n\n"
|
95
|
+
|
96
|
+
bundle = @skeleton.bundle_install
|
97
|
+
|
98
|
+
unless bundle.nil?
|
99
|
+
STDOUT.puts indent bundle
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def copy_files
|
104
|
+
STDOUT.puts "\nCopying files\n\n"
|
105
|
+
file_result = @skeleton.copy_files
|
106
|
+
|
107
|
+
if file_result.nil?
|
108
|
+
STDOUT.puts indent(red("Error:") + "Skeleton '#{@skeleton.skeleton}' does not exist or is not a directory")
|
109
|
+
else
|
110
|
+
|
111
|
+
file_result.each do |result|
|
112
|
+
case result[:action]
|
113
|
+
when "mkdir"
|
114
|
+
STDOUT.puts indent(" " + green(result[:action]) + " " + result[:file])
|
115
|
+
when "create"
|
116
|
+
STDOUT.puts indent(green(result[:action]) + " " + result[:file])
|
117
|
+
when "exists"
|
118
|
+
STDOUT.puts indent(red(result[:action]) + " " + result[:file])
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def indent(string)
|
125
|
+
indented = ""
|
126
|
+
|
127
|
+
string.split("\n").each do |line|
|
128
|
+
indented += INDENTATION + line + "\n"
|
129
|
+
end
|
130
|
+
|
131
|
+
return indented
|
132
|
+
end
|
133
|
+
|
134
|
+
def colorize(text, color_code)
|
135
|
+
"\e[#{color_code}m#{text}\e[0m"
|
136
|
+
end
|
137
|
+
|
138
|
+
def red(text)
|
139
|
+
colorize text, 31
|
140
|
+
end
|
141
|
+
|
142
|
+
def green(text)
|
143
|
+
colorize text, 32
|
144
|
+
end
|
145
|
+
|
146
|
+
def blue(text)
|
147
|
+
colorize text, 34
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
data/skele.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: skele
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-11-26 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: shoulda
|
16
|
-
requirement: &
|
16
|
+
requirement: &2163123900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2163123900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &2163123420 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 1.0.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2163123420
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: jeweler
|
38
|
-
requirement: &
|
38
|
+
requirement: &2163122940 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ~>
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: 1.6.4
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2163122940
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: rcov
|
49
|
-
requirement: &
|
49
|
+
requirement: &2163122460 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2163122460
|
58
58
|
description: Skele is a simple command line too to build directory structures based
|
59
59
|
on template directories
|
60
60
|
email: hi@alexrehberg.com
|
@@ -92,7 +92,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
92
92
|
version: '0'
|
93
93
|
segments:
|
94
94
|
- 0
|
95
|
-
hash:
|
95
|
+
hash: -126893824170063689
|
96
96
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
97
|
none: false
|
98
98
|
requirements:
|