Class: ScribblerGroup

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/scribbler_group.rb

Constant Summary collapse

ELEMENTS =

Konstanten

{:row => ScribblerText,
:text => ScribblerText,
:link => ScribblerLink,
:image => ScribblerImage,
:var => ScribblerVar}

Instance Method Summary collapse

Instance Method Details

#clone!(new_name) ⇒ Object



67
68
69
70
71
72
73
74
# File 'app/models/scribbler_group.rb', line 67

def clone!(new_name)
  group = self.class.new(:name => new_name, :container_id => self.container_id)
  if group.save
    self.elements.each do |el|
      el.class.create(el.attributes.except("id").merge(:group_id => group.id))
    end
  end
end

#destroy_elementsObject



118
119
120
# File 'app/models/scribbler_group.rb', line 118

def destroy_elements
  self.elements.each {|e| e.destroy }
end

#elements(options = {:released => true}) ⇒ Object



106
107
108
# File 'app/models/scribbler_group.rb', line 106

def elements(options = {:released => true})
  ELEMENTS.values.uniq.map {|c| c.where(:group_id => self.id, :released => options[:released] == true)}.flatten.sort_by {|e| e.human_name}
end

#get_element(type, name, options = {:released => true}) ⇒ Object

Helpers



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'app/models/scribbler_group.rb', line 78

def get_element(type, name, options = {:released => true})
  options[:released] ||= true

  case type
  when :row
    options.merge!(:plain => true)
  when :text
    options.merge!(:plain => false)
  when :link
    # ...
  when :image

  end

  options.merge!(:name => name, :group_id => self.id)

  element_class = ELEMENTS[type]

  element = element_class.where(options).first
  if element.nil?
    element_class.create(options.merge(:released => !options[:released]))
    element = element_class.create(options)
  end


  return element
end

#human_nameObject



145
146
147
# File 'app/models/scribbler_group.rb', line 145

def human_name
  I18n.t(self.name, :scope => "scribbler.group_names", :default => self.name.humanize) rescue self.name
end

#image(image_name, options = {}) ⇒ Object



54
55
56
57
58
59
60
61
# File 'app/models/scribbler_group.rb', line 54

def image(image_name, options = {})
  e = get_element(:image, image_name, options)
  if e.image
    e.image.url
  else
    ""
  end
end


48
49
50
51
52
# File 'app/models/scribbler_group.rb', line 48

def link(link_name, options = {})
  link = get_element(:link, link_name)
  options.merge!(:target => "_blank") if link.external
  ActionController::Base.helpers.link_to(link.title, link.url, options)
end

#process_data!(data) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
# File 'app/models/scribbler_group.rb', line 131

def process_data!(data)
  data.each do |key, content|
    e_id    = content.delete(:id)
    e_type  = content.delete(:type)
    e_rel   = content.delete(:release)
    element = ELEMENTS[e_type.to_sym].find(e_id)
    element.update_attributes(content)

    if e_rel == "1"
      element.release!
    end
  end
end

#process_group_data(data = {}) ⇒ Object

Save data



123
124
125
126
127
128
129
# File 'app/models/scribbler_group.rb', line 123

def process_group_data(data = {})
  # Update realesed data
  self.process_data!(data[:released])

  # Update unrealesed data
  self.process_data!(data[:unreleased]) if data[:unreleased]
end

#released_elementsObject



110
111
112
# File 'app/models/scribbler_group.rb', line 110

def released_elements
  self.elements(:released => true)
end

#row(row_name, options = {}) ⇒ Object

Display data



32
33
34
35
36
37
38
# File 'app/models/scribbler_group.rb', line 32

def row(row_name, options = {})
  e = get_element(:row, row_name)
  if e.content.blank? && options[:default]
    e.update_attributes(:content => options[:default])
  end
  return e.content.to_s.html_safe
end

#text(text_name, options = {}) ⇒ Object



40
41
42
43
44
45
46
# File 'app/models/scribbler_group.rb', line 40

def text(text_name, options = {})
  e = get_element(:text, text_name)
  if e.content.blank? && options[:default]
    e.update_attributes(:content => options[:default])
  end
  return e.content.to_s.html_safe
end

#unreleased_elementsObject



114
115
116
# File 'app/models/scribbler_group.rb', line 114

def unreleased_elements
  self.elements(:released => false)
end

#var(name, options = {}) ⇒ Object



63
64
65
# File 'app/models/scribbler_group.rb', line 63

def var(name, options = {})
  get_element :var, name
end