Sha256: e00295f7440b7a82c888f6a05280488f0f2d980af50004a0870d0732604c5f36
Contents?: true
Size: 1.73 KB
Versions: 2
Compression:
Stored size: 1.73 KB
Contents
# frozen_string_literal: true class StoreSchema::AccessorDefiner # @return [Class] # attr_reader :klass # @return [Symbol] # attr_reader :column # @return [Symbol] # attr_reader :type # @return [Symbol] # attr_reader :attribute # @param klass [Class] the class to define the accessor on # @param column [Symbol] the name of the column to define the accessor on # @param type [Symbol] the data type of the {#attribute} # @param attribute [Symbol] the name of the {#column}'s attribute # def initialize(klass, column, type, attribute) @klass = klass @column = column @type = type @attribute = attribute end # Defines all necessary accessors on {#klass}. # def define define_store_accessor define_attribute define_getter define_setter end private # Defines the standard store accessor. # def define_store_accessor klass.store_accessor(column, attribute) end # Defines the attribute on the class using the {.attribute}. # def define_attribute klass.attribute(attribute) end # Enhances the store getter by adding data conversion capabilities. # def define_getter _type = type klass.send(:define_method, attribute) do value = super() if value.is_a?(NilClass) value else StoreSchema::Converter.new(value, _type).from_db end end end # Enhances the store setter by adding data conversion capabilities. # def define_setter _type = type klass.send(:define_method, "#{attribute}=") do |value| converted_value = StoreSchema::Converter.new(value, _type).to_db if converted_value super(converted_value) else super(nil) end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
store_schema-2.0.0 | lib/store_schema/accessor_definer.rb |
store_schema-1.1.1 | lib/store_schema/accessor_definer.rb |