Sha256: 0e19f036241c6552965af1a8c35e9e3d11b33d4e30259793fa4f64be05069d38

Contents?: true

Size: 1.5 KB

Versions: 4

Compression:

Stored size: 1.5 KB

Contents

# encoding: utf-8
require_relative "dependency"

module Hexx
  module Helpers

    # @api hide
    # Module dependency constructor.
    #
    # Adds the dependency to selected module.
    #
    # @example
    #   ModuleDependency.add(MyModule, :some_module, DefaultImplementation)
    #
    #   MyModule.some_module
    #   # => DefaultImplementation
    #
    #   MyModule.some_module = AnotherImplementation
    #   # => AnotherImplementation
    #
    #   MyModule.some_module = 1
    #   # fails with #<TypeError @message="1 is not a module" >
    class ModuleDependency < Dependency

      # @api hide
      # Adds the dependency to given module
      # @example (see Hexx::Helpers::ModuleDependency)
      # @param [Module] target The module to declare the dependency of.
      # @param [String, Symbol] name The name of the dependency.
      # @param [Module] default The default implementation of the dependency.

      # @api hide
      # Adds the module dependency getter
      # @return [ModuleDependency] +self+.
      def add_getter
        target.instance_eval getter
        self
      end

      # @api hide
      # Adds the module dependency setter
      # @return [ModuleDependency] +self+.
      def add_setter
        target.instance_eval setter
        self
      end

      private

      # @raise [TypeError] if a target to add the dependency is not a module.
      def check_target
        return if target.is_a? Module
        fail TypeError.new "#{ target.inspect } is not a module"
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
hexx-6.0.3 lib/hexx/helpers/module_dependency.rb
hexx-6.0.2 lib/hexx/helpers/module_dependency.rb
hexx-6.0.1 lib/hexx/helpers/module_dependency.rb
hexx-6.0.0 lib/hexx/helpers/module_dependency.rb