Class: EacRubyUtils::RequireSub::Base

Inherits:
Object
  • Object
show all
Includes:
Listable
Defined in:
lib/eac_ruby_utils/require_sub/base.rb

Constant Summary collapse

INCLUDE_MODULES_MAP =
{
  nil => nil,
  false => nil,
  true => :include,
  extend: :extend,
  include: :include,
  prepend: :prepend
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(file, options = {}) ⇒ Base

Returns a new instance of Base.



26
27
28
29
30
31
32
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 26

def initialize(file, options = {})
  @file = file
  @options = self.class.lists.option.hash_keys_validate!(options)
  return unless options[OPTION_REQUIRE_MODE]

  self.class.lists.require_mode.value_validate!(options[OPTION_REQUIRE_MODE])
end

Instance Attribute Details

#fileObject (readonly)

Returns the value of attribute file.



24
25
26
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 24

def file
  @file
end

#optionsObject (readonly)

Returns the value of attribute options.



24
25
26
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 24

def options
  @options
end

Instance Method Details

#active_support_require?Boolean

Returns:



35
36
37
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 35

def active_support_require?
  options[OPTION_REQUIRE_DEPENDENCY] ? true : false
end

#applyObject



39
40
41
42
43
44
45
46
47
48
49
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 39

def apply
  raise('Options :base and :recursive cannot be simultaneously present/true') if
    base? && recursive?

  if recursive?
    require_sub_files_recursively
  else
    require_sub_files
    include_modules
  end
end

#baseObject



51
52
53
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 51

def base
  options[OPTION_BASE] || raise('Option :base not setted')
end

#base?Boolean

Returns:



55
56
57
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 55

def base?
  options[OPTION_BASE] ? true : false
end

#include_modulesObject



59
60
61
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 59

def include_modules
  sub_files.each(&:include_module)
end

#include_or_prepend_methodObject

Raises:

  • (::ArgumentError)


63
64
65
66
67
68
69
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 63

def include_or_prepend_method
  return INCLUDE_MODULES_MAP.fetch(options[OPTION_INCLUDE_MODULES]) if
  INCLUDE_MODULES_MAP.key?(options[OPTION_INCLUDE_MODULES])

  raise ::ArgumentError, "Invalid value for 'options[OPTION_INCLUDE_MODULES]': " \
                         "\"#{options[OPTION_INCLUDE_MODULES]}\""
end

#recursive?Boolean

Returns:



72
73
74
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 72

def recursive?
  options.fetch(OPTION_RECURSIVE, false) ? true : false
end

#require_modeSymbol

Returns:

  • (Symbol)


77
78
79
80
81
82
83
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 77

def require_mode
  return options[OPTION_REQUIRE_MODE] if options[OPTION_REQUIRE_MODE]
  return REQUIRE_MODE_ACTIVE_SUPPORT if active_support_require?
  return REQUIRE_MODE_AUTOLOAD if base?

  REQUIRE_MODE_KERNEL
end

#require_sub_filesObject



85
86
87
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 85

def require_sub_files
  sub_files.each(&:require_file)
end

#require_sub_files_recursivelyObject



89
90
91
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 89

def require_sub_files_recursively
  sub_files.each(&:require_file)
end

#sub_filesObject



93
94
95
96
# File 'lib/eac_ruby_utils/require_sub/base.rb', line 93

def sub_files
  @sub_files ||= Dir["#{File.dirname(file)}/#{::File.basename(file, '.*')}/*.rb"].sort
                   .map { |path| ::EacRubyUtils::RequireSub::SubFile.new(self, path) }
end