meta_code_commenter 0.0.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/.gitignore +5 -0
- data/.watchr +21 -0
- data/README.rdoc +62 -0
- data/Rakefile +57 -0
- data/VERSION +1 -0
- data/bin/mcc +9 -0
- data/lib/mcc.rb +1 -0
- data/lib/meta_code_commenter.rb +59 -0
- data/test/helper.rb +7 -0
- data/test/test_meta_code_commenter.rb +56 -0
- metadata +83 -0
data/.watchr
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
def run(*args)
|
3
|
+
system "ruby -rubygems -Ilib:test #{args.join(' ')}"
|
4
|
+
end
|
5
|
+
|
6
|
+
def run_tests
|
7
|
+
system "rake test"
|
8
|
+
end
|
9
|
+
|
10
|
+
def underscore(file)
|
11
|
+
file.gsub('/', '_')
|
12
|
+
end
|
13
|
+
|
14
|
+
watch('test/test_.*\.rb') {|md| run md[0] }
|
15
|
+
watch('lib/(.*)\.rb') { run_tests }
|
16
|
+
watch('test/helper.rb') { run_tests }
|
17
|
+
|
18
|
+
run_tests
|
19
|
+
|
20
|
+
Signal.trap("QUIT") { abort("\n") }
|
21
|
+
Signal.trap("INT") { run_tests }
|
data/README.rdoc
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
= Meta code commenter (mcc)
|
2
|
+
|
3
|
+
Comments your meta code.
|
4
|
+
|
5
|
+
== Usage
|
6
|
+
|
7
|
+
require 'mcc'
|
8
|
+
|
9
|
+
params = ARGV.inject({}) do |hash, arg|
|
10
|
+
key, value = arg.split(/=/)
|
11
|
+
hash[key] = value
|
12
|
+
hash
|
13
|
+
end
|
14
|
+
|
15
|
+
puts MetaCodeCommenter.comment(STDIN.readlines)
|
16
|
+
|
17
|
+
=== Command line
|
18
|
+
|
19
|
+
$ mcc key1=value key2=value < my_meta_code
|
20
|
+
|
21
|
+
=== Example
|
22
|
+
|
23
|
+
$ cat code
|
24
|
+
def #{name}(proc=nil, &blk)
|
25
|
+
proc ||= blk
|
26
|
+
@#{name} = Proc.new do |ptr,data,len|
|
27
|
+
if data
|
28
|
+
proc.call(data.get_string(0, len))
|
29
|
+
else
|
30
|
+
proc.call
|
31
|
+
end
|
32
|
+
@abort ? 1 : 0
|
33
|
+
end
|
34
|
+
@parser[:#{name}] = @#{name}
|
35
|
+
end
|
36
|
+
|
37
|
+
$ mcc name=on_headers < code
|
38
|
+
def #{name}(proc=nil, &blk) # def name(proc=nil, &blk)
|
39
|
+
proc ||= blk # proc ||= blk
|
40
|
+
@#{name} = Proc.new do |ptr,data,len| # @name = Proc.new do |ptr,data,len|
|
41
|
+
if data # if data
|
42
|
+
proc.call(data.get_string(0, len)) # proc.call(data.get_string(0, len))
|
43
|
+
else # else
|
44
|
+
proc.call # proc.call
|
45
|
+
end # end
|
46
|
+
@abort ? 1 : 0 # @abort ? 1 : 0
|
47
|
+
end # end
|
48
|
+
@parser[:#{name}] = @#{name} # @parser[:name] = @name
|
49
|
+
end # end
|
50
|
+
|
51
|
+
== Installation (not yet)
|
52
|
+
|
53
|
+
gem install meta_code_commenter
|
54
|
+
|
55
|
+
== Authors
|
56
|
+
|
57
|
+
* Peter Suschlik
|
58
|
+
|
59
|
+
== TODO
|
60
|
+
|
61
|
+
* Fix failing test (double quotes don't work yet)
|
62
|
+
* Use thor or something or mcc
|
data/Rakefile
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'jeweler'
|
5
|
+
Jeweler::Tasks.new do |gem|
|
6
|
+
gem.name = "meta_code_commenter"
|
7
|
+
gem.summary = 'Comments your meta code'
|
8
|
+
gem.email = "peter-mcc@suschlik.de"
|
9
|
+
gem.homepage = "http://github.com/splattael/meta_code_commenter"
|
10
|
+
gem.authors = ["Peter Suschlik"]
|
11
|
+
|
12
|
+
gem.has_rdoc = true
|
13
|
+
gem.extra_rdoc_files = [ "README.rdoc" ]
|
14
|
+
|
15
|
+
gem.add_development_dependency "riot"
|
16
|
+
gem.add_development_dependency "riot_notifier"
|
17
|
+
|
18
|
+
gem.test_files = Dir.glob('test/test_*.rb')
|
19
|
+
end
|
20
|
+
Jeweler::GemcutterTasks.new
|
21
|
+
rescue LoadError
|
22
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
23
|
+
end
|
24
|
+
|
25
|
+
# Test
|
26
|
+
require 'rake/testtask'
|
27
|
+
desc 'Default: run unit tests.'
|
28
|
+
task :default => :test
|
29
|
+
task :test => :check_dependencies
|
30
|
+
|
31
|
+
Rake::TestTask.new(:test) do |test|
|
32
|
+
test.test_files = FileList.new('test/test_*.rb')
|
33
|
+
test.libs << 'test'
|
34
|
+
test.verbose = true
|
35
|
+
end
|
36
|
+
|
37
|
+
# RDoc
|
38
|
+
require 'rake/rdoctask'
|
39
|
+
Rake::RDocTask.new do |rd|
|
40
|
+
rd.title = "Riot Notifier"
|
41
|
+
rd.main = "README.rdoc"
|
42
|
+
rd.rdoc_files.include("README.rdoc", "lib/*.rb")
|
43
|
+
rd.rdoc_dir = "doc"
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
# Misc
|
48
|
+
desc "Tag files for vim"
|
49
|
+
task :ctags do
|
50
|
+
dirs = $LOAD_PATH.select {|path| File.directory?(path) }
|
51
|
+
system "ctags -R #{dirs.join(" ")}"
|
52
|
+
end
|
53
|
+
|
54
|
+
desc "Find whitespace at line ends"
|
55
|
+
task :eol do
|
56
|
+
system "grep -nrE ' +$' *"
|
57
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.0
|
data/bin/mcc
ADDED
data/lib/mcc.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'meta_code_commenter'
|
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
module MetaCodeCommenter
|
3
|
+
|
4
|
+
def self.comment(lines, params={})
|
5
|
+
lines = lines.split(/\n/) if lines.respond_to?(:to_str)
|
6
|
+
Generator.new(lines, params).to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
class Evaluator
|
10
|
+
instance_methods.each {|m| undef_method m unless m =~ /^__/ }
|
11
|
+
|
12
|
+
def initialize(vars)
|
13
|
+
vars.each do |key, value|
|
14
|
+
eval <<-RUBY
|
15
|
+
def #{key}
|
16
|
+
#{value.inspect}
|
17
|
+
end
|
18
|
+
RUBY
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def __eval__(line)
|
23
|
+
eval(%{"#{line}"})
|
24
|
+
end
|
25
|
+
|
26
|
+
def method_missing(method, *args, &block)
|
27
|
+
method.to_s
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class Generator
|
32
|
+
include Enumerable
|
33
|
+
|
34
|
+
def initialize(lines, params={})
|
35
|
+
@lines = lines.map(&:chomp)
|
36
|
+
@evaluator = Evaluator.new(params)
|
37
|
+
@max_length = (lines.max_by(&:length) || "").length
|
38
|
+
@max_length += 1 unless @max_length % 2 != 0
|
39
|
+
@remove_spaces = @lines.map { |line| (line[/^\s+/] || "").length }.min
|
40
|
+
end
|
41
|
+
|
42
|
+
def generate(line)
|
43
|
+
pad = " " * (@max_length - line.length)
|
44
|
+
comment = " # "
|
45
|
+
evaluated = @evaluator.__eval__(line)[@remove_spaces..-1]
|
46
|
+
|
47
|
+
line + pad + comment + evaluated
|
48
|
+
end
|
49
|
+
|
50
|
+
def generate!
|
51
|
+
@lines.map { |line| generate(line) }
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_s
|
55
|
+
generate!.join("\n")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class String
|
4
|
+
def deindent
|
5
|
+
gsub(/^\s*/, '')
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Generates output" do
|
10
|
+
def asserts_output(description, input, expected, args={})
|
11
|
+
input.chomp!
|
12
|
+
expected.chomp!
|
13
|
+
|
14
|
+
asserts(description) do
|
15
|
+
MetaCodeCommenter::Generator.new(input.split(/\n/), args).to_s
|
16
|
+
end.equals(expected)
|
17
|
+
end
|
18
|
+
|
19
|
+
asserts_output("empty", <<-'IN', <<-'OUT')
|
20
|
+
IN
|
21
|
+
OUT
|
22
|
+
|
23
|
+
asserts_output("one line", <<-'IN', <<-'OUT')
|
24
|
+
hello
|
25
|
+
IN
|
26
|
+
hello # hello
|
27
|
+
OUT
|
28
|
+
|
29
|
+
asserts_output("one line interpolated", <<-'IN', <<-'OUT', :value => "world")
|
30
|
+
hello = '#{value}'
|
31
|
+
IN
|
32
|
+
hello = '#{value}' # hello = 'world'
|
33
|
+
OUT
|
34
|
+
|
35
|
+
asserts_output("align lines", <<-'IN', <<-'OUT')
|
36
|
+
def method_call
|
37
|
+
method_body
|
38
|
+
end
|
39
|
+
IN
|
40
|
+
def method_call # def method_call
|
41
|
+
method_body # method_body
|
42
|
+
end # end
|
43
|
+
OUT
|
44
|
+
|
45
|
+
# TODO is failing!
|
46
|
+
asserts_output("double quote", <<-'IN', <<-'OUT', :key => "hello", :value => "world")
|
47
|
+
def #{key}
|
48
|
+
"#{value}"
|
49
|
+
end
|
50
|
+
IN
|
51
|
+
def #{key} # def hello
|
52
|
+
"#{value}" # "world"
|
53
|
+
end # end
|
54
|
+
OUT
|
55
|
+
|
56
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: meta_code_commenter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Suschlik
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-12-21 00:00:00 +01:00
|
13
|
+
default_executable: mcc
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: riot
|
17
|
+
type: :development
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: riot_notifier
|
27
|
+
type: :development
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: "0"
|
34
|
+
version:
|
35
|
+
description:
|
36
|
+
email: peter-mcc@suschlik.de
|
37
|
+
executables:
|
38
|
+
- mcc
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- README.rdoc
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- .watchr
|
46
|
+
- README.rdoc
|
47
|
+
- Rakefile
|
48
|
+
- VERSION
|
49
|
+
- bin/mcc
|
50
|
+
- lib/mcc.rb
|
51
|
+
- lib/meta_code_commenter.rb
|
52
|
+
- test/helper.rb
|
53
|
+
- test/test_meta_code_commenter.rb
|
54
|
+
has_rdoc: true
|
55
|
+
homepage: http://github.com/splattael/meta_code_commenter
|
56
|
+
licenses: []
|
57
|
+
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options:
|
60
|
+
- --charset=UTF-8
|
61
|
+
require_paths:
|
62
|
+
- lib
|
63
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: "0"
|
74
|
+
version:
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.3.5
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: Comments your meta code
|
82
|
+
test_files:
|
83
|
+
- test/test_meta_code_commenter.rb
|