batcave 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .*.swp
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gem "clamp"
data/Gemfile.lock ADDED
@@ -0,0 +1,10 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ clamp (0.3.0)
5
+
6
+ PLATFORMS
7
+ ruby
8
+
9
+ DEPENDENCIES
10
+ clamp
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # batcave
2
+
3
+ Wikipedia on "Batcave" uses:
4
+
5
+ > Upon his initial foray into crime-fighting, Wayne used the caves as a sanctum
6
+ > and to store his then-minimal equipment. As time went on, Wayne found the place
7
+ > ideal to create a stronghold for his war against crime, and has incorporated a
8
+ > plethora of equipment as well as expanding the cave for specific uses.
9
+
10
+ As in coding, you start with some minimal tools and gradually find better
11
+ tools, better flows, etc.
12
+
13
+ This project is an experiment to try and make batcave construction possible.
14
+
15
+ Maybe, for example, I'm writing an HTTP library in Ruby, and I want to:
16
+
17
+ * run whatever services I need to test this code (like a webserver)
18
+ * run tests whenever I modify the code.
19
+ * make sure all methods have docstrings (with YARD)
20
+ * have some useful debugging tools.
21
+
22
+ But new projects should be easier:
23
+
24
+ * create a 'go' project with a layout that works well with 'goinstall'
25
+ * create a 'ruby' project with a standard layout, Gemfile, gemspec, etc
26
+ * etc.
27
+
28
+ Release management should be easier, too.
data/batcave.gemspec ADDED
@@ -0,0 +1,17 @@
1
+ Gem::Specification.new do |spec|
2
+ files = %x{git ls-files}.split("\n")
3
+
4
+ spec.name = "batcave"
5
+ spec.version = "0.0.1"
6
+ spec.summary = "Experiments in tools, boilerplatery, debugging, etc."
7
+ spec.summary = spec.description
8
+ spec.add_dependency("clamp")
9
+ spec.files = files
10
+ spec.bindir = "bin"
11
+ spec.executables << "dk"
12
+
13
+ spec.author = "Jordan Sissel"
14
+ spec.email = "jls@semicomplete.com"
15
+ spec.homepage = "https://github.com/jordansissel/batcave"
16
+ end
17
+
data/bin/dk ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "rubygems"
4
+ require "clamp"
5
+
6
+ $: << File.join(File.dirname(__FILE__), "..", "lib")
7
+ require "batcave/main"
8
+ BatCave::Main.run
@@ -0,0 +1,63 @@
1
+ require "clamp"
2
+ require "batcave/namespace"
3
+ require "batcave/support/git"
4
+ require "fileutils"
5
+
6
+ class BatCave::Command::Add < Clamp::Command
7
+ include BatCave::Support::Git
8
+
9
+ option ["-n", "--name"], "NAME",
10
+ "the application or library name", :attribute_name => :name
11
+
12
+ parameter "THING",
13
+ "The thing to add to your batcave", :attribute_name => :thing
14
+
15
+ def execute
16
+ # TODO(sissel): Move this stuff into a proper batcave library
17
+
18
+ found = false
19
+ # look for the 'thing/' or if it's a directory try 'thing/self/'
20
+ [ @thing, File.join(@thing, "self") ].each do |thing|
21
+ path = File.join(BatCave::THINGSDIR, thing)
22
+ config = File.join(path, "THING")
23
+ if File.exists?(config)
24
+ found = true
25
+ use(path)
26
+ break
27
+ end
28
+ end
29
+
30
+ if !found
31
+ puts "Could not find any thing '#{@thing}'"
32
+ end
33
+ end # def execute
34
+
35
+ def use(dir)
36
+ config = File.join(dir, "THING")
37
+ paths = Dir.glob(File.join(dir, "**", "*"))
38
+
39
+ paths.each do |path|
40
+ next if path == config # skip the 'THING' file
41
+ localpath = File.join(project_root, path[dir.length + 1 .. -1])
42
+
43
+ if localpath.include?("{name}")
44
+ if @name.nil?
45
+ raise "Path requires '--name' flag to be set: #{localpath.inspect}"
46
+ end
47
+ localpath.gsub!("{name}", @name)
48
+ end
49
+
50
+ # Replace '{...}' in localpath
51
+
52
+ # TODO(sissel): if this is a directory, create it.
53
+ # TODO(sissel): if this a file, copy it.
54
+ if File.directory?(path)
55
+ FileUtils.mkdir_p(localpath) unless File.directory?(localpath)
56
+ else
57
+ localdir = File.dirname(localpath)
58
+ FileUtils.mkdir_p(localdir) unless File.directory?(localdir)
59
+ FileUtils.cp(path, localpath)
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,8 @@
1
+ require "clamp"
2
+ require "batcave/namespace"
3
+
4
+ class BatCave::Command::Update < Clamp::Command
5
+ def execute
6
+ p :Updating
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ require "clamp"
2
+ require "batcave/namespace"
3
+ require "batcave/command/add"
4
+ require "batcave/command/update"
5
+
6
+ class BatCave::Main < Clamp::Command
7
+ # Add something to your bat cave.
8
+ subcommand "add", "Add something to your batcave", BatCave::Command::Add
9
+
10
+ # Update the batcave from upstream. This will keep you updated with
11
+ # the latest in gadgets and useful tools.
12
+ subcommand "update", "Update the things in your bat cave.", BatCave::Command::Update
13
+ end
@@ -0,0 +1,5 @@
1
+ module BatCave
2
+ module Command; end
3
+ module Support; end # TODO(sissel): Support is a shitty namespace name.
4
+ THINGSDIR = File.expand_path(File.join(File.dirname(__FILE__), "..", "..", "things"))
5
+ end
@@ -0,0 +1,11 @@
1
+ require "batcave/namespace"
2
+
3
+ module BatCave::Support::Git
4
+ def project_root
5
+ root = %x{git rev-parse --show-toplevel}.chomp
6
+ if $?.exitstatus != 0
7
+ raise "'git rev-parse --show-toplevel' failed. No project root found. Is this in a git clone?"
8
+ end
9
+ return root
10
+ end # def project_root
11
+ end # class BatCave::Support::Git
File without changes
@@ -0,0 +1,10 @@
1
+ package main
2
+
3
+ import (
4
+ "fmt"
5
+ )
6
+
7
+ func main() {
8
+ fmt.Println("Hello world")
9
+ }
10
+
@@ -0,0 +1 @@
1
+ source :rubygems
@@ -0,0 +1 @@
1
+ boilerplate = [ "Gemfile" ]
@@ -0,0 +1,24 @@
1
+ require "rubygems"
2
+ require "minitest/spec"
3
+ require "minitest/autorun"
4
+
5
+ # Get coverage report
6
+ require "simplecov"
7
+ SimpleCov.start
8
+
9
+ # Add '../lib' to the require path.
10
+ $: << File.join(File.dirname(__FILE__), "..", "lib")
11
+
12
+ def use(path)
13
+ puts "Loading tests from #{path}"
14
+ require File.expand_path(path)
15
+ end
16
+
17
+ dirname = File.dirname(__FILE__)
18
+ use File.join(dirname, "docs.rb")
19
+
20
+ # Load tests from ./*/**/*.rb (usually ./libraryname/....)
21
+ glob = File.join(dirname, "*", "**", "*.rb")
22
+ Dir.glob(glob).each do |path|
23
+ use path
24
+ end
@@ -0,0 +1,40 @@
1
+ require "rubygems"
2
+ require "yard"
3
+ require File.join(File.expand_path(File.dirname(__FILE__)), "testing")
4
+
5
+ describe "documentation tests" do
6
+ before do
7
+ # Use YARD to parse all ruby files found in '../lib'
8
+ libdir = File.join(File.dirname(__FILE__), "..", "lib")
9
+ YARD::Registry.load(Dir.glob(File.join(libdir, "**", "*.rb")))
10
+ @registry = YARD::Registry.all
11
+ end
12
+
13
+ test "All classes, methods, modules, and constants must be documented" do
14
+ # Note, the 'find the undocumented things' code here is
15
+ # copied mostly from: YARD 0.7.5's lib/yard/cli/stats.rb
16
+ #
17
+ # Find all undocumented classes, modules, and constants
18
+ undocumented = @registry.select do |o|
19
+ [:class, :module, :constant].include?(o.type) && o.docstring.blank?
20
+ end
21
+
22
+ # Find all undocumented methods
23
+ methods = @registry.select { |m| m.type == :method }
24
+ methods.reject! { |m| m.is_alias? || !m.is_explicit? }
25
+ undocumented += methods.select do |m|
26
+ m.docstring.blank? && !m.overridden_method
27
+ end
28
+
29
+ if (undocumented.length > 0)
30
+ message = ["The following are not documented"]
31
+ undocumented.each do |o|
32
+ message << "* #{o.type.to_s} #{o.to_s} <#{o.file}:#{o.line}>"
33
+ end
34
+
35
+ flunk(message.join("\n"))
36
+ else
37
+ pass
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ require "rubygems"
2
+ require "minitest/spec"
3
+
4
+ # Add '../lib' to the require path.
5
+ $: << File.join(File.dirname(__FILE__), "..", "lib")
6
+
7
+ # I don't really like monkeypatching, but whatever, this is probably better
8
+ # than overriding the 'describe' method.
9
+ class MiniTest::Spec
10
+ class << self
11
+ # 'it' sounds wrong, call it 'test'
12
+ alias :test :it
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: batcave
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jordan Sissel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-02-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: clamp
16
+ requirement: &17501600 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *17501600
25
+ description:
26
+ email: jls@semicomplete.com
27
+ executables:
28
+ - dk
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - Gemfile
34
+ - Gemfile.lock
35
+ - README.md
36
+ - batcave.gemspec
37
+ - bin/dk
38
+ - lib/batcave/command/add.rb
39
+ - lib/batcave/command/update.rb
40
+ - lib/batcave/main.rb
41
+ - lib/batcave/namespace.rb
42
+ - lib/batcave/support/git.rb
43
+ - things/go/self/THING
44
+ - things/go/self/src/{name}/{name}.go
45
+ - things/ruby/self/Gemfile
46
+ - things/ruby/self/THING
47
+ - things/ruby/self/test/all.rb
48
+ - things/ruby/self/test/docs.rb
49
+ - things/ruby/self/test/testing.rb
50
+ homepage: https://github.com/jordansissel/batcave
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ! '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubyforge_project:
70
+ rubygems_version: 1.8.10
71
+ signing_key:
72
+ specification_version: 3
73
+ summary: ''
74
+ test_files: []
75
+ has_rdoc: