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.
- data/README.md +95 -95
- data/bin/define_cpp_string +54 -54
- data/bin/ritsu +31 -31
- data/lib/ritsu.rb +16 -16
- data/lib/ritsu/block.rb +258 -258
- data/lib/ritsu/ext/cuda.rb +5 -5
- data/lib/ritsu/ext/cuda/external_library.rb +15 -15
- data/lib/ritsu/ext/cuda/project.rb +31 -31
- data/lib/ritsu/ext/cuda/src_files/cu_file.rb +46 -46
- data/lib/ritsu/ext/cuda/src_files/target_cmake_lists.rb +110 -110
- data/lib/ritsu/ext/cuda/target.rb +16 -16
- data/lib/ritsu/ext/cuda/targets/library.rb +16 -16
- data/lib/ritsu/ext/fake_install.rb +2 -2
- data/lib/ritsu/ext/fake_install/project.rb +16 -16
- data/lib/ritsu/ext/fake_install/src_files/project_cmake_lists.rb +45 -45
- data/lib/ritsu/ext/glsl.rb +1 -1
- data/lib/ritsu/ext/glsl/src_files/frag_file.rb +70 -70
- data/lib/ritsu/ext/glsl/src_files/vert_file.rb +70 -70
- data/lib/ritsu/ext/qt.rb +4 -4
- data/lib/ritsu/ext/qt/project.rb +47 -47
- data/lib/ritsu/ext/qt/src_files/header_file.rb +60 -60
- data/lib/ritsu/ext/qt/src_files/target_cmake_lists.rb +106 -106
- data/lib/ritsu/ext/qt/src_files/ui_file.rb +46 -46
- data/lib/ritsu/ext/test_case.rb +19 -19
- data/lib/ritsu/external_library.rb +46 -46
- data/lib/ritsu/project.rb +93 -93
- data/lib/ritsu/project_generator.rb +33 -33
- data/lib/ritsu/project_generators/default_generator.rb +72 -72
- data/lib/ritsu/project_generators/default_generator_files/Thorfile.erb +8 -8
- data/lib/ritsu/project_generators/default_generator_files/meta/project.rb.erb +10 -10
- data/lib/ritsu/src_file.rb +79 -79
- data/lib/ritsu/src_files.rb +12 -12
- data/lib/ritsu/src_files/cpp_file.rb +43 -43
- data/lib/ritsu/src_files/executable_cmake_lists.rb +39 -39
- data/lib/ritsu/src_files/header_file.rb +60 -60
- data/lib/ritsu/src_files/project_cmake_lists.rb +133 -133
- data/lib/ritsu/src_files/project_config_header_file.rb +14 -14
- data/lib/ritsu/src_files/project_config_header_template_file.rb +44 -44
- data/lib/ritsu/src_files/shared_library_cmake_lists.rb +39 -39
- data/lib/ritsu/src_files/static_library_cmake_lists.rb +39 -39
- data/lib/ritsu/src_files/target_cmake_lists.rb +189 -189
- data/lib/ritsu/src_files/templated_src_file.rb +47 -47
- data/lib/ritsu/src_files/unit.rb +32 -32
- data/lib/ritsu/target.rb +154 -154
- data/lib/ritsu/targets.rb +3 -3
- data/lib/ritsu/targets/executable.rb +44 -44
- data/lib/ritsu/targets/library.rb +29 -29
- data/lib/ritsu/targets/shared_library.rb +38 -38
- data/lib/ritsu/targets/static_library.rb +32 -32
- data/lib/ritsu/template.rb +68 -68
- data/lib/ritsu/template_policies.rb +132 -132
- data/lib/ritsu/test_helpers.rb +123 -123
- data/lib/ritsu/thors/default_thor.rb +1 -1
- data/lib/ritsu/utility.rb +7 -7
- data/lib/ritsu/utility/accessors.rb +29 -29
- data/lib/ritsu/utility/check_upon_add_set.rb +34 -34
- data/lib/ritsu/utility/file_robot.rb +128 -128
- data/lib/ritsu/utility/files.rb +12 -12
- data/lib/ritsu/utility/instance_dependencies.rb +112 -112
- data/lib/ritsu/utility/instance_set.rb +28 -28
- data/lib/ritsu/utility/platform.rb +20 -20
- data/lib/ritsu/utility/simple_io.rb +64 -64
- data/lib/ritsu/utility/single_instance.rb +33 -33
- data/lib/ritsu/utility/strings.rb +40 -40
- data/test/ritsu/block_test.rb +196 -196
- data/test/ritsu/ext/cuda/src_files/cuda_static_library_cmake_lists_test.rb +63 -63
- data/test/ritsu/external_library_test.rb +41 -41
- data/test/ritsu/project_generators/default_generator_test.rb +34 -34
- data/test/ritsu/project_test.rb +127 -127
- data/test/ritsu/src_file_test.rb +69 -69
- data/test/ritsu/src_files/cpp_file_test.rb +42 -42
- data/test/ritsu/src_files/executable_cmake_lists_test.rb +92 -92
- data/test/ritsu/src_files/header_file_test.rb +57 -57
- data/test/ritsu/src_files/project_cmake_lists_test.rb +159 -159
- data/test/ritsu/src_files/shared_library_cmake_lists_test.rb +54 -54
- data/test/ritsu/src_files/static_library_cmake_lists_test.rb +54 -54
- data/test/ritsu/src_files/target_cmake_lists_test.rb +15 -15
- data/test/ritsu/target_test.rb +105 -105
- data/test/ritsu/targets/executable_test.rb +10 -10
- data/test/ritsu/targets/shared_library_test.rb +10 -10
- data/test/ritsu/targets/static_library_test.rb +10 -10
- data/test/ritsu/utility/accessors_test.rb +14 -14
- data/test/ritsu/utility/check_upon_add_set_test.rb +31 -31
- data/test/ritsu/utility/file_robot_test.rb +175 -175
- data/test/ritsu/utility/strings_test.rb +28 -28
- data/test/test_helpers.rb +3 -3
- metadata +72 -124
- data/Thorfile +0 -104
- data/VERSION +0 -1
data/lib/ritsu/test_helpers.rb
CHANGED
@@ -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
|
data/lib/ritsu/utility.rb
CHANGED
@@ -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
|