Class: Newsletter::Field

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Deleteable
Defined in:
app/models/newsletter/field.rb

Direct Known Subclasses

InlineAsset, Text, TextArea

Defined Under Namespace

Classes: InlineAsset, Text, TextArea

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Deleteable

#delete, included, #is_deleted?, #undelete

Class Method Details

.import(element, data) ⇒ Object

returns field data so that Newsletter::Design.export(instance) can export itself to a YAML file



48
49
50
51
52
53
54
55
56
57
58
59
# File 'app/models/newsletter/field.rb', line 48

def self.import(element,data)
  return unless data[:type]
  field = data[:type].constantize.new(
    :name => data[:name],
    :label => data[:label],
    :sequence => data[:sequence],
    :is_required => data[:is_required],
    :description => data[:description]
  )
  field.element = element
  field.save
end

.morph(field, type) ⇒ Object

morph into a different Newsletter::Field type(if a user changes the type of a field)



90
91
92
93
94
95
# File 'app/models/newsletter/field.rb', line 90

def self.morph(field,type)
  return field if field.class.name.eql?(type.to_s)
  return type.constantize.new(field.attributes) if field.new_record?
  field.update_attribute('type',type)
  Field.find(field.id)
end

.valid_typesObject

helper for selecting type of field to use when creating/editing a Newsletter::Field.



103
104
105
# File 'app/models/newsletter/field.rb', line 103

def self.valid_types
  @valid_types = ['Newsletter::Field::Text','Newsletter::Field::TextArea','Newsletter::Field::InlineAsset']
end

Instance Method Details

#export_fieldsObject

returns field data so that Newsletter::Design.export(instance) can export itself to a YAML file



36
37
38
39
40
41
42
43
44
45
# File 'app/models/newsletter/field.rb', line 36

def export_fields
  { 
    :name => name,
    :label => label,
    :sequence => sequence,
    :is_required => is_required,
    :description => description,
    :type => self[:type],
  }
end

#form_partial_pathObject

find the partial to display a form for creating a Newsletter::Piece



98
99
100
# File 'app/models/newsletter/field.rb', line 98

def form_partial_path
   "newsletter/fields/#{type.to_s.gsub(/.*Newsletter::Field::/,'').gsub(/([^A-Z])([A-Z])/,'\\1_\\2').downcase}"
end

#get_value(piece, key = nil) ⇒ Object



84
85
86
87
# File 'app/models/newsletter/field.rb', line 84

def get_value(piece,key=nil)
  return field_values.by_piece(piece).by_key(key).first.try(:value) if key  
  field_values.by_piece(piece).first.try(:value)
end

#set_value(piece, key, value) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'app/models/newsletter/field.rb', line 74

def set_value(piece,key,value)
  field_value = field_values.by_piece(piece).by_key(key).first
  if field_value
    field_value.update_attribute(:value,value)
  else
    field_value = piece.field_values.build(:key => key,:value => value)
    field_value.field_id = self.id 
  end
end

#set_value_for_piece(piece, params) ⇒ Object

sets a pieces value for a Newsletter::Field



68
69
70
71
72
# File 'app/models/newsletter/field.rb', line 68

def set_value_for_piece(piece,params)
  params.each_pair do |key,value|
    set_value(piece,key,value)
  end
end

#value_for_piece(piece, safe = true) ⇒ Object

returns a pieces value for a given Newsletter::Field



62
63
64
65
# File 'app/models/newsletter/field.rb', line 62

def value_for_piece(piece,safe=true)
  return get_value(piece).to_s.html_safe if safe
  get_value(piece).to_s
end