Class: Newsletter::Field
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Newsletter::Field
- Includes:
- Deleteable
- Defined in:
- app/models/newsletter/field.rb
Direct Known Subclasses
Defined Under Namespace
Classes: InlineAsset, Text, TextArea
Class Method Summary collapse
-
.import(element, data) ⇒ Object
returns field data so that Newsletter::Design.export(instance) can export itself to a YAML file.
-
.morph(field, type) ⇒ Object
morph into a different Newsletter::Field type(if a user changes the type of a field).
-
.valid_types ⇒ Object
helper for selecting type of field to use when creating/editing a Newsletter::Field.
Instance Method Summary collapse
-
#export_fields ⇒ Object
returns field data so that Newsletter::Design.export(instance) can export itself to a YAML file.
-
#form_partial_path ⇒ Object
find the partial to display a form for creating a Newsletter::Piece.
- #get_value(piece, key = nil) ⇒ Object
- #set_value(piece, key, value) ⇒ Object
-
#set_value_for_piece(piece, params) ⇒ Object
sets a pieces value for a Newsletter::Field.
-
#value_for_piece(piece, safe = true) ⇒ Object
returns a pieces value for a given Newsletter::Field.
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_types ⇒ Object
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_fields ⇒ Object
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_path ⇒ Object
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 |