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,12 @@
1
+ # encoding: utf-8
2
+ module FeduxOrgStdlib
3
+ module FileSystem
4
+ module Exceptions
5
+ # Raise if path with '..' given
6
+ class InvalidPath < Exception; end
7
+
8
+ #Raised if library is not used correctly
9
+ class InvalidUsageOfLibrary < Exception; end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logging/logger'
3
+
4
+ module FeduxOrgStdlib
5
+ def self.logger
6
+ @logger ||= FeduxOrgStdlib::Logging::Logger.new
7
+ end
8
+
9
+ def self.logger=(logger)
10
+ @logger = logger
11
+ end
12
+ end
@@ -0,0 +1,79 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/require_files'
3
+ require_library %w{ logger forwardable }
4
+
5
+ require 'fedux_org_stdlib/logging/severity'
6
+
7
+ module FeduxOrgStdlib
8
+ module Logging
9
+ class Logger
10
+
11
+ extend ::Forwardable
12
+ def_delegators :@logger, :fatal, :warn, :debug, :info, :error, :unknown
13
+
14
+ attr_reader :mode
15
+
16
+ # Create logger
17
+ #
18
+ # @param [Logger] logger (::Logger.new( $stderr ))
19
+ # The logger with should be used to output data
20
+ def initialize(logger = ::Logger.new( $stderr ) )
21
+ @logger = logger
22
+ self.mode = :info
23
+ end
24
+
25
+ # Reset logger to ruby logger
26
+ def reset
27
+ @logger = ::Logger.new( $stderr )
28
+ end
29
+
30
+ # Change mode of logger: DEBUG, ... + Change the output format
31
+ #
32
+ # @param [Symbol] m
33
+ # the mode: DEBUG, ...
34
+ def mode=(m)
35
+ @mode = m
36
+
37
+ case m
38
+ when :debug
39
+ @logger.level = ::Logger::DEBUG
40
+ format_debug
41
+ when :silent
42
+ @logger.level = ::Logger::SILENT
43
+ when :info
44
+ @logger.level = ::Logger::INFO
45
+ format_standard
46
+ else
47
+ @logger.level = ::Logger::INFO
48
+ format_standard
49
+ end
50
+ end
51
+
52
+ private
53
+
54
+ def format_debug
55
+ @logger.formatter = proc { |severity, datetime, progname , msg|
56
+ debug_msg("%s %s %s: %s\n" % [ datetime, severity, progname, msg ])
57
+ }
58
+ end
59
+
60
+ def format_standard
61
+ @logger.formatter = proc { |severity, datetime, _, msg|
62
+ info_msg( "%s %s: %s\n" % [ datetime, severity, msg ] )
63
+ }
64
+ end
65
+
66
+ def error_msg(msg)
67
+ ANSI.red(msg)
68
+ end
69
+
70
+ def info_msg(msg)
71
+ msg
72
+ end
73
+
74
+ def debug_msg(msg)
75
+ msg
76
+ end
77
+ end
78
+ end
79
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  class ::Logger
2
3
  SILENT = 9999 unless defined? SILENT
3
4
  end
@@ -0,0 +1,11 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logic_converters/exceptions'
3
+ require 'fedux_org_stdlib/logic_converters/logic_converter'
4
+ require 'fedux_org_stdlib/logic_converters/on_off_converter'
5
+ require 'fedux_org_stdlib/logic_converters/true_false_converter'
6
+ require 'fedux_org_stdlib/logic_converters/yes_no_converter'
7
+
8
+ module FeduxOrgStdlib
9
+ module LogicConverters
10
+ end
11
+ end
@@ -1,3 +1,4 @@
1
+ # encoding: utf-8
1
2
  module FeduxOrg
2
3
  module Stdlib
3
4
  module LogicConverters
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logic_converters/exceptions'
3
+
4
+ require 'fedux_org_stdlib/logic_converters/on_off_converter'
5
+ require 'fedux_org_stdlib/logic_converters/true_false_converter'
6
+ require 'fedux_org_stdlib/logic_converters/yes_no_converter'
7
+ require 'fedux_org_stdlib/logic_converters/y_n_converter'
8
+
9
+ module FeduxOrgStdlib
10
+ module LogicConverters
11
+ class LogicConverter
12
+
13
+ # @param [String, Symbol] type (true_false, yes_no, on_off)
14
+ # choose the type of converter which should be used
15
+ def initialize(type)
16
+ @converter = case type.to_s
17
+ when 'true_false'
18
+ TrueFalseConverter.new
19
+ when 'yes_no'
20
+ YesNoConverter.new
21
+ when 'on_off'
22
+ OnOffConverter.new
23
+ when 'y_n'
24
+ YNConverter.new
25
+ else
26
+ raise FeduxOrgStdlib::LogicConverters::Exceptions::InvalidType, "Unknown type \"#{type}\" for logic converter. Valid types are \"true_false\", \"yes_no\" or \"on_off\"."
27
+ end
28
+ end
29
+
30
+ # @param [true,false] value
31
+ # the logic value which should be converted
32
+ # @return [String]
33
+ # the converted value
34
+ def parse( value )
35
+ @converter.parse( value )
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logic_converters/exceptions'
3
+
4
+ module FeduxOrgStdlib
5
+ module LogicConverters
6
+ class OnOffConverter
7
+
8
+ # @param [true,false] value
9
+ # the logic value which should be converted
10
+ # @return [String]
11
+ # the converted value: true => on, false => off, '' => nil
12
+ #
13
+ # @example Parse true
14
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
15
+ # converter.parse( true ) # on
16
+ #
17
+ # @example Parse false
18
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
19
+ # converter.parse( false ) # off
20
+ #
21
+ def parse( value )
22
+ case value
23
+ when true
24
+ 'on'
25
+ when false
26
+ 'off'
27
+ when ''
28
+ nil
29
+ else
30
+ raise FeduxOrgStdlib::LogicConverters::Exceptions::InvalidValue, "Unknown logic value \"#{value}\"."
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logic_converters/exceptions'
3
+
4
+ module FeduxOrgStdlib
5
+ module LogicConverters
6
+ class TrueFalseConverter
7
+
8
+ # @param [true,false] value
9
+ # the logic value which should be converted
10
+ # @return [String]
11
+ # the converted value: true => 'true', false => 'false', '' => nil
12
+ #
13
+ # @example Parse true
14
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
15
+ # converter.parse( true ) # 'true'
16
+ #
17
+ # @example Parse false
18
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
19
+ # converter.parse( false ) # 'false'
20
+ def parse( value )
21
+ case value
22
+ when true
23
+ 'true'
24
+ when false
25
+ 'false'
26
+ when ''
27
+ nil
28
+ else
29
+ raise FeduxOrgStdlib::LogicConverters::Exceptions::InvalidValue, "Unknown logic value \"#{value}\"."
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logic_converters/exceptions'
3
+
4
+ module FeduxOrgStdlib
5
+ module LogicConverters
6
+ class YNConverter
7
+
8
+ # @param [true,false] value
9
+ # the logic value which should be converted
10
+ # @return [String]
11
+ # the converted value: true => y, false => n, '' => nil
12
+ #
13
+ # @example Parse true
14
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
15
+ # converter.parse( true ) # 'y'
16
+ #
17
+ # @example Parse false
18
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
19
+ # converter.parse( false ) # 'n'
20
+ def parse( value )
21
+ case value
22
+ when true
23
+ 'y'
24
+ when false
25
+ 'n'
26
+ when ''
27
+ nil
28
+ else
29
+ raise FeduxOrgStdlib::LogicConverters::Exceptions::InvalidValue, "Unknown logic value \"#{value}\"."
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logic_converters/exceptions'
3
+
4
+ module FeduxOrgStdlib
5
+ module LogicConverters
6
+ class YesNoConverter
7
+ # @param [true,false] value
8
+ # the logic value which should be converted
9
+ # @return [String]
10
+ # the converted value: true => yes, false => no, '' => nil
11
+ #
12
+ # @example Parse true
13
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
14
+ # converter.parse( true ) # 'yes'
15
+ #
16
+ # @example Parse false
17
+ # converter = FeduxOrgStdlib::LogicConverters::OnOffConverter.new
18
+ # converter.parse( false ) # 'no'
19
+ #
20
+ def parse( value )
21
+ case value
22
+ when true
23
+ 'yes'
24
+ when false
25
+ 'no'
26
+ when ''
27
+ nil
28
+ else
29
+ raise FeduxOrgStdlib::LogicConverters::Exceptions::InvalidValue, "Unknown logic value \"#{value}\"."
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,5 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/models/exceptions'
3
+ require 'fedux_org_stdlib/models/base_model'
4
+ require 'fedux_org_stdlib/models/class_based_model'
5
+ require 'fedux_org_stdlib/models/filesystem_based_model'
@@ -0,0 +1,129 @@
1
+ # encoding: utf-8
2
+ require 'fedux_org_stdlib/logging'
3
+ require 'fedux_org_stdlib/models/exceptions'
4
+ require_library %w{ set }
5
+
6
+ module FeduxOrgStdlib
7
+ module Models
8
+ class BaseModel
9
+
10
+ include Comparable
11
+
12
+ @instances = ::Set.new
13
+
14
+ attr_reader :name
15
+
16
+ def self.inherited(base)
17
+ base.instance_variable_set(:@instances, Set.new)
18
+ end
19
+
20
+ def initialize(name)
21
+ @name = name.to_sym
22
+ @enabled = false
23
+ end
24
+
25
+ #enable action
26
+ def enable
27
+ @enabled = true
28
+ end
29
+
30
+ #check if action is enabled
31
+ def enabled?(val=true)
32
+ @enabled == val
33
+ end
34
+
35
+ def name?(name)
36
+ @name == name
37
+ end
38
+
39
+ def <=>(other)
40
+ name <=> other.name
41
+ end
42
+
43
+ def eql?(other)
44
+ name == other.name
45
+ end
46
+
47
+ def hash
48
+ name.to_s.hash
49
+ end
50
+
51
+ class << self
52
+ #attr_accessor :instances
53
+
54
+ def register(element)
55
+ @instances << element
56
+
57
+ element
58
+ end
59
+
60
+ def create( *args, &block )
61
+ if block_given?
62
+ register( new( *args, &block ) )
63
+ else
64
+ register( new( *args ) )
65
+ end
66
+ end
67
+
68
+ def delete( val )
69
+ element = self.find( val.to_s.to_sym )
70
+ raise FeduxOrgStdlib::Exceptions::InstanceNotFound unless element
71
+ @instances.delete element
72
+
73
+ element
74
+ end
75
+
76
+ def clear
77
+ @instances = Set.new
78
+ end
79
+
80
+ def all
81
+ @instances.to_a
82
+ end
83
+
84
+ #return all names as string
85
+ def all_names_as_string(connector=", ")
86
+ find_all(enabled: true).map(&:name).sort.join(connector)
87
+ end
88
+
89
+ def first
90
+ @instances.to_a.first
91
+ end
92
+
93
+ def last
94
+ @instances.to_a.last
95
+ end
96
+
97
+ #enables a specific instance
98
+ def enable(name)
99
+ find(name: name).enable
100
+ rescue NoMethodError => e
101
+ raise FeduxOrgStdlib::Models::Exceptions::InvalidSearchCriteria, "Sorry I'm not able to enable \"#{name}\". You need to create an instance with name \"#{name}\" first."
102
+ end
103
+
104
+ #finds a single instance
105
+ def find(criteria = {})
106
+ find_all(criteria).first
107
+ end
108
+
109
+ #finds all instances
110
+ def find_all(criteria = {})
111
+ FeduxOrgStdlib.logger.debug(self) { "Criteria for search: #{ criteria }" }
112
+ criteria = { name: criteria.to_sym } if criteria.kind_of? Symbol or criteria.kind_of? String
113
+
114
+ FeduxOrgStdlib.logger.debug(self) { "Instances to be searched for: #{ @instances.map { |i| "#{i.name} (#{i.class})" }.join(", ") }" }
115
+ @instances.find_all do |i|
116
+ criteria.all? do |c,v|
117
+
118
+ FeduxOrgStdlib.logger.debug(self) { "Check method for search: #{ c }" }
119
+ i.send( "#{c}?".to_sym , v )
120
+ end
121
+ end
122
+ rescue NameError => e
123
+ raise FeduxOrgStdlib::Models::Exceptions::InvalidSearchCriteria, e.message
124
+ end
125
+ end
126
+
127
+ end
128
+ end
129
+ end