scrawler 0.0.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/.gitignore +4 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/bin/scrawl +13 -0
- data/lib/scrawler.rb +3 -0
- data/lib/scrawler/command.rb +56 -0
- data/lib/scrawler/commands/app.rb +32 -0
- data/lib/scrawler/commands/base.rb +29 -0
- data/lib/scrawler/commands/help.rb +7 -0
- data/lib/scrawler/helpers.rb +56 -0
- data/lib/scrawler/templates/default/general +0 -0
- data/lib/scrawler/version.rb +3 -0
- data/scrawler.gemspec +21 -0
- metadata +69 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
data/bin/scrawl
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
|
+
$LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
|
5
|
+
|
6
|
+
require 'scrawler'
|
7
|
+
require 'scrawler/command'
|
8
|
+
|
9
|
+
args = ARGV.dup
|
10
|
+
ARGV.clear
|
11
|
+
command = args.shift.strip rescue 'help'
|
12
|
+
|
13
|
+
Scrawler::Command.run(command, args)
|
data/lib/scrawler.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'scrawler/helpers'
|
2
|
+
require 'scrawler/commands/base'
|
3
|
+
|
4
|
+
Dir["#{File.dirname(__FILE__)}/commands/*.rb"].each { |c| require c }
|
5
|
+
|
6
|
+
module Scrawler
|
7
|
+
module Command
|
8
|
+
class InvalidCommand < RuntimeError; end
|
9
|
+
class CommandFailed < RuntimeError; end
|
10
|
+
|
11
|
+
extend Scrawler::Helpers
|
12
|
+
|
13
|
+
class << self
|
14
|
+
|
15
|
+
def run(command, args)
|
16
|
+
begin
|
17
|
+
run_internal(command, args.dup)
|
18
|
+
rescue InvalidCommand
|
19
|
+
error "Unknown command. Run 'scrawl help' for usage information."
|
20
|
+
rescue CommandFailed => e
|
21
|
+
error e.message
|
22
|
+
rescue Interrupt => e
|
23
|
+
error "\n[canceled]"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def run_internal(command, args)
|
28
|
+
klass, method = parse(command)
|
29
|
+
runner = klass.new(args)
|
30
|
+
raise InvalidCommand unless runner.respond_to?(method)
|
31
|
+
runner.send(method)
|
32
|
+
end
|
33
|
+
|
34
|
+
def parse(command)
|
35
|
+
parts = command.split(':')
|
36
|
+
case parts.size
|
37
|
+
when 1
|
38
|
+
begin
|
39
|
+
return eval("Scrawler::Command::#{command.capitalize}"), :index
|
40
|
+
rescue NameError, NoMethodError
|
41
|
+
return Scrawler::Command::App, command.to_sym
|
42
|
+
end
|
43
|
+
else
|
44
|
+
begin
|
45
|
+
const = Scrawler::Command
|
46
|
+
command = parts.pop
|
47
|
+
parts.each { |part| const = const.const_get(part.capitalize) }
|
48
|
+
return const, command.to_sym
|
49
|
+
rescue NameError
|
50
|
+
raise InvalidCommand
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Scrawler::Command
|
2
|
+
class App < Base
|
3
|
+
def create
|
4
|
+
template = extract_option('--template', 'default')
|
5
|
+
template = "default" if template.nil?
|
6
|
+
pages = (extract_option('--pages', '') || '').split(',')
|
7
|
+
name = args.shift.downcase.strip rescue nil
|
8
|
+
|
9
|
+
display("Creating #{name}...", false)
|
10
|
+
|
11
|
+
current_path = FileUtils.pwd
|
12
|
+
|
13
|
+
template_path = File.expand_path("../../templates/#{template}", __FILE__)
|
14
|
+
template_path = File.expand_path(".scrawler/templates/#{template}", home_directory) unless Dir.exist?(template_path)
|
15
|
+
error "The \"#{template}\" template does not exists." unless Dir.exist?(template_path)
|
16
|
+
|
17
|
+
FileUtils.mkdir(name)
|
18
|
+
display(".", false)
|
19
|
+
|
20
|
+
Dir["#{template_path}/*"].each do |c|
|
21
|
+
FileUtils.cp(c, "#{current_path}/#{name}/#{File.basename(c)}")
|
22
|
+
display(".", false)
|
23
|
+
end
|
24
|
+
|
25
|
+
pages.each do |page|
|
26
|
+
FileUtils.touch("#{current_path}/#{name}/#{page}")
|
27
|
+
end
|
28
|
+
|
29
|
+
display " done"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Scrawler::Command
|
4
|
+
class Base
|
5
|
+
include Scrawler::Helpers
|
6
|
+
|
7
|
+
attr_accessor :args
|
8
|
+
|
9
|
+
def initialize(args)
|
10
|
+
@args = args
|
11
|
+
end
|
12
|
+
|
13
|
+
def extract_option(options, default=true)
|
14
|
+
values = options.is_a?(Array) ? options : [options]
|
15
|
+
return unless opt_index = args.select { |a| values.include? a }.first
|
16
|
+
opt_position = args.index(opt_index) + 1
|
17
|
+
if args.size > opt_position && opt_value = args[opt_position]
|
18
|
+
if opt_value.include?('--')
|
19
|
+
opt_value = nil
|
20
|
+
else
|
21
|
+
args.delete_at(opt_position)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
opt_value ||= default
|
25
|
+
args.delete(opt_index)
|
26
|
+
block_given? ? yield(opt_value) : opt_value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Scrawler
|
2
|
+
module Helpers
|
3
|
+
def home_directory
|
4
|
+
running_on_windows? ? ENV['USERPROFILE'] : ENV['HOME']
|
5
|
+
end
|
6
|
+
|
7
|
+
def running_on_windows?
|
8
|
+
RUBY_PLATFORM =~ /mswin32|mingw32/
|
9
|
+
end
|
10
|
+
|
11
|
+
def running_on_a_mac?
|
12
|
+
RUBY_PLATFORM =~ /-darwin\d/
|
13
|
+
end
|
14
|
+
|
15
|
+
def display(msg, newline=true)
|
16
|
+
if newline
|
17
|
+
puts(msg)
|
18
|
+
else
|
19
|
+
print(msg)
|
20
|
+
STDOUT.flush
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def redisplay(line, line_break = false)
|
25
|
+
display("\r\e[0K#{line}", line_break)
|
26
|
+
end
|
27
|
+
|
28
|
+
def deprecate(version)
|
29
|
+
display "!!! DEPRECATION WARNING: This command will be removed in version #{version}"
|
30
|
+
display ""
|
31
|
+
end
|
32
|
+
|
33
|
+
def error(msg)
|
34
|
+
STDERR.puts(msg)
|
35
|
+
exit 1
|
36
|
+
end
|
37
|
+
|
38
|
+
def confirm(message="Are you sure you wish to continue? (y/n)?")
|
39
|
+
display("#{message} ", false)
|
40
|
+
ask.downcase == 'y'
|
41
|
+
end
|
42
|
+
|
43
|
+
def format_date(date)
|
44
|
+
date = Time.parse(date) if date.is_a?(String)
|
45
|
+
date.strftime("%Y-%m-%d %H:%M %Z")
|
46
|
+
end
|
47
|
+
|
48
|
+
def ask
|
49
|
+
gets.strip
|
50
|
+
end
|
51
|
+
|
52
|
+
def run_command(command, args=[])
|
53
|
+
Scrawler::Command.run_internal(command, args)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
File without changes
|
data/scrawler.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "scrawler/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "scrawler"
|
7
|
+
s.version = Scrawler::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Daniel Spangenberg"]
|
10
|
+
s.email = ["daniel.spangenberg@parcydo.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Project management framework.}
|
13
|
+
s.description = %q{Scrawler is a project management framework optimized for programmer happiness and sustainable productivity.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "scrawler"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: scrawler
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Spangenberg
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-02-24 00:00:00 +01:00
|
14
|
+
default_executable:
|
15
|
+
dependencies: []
|
16
|
+
|
17
|
+
description: Scrawler is a project management framework optimized for programmer happiness and sustainable productivity.
|
18
|
+
email:
|
19
|
+
- daniel.spangenberg@parcydo.com
|
20
|
+
executables:
|
21
|
+
- scrawl
|
22
|
+
extensions: []
|
23
|
+
|
24
|
+
extra_rdoc_files: []
|
25
|
+
|
26
|
+
files:
|
27
|
+
- .gitignore
|
28
|
+
- Gemfile
|
29
|
+
- Rakefile
|
30
|
+
- bin/scrawl
|
31
|
+
- lib/scrawler.rb
|
32
|
+
- lib/scrawler/command.rb
|
33
|
+
- lib/scrawler/commands/app.rb
|
34
|
+
- lib/scrawler/commands/base.rb
|
35
|
+
- lib/scrawler/commands/help.rb
|
36
|
+
- lib/scrawler/helpers.rb
|
37
|
+
- lib/scrawler/templates/default/general
|
38
|
+
- lib/scrawler/version.rb
|
39
|
+
- scrawler.gemspec
|
40
|
+
has_rdoc: true
|
41
|
+
homepage: ""
|
42
|
+
licenses: []
|
43
|
+
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
rubyforge_project: scrawler
|
64
|
+
rubygems_version: 1.5.0
|
65
|
+
signing_key:
|
66
|
+
specification_version: 3
|
67
|
+
summary: Project management framework.
|
68
|
+
test_files: []
|
69
|
+
|