ritsu 0.7.0 → 0.7.1

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 (89) hide show
  1. data/README.md +95 -95
  2. data/bin/define_cpp_string +54 -54
  3. data/bin/ritsu +31 -31
  4. data/lib/ritsu.rb +16 -16
  5. data/lib/ritsu/block.rb +258 -258
  6. data/lib/ritsu/ext/cuda.rb +5 -5
  7. data/lib/ritsu/ext/cuda/external_library.rb +15 -15
  8. data/lib/ritsu/ext/cuda/project.rb +31 -31
  9. data/lib/ritsu/ext/cuda/src_files/cu_file.rb +46 -46
  10. data/lib/ritsu/ext/cuda/src_files/target_cmake_lists.rb +110 -110
  11. data/lib/ritsu/ext/cuda/target.rb +16 -16
  12. data/lib/ritsu/ext/cuda/targets/library.rb +16 -16
  13. data/lib/ritsu/ext/fake_install.rb +2 -2
  14. data/lib/ritsu/ext/fake_install/project.rb +16 -16
  15. data/lib/ritsu/ext/fake_install/src_files/project_cmake_lists.rb +45 -45
  16. data/lib/ritsu/ext/glsl.rb +1 -1
  17. data/lib/ritsu/ext/glsl/src_files/frag_file.rb +70 -70
  18. data/lib/ritsu/ext/glsl/src_files/vert_file.rb +70 -70
  19. data/lib/ritsu/ext/qt.rb +4 -4
  20. data/lib/ritsu/ext/qt/project.rb +47 -47
  21. data/lib/ritsu/ext/qt/src_files/header_file.rb +60 -60
  22. data/lib/ritsu/ext/qt/src_files/target_cmake_lists.rb +106 -106
  23. data/lib/ritsu/ext/qt/src_files/ui_file.rb +46 -46
  24. data/lib/ritsu/ext/test_case.rb +19 -19
  25. data/lib/ritsu/external_library.rb +46 -46
  26. data/lib/ritsu/project.rb +93 -93
  27. data/lib/ritsu/project_generator.rb +33 -33
  28. data/lib/ritsu/project_generators/default_generator.rb +72 -72
  29. data/lib/ritsu/project_generators/default_generator_files/Thorfile.erb +8 -8
  30. data/lib/ritsu/project_generators/default_generator_files/meta/project.rb.erb +10 -10
  31. data/lib/ritsu/src_file.rb +79 -79
  32. data/lib/ritsu/src_files.rb +12 -12
  33. data/lib/ritsu/src_files/cpp_file.rb +43 -43
  34. data/lib/ritsu/src_files/executable_cmake_lists.rb +39 -39
  35. data/lib/ritsu/src_files/header_file.rb +60 -60
  36. data/lib/ritsu/src_files/project_cmake_lists.rb +133 -133
  37. data/lib/ritsu/src_files/project_config_header_file.rb +14 -14
  38. data/lib/ritsu/src_files/project_config_header_template_file.rb +44 -44
  39. data/lib/ritsu/src_files/shared_library_cmake_lists.rb +39 -39
  40. data/lib/ritsu/src_files/static_library_cmake_lists.rb +39 -39
  41. data/lib/ritsu/src_files/target_cmake_lists.rb +189 -189
  42. data/lib/ritsu/src_files/templated_src_file.rb +47 -47
  43. data/lib/ritsu/src_files/unit.rb +32 -32
  44. data/lib/ritsu/target.rb +154 -154
  45. data/lib/ritsu/targets.rb +3 -3
  46. data/lib/ritsu/targets/executable.rb +44 -44
  47. data/lib/ritsu/targets/library.rb +29 -29
  48. data/lib/ritsu/targets/shared_library.rb +38 -38
  49. data/lib/ritsu/targets/static_library.rb +32 -32
  50. data/lib/ritsu/template.rb +68 -68
  51. data/lib/ritsu/template_policies.rb +132 -132
  52. data/lib/ritsu/test_helpers.rb +123 -123
  53. data/lib/ritsu/thors/default_thor.rb +1 -1
  54. data/lib/ritsu/utility.rb +7 -7
  55. data/lib/ritsu/utility/accessors.rb +29 -29
  56. data/lib/ritsu/utility/check_upon_add_set.rb +34 -34
  57. data/lib/ritsu/utility/file_robot.rb +128 -128
  58. data/lib/ritsu/utility/files.rb +12 -12
  59. data/lib/ritsu/utility/instance_dependencies.rb +112 -112
  60. data/lib/ritsu/utility/instance_set.rb +28 -28
  61. data/lib/ritsu/utility/platform.rb +20 -20
  62. data/lib/ritsu/utility/simple_io.rb +64 -64
  63. data/lib/ritsu/utility/single_instance.rb +33 -33
  64. data/lib/ritsu/utility/strings.rb +40 -40
  65. data/test/ritsu/block_test.rb +196 -196
  66. data/test/ritsu/ext/cuda/src_files/cuda_static_library_cmake_lists_test.rb +63 -63
  67. data/test/ritsu/external_library_test.rb +41 -41
  68. data/test/ritsu/project_generators/default_generator_test.rb +34 -34
  69. data/test/ritsu/project_test.rb +127 -127
  70. data/test/ritsu/src_file_test.rb +69 -69
  71. data/test/ritsu/src_files/cpp_file_test.rb +42 -42
  72. data/test/ritsu/src_files/executable_cmake_lists_test.rb +92 -92
  73. data/test/ritsu/src_files/header_file_test.rb +57 -57
  74. data/test/ritsu/src_files/project_cmake_lists_test.rb +159 -159
  75. data/test/ritsu/src_files/shared_library_cmake_lists_test.rb +54 -54
  76. data/test/ritsu/src_files/static_library_cmake_lists_test.rb +54 -54
  77. data/test/ritsu/src_files/target_cmake_lists_test.rb +15 -15
  78. data/test/ritsu/target_test.rb +105 -105
  79. data/test/ritsu/targets/executable_test.rb +10 -10
  80. data/test/ritsu/targets/shared_library_test.rb +10 -10
  81. data/test/ritsu/targets/static_library_test.rb +10 -10
  82. data/test/ritsu/utility/accessors_test.rb +14 -14
  83. data/test/ritsu/utility/check_upon_add_set_test.rb +31 -31
  84. data/test/ritsu/utility/file_robot_test.rb +175 -175
  85. data/test/ritsu/utility/strings_test.rb +28 -28
  86. data/test/test_helpers.rb +3 -3
  87. metadata +72 -124
  88. data/Thorfile +0 -104
  89. data/VERSION +0 -1
@@ -1,124 +1,124 @@
1
- require 'test/unit'
2
- require File.expand_path(File.dirname(__FILE__) + "/target")
3
- require File.expand_path(File.dirname(__FILE__) + "/src_file")
4
- require File.expand_path(File.dirname(__FILE__) + "/external_library")
5
- require File.expand_path(File.dirname(__FILE__) + "/project")
6
-
7
- module Ritsu
8
- module SetupProjectAndClearEverythingElse
9
- def setup_project(name='project')
10
- Ritsu::Target.instances.clear
11
- Ritsu::SrcFile.instances.clear
12
- Ritsu::ExternalLibrary.instances.clear
13
- @project = Ritsu::Project.create(name)
14
- end
15
-
16
- def setup
17
- setup_project
18
- end
19
- end
20
-
21
- module TestCaseWithFileTestData
22
- module ClassMethods
23
- def file_test(name, &block)
24
- case_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
25
- if !Ritsu::Utility::Strings::is_c_name?(case_name.to_s)
26
- raise "'#{name}' does not yield a valid test case name (i.e., a C name)"
27
- end
28
- defined = instance_method(case_name) rescue false
29
- raise "#{case_name} is already defined in #{self}" if defined
30
- if block_given?
31
- define_method(case_name) do
32
- init_data_dir
33
- instance_eval(&block)
34
- end
35
- else
36
- define_method(case_name) do
37
- flunk "No implmentation provided for #{case_name}"
38
- end
39
- end
40
- end
41
- end
42
-
43
- def self.included(base)
44
- base.extend(ClassMethods)
45
- end
46
-
47
- def init_data_dir
48
- FileUtils.mkdir_p(data_dir)
49
- FileUtils.mkdir_p(static_dir)
50
- FileUtils.mkdir_p(output_dir)
51
- FileUtils.rm_r(Dir.glob(output_dir + '/*'), :force=>true)
52
- end
53
-
54
- def data_dir
55
- raise NotImplementedError.new
56
- end
57
-
58
- def data_path(path)
59
- data_dir + '/' + path
60
- end
61
-
62
- def output_dir
63
- data_dir + '/output'
64
- end
65
-
66
- def output_path(path)
67
- output_dir + '/' + path
68
- end
69
-
70
- def static_dir
71
- data_dir + '/static'
72
- end
73
-
74
- def static_path(path)
75
- static_dir + '/' + path
76
- end
77
-
78
- def assert_file_exists(filename)
79
- assert_block "#{filename} must exists" do
80
- File.exists?(filename)
81
- end
82
- end
83
-
84
- def assert_file_not_exist(filename)
85
- assert_block "#{filename} must not exist" do
86
- !File.exists?(filename)
87
- end
88
- end
89
-
90
- def assert_data_file_exists(filename)
91
- assert_file_exists(data_path(filename))
92
- end
93
-
94
- def assert_data_file_not_exist(filename)
95
- assert_file_not_exist(data_path(filename))
96
- end
97
-
98
- def assert_output_file_exists(filename)
99
- assert_file_exists(output_path(filename))
100
- end
101
-
102
- def assert_output_file_not_exist(filename)
103
- assert_file_not_exist(output_path(filename))
104
- end
105
-
106
- def assert_file_content(content, filename)
107
- assert_equal content, IO.read(filename)
108
- "content of #{filename} differs from expected"
109
- end
110
-
111
- def assert_file_compare(expected_file, actual_file)
112
- assert_equal IO.read(expected_file), IO.read(actual_file),
113
- "content of #{actual_file} differs from #{expected_file}"
114
- end
115
-
116
- def assert_output_file_compare_to_static(path)
117
- assert_file_compare(static_path(path), output_path(path))
118
- end
119
-
120
- def assert_output_file_content(content, path)
121
- assert_file_content(content, output_path(path))
122
- end
123
- end
1
+ require 'test/unit'
2
+ require File.expand_path(File.dirname(__FILE__) + "/target")
3
+ require File.expand_path(File.dirname(__FILE__) + "/src_file")
4
+ require File.expand_path(File.dirname(__FILE__) + "/external_library")
5
+ require File.expand_path(File.dirname(__FILE__) + "/project")
6
+
7
+ module Ritsu
8
+ module SetupProjectAndClearEverythingElse
9
+ def setup_project(name='project')
10
+ Ritsu::Target.instances.clear
11
+ Ritsu::SrcFile.instances.clear
12
+ Ritsu::ExternalLibrary.instances.clear
13
+ @project = Ritsu::Project.create(name)
14
+ end
15
+
16
+ def setup
17
+ setup_project
18
+ end
19
+ end
20
+
21
+ module TestCaseWithFileTestData
22
+ module ClassMethods
23
+ def file_test(name, &block)
24
+ case_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
25
+ if !Ritsu::Utility::Strings::is_c_name?(case_name.to_s)
26
+ raise "'#{name}' does not yield a valid test case name (i.e., a C name)"
27
+ end
28
+ defined = instance_method(case_name) rescue false
29
+ raise "#{case_name} is already defined in #{self}" if defined
30
+ if block_given?
31
+ define_method(case_name) do
32
+ init_data_dir
33
+ instance_eval(&block)
34
+ end
35
+ else
36
+ define_method(case_name) do
37
+ flunk "No implmentation provided for #{case_name}"
38
+ end
39
+ end
40
+ end
41
+ end
42
+
43
+ def self.included(base)
44
+ base.extend(ClassMethods)
45
+ end
46
+
47
+ def init_data_dir
48
+ FileUtils.mkdir_p(data_dir)
49
+ FileUtils.mkdir_p(static_dir)
50
+ FileUtils.mkdir_p(output_dir)
51
+ FileUtils.rm_r(Dir.glob(output_dir + '/*'), :force=>true)
52
+ end
53
+
54
+ def data_dir
55
+ raise NotImplementedError.new
56
+ end
57
+
58
+ def data_path(path)
59
+ data_dir + '/' + path
60
+ end
61
+
62
+ def output_dir
63
+ data_dir + '/output'
64
+ end
65
+
66
+ def output_path(path)
67
+ output_dir + '/' + path
68
+ end
69
+
70
+ def static_dir
71
+ data_dir + '/static'
72
+ end
73
+
74
+ def static_path(path)
75
+ static_dir + '/' + path
76
+ end
77
+
78
+ def assert_file_exists(filename)
79
+ assert_block "#{filename} must exists" do
80
+ File.exists?(filename)
81
+ end
82
+ end
83
+
84
+ def assert_file_not_exist(filename)
85
+ assert_block "#{filename} must not exist" do
86
+ !File.exists?(filename)
87
+ end
88
+ end
89
+
90
+ def assert_data_file_exists(filename)
91
+ assert_file_exists(data_path(filename))
92
+ end
93
+
94
+ def assert_data_file_not_exist(filename)
95
+ assert_file_not_exist(data_path(filename))
96
+ end
97
+
98
+ def assert_output_file_exists(filename)
99
+ assert_file_exists(output_path(filename))
100
+ end
101
+
102
+ def assert_output_file_not_exist(filename)
103
+ assert_file_not_exist(output_path(filename))
104
+ end
105
+
106
+ def assert_file_content(content, filename)
107
+ assert_equal content, IO.read(filename)
108
+ "content of #{filename} differs from expected"
109
+ end
110
+
111
+ def assert_file_compare(expected_file, actual_file)
112
+ assert_equal IO.read(expected_file), IO.read(actual_file),
113
+ "content of #{actual_file} differs from #{expected_file}"
114
+ end
115
+
116
+ def assert_output_file_compare_to_static(path)
117
+ assert_file_compare(static_path(path), output_path(path))
118
+ end
119
+
120
+ def assert_output_file_content(content, path)
121
+ assert_file_content(content, output_path(path))
122
+ end
123
+ end
124
124
  end
@@ -44,7 +44,7 @@ module Ritsu::Thors
44
44
  platform = platform.to_sym
45
45
  case platform
46
46
  when :windows
47
- "Visual Studio 9 2008"
47
+ "Visual Studio 10"
48
48
  when :mac
49
49
  "Xcode"
50
50
  when :unix
@@ -1,8 +1,8 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/utility/strings')
2
- require File.expand_path(File.dirname(__FILE__) + '/utility/accessors')
3
- require File.expand_path(File.dirname(__FILE__) + '/utility/instance_set')
4
- require File.expand_path(File.dirname(__FILE__) + '/utility/simple_io')
5
- require File.expand_path(File.dirname(__FILE__) + '/utility/file_robot')
6
- require File.expand_path(File.dirname(__FILE__) + '/utility/check_upon_add_set')
7
- require File.expand_path(File.dirname(__FILE__) + '/utility/files')
1
+ require File.expand_path(File.dirname(__FILE__) + '/utility/strings')
2
+ require File.expand_path(File.dirname(__FILE__) + '/utility/accessors')
3
+ require File.expand_path(File.dirname(__FILE__) + '/utility/instance_set')
4
+ require File.expand_path(File.dirname(__FILE__) + '/utility/simple_io')
5
+ require File.expand_path(File.dirname(__FILE__) + '/utility/file_robot')
6
+ require File.expand_path(File.dirname(__FILE__) + '/utility/check_upon_add_set')
7
+ require File.expand_path(File.dirname(__FILE__) + '/utility/files')
8
8
  require File.expand_path(File.dirname(__FILE__) + '/utility/platform')
@@ -1,30 +1,30 @@
1
- module Ritsu
2
- module Utility
3
- module Accessors
4
- def self.included(base)
5
- base.extend(ClassMethods)
6
- end
7
-
8
- module ClassMethods
9
- def attr_method_single(name)
10
- name = name.to_s
11
- module_eval <<-_RUBY
12
- def #{name}(*args)
13
- if args.length == 0
14
- @#{name} ||= nil
15
- elsif args.length == 1
16
- @#{name} = args[0]
17
- end
18
- end
19
- _RUBY
20
- end
21
-
22
- def attr_method(*names)
23
- names.each do |name|
24
- attr_method_single(name)
25
- end
26
- end
27
- end
28
- end
29
- end
1
+ module Ritsu
2
+ module Utility
3
+ module Accessors
4
+ def self.included(base)
5
+ base.extend(ClassMethods)
6
+ end
7
+
8
+ module ClassMethods
9
+ def attr_method_single(name)
10
+ name = name.to_s
11
+ module_eval <<-_RUBY
12
+ def #{name}(*args)
13
+ if args.length == 0
14
+ @#{name} ||= nil
15
+ elsif args.length == 1
16
+ @#{name} = args[0]
17
+ end
18
+ end
19
+ _RUBY
20
+ end
21
+
22
+ def attr_method(*names)
23
+ names.each do |name|
24
+ attr_method_single(name)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
30
  end
@@ -1,35 +1,35 @@
1
- require 'set'
2
-
3
- module Ritsu
4
- module Utility
5
- class CheckUponAddSet < Set
6
- def initialize(*args, &block)
7
- if block_given?
8
- @check_block = block
9
- else
10
- @check_block = Proc.new { }
11
- end
12
- super(*args)
13
- end
14
-
15
- def <<(x)
16
- @check_block.call(self, x)
17
- super(x)
18
- end
19
-
20
- def add(x)
21
- @check_block.call(self, x)
22
- super(x)
23
- end
24
-
25
- def add?(x)
26
- begin
27
- @check_block.call(self, x)
28
- super(x)
29
- rescue
30
- nil
31
- end
32
- end
33
- end
34
- end
1
+ require 'set'
2
+
3
+ module Ritsu
4
+ module Utility
5
+ class CheckUponAddSet < Set
6
+ def initialize(*args, &block)
7
+ if block_given?
8
+ @check_block = block
9
+ else
10
+ @check_block = Proc.new { }
11
+ end
12
+ super(*args)
13
+ end
14
+
15
+ def <<(x)
16
+ @check_block.call(self, x)
17
+ super(x)
18
+ end
19
+
20
+ def add(x)
21
+ @check_block.call(self, x)
22
+ super(x)
23
+ end
24
+
25
+ def add?(x)
26
+ begin
27
+ @check_block.call(self, x)
28
+ super(x)
29
+ rescue
30
+ nil
31
+ end
32
+ end
33
+ end
34
+ end
35
35
  end
@@ -1,129 +1,129 @@
1
- require 'fileutils'
2
- require 'singleton'
3
- require File.expand_path(File.dirname(__FILE__) + '/../utility/simple_io')
4
-
5
- module Ritsu
6
- module Utility
7
- class FileRobot
8
- include Singleton
9
- def self.v; instance end
10
-
11
- def self.method_missing(symbol, *args, &block)
12
- instance.send(symbol, *args, &block)
13
- end
14
-
15
- attr_accessor :force
16
- attr_reader :io
17
-
18
- def initialize
19
- @io = SimpleIO.new
20
- @force = false
21
- end
22
-
23
- def output; io.output end
24
- def output=(value); io.output = value end
25
- def input; io.input end
26
- def input=(value); io.input = value end
27
- def quiet; io.quiet end
28
- def quiet=(value); io.quiet = value end
29
-
30
- def quietly(&block)
31
- old_quiet = self.quiet
32
- self.quiet = true
33
- block.call
34
- self.quiet = old_quiet
35
- end
36
-
37
- def verbosely(&block)
38
- old_quiet = self.quiet
39
- self.quiet = false
40
- block.call
41
- self.quiet = old_quiet
42
- end
43
-
44
- def forcefully(&block)
45
- old_force = self.force
46
- self.force = true
47
- block.call
48
- self.force = old_force
49
- end
50
-
51
- def create_dir(dir_name, options={})
52
- options = {:echo_exists=>true}.merge(options)
53
- if File.exists?(dir_name)
54
- if options[:echo_exists]
55
- io.log('exist', dir_name)
56
- end
57
- else
58
- FileUtils.mkdir_p(dir_name)
59
- io.log('create', dir_name)
60
- end
61
- end
62
-
63
- def create_file(filename, content="")
64
- do_create_file = Proc.new do
65
- File.open(filename, "w") { |f| f.write content }
66
- end
67
-
68
- do_overwrite = Proc.new do
69
- do_create_file.call
70
- io.log('overwrite', filename)
71
- end
72
-
73
- create_dir(File.dirname(filename), :echo_exists=>false)
74
- if File.exists?(filename)
75
- if self.force
76
- do_overwrite.call
77
- else
78
- answer = io.ask_yes_no_all("overwrite #{filename}?")
79
- case answer
80
- when :yes
81
- do_overwrite.call
82
- when :no
83
- io.log('exist', filename)
84
- when :all
85
- self.force = true
86
- do_overwrite.call
87
- end
88
- end
89
- else
90
- do_create_file.call
91
- io.log('create', filename)
92
- end
93
- end
94
-
95
- def remove_dir(dirname)
96
- if !File.exist?(dirname)
97
- io.log("not exist", dirname)
98
- elsif !File.directory?(dirname)
99
- io.log("not dir", dirname)
100
- else
101
- begin
102
- Dir.glob(dirname + "/*") { throw "not empty" }
103
- is_empty = true
104
- rescue
105
- is_empty = false
106
- end
107
-
108
- if !is_empty
109
- io.log('not empty', dirname)
110
- elsif
111
- FileUtils.remove_dir(dirname)
112
- io.log("remove", dirname)
113
- end
114
- end
115
- end
116
-
117
- def remove_file(filename)
118
- if !File.exists?(filename)
119
- io.log("not exist", filename)
120
- elsif !File.file?(filename)
121
- io.log("not file", filename)
122
- else
123
- FileUtils.remove_file(filename)
124
- io.log("remove", filename)
125
- end
126
- end
127
- end
128
- end
1
+ require 'fileutils'
2
+ require 'singleton'
3
+ require File.expand_path(File.dirname(__FILE__) + '/../utility/simple_io')
4
+
5
+ module Ritsu
6
+ module Utility
7
+ class FileRobot
8
+ include Singleton
9
+ def self.v; instance end
10
+
11
+ def self.method_missing(symbol, *args, &block)
12
+ instance.send(symbol, *args, &block)
13
+ end
14
+
15
+ attr_accessor :force
16
+ attr_reader :io
17
+
18
+ def initialize
19
+ @io = SimpleIO.new
20
+ @force = false
21
+ end
22
+
23
+ def output; io.output end
24
+ def output=(value); io.output = value end
25
+ def input; io.input end
26
+ def input=(value); io.input = value end
27
+ def quiet; io.quiet end
28
+ def quiet=(value); io.quiet = value end
29
+
30
+ def quietly(&block)
31
+ old_quiet = self.quiet
32
+ self.quiet = true
33
+ block.call
34
+ self.quiet = old_quiet
35
+ end
36
+
37
+ def verbosely(&block)
38
+ old_quiet = self.quiet
39
+ self.quiet = false
40
+ block.call
41
+ self.quiet = old_quiet
42
+ end
43
+
44
+ def forcefully(&block)
45
+ old_force = self.force
46
+ self.force = true
47
+ block.call
48
+ self.force = old_force
49
+ end
50
+
51
+ def create_dir(dir_name, options={})
52
+ options = {:echo_exists=>true}.merge(options)
53
+ if File.exists?(dir_name)
54
+ if options[:echo_exists]
55
+ io.log('exist', dir_name)
56
+ end
57
+ else
58
+ FileUtils.mkdir_p(dir_name)
59
+ io.log('create', dir_name)
60
+ end
61
+ end
62
+
63
+ def create_file(filename, content="")
64
+ do_create_file = Proc.new do
65
+ File.open(filename, "w") { |f| f.write content }
66
+ end
67
+
68
+ do_overwrite = Proc.new do
69
+ do_create_file.call
70
+ io.log('overwrite', filename)
71
+ end
72
+
73
+ create_dir(File.dirname(filename), :echo_exists=>false)
74
+ if File.exists?(filename)
75
+ if self.force
76
+ do_overwrite.call
77
+ else
78
+ answer = io.ask_yes_no_all("overwrite #{filename}?")
79
+ case answer
80
+ when :yes
81
+ do_overwrite.call
82
+ when :no
83
+ io.log('exist', filename)
84
+ when :all
85
+ self.force = true
86
+ do_overwrite.call
87
+ end
88
+ end
89
+ else
90
+ do_create_file.call
91
+ io.log('create', filename)
92
+ end
93
+ end
94
+
95
+ def remove_dir(dirname)
96
+ if !File.exist?(dirname)
97
+ io.log("not exist", dirname)
98
+ elsif !File.directory?(dirname)
99
+ io.log("not dir", dirname)
100
+ else
101
+ begin
102
+ Dir.glob(dirname + "/*") { throw "not empty" }
103
+ is_empty = true
104
+ rescue
105
+ is_empty = false
106
+ end
107
+
108
+ if !is_empty
109
+ io.log('not empty', dirname)
110
+ elsif
111
+ FileUtils.remove_dir(dirname)
112
+ io.log("remove", dirname)
113
+ end
114
+ end
115
+ end
116
+
117
+ def remove_file(filename)
118
+ if !File.exists?(filename)
119
+ io.log("not exist", filename)
120
+ elsif !File.file?(filename)
121
+ io.log("not file", filename)
122
+ else
123
+ FileUtils.remove_file(filename)
124
+ io.log("remove", filename)
125
+ end
126
+ end
127
+ end
128
+ end
129
129
  end