repo_manager 0.7.1
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/.gemfiles +115 -0
- data/.gitattributes +1 -0
- data/.gitignore +7 -0
- data/.rspec +3 -0
- data/.yardopts +11 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +99 -0
- data/Guardfile +63 -0
- data/HISTORY.markdown +12 -0
- data/LICENSE +20 -0
- data/README.markdown +192 -0
- data/Rakefile +94 -0
- data/TODO.markdown +15 -0
- data/VERSION +1 -0
- data/bin/repo +151 -0
- data/cucumber.yml +28 -0
- data/examples/pc_saved_game_backup/.gitignore +2 -0
- data/examples/pc_saved_game_backup/INSTALL.markdown +420 -0
- data/examples/pc_saved_game_backup/README.markdown +108 -0
- data/examples/pc_saved_game_backup/remote/.gitignore +2 -0
- data/examples/pc_saved_game_backup/repo_manager/Gemfile +12 -0
- data/examples/pc_saved_game_backup/repo_manager/Gemfile.lock +66 -0
- data/examples/pc_saved_game_backup/repo_manager/assets/.gitignore +2 -0
- data/examples/pc_saved_game_backup/repo_manager/features/support/aruba.rb +15 -0
- data/examples/pc_saved_game_backup/repo_manager/features/support/env.rb +11 -0
- data/examples/pc_saved_game_backup/repo_manager/features/support/steps.rb +3 -0
- data/examples/pc_saved_game_backup/repo_manager/features/tasks/update.feature +144 -0
- data/examples/pc_saved_game_backup/repo_manager/global/default/asset.conf +2 -0
- data/examples/pc_saved_game_backup/repo_manager/repo.conf +64 -0
- data/examples/pc_saved_game_backup/repo_manager/tasks/.gitignore +0 -0
- data/examples/pc_saved_game_backup/repo_manager/tasks/remote.rb +57 -0
- data/examples/pc_saved_game_backup/repo_manager/tasks/update.rb +65 -0
- data/examples/pc_saved_game_backup/saved_games/hearts/save1 +1 -0
- data/examples/pc_saved_game_backup/saved_games/hearts/save2 +1 -0
- data/examples/pc_saved_game_backup/saved_games/mines/my_profile.ini +1 -0
- data/examples/pc_saved_game_backup/saved_games/mines/saves/save1 +1 -0
- data/examples/pc_saved_game_backup/saved_games/mines/saves/save2 +1 -0
- data/features/actions/git.feature +296 -0
- data/features/actions/help.feature +53 -0
- data/features/actions/list.feature +624 -0
- data/features/actions/path.feature +195 -0
- data/features/actions/status.feature +261 -0
- data/features/actions/task.feature +127 -0
- data/features/assets/configuration.feature +204 -0
- data/features/assets/rendering.feature +42 -0
- data/features/assets/user_attributes.feature +98 -0
- data/features/bin.feature +42 -0
- data/features/logger.feature +218 -0
- data/features/settings.feature +240 -0
- data/features/support/aruba.rb +15 -0
- data/features/support/env.rb +11 -0
- data/features/support/steps.rb +3 -0
- data/features/tasks/add/asset.feature +178 -0
- data/features/tasks/generate/init.feature +56 -0
- data/lib/repo_manager.rb +36 -0
- data/lib/repo_manager/actions.rb +8 -0
- data/lib/repo_manager/actions/action_helper.rb +39 -0
- data/lib/repo_manager/actions/app_action.rb +30 -0
- data/lib/repo_manager/actions/base_action.rb +296 -0
- data/lib/repo_manager/actions/git_action.rb +113 -0
- data/lib/repo_manager/actions/help_action.rb +52 -0
- data/lib/repo_manager/actions/list_action.rb +123 -0
- data/lib/repo_manager/actions/path_action.rb +22 -0
- data/lib/repo_manager/actions/status_action.rb +192 -0
- data/lib/repo_manager/actions/task_action.rb +71 -0
- data/lib/repo_manager/app.rb +116 -0
- data/lib/repo_manager/assets.rb +3 -0
- data/lib/repo_manager/assets/app_asset.rb +15 -0
- data/lib/repo_manager/assets/asset_accessors.rb +67 -0
- data/lib/repo_manager/assets/asset_configuration.rb +137 -0
- data/lib/repo_manager/assets/asset_manager.rb +72 -0
- data/lib/repo_manager/assets/base_asset.rb +199 -0
- data/lib/repo_manager/assets/repo_asset.rb +30 -0
- data/lib/repo_manager/core.rb +2 -0
- data/lib/repo_manager/core/array.rb +21 -0
- data/lib/repo_manager/core/hash.rb +83 -0
- data/lib/repo_manager/errors.rb +10 -0
- data/lib/repo_manager/extensions/hash.rb +86 -0
- data/lib/repo_manager/git.rb +2 -0
- data/lib/repo_manager/git/lib.rb +69 -0
- data/lib/repo_manager/git/status.rb +196 -0
- data/lib/repo_manager/logger.rb +39 -0
- data/lib/repo_manager/settings.rb +98 -0
- data/lib/repo_manager/tasks.rb +3 -0
- data/lib/repo_manager/tasks/add/asset.rb +213 -0
- data/lib/repo_manager/tasks/generate/init.rb +42 -0
- data/lib/repo_manager/tasks/generate/templates/config/repo.conf.tt +61 -0
- data/lib/repo_manager/tasks/generate/templates/init/assets/.gitignore +0 -0
- data/lib/repo_manager/tasks/generate/templates/init/global/default/asset.conf +2 -0
- data/lib/repo_manager/tasks/generate/templates/init/tasks/.gitignore +0 -0
- data/lib/repo_manager/tasks/task_manager.rb +166 -0
- data/lib/repo_manager/tasks/thor_helper.rb +29 -0
- data/lib/repo_manager/test/asset_steps.rb +19 -0
- data/lib/repo_manager/test/base_steps.rb +152 -0
- data/lib/repo_manager/test/repo_api.rb +41 -0
- data/lib/repo_manager/test/repo_steps.rb +83 -0
- data/lib/repo_manager/test/test_api.rb +88 -0
- data/lib/repo_manager/views.rb +2 -0
- data/lib/repo_manager/views/app_view.rb +15 -0
- data/lib/repo_manager/views/base_view.rb +137 -0
- data/lib/repo_manager/views/templates/css/basic.css +26 -0
- data/lib/repo_manager/views/templates/default.erb +40 -0
- data/lib/repo_manager/views/templates/default.slim +37 -0
- data/lib/repo_manager/views/view_helper.rb +55 -0
- data/repo_manager.gemspec +75 -0
- data/spec/basic_app/actions/action_helper_spec.rb +54 -0
- data/spec/basic_app/assets/base_asset_spec.rb +210 -0
- data/spec/basic_app/core_spec.rb +78 -0
- data/spec/basic_app/settings_spec.rb +64 -0
- data/spec/basic_app/views/view_helper_spec.rb +28 -0
- data/spec/basic_gem/aruba_helper_spec.rb +33 -0
- data/spec/basic_gem/basic_gem_spec.rb +84 -0
- data/spec/basic_gem/gemspec_spec.rb +68 -0
- data/spec/repo_manager/git_spec.rb +31 -0
- data/spec/spec_helper.rb +25 -0
- metadata +472 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'git'
|
|
2
|
+
|
|
3
|
+
module RepoManager
|
|
4
|
+
module RepoApi
|
|
5
|
+
|
|
6
|
+
def repo_exists?(folder)
|
|
7
|
+
File.exists?(File.join(current_dir, folder, '.git'))
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def repo_init(folder)
|
|
11
|
+
create_dir(folder) unless repo_exists?(folder)
|
|
12
|
+
repo_path = fullpath(folder)
|
|
13
|
+
Git.init(repo_path)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def repo_add_all(folder)
|
|
17
|
+
repo_path = fullpath(folder)
|
|
18
|
+
repo = Git.init(repo_path)
|
|
19
|
+
in_path(repo_path) do
|
|
20
|
+
repo.add('.').should be_true
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def repo_add_file(filename, folder)
|
|
25
|
+
repo_path = fullpath(folder)
|
|
26
|
+
repo = Git.init(repo_path)
|
|
27
|
+
repo.add(filename).should be_true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def repo_commit_all(folder)
|
|
31
|
+
repo_path = fullpath(folder)
|
|
32
|
+
repo = Git.init(repo_path)
|
|
33
|
+
repo.commit_all("cucumber commit").should be_true
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def repo_file_exists?(folder, filename)
|
|
37
|
+
File.exists?(File.join(current_dir, folder, filename))
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
require 'repo_manager/test/repo_api'
|
|
3
|
+
|
|
4
|
+
World(RepoManager::RepoApi)
|
|
5
|
+
|
|
6
|
+
Given /^a repo in folder "([^"]*)"$/ do |folder|
|
|
7
|
+
repo_init(folder)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
Given /^(?:a|the) repo in folder "([^"]*)" has a remote named "([^"]*)" in folder "([^"]*)"$/ do |repo_folder, remote_name, remote_folder|
|
|
11
|
+
repo_init(repo_folder)
|
|
12
|
+
repo_path = fullpath(repo_folder)
|
|
13
|
+
remote_path = fullpath(remote_folder)
|
|
14
|
+
|
|
15
|
+
Dir.chdir repo_path do
|
|
16
|
+
`git remote add origin #{remote_path}`
|
|
17
|
+
raise "git remote add failed" unless $?.exitstatus == 0
|
|
18
|
+
`git config branch.master.remote origin`
|
|
19
|
+
raise "git config origin failed" unless $?.exitstatus == 0
|
|
20
|
+
`git config branch.master.merge refs/heads/master`
|
|
21
|
+
raise "git config refs failed" unless $?.exitstatus == 0
|
|
22
|
+
`git clone --bare #{repo_path} #{remote_path}`
|
|
23
|
+
raise "git clone failed" unless $?.exitstatus == 0
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
Given /^a repo in folder "([^"]*)" with the following:$/ do |folder, table|
|
|
29
|
+
repo_init(folder) unless repo_exists?(folder)
|
|
30
|
+
|
|
31
|
+
table.hashes.each do |hash|
|
|
32
|
+
filename = hash[:filename]
|
|
33
|
+
status = hash[:status]
|
|
34
|
+
content = hash[:content]
|
|
35
|
+
|
|
36
|
+
status.split("").each do |st|
|
|
37
|
+
case st
|
|
38
|
+
when "?"
|
|
39
|
+
write_file(File.join(folder, filename), content)
|
|
40
|
+
when "A"
|
|
41
|
+
write_file(File.join(folder, filename), content)
|
|
42
|
+
repo_add_file(filename, folder)
|
|
43
|
+
when "M"
|
|
44
|
+
raise "create file '#{filename}' before modifying it" unless repo_file_exists?(folder, filename)
|
|
45
|
+
append_to_file(File.join(folder, filename), content)
|
|
46
|
+
when "C"
|
|
47
|
+
unless repo_file_exists?(folder, filename)
|
|
48
|
+
write_file(File.join(folder, filename), content)
|
|
49
|
+
end
|
|
50
|
+
repo_add_file(filename, folder)
|
|
51
|
+
repo_commit_all(folder)
|
|
52
|
+
when "D"
|
|
53
|
+
unless repo_file_exists?(folder, filename)
|
|
54
|
+
write_file(File.join(folder, filename), content)
|
|
55
|
+
repo_add_file(filename, folder)
|
|
56
|
+
repo_commit_all(folder)
|
|
57
|
+
end
|
|
58
|
+
FileUtils.rm(File.join(File.join(current_dir, folder), filename))
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
Given /^I add all to repo in folder "([^"]*)"$/ do |folder|
|
|
66
|
+
repo_add_all(folder)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
Given /^I add the file "([^"]*)" to repo in folder "([^"]*)"$/ do |filename, folder|
|
|
70
|
+
repo_add_file(filename, folder)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
Given /^I commit all to repo in folder "([^"]*)"$/ do |folder|
|
|
74
|
+
repo_commit_all(folder)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
Given /^I delete the file "([^"]*)" in folder "([^"]*)"$/ do |filename, folder|
|
|
78
|
+
FileUtils.rm(File.join(File.join(current_dir, folder), filename))
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
Given /^I delete the file "([^"]*)"$/ do |filename|
|
|
82
|
+
FileUtils.rm(File.join(current_dir, filename))
|
|
83
|
+
end
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
module RepoManager
|
|
2
|
+
module TestApi
|
|
3
|
+
|
|
4
|
+
# cross platform `which` command
|
|
5
|
+
def which(binary)
|
|
6
|
+
separator = RepoManager::WINDOWS ? ';' : ':'
|
|
7
|
+
paths = ENV['PATH'].split(separator)
|
|
8
|
+
paths.each do |path|
|
|
9
|
+
fullpath = File.join(path, binary)
|
|
10
|
+
return fullpath if File.exists?(fullpath)
|
|
11
|
+
end
|
|
12
|
+
return nil
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# execute a block in a specific working directory (path)
|
|
16
|
+
def in_path(path, &block)
|
|
17
|
+
Dir.chdir(path, &block)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# expand tabs to spaces
|
|
21
|
+
def expand_tabs(data, indent=8)
|
|
22
|
+
data.gsub(/([^\t\n]*)\t/) {
|
|
23
|
+
$1 + " " * (indent - ($1.size % indent))
|
|
24
|
+
}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# account for differences in line endings and tabs
|
|
28
|
+
def normalize(str)
|
|
29
|
+
# convert/normalize DOS CRLF endings
|
|
30
|
+
str.gsub!(/\r\n/, "\n") if str.match("\r\n")
|
|
31
|
+
if str.match("\t")
|
|
32
|
+
str = expand_tabs(str)
|
|
33
|
+
end
|
|
34
|
+
str
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def process_and_check_file_content(file, partial_content, expect_match)
|
|
38
|
+
str = process_regex_tokens(Regexp.escape(partial_content))
|
|
39
|
+
content = IO.read(file)
|
|
40
|
+
if expect_match
|
|
41
|
+
content.should =~ Regexp.compile(str)
|
|
42
|
+
else
|
|
43
|
+
content.should_not =~ Regexp.compile(str)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# substitute back in each tokenized regexp after all text has been escaped
|
|
48
|
+
def process_regex_tokens(str)
|
|
49
|
+
str = str.gsub(/<%NUMBER[^%]*%>/, '\d+')
|
|
50
|
+
str = str.gsub(/<%PK[^%]*%>/, '\d+')
|
|
51
|
+
str = str.gsub(/<%STRING[^%]*%>/, '.+')
|
|
52
|
+
str
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def write_fixed_size_file(file_name, file_size)
|
|
56
|
+
_create_fixed_size_file(file_name, file_size, false)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def _create_fixed_size_file(file_name, file_size, check_presence)
|
|
60
|
+
in_current_dir do
|
|
61
|
+
raise "expected #{file_name} to be present" if check_presence && !File.file?(file_name)
|
|
62
|
+
_mkdir(File.dirname(file_name))
|
|
63
|
+
File.open(file_name, "wb"){ |f| f.seek(file_size - 1); f.write("\0") }
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# @return full path to files in the aruba tmp folder
|
|
68
|
+
def fullpath(filename)
|
|
69
|
+
path = File.expand_path(File.join(current_dir, filename))
|
|
70
|
+
#if path.match(/^\/cygdrive/)
|
|
71
|
+
# # match /cygdrive/c/path/to and return c:\\path\\to
|
|
72
|
+
# path = `cygpath -w #{path}`.chomp
|
|
73
|
+
#elsif path.match(/.\:/)
|
|
74
|
+
# # match c:/path/to and return c:\\path\\to
|
|
75
|
+
# path = path.gsub(/\//, '\\')
|
|
76
|
+
#end
|
|
77
|
+
path
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
# @return the contents of "filename" in the aruba tmp folder
|
|
81
|
+
def get_file_contents(filename)
|
|
82
|
+
in_current_dir do
|
|
83
|
+
IO.read(filename)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
####################################################
|
|
2
|
+
# The file is was originally cloned from "Basic App"
|
|
3
|
+
# More information on "Basic App" can be found in the
|
|
4
|
+
# "Basic App" repository.
|
|
5
|
+
#
|
|
6
|
+
# See http://github.com/robertwahler
|
|
7
|
+
####################################################
|
|
8
|
+
module RepoManager
|
|
9
|
+
|
|
10
|
+
# An abstract superclass for basic view/reporting functionality specific to
|
|
11
|
+
# an application implementation. Put application specific code here.
|
|
12
|
+
class AppView < BaseView
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
####################################################
|
|
2
|
+
# The file is was originally cloned from "Basic App"
|
|
3
|
+
# More information on "Basic App" can be found in the
|
|
4
|
+
# "Basic App" repository.
|
|
5
|
+
#
|
|
6
|
+
# See http://github.com/robertwahler
|
|
7
|
+
####################################################
|
|
8
|
+
|
|
9
|
+
require 'pathname'
|
|
10
|
+
require 'slim'
|
|
11
|
+
require 'erb'
|
|
12
|
+
require 'chronic'
|
|
13
|
+
|
|
14
|
+
module RepoManager
|
|
15
|
+
|
|
16
|
+
# An abstract superclass for basic view/reporting functionality
|
|
17
|
+
# using templates
|
|
18
|
+
class BaseView
|
|
19
|
+
|
|
20
|
+
def initialize(items, configuration={})
|
|
21
|
+
@configuration = configuration
|
|
22
|
+
@items = items
|
|
23
|
+
@template = File.expand_path('../templates/default.slim', __FILE__)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def configuration
|
|
27
|
+
@configuration
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def items
|
|
31
|
+
@items
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def template
|
|
35
|
+
return @template if @template.nil? || Pathname.new(@template).absolute?
|
|
36
|
+
|
|
37
|
+
# try relative to PWD
|
|
38
|
+
fullpath = File.expand_path(File.join(FileUtils.pwd, @template))
|
|
39
|
+
return fullpath if File.exists?(fullpath)
|
|
40
|
+
|
|
41
|
+
# try built in template folder
|
|
42
|
+
fullpath = File.expand_path(File.join('../templates', @template), __FILE__)
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def template=(value)
|
|
46
|
+
@template = value
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def title
|
|
50
|
+
@title || configuration[:title] || "Default Title"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def title=(value)
|
|
54
|
+
@title = value
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def date
|
|
58
|
+
return @date if @date
|
|
59
|
+
|
|
60
|
+
if configuration[:date]
|
|
61
|
+
@date = Chronic.parse(configuration[:date])
|
|
62
|
+
return @date if @date
|
|
63
|
+
end
|
|
64
|
+
@date = Date.today
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def date=(value)
|
|
68
|
+
@date = value
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# ERB binding
|
|
72
|
+
def get_binding
|
|
73
|
+
binding
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# render a partial
|
|
77
|
+
#
|
|
78
|
+
# filename: unless absolute, it will be relative to the main template
|
|
79
|
+
#
|
|
80
|
+
# @example slim escapes HTML, use '=='
|
|
81
|
+
#
|
|
82
|
+
# head
|
|
83
|
+
# == render 'mystyle.css'
|
|
84
|
+
#
|
|
85
|
+
# @return [String] of non-escaped textual content
|
|
86
|
+
def partial(filename)
|
|
87
|
+
filename = partial_path(filename)
|
|
88
|
+
raise "unable to find partial file: #{filename}" unless File.exists?(filename)
|
|
89
|
+
contents = File.open(filename, "rb") {|f| f.read}
|
|
90
|
+
# TODO: detect template EOL and match it to the partial's EOL
|
|
91
|
+
# force unix eol
|
|
92
|
+
contents.gsub!(/\r\n/, "\n") if contents.match("\r\n")
|
|
93
|
+
contents
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# TODO: render based on file ext
|
|
97
|
+
def render
|
|
98
|
+
raise "unable to find template file: #{template}" unless File.exists?(template)
|
|
99
|
+
|
|
100
|
+
extension = File.extname(template)
|
|
101
|
+
extension = extension.downcase if extension
|
|
102
|
+
|
|
103
|
+
case extension
|
|
104
|
+
when '.erb'
|
|
105
|
+
contents = File.open(template, "r") {|f| f.read}
|
|
106
|
+
ERB.new(contents, nil, '-').result(self.get_binding)
|
|
107
|
+
when '.slim'
|
|
108
|
+
Slim::Template.new(template, {:pretty => true}).render(self)
|
|
109
|
+
else
|
|
110
|
+
raise "unsupported template type based on file extension #{extension}"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
private
|
|
115
|
+
|
|
116
|
+
# full expanded path to the given partial
|
|
117
|
+
#
|
|
118
|
+
def partial_path(filename)
|
|
119
|
+
return filename if filename.nil? || Pathname.new(filename).absolute?
|
|
120
|
+
|
|
121
|
+
# try relative to template
|
|
122
|
+
if template
|
|
123
|
+
base_folder = File.dirname(template)
|
|
124
|
+
filename = File.expand_path(File.join(base_folder, filename))
|
|
125
|
+
return filename if File.exists?(filename)
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
# try relative to PWD
|
|
129
|
+
filename = File.expand_path(File.join(FileUtils.pwd, filename))
|
|
130
|
+
return filename if File.exists?(filename)
|
|
131
|
+
|
|
132
|
+
# try built in template folder
|
|
133
|
+
filename = File.expand_path(File.join('../templates', filename), __FILE__)
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
html, body {
|
|
2
|
+
background-color: #eee;
|
|
3
|
+
}
|
|
4
|
+
.container {
|
|
5
|
+
width: 820px;
|
|
6
|
+
}
|
|
7
|
+
.container > footer p {
|
|
8
|
+
text-align: center;
|
|
9
|
+
}
|
|
10
|
+
.page-header {
|
|
11
|
+
background-color: #f5f5f5;
|
|
12
|
+
padding: 20px 20px 10px;
|
|
13
|
+
margin: -20px -20px 20px;
|
|
14
|
+
}
|
|
15
|
+
/* The white background content wrapper */
|
|
16
|
+
.content {
|
|
17
|
+
background-color: #fff;
|
|
18
|
+
padding: 20px;
|
|
19
|
+
margin: 0 -20px; /* negative indent the amount of the padding to maintain the grid system */
|
|
20
|
+
-webkit-border-radius: 0 0 6px 6px;
|
|
21
|
+
-moz-border-radius: 0 0 6px 6px;
|
|
22
|
+
border-radius: 0 0 6px 6px;
|
|
23
|
+
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.15);
|
|
24
|
+
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.15);
|
|
25
|
+
box-shadow: 0 1px 2px rgba(0,0,0,.15);
|
|
26
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<!DOCTYPE html> <html lang="en"> <head> <title>Default View</title>
|
|
2
|
+
<meta charset="utf-8" />
|
|
3
|
+
<meta content="repo" name="keywords" />
|
|
4
|
+
<meta content="RepoManager default template" name="description" />
|
|
5
|
+
<meta content="Robert Wahler" name="author" />
|
|
6
|
+
<link href="http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css" rel="stylesheet" />
|
|
7
|
+
<style type="text/css"><%= partial 'css/basic.css' %></style>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div class="container">
|
|
11
|
+
<div class="content">
|
|
12
|
+
<div class="page-header">
|
|
13
|
+
<h1>Assets Report</h1>
|
|
14
|
+
</div>
|
|
15
|
+
<% unless items.empty? -%>
|
|
16
|
+
<h2>Assets</h2>
|
|
17
|
+
<table class="condensed-table bordered-table zebra-striped">
|
|
18
|
+
<thead>
|
|
19
|
+
<tr>
|
|
20
|
+
<th>Name</th>
|
|
21
|
+
</tr>
|
|
22
|
+
</thead>
|
|
23
|
+
<tbody>
|
|
24
|
+
<% for item in items do -%>
|
|
25
|
+
<%= "<tr>" %>
|
|
26
|
+
<%= "<td>#{item.name}</td>" %>
|
|
27
|
+
<%= "</tr>" %>
|
|
28
|
+
<% end -%>
|
|
29
|
+
</tbody>
|
|
30
|
+
</table>
|
|
31
|
+
<% else -%>
|
|
32
|
+
<p>No Assets found.</p>
|
|
33
|
+
<% end -%>
|
|
34
|
+
</div>
|
|
35
|
+
<footer>
|
|
36
|
+
<p>Copyright © 2011 GearheadForHire, LLC</p>
|
|
37
|
+
</footer>
|
|
38
|
+
</div>
|
|
39
|
+
</body>
|
|
40
|
+
</html>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
doctype html
|
|
2
|
+
html lang="en"
|
|
3
|
+
head
|
|
4
|
+
title Default View
|
|
5
|
+
|
|
6
|
+
meta charset="utf-8"
|
|
7
|
+
meta name="keywords" content="repo"
|
|
8
|
+
meta name="description" content="RepoManager default template"
|
|
9
|
+
meta name="author" content="Robert Wahler"
|
|
10
|
+
|
|
11
|
+
link rel="stylesheet" href="http://twitter.github.com/bootstrap/1.4.0/bootstrap.min.css"
|
|
12
|
+
|
|
13
|
+
style type="text/css"
|
|
14
|
+
== partial 'css/basic.css'
|
|
15
|
+
|
|
16
|
+
body
|
|
17
|
+
div class="container"
|
|
18
|
+
div class="content"
|
|
19
|
+
div class="page-header"
|
|
20
|
+
h1 Assets Report
|
|
21
|
+
- unless items.empty?
|
|
22
|
+
h2 Assets
|
|
23
|
+
table class="condensed-table bordered-table zebra-striped"
|
|
24
|
+
thead
|
|
25
|
+
tr
|
|
26
|
+
th = "Name"
|
|
27
|
+
tbody
|
|
28
|
+
- for item in items do
|
|
29
|
+
tr
|
|
30
|
+
td = item.name
|
|
31
|
+
- else
|
|
32
|
+
p
|
|
33
|
+
| No assets found.
|
|
34
|
+
|
|
35
|
+
footer
|
|
36
|
+
p
|
|
37
|
+
| Copyright © 2011 GearheadForHire, LLC
|