cog 0.2.2 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/BuiltIn.cogfile +96 -0
- data/bin/cog +30 -39
- data/built_in/generators/sort.rb +3 -0
- data/built_in/plugins/basic/Cogfile +6 -0
- data/built_in/plugins/basic/templates/basic/generator.rb.erb +1 -0
- data/built_in/templates/cog/Cogfile.erb +40 -0
- data/built_in/templates/cog/plugin/generator.rb.erb.erb +3 -0
- data/{templates/cog/custom_tool/tool.rb.erb → built_in/templates/cog/plugin/plugin.rb.erb} +4 -11
- data/{templates → built_in/templates}/warning.erb +0 -0
- data/lib/cog.rb +25 -11
- data/lib/cog/config.rb +112 -49
- data/lib/cog/config/{language_methods.rb → language_config.rb} +23 -27
- data/lib/cog/config/plugin_config.rb +31 -0
- data/lib/cog/config/project_config.rb +48 -0
- data/lib/cog/controllers.rb +6 -8
- data/lib/cog/controllers/generator_controller.rb +30 -21
- data/lib/cog/controllers/plugin_controller.rb +43 -0
- data/lib/cog/controllers/template_controller.rb +12 -33
- data/lib/cog/dsl.rb +9 -0
- data/lib/cog/dsl/cogfile.rb +145 -0
- data/lib/cog/dsl/language_dsl.rb +142 -0
- data/lib/cog/embed_context.rb +0 -2
- data/lib/cog/embeds.rb +2 -7
- data/lib/cog/errors.rb +11 -24
- data/lib/cog/generator.rb +10 -15
- data/lib/cog/generator/file_methods.rb +2 -2
- data/lib/cog/generator/filters.rb +10 -14
- data/lib/cog/generator/language_methods.rb +2 -3
- data/lib/cog/generator_sandbox.rb +32 -0
- data/lib/cog/helpers.rb +10 -2
- data/lib/cog/helpers/cascading_set.rb +104 -0
- data/lib/cog/{embeds → helpers}/file_scanner.rb +1 -1
- data/lib/cog/language.rb +140 -0
- data/lib/cog/native_extensions.rb +2 -0
- data/lib/cog/native_extensions/array.rb +19 -0
- data/lib/cog/native_extensions/string.rb +54 -0
- data/lib/cog/plugin.rb +35 -0
- data/lib/cog/spec_helpers.rb +36 -14
- data/lib/cog/spec_helpers/matchers.rb +14 -4
- data/lib/cog/spec_helpers/matchers/match_maker.rb +1 -1
- data/lib/cog/spec_helpers/runner.rb +3 -9
- data/lib/cog/version.rb +1 -1
- metadata +27 -44
- data/Default.cogfile +0 -25
- data/lib/cog/built_in_tools.rb +0 -9
- data/lib/cog/built_in_tools/basic.rb +0 -10
- data/lib/cog/built_in_tools/basic/cog_tool.rb +0 -11
- data/lib/cog/config/cogfile.rb +0 -117
- data/lib/cog/config/lang_info.rb +0 -40
- data/lib/cog/config/project_methods.rb +0 -35
- data/lib/cog/config/tool_methods.rb +0 -94
- data/lib/cog/controllers/tool_controller.rb +0 -50
- data/lib/cog/helpers/cascading_template_set.rb +0 -75
- data/lib/cog/helpers/string.rb +0 -26
- data/lib/cog/languages.rb +0 -52
- data/lib/cog/languages/c_language.rb +0 -29
- data/lib/cog/languages/c_plus_plus_language.rb +0 -28
- data/lib/cog/languages/c_sharp_language.rb +0 -24
- data/lib/cog/languages/java_language.rb +0 -24
- data/lib/cog/languages/java_script_language.rb +0 -24
- data/lib/cog/languages/language.rb +0 -73
- data/lib/cog/languages/mixins.rb +0 -10
- data/lib/cog/languages/mixins/c_style_comments.rb +0 -23
- data/lib/cog/languages/mixins/hash_comments.rb +0 -19
- data/lib/cog/languages/python_language.rb +0 -20
- data/lib/cog/languages/qt_project_language.rb +0 -16
- data/lib/cog/languages/ruby_language.rb +0 -28
- data/lib/cog/tool.rb +0 -61
- data/lib/cog/tool/dsl.rb +0 -26
- data/templates/basic/generator.rb.erb +0 -4
- data/templates/cog/custom_tool/Gemfile.erb +0 -8
- data/templates/cog/custom_tool/LICENSE.erb +0 -18
- data/templates/cog/custom_tool/README.markdown.erb +0 -18
- data/templates/cog/custom_tool/Rakefile.erb +0 -15
- data/templates/cog/custom_tool/cog_tool.rb.erb +0 -17
- data/templates/cog/custom_tool/generator.rb.erb.erb +0 -9
- data/templates/cog/custom_tool/template.txt.erb.erb +0 -1
- data/templates/cog/custom_tool/tool.gemspec.erb +0 -17
- data/templates/cog/custom_tool/version.rb.erb +0 -5
@@ -1,50 +0,0 @@
|
|
1
|
-
require 'cog/config'
|
2
|
-
require 'cog/errors'
|
3
|
-
require 'cog/generator'
|
4
|
-
require 'rainbow'
|
5
|
-
|
6
|
-
module Cog
|
7
|
-
module Controllers
|
8
|
-
|
9
|
-
# Manage +cog+ tools
|
10
|
-
#
|
11
|
-
# @see https://github.com/ktonon/cog#tools Introduction to Tools
|
12
|
-
module ToolController
|
13
|
-
|
14
|
-
# Generate a new tool with the given name
|
15
|
-
# @param name [String] name of the tool to create. Should not conflict with other tool names
|
16
|
-
# @return [nil]
|
17
|
-
def self.create(name)
|
18
|
-
raise Errors::DestinationAlreadyExists.new(name) if File.exists?(name)
|
19
|
-
raise Errors::DuplicateTool.new(name) if Cog.tool_registered?(name)
|
20
|
-
@tool_name = name.to_s.downcase
|
21
|
-
@tool_module = name.to_s.capitalize
|
22
|
-
@tool_author = '<Your name goes here>'
|
23
|
-
@tool_email = 'youremail@...'
|
24
|
-
@tool_description = 'A one-liner'
|
25
|
-
@cog_version = Cog::VERSION
|
26
|
-
opt = { :absolute_destination => true, :binding => binding }
|
27
|
-
Generator.stamp 'cog/custom_tool/tool.rb', "#{@tool_name}/lib/#{@tool_name}.rb", opt
|
28
|
-
Generator.stamp 'cog/custom_tool/cog_tool.rb', "#{@tool_name}/lib/#{@tool_name}/cog_tool.rb", opt
|
29
|
-
Generator.stamp 'cog/custom_tool/version.rb', "#{@tool_name}/lib/#{@tool_name}/version.rb", opt
|
30
|
-
Generator.stamp 'cog/custom_tool/generator.rb.erb', "#{@tool_name}/cog/templates/#{@tool_name}/generator.rb.erb", opt
|
31
|
-
Generator.stamp 'cog/custom_tool/template.txt.erb', "#{@tool_name}/cog/templates/#{@tool_name}/#{@tool_name}.txt.erb", opt
|
32
|
-
Generator.stamp 'cog/custom_tool/Gemfile', "#{@tool_name}/Gemfile", opt
|
33
|
-
Generator.stamp 'cog/custom_tool/Rakefile', "#{@tool_name}/Rakefile", opt
|
34
|
-
Generator.stamp 'cog/custom_tool/tool.gemspec', "#{@tool_name}/#{@tool_name}.gemspec", opt
|
35
|
-
Generator.stamp 'cog/custom_tool/LICENSE', "#{@tool_name}/LICENSE", opt
|
36
|
-
Generator.stamp 'cog/custom_tool/README.markdown', "#{@tool_name}/README.markdown", opt
|
37
|
-
nil
|
38
|
-
end
|
39
|
-
|
40
|
-
# @param opt [Boolean] :verbose (false) list full paths to tools
|
41
|
-
# @return [Array<String>] a list of available tools
|
42
|
-
def self.list(opt={})
|
43
|
-
Cog.tools.collect do |tool|
|
44
|
-
opt[:verbose] ? tool.path : tool.name
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
@@ -1,75 +0,0 @@
|
|
1
|
-
require 'cog/helpers/string'
|
2
|
-
require 'rainbow'
|
3
|
-
|
4
|
-
module Cog
|
5
|
-
module Helpers
|
6
|
-
|
7
|
-
# @api developer
|
8
|
-
class TemplateInfo
|
9
|
-
attr_reader :name
|
10
|
-
attr_accessor :path
|
11
|
-
|
12
|
-
def initialize(name)
|
13
|
-
@sources = []
|
14
|
-
@source_types = []
|
15
|
-
@name = name
|
16
|
-
end
|
17
|
-
|
18
|
-
def add_source(source, source_type)
|
19
|
-
@sources << source
|
20
|
-
@source_types << source_type
|
21
|
-
end
|
22
|
-
|
23
|
-
def style(text, type)
|
24
|
-
case type
|
25
|
-
when :built_in
|
26
|
-
text.color :cyan
|
27
|
-
when :tool
|
28
|
-
text.color :yellow
|
29
|
-
when :project
|
30
|
-
text.color(:white).bright
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def override_s(width=nil)
|
35
|
-
colorless = "[#{@sources.join ' < '}]"
|
36
|
-
if width
|
37
|
-
x = @sources.zip(@source_types).collect {|s, t| style s, t}
|
38
|
-
"[#{x.join ' < '}]" + " " * (width - colorless.length)
|
39
|
-
else
|
40
|
-
colorless
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def <=>(other)
|
45
|
-
(@path || @name) <=> (other.path || other.name)
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_s(override_column_width)
|
49
|
-
"#{override_s override_column_width} #{style @path || @name, @source_types.last}"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
# @api developer
|
54
|
-
class CascadingTemplateSet
|
55
|
-
def initialize
|
56
|
-
@templates = {}
|
57
|
-
end
|
58
|
-
|
59
|
-
def add_templates(source, source_type, root, opt={})
|
60
|
-
Dir.glob("#{root}/**/*.erb") do |path|
|
61
|
-
name = path.relative_to(root).slice(0..-5)
|
62
|
-
@templates[name] ||= TemplateInfo.new name
|
63
|
-
@templates[name].path = path if opt[:verbose]
|
64
|
-
@templates[name].add_source source, source_type
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def to_a
|
69
|
-
w = @templates.values.collect {|t| t.override_s.length}.max
|
70
|
-
@templates.values.sort.collect {|t| t.to_s(w)}
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
75
|
-
end
|
data/lib/cog/helpers/string.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'cog/config'
|
2
|
-
|
3
|
-
class String
|
4
|
-
|
5
|
-
# @return [String] strips {Cog::Config::ProjectMethods#project_root} from the beginning of this string
|
6
|
-
def relative_to_project_root
|
7
|
-
return dup unless Cog.project?
|
8
|
-
relative_to Cog.project_root
|
9
|
-
end
|
10
|
-
|
11
|
-
# @param prefix [String] path prefix to strip from the beginning of this string
|
12
|
-
# @return [String] this string as a file system path relative to the +prefix+
|
13
|
-
def relative_to(prefix)
|
14
|
-
return dup if prefix.nil?
|
15
|
-
start_with?(prefix.to_s) ? slice(prefix.to_s.length+1..-1) : dup
|
16
|
-
end
|
17
|
-
|
18
|
-
# @param ext [String] file extension to remove from the end of this string
|
19
|
-
# @return [String] a copy of this string with the given extension removed. Does nothing if this string does not edit with the extension
|
20
|
-
def without_extension(ext)
|
21
|
-
return dup if ext.nil?
|
22
|
-
ext = ext.to_s
|
23
|
-
ext = '.' + ext unless ext.start_with? '.'
|
24
|
-
end_with?(ext) ? slice(0..(-ext.length - 1)) : dup
|
25
|
-
end
|
26
|
-
end
|
data/lib/cog/languages.rb
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
require 'cog/errors'
|
2
|
-
require 'cog/languages/language'
|
3
|
-
require 'cog/languages/mixins'
|
4
|
-
|
5
|
-
module Cog
|
6
|
-
|
7
|
-
# Submodules define helpers for the target languages supported by +cog+
|
8
|
-
module Languages
|
9
|
-
|
10
|
-
# @return [Hash] a mapping from file extensions to languages identifiers
|
11
|
-
DEFAULT_LANGUAGE_EXTENSION_MAP = {
|
12
|
-
:c => 'c',
|
13
|
-
:cpp => 'c++',
|
14
|
-
:cs => 'c#',
|
15
|
-
:h => 'c',
|
16
|
-
:hpp => 'c++',
|
17
|
-
:java => 'java',
|
18
|
-
:js => 'javascript',
|
19
|
-
:pri => 'qt',
|
20
|
-
:pro => 'qt',
|
21
|
-
:py => 'python',
|
22
|
-
:rb => 'ruby',
|
23
|
-
}
|
24
|
-
|
25
|
-
# @return [Hash] a mapping from language aliases to language identifiers
|
26
|
-
ALIAS = {
|
27
|
-
'c++' => 'c_plus_plus',
|
28
|
-
'c#' => 'c_sharp',
|
29
|
-
'javascript' => 'java_script',
|
30
|
-
'qt' => 'qt_project',
|
31
|
-
}
|
32
|
-
|
33
|
-
# @return [Hash] a mapping of language identifiers to lists of aliases
|
34
|
-
REV_ALIAS = {}
|
35
|
-
ALIAS.each_pair do |a, lang|
|
36
|
-
REV_ALIAS[lang] ||= []
|
37
|
-
REV_ALIAS[lang] << a
|
38
|
-
end
|
39
|
-
|
40
|
-
# @param lang_id [String] a langauge identifier
|
41
|
-
# @return [Language] a language helper corresponding to the given identifier
|
42
|
-
def self.get_language(lang_id)
|
43
|
-
lang_id = Languages::ALIAS[lang_id] || lang_id
|
44
|
-
require "cog/languages/#{lang_id.to_s.downcase}_language"
|
45
|
-
Languages.instance_eval {const_get "#{lang_id.camelize}Language"}.new
|
46
|
-
rescue LoadError
|
47
|
-
raise Errors::NoSuchLanguage.new lang_id
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
|
52
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'cog/languages/language'
|
2
|
-
require 'cog/languages/mixins/c_style_comments'
|
3
|
-
|
4
|
-
module Cog
|
5
|
-
module Languages
|
6
|
-
|
7
|
-
class CLanguage < Language
|
8
|
-
include Mixins::CStyleComments
|
9
|
-
|
10
|
-
# @return [Array<String>] a set of extensions needed to define a module in this language
|
11
|
-
def module_extensions
|
12
|
-
[:c, :h]
|
13
|
-
end
|
14
|
-
|
15
|
-
# @param name [String] name of the module to protect
|
16
|
-
# @return [String] an include guard statement
|
17
|
-
def include_guard_begin(name)
|
18
|
-
"#ifndef #{name}\n#define #{name}"
|
19
|
-
end
|
20
|
-
|
21
|
-
# @param name [String] name of the module to protect
|
22
|
-
# @return [String] an include guard end statement
|
23
|
-
def include_guard_end(name)
|
24
|
-
"#endif // #{name}"
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
28
|
-
end
|
29
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require 'cog/languages/c_language'
|
2
|
-
require 'cog/languages/mixins/c_style_comments'
|
3
|
-
|
4
|
-
module Cog
|
5
|
-
module Languages
|
6
|
-
|
7
|
-
class CPlusPlusLanguage < Language
|
8
|
-
include Mixins::CStyleComments
|
9
|
-
|
10
|
-
def module_extensions
|
11
|
-
[:cpp, :hpp]
|
12
|
-
end
|
13
|
-
|
14
|
-
def use_named_scope(name)
|
15
|
-
"using namespace #{name};"
|
16
|
-
end
|
17
|
-
|
18
|
-
def named_scope_begin(name)
|
19
|
-
"namespace #{name} {"
|
20
|
-
end
|
21
|
-
|
22
|
-
def named_scope_end(name)
|
23
|
-
"} // namespace #{name}"
|
24
|
-
end
|
25
|
-
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'cog/languages/c_language'
|
2
|
-
require 'cog/languages/mixins/c_style_comments'
|
3
|
-
|
4
|
-
module Cog
|
5
|
-
module Languages
|
6
|
-
|
7
|
-
class CSharpLanguage < Language
|
8
|
-
include Mixins::CStyleComments
|
9
|
-
|
10
|
-
def module_extensions
|
11
|
-
[:cs]
|
12
|
-
end
|
13
|
-
|
14
|
-
def named_scope_begin(name)
|
15
|
-
"namespace #{name} {"
|
16
|
-
end
|
17
|
-
|
18
|
-
def named_scope_end(name)
|
19
|
-
"} // namespace #{name}"
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'cog/languages/c_language'
|
2
|
-
require 'cog/languages/mixins/c_style_comments'
|
3
|
-
|
4
|
-
module Cog
|
5
|
-
module Languages
|
6
|
-
|
7
|
-
class JavaLanguage < Language
|
8
|
-
include Mixins::CStyleComments
|
9
|
-
|
10
|
-
def module_extensions
|
11
|
-
[:java]
|
12
|
-
end
|
13
|
-
|
14
|
-
def named_scope_begin(name)
|
15
|
-
"package #{name};"
|
16
|
-
end
|
17
|
-
|
18
|
-
def named_scope_end(name)
|
19
|
-
"// end of package: #{name}"
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'cog/languages/c_language'
|
2
|
-
require 'cog/languages/mixins/c_style_comments'
|
3
|
-
|
4
|
-
module Cog
|
5
|
-
module Languages
|
6
|
-
|
7
|
-
class JavaScriptLanguage < Language
|
8
|
-
include Mixins::CStyleComments
|
9
|
-
|
10
|
-
def module_extensions
|
11
|
-
[:js]
|
12
|
-
end
|
13
|
-
|
14
|
-
def named_scope_begin(name)
|
15
|
-
"var #{name} = { // named scope"
|
16
|
-
end
|
17
|
-
|
18
|
-
def named_scope_end(name)
|
19
|
-
"}; // named scope: #{name}"
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,73 +0,0 @@
|
|
1
|
-
module Cog
|
2
|
-
module Languages
|
3
|
-
|
4
|
-
# Interface that must be supported by all +cog+ language helpers.
|
5
|
-
# This base class corresponds to a plain text language.
|
6
|
-
class Language
|
7
|
-
|
8
|
-
# @param nested_pattern [String] regular expression pattern (as a string) to embed in the regular expression which matches one line comments in this language
|
9
|
-
# @return [Regexp] pattern for matching one line comments in this language
|
10
|
-
def comment_pattern(nested_pattern)
|
11
|
-
/^\s*#{nested_pattern}\s$/
|
12
|
-
end
|
13
|
-
|
14
|
-
# @param text [String] some text which should be rendered as a comment
|
15
|
-
# @return [String] a comment appropriate for this language
|
16
|
-
def comment(text)
|
17
|
-
if text =~ /\n/
|
18
|
-
multi_line_comment text
|
19
|
-
else
|
20
|
-
one_line_comment text
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
# @api developer
|
25
|
-
def one_line_comment(text)
|
26
|
-
text
|
27
|
-
end
|
28
|
-
|
29
|
-
# @api developer
|
30
|
-
def multi_line_comment(text)
|
31
|
-
text.split("\n").collect do |line|
|
32
|
-
one_line_comment line
|
33
|
-
end.join "\n"
|
34
|
-
end
|
35
|
-
|
36
|
-
# @return [Array<String>] a set of extensions needed to define a module in this language
|
37
|
-
def module_extensions
|
38
|
-
[:txt]
|
39
|
-
end
|
40
|
-
|
41
|
-
# @param name [String] name of the scope to use
|
42
|
-
# @return [String] a using statement for the named scope
|
43
|
-
def use_named_scope(name)
|
44
|
-
""
|
45
|
-
end
|
46
|
-
|
47
|
-
# @param name [String] name of the scope
|
48
|
-
# @return [String] begin a named scope
|
49
|
-
def named_scope_begin(name)
|
50
|
-
""
|
51
|
-
end
|
52
|
-
|
53
|
-
# @param name [String] name of the scope
|
54
|
-
# @return [String] end the given named scope
|
55
|
-
def named_scope_end(name)
|
56
|
-
""
|
57
|
-
end
|
58
|
-
|
59
|
-
# @param name [String] name of the module to protect
|
60
|
-
# @return [String] an include guard statement
|
61
|
-
def include_guard_begin(name)
|
62
|
-
""
|
63
|
-
end
|
64
|
-
|
65
|
-
# @param name [String] name of the module to protect
|
66
|
-
# @return [String] an include guard end statement
|
67
|
-
def include_guard_end(name)
|
68
|
-
""
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
data/lib/cog/languages/mixins.rb
DELETED
@@ -1,23 +0,0 @@
|
|
1
|
-
module Cog
|
2
|
-
module Languages
|
3
|
-
module Mixins
|
4
|
-
|
5
|
-
# Methods for defining single and multiline c-style comments
|
6
|
-
module CStyleComments
|
7
|
-
|
8
|
-
def comment_pattern(nested_pattern)
|
9
|
-
/^\s*(?:\/\/|\/\*)\s*#{nested_pattern}\s*(?:\*\/)?\s*$/i
|
10
|
-
end
|
11
|
-
|
12
|
-
def one_line_comment(text)
|
13
|
-
"// #{text}"
|
14
|
-
end
|
15
|
-
|
16
|
-
def multi_line_comment(text)
|
17
|
-
"/*\n#{text}\n */"
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|