class Xpose::Decorated
Attributes
conf[R]
Public Class Methods
new(**options)
click to toggle source
# File lib/xpose/decorated.rb, line 5 def initialize(**options) @conf = ::Xpose::Configuration.new(options.merge(permissive: true)) end
Public Instance Methods
value(instance, v)
click to toggle source
# File lib/xpose/decorated.rb, line 9 def value(instance, v) return v unless shall_decorate?(instance, v) if conf.decorator == :infer infer(v) elsif Class === conf.decorator conf.decorator.new(v) elsif conf.decorator.respond_to?(:call) conf.decorator.call(v) elsif Symbol === conf.decorator && class_exists?(klass_from_symbol) klass_from_symbol.new(v) else raise UnknownDecoratorError.new(conf.decorator) end end
Private Instance Methods
class_exists?(class_name)
click to toggle source
# File lib/xpose/decorated.rb, line 50 def class_exists?(class_name) Module.const_get(class_name.to_s).is_a?(Class) rescue NameError return false end
infer(v)
click to toggle source
# File lib/xpose/decorated.rb, line 32 def infer(v) if v.respond_to?(:decorate) v.decorate elsif class_exists?(klass_from_model) klass_from_model.new(v) else raise UnknownDecoratorError.new(conf.decorator) end end
klass_from_model()
click to toggle source
# File lib/xpose/decorated.rb, line 46 def klass_from_model "#{conf.model}Decorator".constantize end
klass_from_symbol()
click to toggle source
# File lib/xpose/decorated.rb, line 42 def klass_from_symbol conf.decorator.to_s.singularize.capitalize.constantize end
shall_decorate?(instance, v)
click to toggle source
# File lib/xpose/decorated.rb, line 26 def shall_decorate?(instance, v) return conf.decorate if [true, false].include?(conf.decorate) raise UnknownOptionsError.new(:decorate) unless conf.decorate.respond_to?(:call) instance.instance_exec &conf.decorate end