module Sequel::Plugins::StoreAccessors::ClassMethods
Public Instance Methods
store(column, *fields)
click to toggle source
Setup a store
@param column [Symbol] jsonb column @param fields [Array<Symbol>] keys in json, which will be accessors @example
class User < Sequel::Model store :data, :first_name end user = User.create(first_name: "John") user.first_name # => "John" user.data # => {"first_name": "John"}
# File lib/sequel/plugins/store_accessors.rb, line 18 def store(column, *fields) include_accessors_module fields.each do |field| define_store_getter(column, field) define_store_setter(column, field) end end
Private Instance Methods
define_store_getter(column, field)
click to toggle source
# File lib/sequel/plugins/store_accessors.rb, line 35 def define_store_getter(column, field) @_store_accessors_module.module_eval do define_method(field) do send(column).to_h[field.to_s] end end end
define_store_setter(column, field)
click to toggle source
# File lib/sequel/plugins/store_accessors.rb, line 43 def define_store_setter(column, field) @_store_accessors_module.module_eval do define_method("#{field}=") do |value| send("#{column}=", send(column).to_h.merge(field.to_s => value)) end end end
include_accessors_module()
click to toggle source
# File lib/sequel/plugins/store_accessors.rb, line 29 def include_accessors_module return if defined?(@_store_accessors_module) @_store_accessors_module = Module.new include @_store_accessors_module end