cog 0.2.1 → 0.2.2

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.
Files changed (56) hide show
  1. data/bin/cog +6 -6
  2. data/lib/cog.rb +7 -11
  3. data/lib/cog/built_in_tools/basic.rb +1 -1
  4. data/lib/cog/built_in_tools/basic/cog_tool.rb +5 -12
  5. data/lib/cog/config.rb +47 -200
  6. data/lib/cog/config/cogfile.rb +5 -7
  7. data/lib/cog/config/lang_info.rb +1 -1
  8. data/lib/cog/config/language_methods.rb +71 -0
  9. data/lib/cog/config/project_methods.rb +35 -0
  10. data/lib/cog/config/tool_methods.rb +94 -0
  11. data/lib/cog/controllers/generator_controller.rb +7 -8
  12. data/lib/cog/controllers/template_controller.rb +18 -21
  13. data/lib/cog/controllers/tool_controller.rb +19 -22
  14. data/lib/cog/embed_context.rb +131 -0
  15. data/lib/cog/embeds.rb +84 -58
  16. data/lib/cog/embeds/file_scanner.rb +28 -5
  17. data/lib/cog/errors.rb +3 -0
  18. data/lib/cog/generator.rb +65 -31
  19. data/lib/cog/generator/file_methods.rb +1 -1
  20. data/lib/cog/generator/filters.rb +1 -1
  21. data/lib/cog/generator/language_methods.rb +3 -3
  22. data/lib/cog/helpers/string.rb +3 -3
  23. data/lib/cog/languages.rb +2 -0
  24. data/lib/cog/languages/c_language.rb +3 -27
  25. data/lib/cog/languages/c_plus_plus_language.rb +3 -8
  26. data/lib/cog/languages/c_sharp_language.rb +3 -16
  27. data/lib/cog/languages/java_language.rb +3 -16
  28. data/lib/cog/languages/java_script_language.rb +3 -16
  29. data/lib/cog/languages/language.rb +12 -12
  30. data/lib/cog/languages/mixins.rb +10 -0
  31. data/lib/cog/languages/mixins/c_style_comments.rb +23 -0
  32. data/lib/cog/languages/mixins/hash_comments.rb +19 -0
  33. data/lib/cog/languages/python_language.rb +2 -33
  34. data/lib/cog/languages/qt_project_language.rb +3 -34
  35. data/lib/cog/languages/ruby_language.rb +6 -31
  36. data/lib/cog/spec_helpers/matchers/match_maker.rb +10 -6
  37. data/lib/cog/tool.rb +61 -0
  38. data/lib/cog/tool/dsl.rb +26 -0
  39. data/lib/cog/version.rb +1 -1
  40. data/templates/basic/generator.rb.erb +1 -7
  41. data/templates/cog/custom_tool/cog_tool.rb.erb +10 -8
  42. data/templates/cog/custom_tool/generator.rb.erb.erb +3 -3
  43. data/templates/cog/custom_tool/tool.rb.erb +1 -1
  44. metadata +13 -16
  45. data/lib/cog/config/tool.rb +0 -99
  46. data/lib/cog/embeds/context.rb +0 -86
  47. data/templates/basic/template.c.erb.erb +0 -1
  48. data/templates/basic/template.cpp.erb.erb +0 -6
  49. data/templates/basic/template.cs.erb.erb +0 -6
  50. data/templates/basic/template.h.erb.erb +0 -1
  51. data/templates/basic/template.hpp.erb.erb +0 -6
  52. data/templates/basic/template.java.erb.erb +0 -1
  53. data/templates/basic/template.js.erb.erb +0 -1
  54. data/templates/basic/template.py.erb.erb +0 -1
  55. data/templates/basic/template.rb.erb.erb +0 -6
  56. data/templates/basic/template.txt.erb.erb +0 -1
@@ -1,31 +1,17 @@
1
1
  require 'cog/languages/language'
2
+ require 'cog/languages/mixins/c_style_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
7
  class CLanguage < 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*(?:\/\/|\/\*)\s*#{nested_pattern}\s*(?:\*\/)?\s*$/i
12
- end
8
+ include Mixins::CStyleComments
13
9
 
14
10
  # @return [Array<String>] a set of extensions needed to define a module in this language
15
11
  def module_extensions
16
12
  [:c, :h]
17
13
  end
18
-
19
- # @return [String] ignored in c
20
- def named_scope_begin(name)
21
- ""
22
- end
23
-
24
- # @return [String] ignored in c
25
- def named_scope_end(name)
26
- ""
27
- end
28
-
14
+
29
15
  # @param name [String] name of the module to protect
30
16
  # @return [String] an include guard statement
31
17
  def include_guard_begin(name)
@@ -38,16 +24,6 @@ module Cog
38
24
  "#endif // #{name}"
39
25
  end
40
26
 
41
- protected
42
-
43
- def one_line_comment(text)
44
- "// #{text}"
45
- end
46
-
47
- def multi_line_comment(text)
48
- "/*\n#{text}\n */"
49
- end
50
-
51
27
  end
52
28
  end
53
29
  end
@@ -1,29 +1,24 @@
1
1
  require 'cog/languages/c_language'
2
+ require 'cog/languages/mixins/c_style_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
- class CPlusPlusLanguage < CLanguage
7
+ class CPlusPlusLanguage < Language
8
+ include Mixins::CStyleComments
7
9
 
8
- # @return [Array<String>] a set of extensions needed to define a module in this language
9
10
  def module_extensions
10
11
  [:cpp, :hpp]
11
12
  end
12
13
 
13
- # @param name [String] name of the scope to use
14
- # @return [String] a using statement for the named scope
15
14
  def use_named_scope(name)
16
15
  "using namespace #{name};"
17
16
  end
18
17
 
19
- # @param name [String] name of the scope
20
- # @return [String] begin a named scope
21
18
  def named_scope_begin(name)
22
19
  "namespace #{name} {"
23
20
  end
24
21
 
25
- # @param name [String] name of the scope
26
- # @return [String] end the given named scope
27
22
  def named_scope_end(name)
28
23
  "} // namespace #{name}"
29
24
  end
@@ -1,37 +1,24 @@
1
1
  require 'cog/languages/c_language'
2
+ require 'cog/languages/mixins/c_style_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
- class CSharpLanguage < CLanguage
7
+ class CSharpLanguage < Language
8
+ include Mixins::CStyleComments
7
9
 
8
- # @return [Array<String>] a set of extensions needed to define a module in this language
9
10
  def module_extensions
10
11
  [:cs]
11
12
  end
12
13
 
13
- # @param name [String] name of the scope
14
- # @return [String] begin a named scope
15
14
  def named_scope_begin(name)
16
15
  "namespace #{name} {"
17
16
  end
18
17
 
19
- # @param name [String] name of the scope
20
- # @return [String] end the given named scope
21
18
  def named_scope_end(name)
22
19
  "} // namespace #{name}"
23
20
  end
24
21
 
25
- # @return [String] ignored for c#
26
- def include_guard_begin(name)
27
- ""
28
- end
29
-
30
- # @return [String] ignored for c#
31
- def include_guard_end(name)
32
- ""
33
- end
34
-
35
22
  end
36
23
  end
37
24
  end
@@ -1,37 +1,24 @@
1
1
  require 'cog/languages/c_language'
2
+ require 'cog/languages/mixins/c_style_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
- class JavaLanguage < CLanguage
7
+ class JavaLanguage < Language
8
+ include Mixins::CStyleComments
7
9
 
8
- # @return [Array<String>] a set of extensions needed to define a module in this language
9
10
  def module_extensions
10
11
  [:java]
11
12
  end
12
13
 
13
- # @param name [String] name of the scope
14
- # @return [String] begin a named scope
15
14
  def named_scope_begin(name)
16
15
  "package #{name};"
17
16
  end
18
17
 
19
- # @param name [String] name of the scope
20
- # @return [String] end the given named scope
21
18
  def named_scope_end(name)
22
19
  "// end of package: #{name}"
23
20
  end
24
21
 
25
- # @return [String] ignored for java
26
- def include_guard_begin(name)
27
- ""
28
- end
29
-
30
- # @return [String] ignored for java
31
- def include_guard_end(name)
32
- ""
33
- end
34
-
35
22
  end
36
23
  end
37
24
  end
@@ -1,36 +1,23 @@
1
1
  require 'cog/languages/c_language'
2
+ require 'cog/languages/mixins/c_style_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
- class JavaScriptLanguage < CLanguage
7
+ class JavaScriptLanguage < Language
8
+ include Mixins::CStyleComments
7
9
 
8
- # @return [Array<String>] a set of extensions needed to define a module in this language
9
10
  def module_extensions
10
11
  [:js]
11
12
  end
12
13
 
13
- # @param name [String] name of the scope
14
- # @return [String] begin a named scope
15
14
  def named_scope_begin(name)
16
15
  "var #{name} = { // named scope"
17
16
  end
18
17
 
19
- # @param name [String] name of the scope
20
- # @return [String] end the given named scope
21
18
  def named_scope_end(name)
22
19
  "}; // named scope: #{name}"
23
20
  end
24
-
25
- # @return [String] ignored for javascript
26
- def include_guard_begin(name)
27
- ""
28
- end
29
-
30
- # @return [String] ignored for javascript
31
- def include_guard_end(name)
32
- ""
33
- end
34
21
 
35
22
  end
36
23
  end
@@ -20,6 +20,18 @@ module Cog
20
20
  one_line_comment text
21
21
  end
22
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
23
35
 
24
36
  # @return [Array<String>] a set of extensions needed to define a module in this language
25
37
  def module_extensions
@@ -56,18 +68,6 @@ module Cog
56
68
  ""
57
69
  end
58
70
 
59
- protected
60
-
61
- def one_line_comment(text)
62
- text
63
- end
64
-
65
- def multi_line_comment(text)
66
- text.split("\n").collect do |line|
67
- one_line_comment line
68
- end.join "\n"
69
- end
70
-
71
71
  end
72
72
  end
73
73
  end
@@ -0,0 +1,10 @@
1
+ require 'cog/languages/mixins/c_style_comments'
2
+
3
+ module Cog
4
+ module Languages
5
+
6
+ # Place for mixins which define common patterns in language syntax
7
+ module Mixins
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
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
@@ -0,0 +1,19 @@
1
+ module Cog
2
+ module Languages
3
+ module Mixins
4
+
5
+ # Methods for defining single line comments that begin with a hash (<tt>#</tt>)
6
+ module HashComments
7
+
8
+ def comment_pattern(nested_pattern)
9
+ /^\s*\#\s*#{nested_pattern}\s*$/i
10
+ end
11
+
12
+ def one_line_comment(text)
13
+ "# #{text}"
14
+ end
15
+
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,47 +1,16 @@
1
1
  require 'cog/languages/language'
2
+ require 'cog/languages/mixins/hash_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
7
  class PythonLanguage < Language
8
+ include Mixins::HashComments
7
9
 
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*\#\s*#{nested_pattern}\s*$/i
12
- end
13
-
14
- # @return [Array<String>] a set of extensions needed to define a module in this language
15
10
  def module_extensions
16
11
  [:py]
17
12
  end
18
13
 
19
- # @return [String] ignored for python
20
- def named_scope_begin(name)
21
- ""
22
- end
23
-
24
- # @return [String] ignored for python
25
- def named_scope_end(name)
26
- ""
27
- end
28
-
29
- # @return [String] ignored for python
30
- def include_guard_begin(name)
31
- ""
32
- end
33
-
34
- # @return [String] ignored for python
35
- def include_guard_end(name)
36
- ""
37
- end
38
-
39
- protected
40
-
41
- def one_line_comment(text)
42
- "# #{text}"
43
- end
44
-
45
14
  def multi_line_comment(text)
46
15
  "'''\n#{text}\n'''"
47
16
  end
@@ -1,45 +1,14 @@
1
1
  require 'cog/languages/language'
2
+ require 'cog/languages/mixins/hash_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
7
  class QtProjectLanguage < Language
8
+ include Mixins::HashComments
7
9
 
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*\#\s*#{nested_pattern}\s*$/i
12
- end
13
-
14
- # @return [Array<String>] a set of extensions needed to define a module in this language
15
10
  def module_extensions
16
- [:pro]
17
- end
18
-
19
- # @return [String] ignored for Qt Project files
20
- def named_scope_begin(name)
21
- ""
22
- end
23
-
24
- # @return [String] ignored for Qt Project files
25
- def named_scope_end(name)
26
- ""
27
- end
28
-
29
- # @return [String] ignored for Qt Project files
30
- def include_guard_begin(name)
31
- ""
32
- end
33
-
34
- # @return [String] ignored for Qt Project files
35
- def include_guard_end(name)
36
- ""
37
- end
38
-
39
- protected
40
-
41
- def one_line_comment(text)
42
- "# #{text}"
11
+ [:pro, :pri]
43
12
  end
44
13
 
45
14
  end
@@ -1,53 +1,28 @@
1
1
  require 'cog/languages/language'
2
+ require 'cog/languages/mixins/hash_comments'
2
3
 
3
4
  module Cog
4
5
  module Languages
5
6
 
6
7
  class RubyLanguage < Language
8
+ include Mixins::HashComments
7
9
 
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*\#\s*#{nested_pattern}\s*$/i
12
- end
13
-
14
- # @return [Array<String>] a set of extensions needed to define a module in this language
15
10
  def module_extensions
16
11
  [:rb]
17
12
  end
18
13
 
19
- # @param name [String] name of the scope
20
- # @return [String] begin a named scope
14
+ def multi_line_comment(text)
15
+ "=begin\n#{text}\n=end"
16
+ end
17
+
21
18
  def named_scope_begin(name)
22
19
  "module #{name}"
23
20
  end
24
21
 
25
- # @param name [String] name of the scope
26
- # @return [String] end the given named scope
27
22
  def named_scope_end(name)
28
23
  "end # module #{name}"
29
24
  end
30
25
 
31
- # @return [String] ignored for ruby
32
- def include_guard_begin(name)
33
- ""
34
- end
35
-
36
- # @return [String] ignored for ruby
37
- def include_guard_end(name)
38
- ""
39
- end
40
-
41
- protected
42
-
43
- def one_line_comment(text)
44
- "# #{text}"
45
- end
46
-
47
- def multi_line_comment(text)
48
- "=begin\n#{text}\n=end"
49
- end
50
-
51
26
  end
52
27
  end
53
28
  end