Sha256: d0f34a60928b11ac4a63153c824d0ea6e4d7058402791b30ca44b6b213de094c
Contents?: true
Size: 1.68 KB
Versions: 1
Compression:
Stored size: 1.68 KB
Contents
module WrapIt # # Adds minimal support to retrieve derived class variables # # @author Alexey Ovchinnikov <alexiss@cybernetlab.ru> # module DerivedAttributes # Documentation includes # @!parse extend DerivedAttributes::ClassMethods # module implementation # def self.included(base) base.extend ClassMethods end # # {DerivedAttributes} class methods # module ClassMethods def parents @parents ||= ancestors.take_while { |a| a != Base }.concat([Base]) end # # retrieves first founded derived variable or nil # @param name [Symbol] variable name (should contain `@` sign) # # @return [Object, nil] founded variable or nil def get_derived(name) return instance_variable_get(name) if instance_variable_defined?(name) ancestors.each do |ancestor| next unless ancestor.instance_variable_defined?(name) break if ancestor == Base return ancestor.instance_variable_get(name) end nil end # # Collects all derived variables with specified name # @param name [Symbol] variable name (should contain `@` sign) # @param initial [Object] initial collection object # @param method [Symbol] collection's method name to concatinate # founded variable with collection # # @return [Object] collection of variables def collect_derived(name, result = [], method = :concat) parents.select { |p| p.instance_variable_defined?(name) } .each do |p| result = result.send(method, p.instance_variable_get(name)) end result end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
wrap_it-1.0.2 | lib/wrap_it/derived_attributes.rb |