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.
@@ -0,0 +1,5 @@
1
+ doc
2
+ pkg
3
+ coverage
4
+ tags
5
+ *.gemspec
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 }
@@ -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
@@ -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
@@ -0,0 +1,9 @@
1
+ require 'mcc'
2
+
3
+ params = ARGV.inject({}) do |hash, arg|
4
+ key, value = arg.split(/=/)
5
+ hash[key] = value
6
+ hash
7
+ end
8
+
9
+ puts MetaCodeCommenter.comment(STDIN.readlines)
@@ -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
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+
3
+ require 'mcc'
4
+ require 'riot'
5
+ require 'riot_notifier'
6
+
7
+ Riot.reporter = RiotNotifier
@@ -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