# 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 # 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