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.
Files changed (175) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +2 -0
  3. data/.simplecov +7 -6
  4. data/Gemfile +33 -28
  5. data/README.md +1 -1
  6. data/Rakefile +8 -1
  7. data/doc/colors.md +2 -2
  8. data/doc/commands.md +2 -2
  9. data/doc/logic_converters.md +5 -5
  10. data/doc/models.md +5 -5
  11. data/fedux_org-stdlib.gemspec +3 -7
  12. data/lib/fedux_org_stdlib.rb +13 -0
  13. data/lib/fedux_org_stdlib/app_config.rb +247 -0
  14. data/lib/fedux_org_stdlib/ci.rb +6 -0
  15. data/lib/fedux_org_stdlib/colors/html_color.rb +18 -0
  16. data/lib/fedux_org_stdlib/command.rb +10 -0
  17. data/lib/fedux_org_stdlib/command/command_result.rb +13 -0
  18. data/lib/fedux_org_stdlib/command/run_command.rb +55 -0
  19. data/lib/fedux_org_stdlib/command/which.rb +60 -0
  20. data/lib/fedux_org_stdlib/core_ext/array.rb +6 -0
  21. data/lib/fedux_org_stdlib/core_ext/string.rb +3 -0
  22. data/lib/fedux_org_stdlib/environment.rb +32 -0
  23. data/lib/fedux_org_stdlib/filesystem.rb +248 -0
  24. data/lib/fedux_org_stdlib/filesystem/exceptions.rb +12 -0
  25. data/lib/fedux_org_stdlib/logging.rb +12 -0
  26. data/lib/fedux_org_stdlib/logging/logger.rb +79 -0
  27. data/lib/{fedux_org/stdlib → fedux_org_stdlib}/logging/severity.rb +1 -0
  28. data/lib/fedux_org_stdlib/logic_converters.rb +11 -0
  29. data/lib/{fedux_org/stdlib → fedux_org_stdlib}/logic_converters/exceptions.rb +1 -0
  30. data/lib/fedux_org_stdlib/logic_converters/logic_converter.rb +39 -0
  31. data/lib/fedux_org_stdlib/logic_converters/on_off_converter.rb +35 -0
  32. data/lib/fedux_org_stdlib/logic_converters/true_false_converter.rb +34 -0
  33. data/lib/fedux_org_stdlib/logic_converters/y_n_converter.rb +34 -0
  34. data/lib/fedux_org_stdlib/logic_converters/yes_no_converter.rb +34 -0
  35. data/lib/fedux_org_stdlib/models.rb +5 -0
  36. data/lib/fedux_org_stdlib/models/base_model.rb +129 -0
  37. data/lib/fedux_org_stdlib/models/class_based_model.rb +67 -0
  38. data/lib/fedux_org_stdlib/models/exceptions.rb +40 -0
  39. data/lib/fedux_org_stdlib/models/filesystem_based_model.rb +98 -0
  40. data/lib/fedux_org_stdlib/project.rb +6 -0
  41. data/lib/fedux_org_stdlib/project/generators/taskjuggler.rb +35 -0
  42. data/lib/fedux_org_stdlib/project/logger.rb +12 -0
  43. data/lib/fedux_org_stdlib/project/plan.rb +26 -0
  44. data/lib/fedux_org_stdlib/project/report.rb +63 -0
  45. data/lib/fedux_org_stdlib/rake.rb +8 -0
  46. data/lib/fedux_org_stdlib/rake/exceptions.rb +9 -0
  47. data/lib/{fedux_org/stdlib → fedux_org_stdlib}/rake/project.rb +4 -4
  48. data/lib/fedux_org_stdlib/rake/project_task.rb +29 -0
  49. data/lib/fedux_org_stdlib/rake/shell_task.rb +45 -0
  50. data/lib/fedux_org_stdlib/rake/sub_task.rb +26 -0
  51. data/lib/fedux_org_stdlib/rake/task.rb +118 -0
  52. data/lib/fedux_org_stdlib/rake/version_bump_task.rb +56 -0
  53. data/lib/fedux_org_stdlib/rake_tasks.rb +8 -0
  54. data/lib/fedux_org_stdlib/rake_tasks/console.rb +11 -0
  55. data/lib/fedux_org_stdlib/rake_tasks/documentation.rb +2 -0
  56. data/lib/fedux_org_stdlib/rake_tasks/documentation/yard.rb +9 -0
  57. data/lib/fedux_org_stdlib/rake_tasks/gems.rb +3 -0
  58. data/lib/fedux_org_stdlib/rake_tasks/gems/bundler.rb +9 -0
  59. data/lib/fedux_org_stdlib/rake_tasks/gems/package.rb +9 -0
  60. data/lib/fedux_org_stdlib/rake_tasks/project.rb +1 -0
  61. data/lib/fedux_org_stdlib/rake_tasks/project/report.rb +3 -0
  62. data/lib/fedux_org_stdlib/rake_tasks/project/report/generate.rb +10 -0
  63. data/lib/fedux_org_stdlib/rake_tasks/project/report/open.rb +12 -0
  64. data/lib/fedux_org_stdlib/rake_tasks/project/report/open_shortcut.rb +9 -0
  65. data/lib/fedux_org_stdlib/rake_tasks/qa.rb +4 -0
  66. data/lib/fedux_org_stdlib/rake_tasks/qa/rubocop.rb +13 -0
  67. data/lib/fedux_org_stdlib/rake_tasks/qa/travis.rb +13 -0
  68. data/lib/fedux_org_stdlib/rake_tasks/terminal.rb +9 -0
  69. data/lib/fedux_org_stdlib/rake_tasks/tests.rb +4 -0
  70. data/lib/fedux_org_stdlib/rake_tasks/tests/cucumber.rb +13 -0
  71. data/lib/fedux_org_stdlib/rake_tasks/tests/rspec.rb +12 -0
  72. data/lib/fedux_org_stdlib/rake_tasks/tests/travis.rb +11 -0
  73. data/lib/fedux_org_stdlib/rake_tasks/version.rb +6 -0
  74. data/lib/fedux_org_stdlib/rake_tasks/version/bump.rb +8 -0
  75. data/lib/fedux_org_stdlib/rake_tasks/version/restore.rb +11 -0
  76. data/lib/fedux_org_stdlib/rake_tasks/version/show.rb +12 -0
  77. data/lib/fedux_org_stdlib/rake_tasks/version/show_shortcut.rb +9 -0
  78. data/lib/fedux_org_stdlib/require_files.rb +27 -0
  79. data/lib/fedux_org_stdlib/version.rb +5 -0
  80. data/lib/fedux_org_stdlib/version_management/exceptions.rb +9 -0
  81. data/lib/fedux_org_stdlib/version_management/library_builder.rb +12 -0
  82. data/lib/fedux_org_stdlib/version_management/ruby_library.rb +13 -0
  83. data/lib/fedux_org_stdlib/version_management/rubygem_version_file.rb +78 -0
  84. data/lib/fedux_org_stdlib/version_management/rubygem_version_file_parser.rb +22 -0
  85. data/lib/fedux_org_stdlib/version_management/version.rb +25 -0
  86. data/lib/fedux_org_stdlib/version_management/version_builder.rb +12 -0
  87. data/lib/fedux_org_stdlib/versionable.rb +18 -0
  88. data/rakefiles/default.rake +8 -1
  89. data/rakefiles/travis.rake +1 -1
  90. data/script/console +1 -1
  91. data/script/terminal +3 -2
  92. data/spec/app_config_spec.rb +7 -0
  93. data/spec/colors/html_color_spec.rb +7 -14
  94. data/spec/command/run_command_spec.rb +9 -10
  95. data/spec/command/which_spec.rb +8 -9
  96. data/spec/environment_spec.rb +12 -11
  97. data/spec/logger/logger_spec.rb +17 -16
  98. data/spec/logic_converters/on_off_converter_spec.rb +8 -7
  99. data/spec/logic_converters/true_false_converter_spec.rb +8 -7
  100. data/spec/logic_converters/y_n_converter_spec.rb +8 -7
  101. data/spec/logic_converters/yes_no_converter_spec.rb +8 -7
  102. data/spec/models/base_model_spec.rb +7 -7
  103. data/spec/models/class_based_model_spec.rb +37 -39
  104. data/spec/models/filesystem_based_model_spec.rb +24 -24
  105. data/spec/project/plan_spec.rb +6 -5
  106. data/spec/project/report_spec.rb +35 -29
  107. data/spec/project/taskjuggler_spec.rb +13 -12
  108. data/spec/spec_helper.rb +15 -38
  109. data/spec/support/environment.rb +16 -0
  110. data/spec/support/filesystem.rb +19 -0
  111. data/spec/support/reporting.rb +2 -0
  112. data/spec/support/rspec.rb +5 -0
  113. data/spec/support/string.rb +2 -0
  114. data/spec/version_management/library_builder_spec.rb +5 -4
  115. data/spec/version_management/ruby_library_spec.rb +5 -4
  116. data/spec/version_management/rubygem_version_file_parser_spec.rb +27 -16
  117. data/spec/version_management/rubygem_version_file_spec.rb +56 -54
  118. data/spec/version_management/version_builder_spec.rb +5 -4
  119. data/spec/version_management/version_spec.rb +16 -16
  120. metadata +104 -110
  121. data/lib/fedux_org/stdlib.rb +0 -15
  122. data/lib/fedux_org/stdlib/colors/html_color.rb +0 -19
  123. data/lib/fedux_org/stdlib/command.rb +0 -11
  124. data/lib/fedux_org/stdlib/command/command_result.rb +0 -14
  125. data/lib/fedux_org/stdlib/command/run_command.rb +0 -55
  126. data/lib/fedux_org/stdlib/command/which.rb +0 -67
  127. data/lib/fedux_org/stdlib/environment.rb +0 -31
  128. data/lib/fedux_org/stdlib/filesystem.rb +0 -247
  129. data/lib/fedux_org/stdlib/filesystem/exceptions.rb +0 -13
  130. data/lib/fedux_org/stdlib/logging.rb +0 -13
  131. data/lib/fedux_org/stdlib/logging/logger.rb +0 -79
  132. data/lib/fedux_org/stdlib/logic_converters.rb +0 -12
  133. data/lib/fedux_org/stdlib/logic_converters/logic_converter.rb +0 -40
  134. data/lib/fedux_org/stdlib/logic_converters/on_off_converter.rb +0 -36
  135. data/lib/fedux_org/stdlib/logic_converters/true_false_converter.rb +0 -35
  136. data/lib/fedux_org/stdlib/logic_converters/y_n_converter.rb +0 -35
  137. data/lib/fedux_org/stdlib/logic_converters/yes_no_converter.rb +0 -35
  138. data/lib/fedux_org/stdlib/models.rb +0 -4
  139. data/lib/fedux_org/stdlib/models/base_model.rb +0 -129
  140. data/lib/fedux_org/stdlib/models/class_based_model.rb +0 -76
  141. data/lib/fedux_org/stdlib/models/exceptions.rb +0 -41
  142. data/lib/fedux_org/stdlib/models/filesystem_based_model.rb +0 -99
  143. data/lib/fedux_org/stdlib/project.rb +0 -5
  144. data/lib/fedux_org/stdlib/project/generators/taskjuggler.rb +0 -41
  145. data/lib/fedux_org/stdlib/project/logger.rb +0 -13
  146. data/lib/fedux_org/stdlib/project/plan.rb +0 -15
  147. data/lib/fedux_org/stdlib/project/report.rb +0 -67
  148. data/lib/fedux_org/stdlib/rake.rb +0 -7
  149. data/lib/fedux_org/stdlib/rake/console.rb +0 -3
  150. data/lib/fedux_org/stdlib/rake/documentation.rb +0 -1
  151. data/lib/fedux_org/stdlib/rake/documentation/yard.rb +0 -14
  152. data/lib/fedux_org/stdlib/rake/gems.rb +0 -2
  153. data/lib/fedux_org/stdlib/rake/gems/bundler.rb +0 -12
  154. data/lib/fedux_org/stdlib/rake/gems/package.rb +0 -7
  155. data/lib/fedux_org/stdlib/rake/library.rb +0 -8
  156. data/lib/fedux_org/stdlib/rake/terminal.rb +0 -9
  157. data/lib/fedux_org/stdlib/rake/tests.rb +0 -3
  158. data/lib/fedux_org/stdlib/rake/tests/cucumber.rb +0 -6
  159. data/lib/fedux_org/stdlib/rake/tests/rspec.rb +0 -6
  160. data/lib/fedux_org/stdlib/rake/tests/travis.rb +0 -15
  161. data/lib/fedux_org/stdlib/rake/travis.rb +0 -1
  162. data/lib/fedux_org/stdlib/rake/travis/lint.rb +0 -10
  163. data/lib/fedux_org/stdlib/rake/version.rb +0 -4
  164. data/lib/fedux_org/stdlib/rake/version/base.rb +0 -7
  165. data/lib/fedux_org/stdlib/rake/version/bump.rb +0 -78
  166. data/lib/fedux_org/stdlib/rake/version/restore.rb +0 -9
  167. data/lib/fedux_org/stdlib/rake/version/show.rb +0 -9
  168. data/lib/fedux_org/stdlib/rake/version/show_shortcut.rb +0 -6
  169. data/lib/fedux_org/stdlib/version.rb +0 -6
  170. data/lib/fedux_org/stdlib/version_management/library_builder.rb +0 -15
  171. data/lib/fedux_org/stdlib/version_management/ruby_library.rb +0 -14
  172. data/lib/fedux_org/stdlib/version_management/rubygem_version_file.rb +0 -90
  173. data/lib/fedux_org/stdlib/version_management/rubygem_version_file_parser.rb +0 -18
  174. data/lib/fedux_org/stdlib/version_management/version.rb +0 -33
  175. 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,6 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/project/logger'
3
+ require 'fedux_org_stdlib/project/plan'
4
+ require 'fedux_org_stdlib/project/report'
5
+ require 'fedux_org_stdlib/project/generators/taskjuggler'
6
+
@@ -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,12 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logging/logger'
3
+
4
+ module FeduxOrgStdlib
5
+ module Project
6
+ class << self
7
+ def logger
8
+ @logger ||= FeduxOrgStdlib::Logging::Logger.new
9
+ end
10
+ end
11
+ end
12
+ 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'
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+ module FeduxOrgStdlib
3
+ module Rake
4
+ module Exceptions
5
+ # If no version file can be found
6
+ class VersionFileNotFound; end
7
+ end
8
+ end
9
+ end
@@ -1,9 +1,10 @@
1
- require 'fedux_org/stdlib/project'
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/project'
2
3
 
3
4
  namespace :report do
4
5
 
5
- plan = FeduxOrg::Stdlib::Project::Plan.new
6
- report = FeduxOrg::Stdlib::Project::Report.new( plan )
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