Module: CamaleonCms::Metas

Extended by:
ActiveSupport::Concern
Included in:
CustomField, PostComment, PostDefault, TermTaxonomy
Defined in:
app/models/concerns/camaleon_cms/metas.rb

Instance Method Summary collapse

Instance Method Details

#delete_meta(key) ⇒ Object

delete meta



63
64
65
66
# File 'app/models/concerns/camaleon_cms/metas.rb', line 63

def delete_meta(key)
  metas.where(key: key).destroy_all
  cama_remove_cache("meta_#{key}")
end

#delete_option(key, meta_key = '_default') ⇒ Object

delete attribute from configuration



101
102
103
104
105
106
107
108
# File 'app/models/concerns/camaleon_cms/metas.rb', line 101

def delete_option(key, meta_key = '_default')
  return if key.nil?

  values = cama_options(meta_key)
  key = key.to_sym
  values.delete(key) if values.key?(key)
  set_meta(meta_key, values)
end

#fix_save_metas_options_no_changedObject

fix to save options and metas when a model was not changed



137
138
139
# File 'app/models/concerns/camaleon_cms/metas.rb', line 137

def fix_save_metas_options_no_changed
  save_metas_options # unless self.changed?
end

#get_meta(key, default = nil) ⇒ Object

return value of meta with key: key, if meta not exist, or its value == "", return default



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'app/models/concerns/camaleon_cms/metas.rb', line 41

def get_meta(key, default = nil)
  key_str = key.is_a?(Symbol) ? key.to_s : key
  cama_fetch_cache("meta_#{key_str}") do
    option = metas.loaded? ? metas.find { |m| m.key == key_str } : metas.where(key: key_str).first
    res = ''
    if option.present?
      value = begin
        JSON.parse(option.value)
      rescue StandardError
        option.value
      end
      res = begin
        (value.is_a?(Hash) ? value.with_indifferent_access : value)
      rescue StandardError
        option.value
      end
    end
    res == '' ? default : res
  end
end

#get_option(key = nil, default = nil, meta_key = '_default') ⇒ Object

return configuration for current object key: attribute name default: if the attribute doesn't exist, or its value == "", return default return value for attribute



92
93
94
95
96
97
98
# File 'app/models/concerns/camaleon_cms/metas.rb', line 92

def get_option(key = nil, default = nil, meta_key = '_default')
  values = cama_options(meta_key)
  return default if key.nil?

  key = key.to_sym
  values.key?(key) && values[key] != '' ? values[key] : default
end

#options(meta_key = '_default') ⇒ Object Also known as: cama_options

return configurations for current object, sample: "type":"post_type","object_id":"127"



69
70
71
# File 'app/models/concerns/camaleon_cms/metas.rb', line 69

def options(meta_key = '_default')
  get_meta(meta_key, {})
end

#save_metas_optionsObject

Save all settings for this post type - received in data_options and data_metas attribute (options and metas) sample: Site.first.post_types.create( "owen", slug: "my_post_type", data_options: { has_category: true, default_layout: "my_layout" } )



146
147
148
149
150
151
152
153
# File 'app/models/concerns/camaleon_cms/metas.rb', line 146

def save_metas_options
  set_multiple_options(data_options)
  return if data_metas.blank?

  data_metas.each do |key, val|
    set_meta(key, val)
  end
end

#save_metas_options_skipObject

permit to skip save_metas_options in specific models



132
133
134
# File 'app/models/concerns/camaleon_cms/metas.rb', line 132

def save_metas_options_skip
  false
end

#set_meta(key, value) ⇒ Object

Add meta with value or Update meta with key: key return true or false



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/concerns/camaleon_cms/metas.rb', line 16

def set_meta(key, value)
  fixed_value = fix_meta_value(value)

  # Check if the parent object has been saved to the database yet
  if persisted?
    # Safe to use database-driven lookups and updates
    meta_record = metas.find_or_create_by(key: key.to_s)
    meta_record.update(value: fixed_value)
  else
    # In-Memory Fallback: Find an existing unsaved item in the array collection,
    # or build a brand new unsaved record on the association.
    meta_record = metas.find { |m| m.key == key.to_s }

    if meta_record
      meta_record.value = fixed_value
    else
      metas.build(key: key.to_s, value: fixed_value)
    end
  end

  cama_set_cache("meta_#{key}", value)
end

#set_metas(data_metas) ⇒ Object

save multiple metas sample: set_metas('Owen', email: 'owenperedo@gmail.com')



125
126
127
128
129
# File 'app/models/concerns/camaleon_cms/metas.rb', line 125

def set_metas(data_metas)
  (data_metas.nil? ? {} : data_metas).each do |key, value|
    set_meta(key, value)
  end
end

#set_option(key, value = nil, meta_key = '_default') ⇒ Object

add configuration for current object key: attribute name value: attribute value meta_key: (String) name of the meta attribute sample: mymodel.set_custom_option("my_settings", "color", "red")



79
80
81
82
83
84
85
86
# File 'app/models/concerns/camaleon_cms/metas.rb', line 79

def set_option(key, value = nil, meta_key = '_default')
  return if key.nil?

  data = cama_options(meta_key)
  data[key] = fix_meta_var(value)
  set_meta(meta_key, data)
  value
end

#set_options(h = {}, meta_key = '_default') ⇒ Object Also known as: set_multiple_options

set multiple configurations h: "sdsds", ff: "fdfdfdfd"



112
113
114
115
116
117
118
119
120
# File 'app/models/concerns/camaleon_cms/metas.rb', line 112

def set_options(h = {}, meta_key = '_default')
  return if h.blank?

  data = cama_options(meta_key)
  PluginRoutes.fixActionParameter(h).to_sym.each do |key, value|
    data[key] = fix_meta_var(value)
  end
  set_meta(meta_key, data)
end