fedux_org-stdlib 0.3.2 → 0.6.3
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.
- checksums.yaml +7 -0
- data/.rspec +2 -0
- data/.simplecov +7 -6
- data/Gemfile +33 -28
- data/README.md +1 -1
- data/Rakefile +8 -1
- data/doc/colors.md +2 -2
- data/doc/commands.md +2 -2
- data/doc/logic_converters.md +5 -5
- data/doc/models.md +5 -5
- data/fedux_org-stdlib.gemspec +3 -7
- data/lib/fedux_org_stdlib.rb +13 -0
- data/lib/fedux_org_stdlib/app_config.rb +247 -0
- data/lib/fedux_org_stdlib/ci.rb +6 -0
- data/lib/fedux_org_stdlib/colors/html_color.rb +18 -0
- data/lib/fedux_org_stdlib/command.rb +10 -0
- data/lib/fedux_org_stdlib/command/command_result.rb +13 -0
- data/lib/fedux_org_stdlib/command/run_command.rb +55 -0
- data/lib/fedux_org_stdlib/command/which.rb +60 -0
- data/lib/fedux_org_stdlib/core_ext/array.rb +6 -0
- data/lib/fedux_org_stdlib/core_ext/string.rb +3 -0
- data/lib/fedux_org_stdlib/environment.rb +32 -0
- data/lib/fedux_org_stdlib/filesystem.rb +248 -0
- data/lib/fedux_org_stdlib/filesystem/exceptions.rb +12 -0
- data/lib/fedux_org_stdlib/logging.rb +12 -0
- data/lib/fedux_org_stdlib/logging/logger.rb +79 -0
- data/lib/{fedux_org/stdlib → fedux_org_stdlib}/logging/severity.rb +1 -0
- data/lib/fedux_org_stdlib/logic_converters.rb +11 -0
- data/lib/{fedux_org/stdlib → fedux_org_stdlib}/logic_converters/exceptions.rb +1 -0
- data/lib/fedux_org_stdlib/logic_converters/logic_converter.rb +39 -0
- data/lib/fedux_org_stdlib/logic_converters/on_off_converter.rb +35 -0
- data/lib/fedux_org_stdlib/logic_converters/true_false_converter.rb +34 -0
- data/lib/fedux_org_stdlib/logic_converters/y_n_converter.rb +34 -0
- data/lib/fedux_org_stdlib/logic_converters/yes_no_converter.rb +34 -0
- data/lib/fedux_org_stdlib/models.rb +5 -0
- data/lib/fedux_org_stdlib/models/base_model.rb +129 -0
- data/lib/fedux_org_stdlib/models/class_based_model.rb +67 -0
- data/lib/fedux_org_stdlib/models/exceptions.rb +40 -0
- data/lib/fedux_org_stdlib/models/filesystem_based_model.rb +98 -0
- data/lib/fedux_org_stdlib/project.rb +6 -0
- data/lib/fedux_org_stdlib/project/generators/taskjuggler.rb +35 -0
- data/lib/fedux_org_stdlib/project/logger.rb +12 -0
- data/lib/fedux_org_stdlib/project/plan.rb +26 -0
- data/lib/fedux_org_stdlib/project/report.rb +63 -0
- data/lib/fedux_org_stdlib/rake.rb +8 -0
- data/lib/fedux_org_stdlib/rake/exceptions.rb +9 -0
- data/lib/{fedux_org/stdlib → fedux_org_stdlib}/rake/project.rb +4 -4
- data/lib/fedux_org_stdlib/rake/project_task.rb +29 -0
- data/lib/fedux_org_stdlib/rake/shell_task.rb +45 -0
- data/lib/fedux_org_stdlib/rake/sub_task.rb +26 -0
- data/lib/fedux_org_stdlib/rake/task.rb +118 -0
- data/lib/fedux_org_stdlib/rake/version_bump_task.rb +56 -0
- data/lib/fedux_org_stdlib/rake_tasks.rb +8 -0
- data/lib/fedux_org_stdlib/rake_tasks/console.rb +11 -0
- data/lib/fedux_org_stdlib/rake_tasks/documentation.rb +2 -0
- data/lib/fedux_org_stdlib/rake_tasks/documentation/yard.rb +9 -0
- data/lib/fedux_org_stdlib/rake_tasks/gems.rb +3 -0
- data/lib/fedux_org_stdlib/rake_tasks/gems/bundler.rb +9 -0
- data/lib/fedux_org_stdlib/rake_tasks/gems/package.rb +9 -0
- data/lib/fedux_org_stdlib/rake_tasks/project.rb +1 -0
- data/lib/fedux_org_stdlib/rake_tasks/project/report.rb +3 -0
- data/lib/fedux_org_stdlib/rake_tasks/project/report/generate.rb +10 -0
- data/lib/fedux_org_stdlib/rake_tasks/project/report/open.rb +12 -0
- data/lib/fedux_org_stdlib/rake_tasks/project/report/open_shortcut.rb +9 -0
- data/lib/fedux_org_stdlib/rake_tasks/qa.rb +4 -0
- data/lib/fedux_org_stdlib/rake_tasks/qa/rubocop.rb +13 -0
- data/lib/fedux_org_stdlib/rake_tasks/qa/travis.rb +13 -0
- data/lib/fedux_org_stdlib/rake_tasks/terminal.rb +9 -0
- data/lib/fedux_org_stdlib/rake_tasks/tests.rb +4 -0
- data/lib/fedux_org_stdlib/rake_tasks/tests/cucumber.rb +13 -0
- data/lib/fedux_org_stdlib/rake_tasks/tests/rspec.rb +12 -0
- data/lib/fedux_org_stdlib/rake_tasks/tests/travis.rb +11 -0
- data/lib/fedux_org_stdlib/rake_tasks/version.rb +6 -0
- data/lib/fedux_org_stdlib/rake_tasks/version/bump.rb +8 -0
- data/lib/fedux_org_stdlib/rake_tasks/version/restore.rb +11 -0
- data/lib/fedux_org_stdlib/rake_tasks/version/show.rb +12 -0
- data/lib/fedux_org_stdlib/rake_tasks/version/show_shortcut.rb +9 -0
- data/lib/fedux_org_stdlib/require_files.rb +27 -0
- data/lib/fedux_org_stdlib/version.rb +5 -0
- data/lib/fedux_org_stdlib/version_management/exceptions.rb +9 -0
- data/lib/fedux_org_stdlib/version_management/library_builder.rb +12 -0
- data/lib/fedux_org_stdlib/version_management/ruby_library.rb +13 -0
- data/lib/fedux_org_stdlib/version_management/rubygem_version_file.rb +78 -0
- data/lib/fedux_org_stdlib/version_management/rubygem_version_file_parser.rb +22 -0
- data/lib/fedux_org_stdlib/version_management/version.rb +25 -0
- data/lib/fedux_org_stdlib/version_management/version_builder.rb +12 -0
- data/lib/fedux_org_stdlib/versionable.rb +18 -0
- data/rakefiles/default.rake +8 -1
- data/rakefiles/travis.rake +1 -1
- data/script/console +1 -1
- data/script/terminal +3 -2
- data/spec/app_config_spec.rb +7 -0
- data/spec/colors/html_color_spec.rb +7 -14
- data/spec/command/run_command_spec.rb +9 -10
- data/spec/command/which_spec.rb +8 -9
- data/spec/environment_spec.rb +12 -11
- data/spec/logger/logger_spec.rb +17 -16
- data/spec/logic_converters/on_off_converter_spec.rb +8 -7
- data/spec/logic_converters/true_false_converter_spec.rb +8 -7
- data/spec/logic_converters/y_n_converter_spec.rb +8 -7
- data/spec/logic_converters/yes_no_converter_spec.rb +8 -7
- data/spec/models/base_model_spec.rb +7 -7
- data/spec/models/class_based_model_spec.rb +37 -39
- data/spec/models/filesystem_based_model_spec.rb +24 -24
- data/spec/project/plan_spec.rb +6 -5
- data/spec/project/report_spec.rb +35 -29
- data/spec/project/taskjuggler_spec.rb +13 -12
- data/spec/spec_helper.rb +15 -38
- data/spec/support/environment.rb +16 -0
- data/spec/support/filesystem.rb +19 -0
- data/spec/support/reporting.rb +2 -0
- data/spec/support/rspec.rb +5 -0
- data/spec/support/string.rb +2 -0
- data/spec/version_management/library_builder_spec.rb +5 -4
- data/spec/version_management/ruby_library_spec.rb +5 -4
- data/spec/version_management/rubygem_version_file_parser_spec.rb +27 -16
- data/spec/version_management/rubygem_version_file_spec.rb +56 -54
- data/spec/version_management/version_builder_spec.rb +5 -4
- data/spec/version_management/version_spec.rb +16 -16
- metadata +104 -110
- data/lib/fedux_org/stdlib.rb +0 -15
- data/lib/fedux_org/stdlib/colors/html_color.rb +0 -19
- data/lib/fedux_org/stdlib/command.rb +0 -11
- data/lib/fedux_org/stdlib/command/command_result.rb +0 -14
- data/lib/fedux_org/stdlib/command/run_command.rb +0 -55
- data/lib/fedux_org/stdlib/command/which.rb +0 -67
- data/lib/fedux_org/stdlib/environment.rb +0 -31
- data/lib/fedux_org/stdlib/filesystem.rb +0 -247
- data/lib/fedux_org/stdlib/filesystem/exceptions.rb +0 -13
- data/lib/fedux_org/stdlib/logging.rb +0 -13
- data/lib/fedux_org/stdlib/logging/logger.rb +0 -79
- data/lib/fedux_org/stdlib/logic_converters.rb +0 -12
- data/lib/fedux_org/stdlib/logic_converters/logic_converter.rb +0 -40
- data/lib/fedux_org/stdlib/logic_converters/on_off_converter.rb +0 -36
- data/lib/fedux_org/stdlib/logic_converters/true_false_converter.rb +0 -35
- data/lib/fedux_org/stdlib/logic_converters/y_n_converter.rb +0 -35
- data/lib/fedux_org/stdlib/logic_converters/yes_no_converter.rb +0 -35
- data/lib/fedux_org/stdlib/models.rb +0 -4
- data/lib/fedux_org/stdlib/models/base_model.rb +0 -129
- data/lib/fedux_org/stdlib/models/class_based_model.rb +0 -76
- data/lib/fedux_org/stdlib/models/exceptions.rb +0 -41
- data/lib/fedux_org/stdlib/models/filesystem_based_model.rb +0 -99
- data/lib/fedux_org/stdlib/project.rb +0 -5
- data/lib/fedux_org/stdlib/project/generators/taskjuggler.rb +0 -41
- data/lib/fedux_org/stdlib/project/logger.rb +0 -13
- data/lib/fedux_org/stdlib/project/plan.rb +0 -15
- data/lib/fedux_org/stdlib/project/report.rb +0 -67
- data/lib/fedux_org/stdlib/rake.rb +0 -7
- data/lib/fedux_org/stdlib/rake/console.rb +0 -3
- data/lib/fedux_org/stdlib/rake/documentation.rb +0 -1
- data/lib/fedux_org/stdlib/rake/documentation/yard.rb +0 -14
- data/lib/fedux_org/stdlib/rake/gems.rb +0 -2
- data/lib/fedux_org/stdlib/rake/gems/bundler.rb +0 -12
- data/lib/fedux_org/stdlib/rake/gems/package.rb +0 -7
- data/lib/fedux_org/stdlib/rake/library.rb +0 -8
- data/lib/fedux_org/stdlib/rake/terminal.rb +0 -9
- data/lib/fedux_org/stdlib/rake/tests.rb +0 -3
- data/lib/fedux_org/stdlib/rake/tests/cucumber.rb +0 -6
- data/lib/fedux_org/stdlib/rake/tests/rspec.rb +0 -6
- data/lib/fedux_org/stdlib/rake/tests/travis.rb +0 -15
- data/lib/fedux_org/stdlib/rake/travis.rb +0 -1
- data/lib/fedux_org/stdlib/rake/travis/lint.rb +0 -10
- data/lib/fedux_org/stdlib/rake/version.rb +0 -4
- data/lib/fedux_org/stdlib/rake/version/base.rb +0 -7
- data/lib/fedux_org/stdlib/rake/version/bump.rb +0 -78
- data/lib/fedux_org/stdlib/rake/version/restore.rb +0 -9
- data/lib/fedux_org/stdlib/rake/version/show.rb +0 -9
- data/lib/fedux_org/stdlib/rake/version/show_shortcut.rb +0 -6
- data/lib/fedux_org/stdlib/version.rb +0 -6
- data/lib/fedux_org/stdlib/version_management/library_builder.rb +0 -15
- data/lib/fedux_org/stdlib/version_management/ruby_library.rb +0 -14
- data/lib/fedux_org/stdlib/version_management/rubygem_version_file.rb +0 -90
- data/lib/fedux_org/stdlib/version_management/rubygem_version_file_parser.rb +0 -18
- data/lib/fedux_org/stdlib/version_management/version.rb +0 -33
- data/lib/fedux_org/stdlib/version_management/version_builder.rb +0 -15
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/require_files'
|
|
3
|
+
require_library %w{ find active_support/core_ext/object/blank active_support/core_ext/string/inflections }
|
|
4
|
+
|
|
5
|
+
require 'fedux_org_stdlib/models/filesystem_based_model'
|
|
6
|
+
|
|
7
|
+
module FeduxOrgStdlib
|
|
8
|
+
module Models
|
|
9
|
+
# model for import action
|
|
10
|
+
module ClassBasedModel
|
|
11
|
+
def self.included(base)
|
|
12
|
+
base.extend ClassMethods
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
module ClassMethods
|
|
16
|
+
def require_path(name)
|
|
17
|
+
path = File.join( library_name.underscore , model_name.pluralize.underscore , name.to_s )
|
|
18
|
+
FeduxOrgStdlib.logger.debug(self) { "Path to instances of model \"#{name}\": #{path}" }
|
|
19
|
+
|
|
20
|
+
path
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def exception_for_model
|
|
24
|
+
"#{library_name}::Exceptions::Invalid#{model_name}".constantize
|
|
25
|
+
rescue
|
|
26
|
+
raise FeduxOrgStdlib::Models::Exceptions::ExceptionNeedsToBeImplemented, "Exception \"#{library_name}::Exceptions::Invalid#{model_name}\" does not exist."
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def check_klass( klass , *methods)
|
|
30
|
+
raise exception_for_model, "A valid \"#{model_name}\"-class needs to respond to \"#{ methods.flatten.join(", ") }\"." unless methods.flatten.all? { |m| klass.new.respond_to? m }
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def build_class_constant(name)
|
|
34
|
+
"#{library_name}::#{model_name.pluralize}::#{name.to_s.camelcase}".constantize
|
|
35
|
+
rescue
|
|
36
|
+
raise exception_for_model , "Class \"#{library_name}::#{model_name.pluralize}::#{name.to_s.camelcase}\" cannot be found in file \"#{require_path(name)}\"."
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def check_method
|
|
40
|
+
raise FeduxOrgStdlib::Models::Exceptions::MethodNeedsToBeImplemented, "Method \"check_method\" does not exist."
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def suffix
|
|
44
|
+
'.rb'
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def load_from_filesystem
|
|
48
|
+
files = find_files
|
|
49
|
+
|
|
50
|
+
FeduxOrgStdlib.logger.debug(self) { "Files found at path \"#{path_to_instances}\": #{ files.join(", ") }" }
|
|
51
|
+
|
|
52
|
+
raise FeduxOrgStdlib::Models::Exceptions::NoImplementationsForModelFound, "You might need to store files at \"#{File.dirname(path_to_instances)}\" to make the library work." if files.blank?
|
|
53
|
+
|
|
54
|
+
files.each do |f|
|
|
55
|
+
instance_name = name( f )
|
|
56
|
+
|
|
57
|
+
require require_path( instance_name )
|
|
58
|
+
|
|
59
|
+
instance_klass = build_class_constant( instance_name )
|
|
60
|
+
check_klass( instance_klass, check_method )
|
|
61
|
+
create( instance_name , instance_klass.new )
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module FeduxOrgStdlib
|
|
3
|
+
module Models
|
|
4
|
+
module Exceptions
|
|
5
|
+
#internal error
|
|
6
|
+
class InternalError < Exception; end
|
|
7
|
+
|
|
8
|
+
#raised if one tries to delete an instance which
|
|
9
|
+
#does not exist
|
|
10
|
+
class InstanceNotFound < InternalError; end
|
|
11
|
+
|
|
12
|
+
#raised if one tries to use a keyword whose use
|
|
13
|
+
#is restricted
|
|
14
|
+
class UnauthorizedUseOfKeyword < InternalError; end
|
|
15
|
+
|
|
16
|
+
#raised if one uses invalid search criteria
|
|
17
|
+
class InvalidSearchCriteria < InternalError; end
|
|
18
|
+
|
|
19
|
+
#raised if the code which defines an import filter
|
|
20
|
+
#is malformed
|
|
21
|
+
class MethodNeedsToBeImplemented < InternalError; end
|
|
22
|
+
|
|
23
|
+
#raised if one tries to use an unimplemented exception
|
|
24
|
+
class ExceptionNeedsToBeImplemented < InternalError; end
|
|
25
|
+
|
|
26
|
+
#raised if one forgot to store files at `path_to_instances`
|
|
27
|
+
class NoImplementationsForModelFound < InternalError; end
|
|
28
|
+
|
|
29
|
+
#raised if an file system error occured
|
|
30
|
+
class FilesystemError < Exception ; end
|
|
31
|
+
|
|
32
|
+
#raise if a directory does not exist in filesystem
|
|
33
|
+
class DirectoryDoesNotExist < FilesystemError; end
|
|
34
|
+
|
|
35
|
+
#raise if a file does not exist in filesystem
|
|
36
|
+
class FileDoesNotExist < FilesystemError; end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/models/base_model'
|
|
3
|
+
|
|
4
|
+
module FeduxOrgStdlib
|
|
5
|
+
module Models
|
|
6
|
+
# model for import action
|
|
7
|
+
module FilesystemBasedModel
|
|
8
|
+
|
|
9
|
+
def self.included(base)
|
|
10
|
+
base.extend ClassMethods
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
module ClassMethods
|
|
14
|
+
|
|
15
|
+
#initialize model
|
|
16
|
+
def init
|
|
17
|
+
load_from_filesystem
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
private
|
|
21
|
+
|
|
22
|
+
def module_name
|
|
23
|
+
name = fqcn
|
|
24
|
+
name.pop
|
|
25
|
+
|
|
26
|
+
name.join('::')
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def fqcn
|
|
30
|
+
self.to_s.split(/::/)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def model_name
|
|
34
|
+
fqcn.last
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def library_name
|
|
38
|
+
fqcn.first
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def suffix
|
|
42
|
+
raise FeduxOrgStdlib::Models::Exceptions::MethodNeedsToBeImplemented, "Please defined the method \"suffix\" to make the library work."
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def model_path
|
|
46
|
+
raise FeduxOrgStdlib::Models::Exceptions::MethodNeedsToBeImplemented, "Please defined the method \"model_path\" to make the library work."
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def ignore
|
|
50
|
+
'BORING_STRING_WHICH_SHOULD_NEVER_MATCH'
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def find_files
|
|
54
|
+
files = []
|
|
55
|
+
Find.find(path_to_instances) do |path|
|
|
56
|
+
next unless File.file? path
|
|
57
|
+
next if suffix and path !~/#{suffix}$/
|
|
58
|
+
next if path =~ /^\.\.?/
|
|
59
|
+
next if path =~ %r{#{ignore}}
|
|
60
|
+
|
|
61
|
+
files << path
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
files
|
|
65
|
+
rescue
|
|
66
|
+
raise FeduxOrgStdlib::Models::Exceptions::NoImplementationsForModelFound, "You might need to create the directory\"#{File.dirname(path_to_instances)}\"."
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def path_to_instances
|
|
70
|
+
return_path = ::File.expand_path("../../#{model_name.pluralize.underscore}", model_path )
|
|
71
|
+
|
|
72
|
+
FeduxOrgStdlib.logger.debug(self) { "Path to instances of model: #{return_path}" }
|
|
73
|
+
|
|
74
|
+
return_path
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def name(path)
|
|
78
|
+
name = File.basename(path, suffix ).to_sym
|
|
79
|
+
raise FeduxOrgStdlib::Models::Exceptions::UnauthorizedUseOfKeyword if forbidden_keywords.include? name
|
|
80
|
+
|
|
81
|
+
FeduxOrgStdlib.logger.debug(self) { "Name of model: #{name}" }
|
|
82
|
+
|
|
83
|
+
name
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def load_from_filesystem
|
|
87
|
+
raise FeduxOrgStdlib::Models::Exceptions::MethodNeedsToBeImplemented
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def forbidden_keywords
|
|
91
|
+
[ ]
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/require_files'
|
|
3
|
+
require_library %w{ command_exec }
|
|
4
|
+
|
|
5
|
+
require 'fedux_org_stdlib/logging/logger'
|
|
6
|
+
|
|
7
|
+
module FeduxOrgStdlib
|
|
8
|
+
module Project
|
|
9
|
+
module Generators
|
|
10
|
+
class Taskjuggler
|
|
11
|
+
def generate_report(directory, plan)
|
|
12
|
+
FeduxOrgStdlib::Project.logger.debug "Start generating report."
|
|
13
|
+
|
|
14
|
+
begin
|
|
15
|
+
command = CommandExec::Command.new(:tj3 ,
|
|
16
|
+
:parameter => "-o #{directory} #{plan}",
|
|
17
|
+
:error_detection_on => [:return_code],
|
|
18
|
+
:error_indicators => {
|
|
19
|
+
:allowed_return_code => [0],
|
|
20
|
+
},
|
|
21
|
+
:on_error_do => :raise_error,
|
|
22
|
+
)
|
|
23
|
+
command.run
|
|
24
|
+
rescue CommandExec::Exceptions::CommandExecutionFailed
|
|
25
|
+
FeduxOrgStdlib::Project.logger.fatal "Failed to generate report:\n\n#{ command.result.stderr.join( "\n" ) }"
|
|
26
|
+
exit 1
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
FeduxOrgStdlib::Project.logger.info "Generating report succeeded."
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module FeduxOrgStdlib
|
|
3
|
+
module Project
|
|
4
|
+
class Plan
|
|
5
|
+
|
|
6
|
+
private
|
|
7
|
+
|
|
8
|
+
attr_reader :main_file, :additional_files
|
|
9
|
+
|
|
10
|
+
public
|
|
11
|
+
|
|
12
|
+
def initialize(main_file: File.join(Dir.getwd, 'plan.tjp'), additional_files: [])
|
|
13
|
+
@main_file = main_file
|
|
14
|
+
@additional_files = Array(additional_files)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def needs_to_be_compiled?(base_file)
|
|
18
|
+
(Array(main_file) + additional_files).any? { |f| File.mtime(f) > File.mtime(base_file) }
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def to_s
|
|
22
|
+
main_file
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/require_files'
|
|
3
|
+
require_library %w{ fileutils launchy }
|
|
4
|
+
|
|
5
|
+
require 'fedux_org_stdlib/logging/logger'
|
|
6
|
+
require 'fedux_org_stdlib/project/logger'
|
|
7
|
+
require 'fedux_org_stdlib/project/generators/taskjuggler'
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
module FeduxOrgStdlib
|
|
11
|
+
module Project
|
|
12
|
+
class Report
|
|
13
|
+
|
|
14
|
+
attr_reader :directory, :file
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
attr_reader :output_file, :plan, :output_directory, :generator
|
|
19
|
+
|
|
20
|
+
public
|
|
21
|
+
|
|
22
|
+
def initialize(
|
|
23
|
+
plan:,
|
|
24
|
+
output_file:,
|
|
25
|
+
generator: FeduxOrgStdlib::Project::Generators::Taskjuggler.new
|
|
26
|
+
)
|
|
27
|
+
@plan = plan
|
|
28
|
+
@output_directory = File.dirname(output_file)
|
|
29
|
+
@output_file = output_file
|
|
30
|
+
@generator = generator
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def generate
|
|
34
|
+
prepare_environment
|
|
35
|
+
|
|
36
|
+
if output_file_does_not_exist? or plan_is_newer_than_output_file?
|
|
37
|
+
generator.generate_report(output_directory, plan)
|
|
38
|
+
else
|
|
39
|
+
FeduxOrgStdlib::Project.logger.warn "No need to re-generate report. The plan file \"#{plan.to_s}\" is NOT newer than output \"#{@output_file}\"."
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def open
|
|
44
|
+
Launchy.open(output_file)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
private
|
|
48
|
+
|
|
49
|
+
def prepare_environment
|
|
50
|
+
FileUtils.mkdir_p output_directory
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def output_file_does_not_exist?
|
|
54
|
+
!File.exists? output_file
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def plan_is_newer_than_output_file?
|
|
58
|
+
plan.needs_to_be_compiled? output_file
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/rake/terminal'
|
|
3
|
+
require 'fedux_org_stdlib/rake/version'
|
|
4
|
+
require 'fedux_org_stdlib/rake/travis'
|
|
5
|
+
require 'fedux_org_stdlib/rake/tests'
|
|
6
|
+
require 'fedux_org_stdlib/rake/console'
|
|
7
|
+
require 'fedux_org_stdlib/rake/documentation'
|
|
8
|
+
require 'fedux_org_stdlib/rake/gems'
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/project'
|
|
2
3
|
|
|
3
4
|
namespace :report do
|
|
4
5
|
|
|
5
|
-
plan =
|
|
6
|
-
report =
|
|
6
|
+
plan = FeduxOrgStdlib::Project::Plan.new
|
|
7
|
+
report = FeduxOrgStdlib::Project::Report.new( plan )
|
|
7
8
|
|
|
8
9
|
desc "Generate report"
|
|
9
10
|
task :generate do
|
|
@@ -14,5 +15,4 @@ namespace :report do
|
|
|
14
15
|
task :show => :generate do
|
|
15
16
|
report.open
|
|
16
17
|
end
|
|
17
|
-
|
|
18
18
|
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/rake/task'
|
|
3
|
+
require 'fedux_org_stdlib/project'
|
|
4
|
+
|
|
5
|
+
module FeduxOrgStdlib
|
|
6
|
+
module Rake
|
|
7
|
+
# Project Task
|
|
8
|
+
#
|
|
9
|
+
# @see Rakefile
|
|
10
|
+
class ProjectTask < Task
|
|
11
|
+
|
|
12
|
+
# @!attribute [r] report
|
|
13
|
+
# The report to be generated
|
|
14
|
+
attr_reader :report
|
|
15
|
+
|
|
16
|
+
def initialize(
|
|
17
|
+
report_file: File.join(Dir.getwd, 'reports', 'Overview.html'),
|
|
18
|
+
plan_file: File.join(Dir.getwd, 'plan.tjp'),
|
|
19
|
+
additional_files: [],
|
|
20
|
+
**args
|
|
21
|
+
)
|
|
22
|
+
super(**args)
|
|
23
|
+
|
|
24
|
+
plan = FeduxOrgStdlib::Project::Plan.new(main_file: plan_file, additional_files: additional_files)
|
|
25
|
+
@report = FeduxOrgStdlib::Project::Report.new(plan: plan, output_file: report_file)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'fedux_org_stdlib/rake/task'
|
|
3
|
+
require 'fedux_org_stdlib/require_files'
|
|
4
|
+
require_library %w{ erubis }
|
|
5
|
+
|
|
6
|
+
module FeduxOrgStdlib
|
|
7
|
+
module Rake
|
|
8
|
+
# Shell Task
|
|
9
|
+
#
|
|
10
|
+
# @see Rakefile
|
|
11
|
+
class ShellTask < Task
|
|
12
|
+
# @!attribute [r] command
|
|
13
|
+
# The command to be executed
|
|
14
|
+
attr_reader :command
|
|
15
|
+
|
|
16
|
+
# @!attribute [r] use_bundler
|
|
17
|
+
# Use bundler to run command
|
|
18
|
+
attr_reader :use_bundler
|
|
19
|
+
|
|
20
|
+
def initialize(command:, use_bundler: false, **args)
|
|
21
|
+
super(**args)
|
|
22
|
+
|
|
23
|
+
@use_bundler = use_bundler
|
|
24
|
+
@command = command
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# @private
|
|
28
|
+
def run_task(verbose)
|
|
29
|
+
logger.warn 'Gemfile does not exist. Running bundler will fail. I am going to run the command without `bundle exec`.' unless gemfile_exists?
|
|
30
|
+
|
|
31
|
+
cmd = []
|
|
32
|
+
cmd << 'bundle exec' if use_bundler and gemfile_exists?
|
|
33
|
+
cmd << command
|
|
34
|
+
|
|
35
|
+
sh Erubis::Eruby.new(cmd.join(' ')).result(get_binding)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def gemfile_exists?
|
|
41
|
+
!Dir.glob('Gemfile').blank?
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|