Sha256: 7fa2c7d578954ded8ed3a4b4e11995f6a1727ff867a7378afcc2337edacf5c11
Contents?: true
Size: 1.84 KB
Versions: 1
Compression:
Stored size: 1.84 KB
Contents
require 'facets/kernel/meta_def' require 'facets/string/snakecase' module Metadatable def preferred_name(value = nil) return @preferred_name unless value @preferred_name = value end def desc(value = nil) return @desc unless value @desc = value end def predominant_types(*values) return @predominant_types if values.empty? @predominant_types = values end def argument(name, options = {}) (@arguments ||= []) @arguments << [name, options] end def option(name, options = {}) @options ||= {} @options[name] = options end def types(*type_list) @types = type_list define_method(:types) do type_list end if type_list.length == 1 define_method(:type) do type_list.first end end end def allows_many_upstreams @max_upstreams = 99 end def allows_one_upstream @max_upstreams = 1 end def just_class_name self.to_s.split('::').last end def humanized_class_name just_class_name.gsub(/([A-Z])/, ' \1').lstrip end def category(category) (@categories ||= []) @categories << Array(category) end def reset_categories @categories = [] end def inherited(upstream) (@options || {}).each do |name, opt| upstream.option name, opt end (@categories || []).each do |cat| upstream.category cat end case @max_upstreams when 1 upstream.allows_one_upstream when 99 upstream.allows_many_upstreams end end def to_metadata { preferred_name: @preferred_name || humanized_class_name, operation: just_class_name.snakecase, max_upstreams: @max_upstreams || 0, arguments: @arguments || [], options: @options || {}, predominant_types: @types || @predominant_types || [], desc: @desc, categories: @categories || [] } end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
conceptql-0.2.0 | lib/conceptql/behaviors/metadatable.rb |