ritsu 0.1.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.
Files changed (73) hide show
  1. data/README.md +96 -0
  2. data/Thorfile +95 -0
  3. data/VERSION +1 -0
  4. data/bin/ritsu +32 -0
  5. data/lib/ritsu/block.rb +259 -0
  6. data/lib/ritsu/ext/test_case.rb +20 -0
  7. data/lib/ritsu/external_library.rb +47 -0
  8. data/lib/ritsu/project.rb +89 -0
  9. data/lib/ritsu/project_generator.rb +34 -0
  10. data/lib/ritsu/project_generators/default_generator.rb +73 -0
  11. data/lib/ritsu/project_generators/default_generator_files/Thorfile.erb +9 -0
  12. data/lib/ritsu/project_generators/default_generator_files/meta/project.rb.erb +9 -0
  13. data/lib/ritsu/project_generators.rb +1 -0
  14. data/lib/ritsu/src_file.rb +76 -0
  15. data/lib/ritsu/src_files/cpp_file.rb +33 -0
  16. data/lib/ritsu/src_files/cpp_file_mixin.rb +13 -0
  17. data/lib/ritsu/src_files/executable_cmake_lists.rb +40 -0
  18. data/lib/ritsu/src_files/header_file.rb +46 -0
  19. data/lib/ritsu/src_files/header_file_mixin.rb +20 -0
  20. data/lib/ritsu/src_files/project_cmake_lists.rb +110 -0
  21. data/lib/ritsu/src_files/project_config_header_file.rb +15 -0
  22. data/lib/ritsu/src_files/project_config_header_template_file.rb +46 -0
  23. data/lib/ritsu/src_files/shared_library_cmake_lists.rb +40 -0
  24. data/lib/ritsu/src_files/static_library_cmake_lists.rb +40 -0
  25. data/lib/ritsu/src_files/target_cmake_lists.rb +159 -0
  26. data/lib/ritsu/src_files/templated_src_file.rb +44 -0
  27. data/lib/ritsu/src_files.rb +14 -0
  28. data/lib/ritsu/target.rb +134 -0
  29. data/lib/ritsu/targets/executable.rb +45 -0
  30. data/lib/ritsu/targets/library.rb +29 -0
  31. data/lib/ritsu/targets/shared_library.rb +39 -0
  32. data/lib/ritsu/targets/static_library.rb +33 -0
  33. data/lib/ritsu/targets.rb +4 -0
  34. data/lib/ritsu/template.rb +69 -0
  35. data/lib/ritsu/template_policies.rb +133 -0
  36. data/lib/ritsu/test_helpers.rb +124 -0
  37. data/lib/ritsu/thors/default_thor.rb +57 -0
  38. data/lib/ritsu/thors.rb +1 -0
  39. data/lib/ritsu/utility/accessors.rb +30 -0
  40. data/lib/ritsu/utility/check_upon_add_set.rb +35 -0
  41. data/lib/ritsu/utility/file_robot.rb +129 -0
  42. data/lib/ritsu/utility/files.rb +13 -0
  43. data/lib/ritsu/utility/instance_dependencies.rb +113 -0
  44. data/lib/ritsu/utility/instance_set.rb +29 -0
  45. data/lib/ritsu/utility/platform.rb +21 -0
  46. data/lib/ritsu/utility/simple_io.rb +65 -0
  47. data/lib/ritsu/utility/single_instance.rb +34 -0
  48. data/lib/ritsu/utility/strings.rb +41 -0
  49. data/lib/ritsu/utility.rb +8 -0
  50. data/lib/ritsu.rb +17 -0
  51. data/test/ritsu/block_test.rb +197 -0
  52. data/test/ritsu/external_library_test.rb +42 -0
  53. data/test/ritsu/project_generators/default_generator_test.rb +34 -0
  54. data/test/ritsu/project_test.rb +128 -0
  55. data/test/ritsu/src_file_test.rb +70 -0
  56. data/test/ritsu/src_files/cpp_file_test.rb +43 -0
  57. data/test/ritsu/src_files/executable_cmake_lists_test.rb +52 -0
  58. data/test/ritsu/src_files/header_file_test.rb +58 -0
  59. data/test/ritsu/src_files/project_cmake_lists_test.rb +152 -0
  60. data/test/ritsu/src_files/shared_library_cmake_lists_test.rb +52 -0
  61. data/test/ritsu/src_files/static_library_cmake_lists_test.rb +52 -0
  62. data/test/ritsu/src_files/target_cmake_lists_test.rb +16 -0
  63. data/test/ritsu/target_test.rb +106 -0
  64. data/test/ritsu/targets/executable_test.rb +11 -0
  65. data/test/ritsu/targets/shared_library_test.rb +11 -0
  66. data/test/ritsu/targets/static_library_test.rb +11 -0
  67. data/test/ritsu/template_policies_test.rb +0 -0
  68. data/test/ritsu/utility/accessors_test.rb +15 -0
  69. data/test/ritsu/utility/check_upon_add_set_test.rb +32 -0
  70. data/test/ritsu/utility/file_robot_test.rb +176 -0
  71. data/test/ritsu/utility/strings_test.rb +29 -0
  72. data/test/test_helpers.rb +4 -0
  73. metadata +209 -0
@@ -0,0 +1,73 @@
1
+ require 'rubygems'
2
+ require 'singleton'
3
+ require 'erb'
4
+ require 'active_support/core_ext/string/inflections'
5
+ require File.dirname(__FILE__) + '/../project_generator'
6
+ require File.dirname(__FILE__) + '/../utility/file_robot'
7
+ require File.dirname(__FILE__) + '/../utility/files'
8
+
9
+ module Ritsu
10
+ module ProjectGenerators
11
+ class DefaultGenerator < Ritsu::ProjectGenerator
12
+ include Ritsu::Utility
13
+
14
+ Ritsu::ProjectGenerator.generator_classes["default"] = self
15
+
16
+ def initialize
17
+ super("default")
18
+ end
19
+
20
+ def source_dir
21
+ File.dirname(__FILE__) + "/default_generator_files"
22
+ end
23
+
24
+ def source_path(path)
25
+ source_dir + "/" + path
26
+ end
27
+
28
+ def target_dir
29
+ return @location + "/" + @project_name
30
+ end
31
+
32
+ def target_path(path)
33
+ target_dir + "/" + path
34
+ end
35
+
36
+ def create_dir(dirname)
37
+ FileRobot.create_dir(target_path(dirname))
38
+ end
39
+
40
+ def create_file(filename, content)
41
+ FileRobot.create_file(target_path(filename), content)
42
+ end
43
+
44
+ def create_file_from_erb(filename)
45
+ template_filename = source_path(filename + ".erb")
46
+ template_content = Files.read(template_filename)
47
+ template = ERB.new(template_content)
48
+ create_file(filename, template.result(binding))
49
+ end
50
+
51
+ def copy_file(filename)
52
+ source_filename = source_path(filename)
53
+ source_content = Files.read(source_filename)
54
+ create_file(filename, source_content)
55
+ end
56
+
57
+ def generate(project_name, location, options={})
58
+ @location = File.expand_path(location)
59
+ @project_name = project_name
60
+
61
+ create_dir("")
62
+
63
+ create_dir("build")
64
+ create_dir("meta")
65
+ create_dir("src")
66
+ create_dir("src/cmake_modules")
67
+
68
+ create_file_from_erb("Thorfile")
69
+ create_file_from_erb("meta/project.rb")
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,9 @@
1
+ # enconding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'thor'
5
+ require 'ritsu'
6
+ require File.dirname(__FILE__) + "/meta/project.rb"
7
+
8
+ class <%= @project_name.camelize %> < Ritsu::Thors::DefaultThor
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'ritsu'
2
+
3
+ Ritsu::Project.create('<%= @project_name %>') do |p|
4
+
5
+ ##################
6
+ # YOUR CODE HERE #
7
+ ##################
8
+
9
+ end
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__) + '/project_generators/default_generator'
@@ -0,0 +1,76 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require File.dirname(__FILE__) + '/utility/instance_set'
4
+ require File.dirname(__FILE__) + '/utility/file_robot'
5
+
6
+ module Ritsu
7
+ class SrcFile
8
+ include Ritsu::Utility::InstanceSet
9
+ include Ritsu::Utility
10
+
11
+ attr_reader :src_path
12
+ attr_reader :owner
13
+
14
+ def self.is_valid_src_path?(p)
15
+ p =~ /^[A-Za-z0-9_.][A-Za-z0-9_.\-\/]*$/
16
+ end
17
+
18
+ def initialize(src_path, owner)
19
+ if !(self.class.is_valid_src_path?(src_path))
20
+ raise ArgumentError.new "'#{src_path}' is not a valid source path"
21
+ end
22
+
23
+ @src_path = src_path
24
+ @owner = owner
25
+
26
+ SrcFile.instances << self
27
+ @owner.src_files << self
28
+ end
29
+
30
+ def self.validate_instance(instance)
31
+ if instances.select { |x| x.src_path == instance.src_path }.length > 0
32
+ raise ArgumentError.new "source file with path '#{instance.src_path}' already exists"
33
+ end
34
+ end
35
+
36
+ def project
37
+ owner.project
38
+ end
39
+
40
+ def abs_path
41
+ File.expand_path(project.project_dir + "/src/" + src_path)
42
+ end
43
+
44
+ def create
45
+ FileRobot.create_file(abs_path, "\n")
46
+ end
47
+
48
+ def update
49
+ if !File.exists?(abs_path)
50
+ create
51
+ else
52
+ update_content
53
+ end
54
+ end
55
+
56
+ def update_content
57
+ end
58
+
59
+ def remove
60
+ FileRobot.remove_file(abs_path)
61
+ end
62
+
63
+ def include_in_cmake?
64
+ return true
65
+ end
66
+
67
+ def self.find_by_src_path(src_path)
68
+ instances.each do |instance|
69
+ if instance.src_path == src_path
70
+ return instance
71
+ end
72
+ end
73
+ nil
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../src_file'
2
+ require File.dirname(__FILE__) + '/../project'
3
+ require File.dirname(__FILE__) + '/../utility/instance_set'
4
+ require File.dirname(__FILE__) + '/cpp_file_mixin'
5
+
6
+ module Ritsu
7
+ module SrcFiles
8
+ class CppFile < Ritsu::SrcFile
9
+ include CppFileMixin
10
+
11
+ def initialize(src_path, owner)
12
+ super(src_path, owner)
13
+ end
14
+ end
15
+
16
+ module AddCppFile
17
+ def add_cpp_file(path, options={})
18
+ src_path = compute_src_path(path, options)
19
+ CppFile.new(src_path, self)
20
+ end
21
+ end
22
+ end
23
+ end
24
+
25
+ module Ritsu
26
+ class Target
27
+ include Ritsu::SrcFiles::AddCppFile
28
+ end
29
+
30
+ class Project
31
+ include Ritsu::SrcFiles::AddCppFile
32
+ end
33
+ end
@@ -0,0 +1,13 @@
1
+ module Ritsu
2
+ module SrcFiles
3
+ module CppFileMixin
4
+ def header_file?
5
+ false
6
+ end
7
+
8
+ def cpp_file?
9
+ true
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../src_files/target_cmake_lists'
2
+
3
+ module Ritsu
4
+ module SrcFiles
5
+ class ExecutableCmakeLists < TargetCmakeLists
6
+ class ExecutableTemplate < Ritsu::Template
7
+ attr_accessor :target
8
+ attr_accessor :parent
9
+
10
+ def initialize(target, parent)
11
+ super("ExecutableCmakeLists -- #{target.name} -- Executable")
12
+ @target = target
13
+ @parent = parent
14
+ end
15
+
16
+ def update_block(block, options={})
17
+ block.contents.clear
18
+ block.contents << "ADD_EXECUTABLE(#{@target.name} ${#{@parent.source_files_template.src_files_var_name}})"
19
+ end
20
+ end
21
+
22
+ class Template < Ritsu::SrcFiles::TargetCmakeLists::Template
23
+ def initialize(target, options={})
24
+ super(target, "ExecutableCmakeLists -- #{target.name}")
25
+
26
+ position_to_insert = contents.index(dependencies_template)
27
+ contents.insert(position_to_insert, ExecutableTemplate.new(target, self))
28
+ contents.insert(position_to_insert+1, "")
29
+ end
30
+ end
31
+
32
+ def initialize(target)
33
+ super(target)
34
+ self.template = Template.new(target,
35
+ :block_start_prefix => '##<<',
36
+ :block_end_prefix => '##>>')
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,46 @@
1
+ require File.dirname(__FILE__) + '/../src_file'
2
+ require File.dirname(__FILE__) + '/../project'
3
+ require File.dirname(__FILE__) + '/../utility/instance_set'
4
+ require File.dirname(__FILE__) + '/../utility/file_robot'
5
+ require File.dirname(__FILE__) + '/header_file_mixin'
6
+
7
+ module Ritsu
8
+ module SrcFiles
9
+ class HeaderFile < Ritsu::SrcFile
10
+ include HeaderFileMixin
11
+
12
+ def initialize(src_path, owner)
13
+ super(src_path, owner)
14
+ end
15
+
16
+ def create
17
+ Ritsu::Utility::FileRobot.create_file(abs_path,
18
+ "#ifndef #{include_guard}\n" +
19
+ "#define #{include_guard}\n" +
20
+ "\n" +
21
+ "////////////////////\n" +
22
+ "// YOUR CODE HERE //\n" +
23
+ "////////////////////\n" +
24
+ "\n" +
25
+ "#endif\n")
26
+ end
27
+ end
28
+
29
+ module AddHeaderFile
30
+ def add_header_file(path, options={})
31
+ src_path = compute_src_path(path, options)
32
+ HeaderFile.new(src_path, self)
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ module Ritsu
39
+ class Target
40
+ include Ritsu::SrcFiles::AddHeaderFile
41
+ end
42
+
43
+ class Project
44
+ include Ritsu::SrcFiles::AddHeaderFile
45
+ end
46
+ end
@@ -0,0 +1,20 @@
1
+ require 'rubygems'
2
+ require 'active_support/core_ext/string/inflections'
3
+
4
+ module Ritsu
5
+ module SrcFiles
6
+ module HeaderFileMixin
7
+ def include_guard
8
+ '__' + project.name.underscore.upcase + '_' + src_path.gsub(/[.\/]+/,'_').upcase + '__'
9
+ end
10
+
11
+ def header_file?
12
+ true
13
+ end
14
+
15
+ def cpp_file?
16
+ false
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,110 @@
1
+ require File.dirname(__FILE__) + '/../template'
2
+ require File.dirname(__FILE__) + '/../template_policies'
3
+ require File.dirname(__FILE__) + '/../src_files/templated_src_file'
4
+
5
+ module Ritsu
6
+ module SrcFiles
7
+ class ProjectCmakeLists < Ritsu::SrcFiles::TemplatedSrcFile
8
+ class HeaderTemplate < Ritsu::Template
9
+ include Ritsu::TemplatePolicies::Overwrite
10
+
11
+ def initialize(project)
12
+ super("ProjectCmakeLists -- Header")
13
+ @project = project
14
+
15
+ add_line "PROJECT(#{@project.name})"
16
+ add_line "CMAKE_MINIMUM_REQUIRED(VERSION 2.6)"
17
+ add_line "SET(CMAKE_MODULE_PATH \"${CMAKE_SOURCE_DIR}/cmake_modules\" ${CMAKE_MODULE_PATH})"
18
+ add_new_line
19
+ add_line "IF(WIN32)"
20
+ add_line ' OPTION(__WIN_PLATFORM__ "Windows Platform" ON)'
21
+ add_line "ELSE(WIN32)"
22
+ add_line ' OPTION(__WIN_PLATFORM__ "Windows Platform" OFF)'
23
+ add_line "ENDIF(WIN32)"
24
+ add_new_line
25
+ add_line "IF(UNIX)"
26
+ add_line " IF(APPLE)"
27
+ add_line ' OPTION(__MAC_PLATFORM__ "Apple Platform" ON)'
28
+ add_line ' OPTION(__UNIX_PLATFORM__ "Unix Platform" OFF)'
29
+ add_line " ELSE(APPLE)"
30
+ add_line ' OPTION(__MAC_PLATFORM__ "Apple Platform" OFF)'
31
+ add_line ' OPTION(__UNIX_PLATFORM__ "Unix Platform" ON)'
32
+ add_line " ENDIF(APPLE)"
33
+ add_line "ELSE(UNIX)"
34
+ add_line ' OPTION(__MAC_PLATFORM__ "Apple Platform" OFF)'
35
+ add_line ' OPTION(__UNIX_PLATFORM__ "Unix Platform" OFF)'
36
+ add_line "ENDIF(UNIX)"
37
+ end
38
+ end
39
+
40
+ class ExternalLibrariesTemplate < Ritsu::Template
41
+ def initialize(project)
42
+ super("ProjectCmakeLists -- External Libraries")
43
+ @project = project
44
+ end
45
+
46
+ def update_block(block, options={})
47
+ block.contents.clear
48
+ external_libraries = @project.external_libraries.to_a
49
+ external_libraries.sort! {|x,y| x.name <=> y.name}
50
+ external_libraries.each do |external_library|
51
+ block.contents << external_library.cmake_find_script
52
+ end
53
+ end
54
+ end
55
+
56
+ class DirectoriesTemplate < Ritsu::Template
57
+ def initialize(project)
58
+ super("ProjectCmakeLists -- Directories")
59
+ @project = project
60
+ end
61
+
62
+ def update_block(block, options={})
63
+ block.contents.clear
64
+ @project.targets_sorted_by_topological_order.each do |target|
65
+ block.contents << "ADD_SUBDIRECTORY(#{target.name})"
66
+ end
67
+ end
68
+ end
69
+
70
+ class ConfigureFileTemplate < Ritsu::Template
71
+ include Ritsu::TemplatePolicies::Overwrite
72
+
73
+ def initialize(project)
74
+ super("ProjectCmakeLists -- Configure File")
75
+ @project = project
76
+
77
+ add_line "CONFIGURE_FILE( ${CMAKE_SOURCE_DIR}/config.h.in ${CMAKE_SOURCE_DIR}/config.h )"
78
+ end
79
+ end
80
+
81
+ class Template < Ritsu::Template
82
+ include Ritsu::TemplatePolicies::StrictBlockMatchingButLeaveUserTextBe
83
+
84
+ def initialize(project)
85
+ super
86
+ @project = project
87
+
88
+ add_template HeaderTemplate.new(project)
89
+ add_new_line
90
+ add_template ExternalLibrariesTemplate.new(project)
91
+ add_new_line
92
+ add_template DirectoriesTemplate.new(project)
93
+ add_new_line
94
+ add_template ConfigureFileTemplate.new(project)
95
+ end
96
+ end
97
+
98
+ def initialize(owner)
99
+ super('CMakeLists.txt', owner,
100
+ :block_start_prefix => "##<<",
101
+ :block_end_prefix => "##>>")
102
+ self.template = Template.new(project)
103
+ end
104
+
105
+ def include_in_cmake?
106
+ false
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + "/../src_file"
2
+
3
+ module Ritsu
4
+ module SrcFiles
5
+ class ProjectConfigHeaderFile < Ritsu::SrcFile
6
+ def initialize(project)
7
+ super("config.h", project)
8
+ end
9
+
10
+ def include_in_cmake?
11
+ false
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,46 @@
1
+ require 'rubygems'
2
+ require 'active_support/core_ext/string/inflections'
3
+ require File.dirname(__FILE__) + "/templated_src_file"
4
+ require File.dirname(__FILE__) + "/../template_policies"
5
+ require File.dirname(__FILE__) + "/../template"
6
+ require File.dirname(__FILE__) + "/../utility/platform"
7
+ require File.dirname(__FILE__) + "/header_file_mixin"
8
+
9
+ module Ritsu
10
+ module SrcFiles
11
+ class ProjectConfigHeaderTemplateFile < Ritsu::SrcFiles::TemplatedSrcFile
12
+ class Template < Ritsu::Template
13
+ include Ritsu::TemplatePolicies::DoNotUpdate
14
+
15
+ attr_reader :src_file
16
+
17
+ def initialize(src_file)
18
+ @src_file = src_file
19
+ super("ProjectConfigHeaderTemplateFile -- #{project.name}")
20
+
21
+ add_line "#ifndef __#{project.name.underscore.upcase}_CONFIG_H__"
22
+ add_line "#define __#{project.name.underscore.upcase}_CONFIG_H__"
23
+ add_new_line
24
+ add_line "#cmakedefine __WIN_PLATFORM__"
25
+ add_line "#cmakedefine __MAC_PLATFORM__"
26
+ add_line "#cmakedefine __UNIX_PLATFORM__"
27
+ add_new_line
28
+ add_line "#endif"
29
+ end
30
+
31
+ def project
32
+ src_file.project
33
+ end
34
+ end
35
+
36
+ def initialize(project)
37
+ super("config.h.in", project)
38
+ self.template = Template.new(self)
39
+ end
40
+
41
+ def include_in_cmake?
42
+ false
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../src_files/target_cmake_lists'
2
+
3
+ module Ritsu
4
+ module SrcFiles
5
+ class SharedLibraryCmakeLists < TargetCmakeLists
6
+ class SharedLibraryTemplate < Ritsu::Template
7
+ attr_accessor :target
8
+ attr_accessor :parent
9
+
10
+ def initialize(target, parent)
11
+ super("SharedLibraryCmakeLists -- #{target.name} -- Shared Library")
12
+ @target = target
13
+ @parent = parent
14
+ end
15
+
16
+ def update_block(block, options={})
17
+ block.contents.clear
18
+ block.contents << "ADD_LIBRARY(#{@target.name} SHARED ${#{@parent.source_files_template.src_files_var_name}})"
19
+ end
20
+ end
21
+
22
+ class Template < Ritsu::SrcFiles::TargetCmakeLists::Template
23
+ def initialize(target, options={})
24
+ super(target, "SharedLibraryCmakeLists -- #{target.name}")
25
+
26
+ position_to_insert = contents.index(dependencies_template)
27
+ contents.insert(position_to_insert, SharedLibraryTemplate.new(target, self))
28
+ contents.insert(position_to_insert+1, "")
29
+ end
30
+ end
31
+
32
+ def initialize(target)
33
+ super(target)
34
+ self.template = Template.new(target,
35
+ :block_start_prefix => '##<<',
36
+ :block_end_prefix => '##>>')
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ require File.dirname(__FILE__) + '/../src_files/target_cmake_lists'
2
+
3
+ module Ritsu
4
+ module SrcFiles
5
+ class StaticLibraryCmakeLists < TargetCmakeLists
6
+ class StaticLibraryTemplate < Ritsu::Template
7
+ attr_accessor :target
8
+ attr_accessor :parent
9
+
10
+ def initialize(target, parent)
11
+ super("StaticLibraryCmakeLists -- #{target.name} -- Static Library")
12
+ @target = target
13
+ @parent = parent
14
+ end
15
+
16
+ def update_block(block, options={})
17
+ block.contents.clear
18
+ block.contents << "ADD_LIBRARY(#{@target.name} STATIC ${#{@parent.source_files_template.src_files_var_name}})"
19
+ end
20
+ end
21
+
22
+ class Template < Ritsu::SrcFiles::TargetCmakeLists::Template
23
+ def initialize(target, options={})
24
+ super(target, "StaticLibraryCmakeLists -- #{target.name}")
25
+
26
+ position_to_insert = contents.index(dependencies_template)
27
+ contents.insert(position_to_insert, StaticLibraryTemplate.new(target, self))
28
+ contents.insert(position_to_insert+1, "")
29
+ end
30
+ end
31
+
32
+ def initialize(target)
33
+ super(target)
34
+ self.template = Template.new(target,
35
+ :block_start_prefix => '##<<',
36
+ :block_end_prefix => '##>>')
37
+ end
38
+ end
39
+ end
40
+ end