Sha256: 9bf950f352301681c64a3684cc4474af2bff7c087afe5f670eca68551d4225bf
Contents?: true
Size: 1.64 KB
Versions: 1
Compression:
Stored size: 1.64 KB
Contents
require "i18n" require "active_support/inflector" require "labelizer/version" require "labelizer/container" module Labelizer def self.included(base) base.send :extend, ClassMethods end def labelized @labelized ||= Container.new(self.class.labelized.instance_variable_get(:@keys)){|h,attr| h[attr] = self.class.labelized[attr][__send__(attr)] } end module ClassMethods def labelize(attr, label_types, converter: {}) label_types = label_types.map(&:to_sym) define_method :"#{attr}_labelized" do labelized[attr] end label_types.each do |label_type| define_method :"#{attr}_#{label_type}" do labelized[attr][label_type] end end model = self.to_s.underscore @labelized ||= Container.new([]){|h,attr| h[attr] = Container.new(__send__(attr.to_s.pluralize)){|h,value| h[value] = Container.new(label_types){|h,label_type| result = ::I18n.translate( "labelizer.#{model}.#{attr}.#{value}.#{label_type}", default: [ :"labelizer.#{model}.#{attr}.#{label_type}", :"labelizer.#{model}.#{label_type}", :"labelizer.#{label_type}", "", ], ) if c = converter[label_type] result = c[result] end h[label_type] = result } } } @labelized.instance_variable_get(:@keys) << attr @labelized.singleton_class.class_eval do define_method attr do @hash[attr] end end end def labelized @labelized end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
labelizer-0.0.4 | lib/labelizer.rb |