Created
April 3, 2017 18:34
-
-
Save slenderock/ff94888039db48e7f27a8f4fbc718131 to your computer and use it in GitHub Desktop.
My solutions
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# == Schema Information | |
# | |
# Table name: cms_base_blocks | |
# | |
# id :integer not null, primary key | |
# type :string | |
# data :json | |
# created_at :datetime not null | |
# updated_at :datetime not null | |
# | |
# Realization of getters and setters for database json field for STI relationship | |
class Cms::BaseBlock < ActiveRecord::Base | |
delegate :field_names, :fields, to: :class | |
after_initialize :set_default_values, if: :new_record? | |
class << self | |
def load | |
self.first || self.create! | |
end | |
def has_field field_name, options = {} | |
@fields ||= {} | |
@fields[field_name] = options | |
self.class_eval do | |
define_method "#{field_name}=" do |value| | |
data[field_name.to_s] = value | |
end | |
define_method field_name do | |
read_field field_name | |
end | |
end | |
end | |
def fields | |
@fields ||= {} | |
end | |
def field_names | |
fields.keys | |
end | |
end | |
protected | |
def set_default_values | |
data = {} | |
self.field_names.each{ |name| data[name]='' } | |
self.data = data | |
end | |
def read_field field_name | |
value = data[field_name.to_s] | |
value | |
end | |
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# == Schema Information | |
# | |
# Table name: cms_base_blocks | |
# | |
# id :integer not null, primary key | |
# type :string | |
# data :json | |
# created_at :datetime not null | |
# updated_at :datetime not null | |
# | |
class Cms::MasterPage < Cms::BaseBlock | |
has_field :title | |
has_field :pre_description | |
has_field :description | |
has_field :video_url | |
has_field :video_description | |
has_field :image | |
validates_format_of :video_url, with: /http(?:s?):\/\/(?:www\.)?youtu(?:be\.com\/watch\?v=|\.be\/)([\w\-\_]*)(&(amp;)?[\w\?=]*)?/, if: :persisted? | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment