Module: Twobook::Utilities
- Defined in:
- lib/twobook/utilities.rb
Class Method Summary collapse
- .match_params(method, available, error_message) ⇒ Object
-
.types(klass, cache = false) ⇒ Object
Lists all the leaf node descendants of a class.
Class Method Details
.match_params(method, available, error_message) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/twobook/utilities.rb', line 3 def self.match_params(method, available, ) required = method.parameters.select { |p| p.first == :keyreq }.map(&:second) optional = method.parameters.select { |p| p.first == :key }.map(&:second) if method.parameters.any? { |p| p.first == :req || p.first == :opt } raise "match_params only works with named parameters (was given #{method.parameters})" end missing = required - available.keys raise "#{} - missing parameters #{missing}" if missing.any? params = available.slice(*(required + optional)) if params.any? method.call(params) else method.call end end |
.types(klass, cache = false) ⇒ Object
Lists all the leaf node descendants of a class. The files must already be loaded.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/twobook/utilities.rb', line 24 def self.types(klass, cache = false) if cache @types_cache ||= {} return @types_cache[klass.name] ||= begin klass.descendants .reject { |k| k.name.nil? || k.subclasses.reject { |s| s.name.nil? }.any? } .sort_by(&:name) end end klass.descendants .reject { |k| k.name.nil? || k.subclasses.reject { |s| s.name.nil? }.any? } .sort_by(&:name) end |