Module: Cardboard::Seed

Extended by:
ActiveSupport::Concern
Defined in:
lib/cardboard/helpers/seed.rb

Class Method Summary collapse

Class Method Details

.populate_fields(fields, object) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/cardboard/helpers/seed.rb', line 45

def self.populate_fields(fields, object)
  fields ||= {}
  fields.each do |id, field|
    db_field = Field.where(identifier: id.to_s, object_with_field: object).first_or_initialize
    db_field.type = "Cardboard::Field::#{(field[:type] || "string").camelize}"
    db_field.seeding = true
    db_field.position_position = field[:position] || :last
    begin
      db_field.update_attributes!(field.reject{|k,v| ["type", "position"].include?(k)}) 
    rescue Exception => e
      # Output validation errors
      puts "-- ERROR --"
      puts e
      puts "#{db_field.identifier}: #{db_field.value_uid || field[:value] || field[:default] || "nil"}"
      puts "-----------"
    end
  end

  #remove fields no longer in the seed file
  for remove_field in object.fields.map(&:identifier) - fields.map{|k,v|k.to_s}
    object.fields.where(identifier: remove_field).first.destroy
  end
end

.populate_pages(filehash = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/cardboard/helpers/seed.rb', line 8

def self.populate_pages(filehash = nil)
  pages = filehash ? filehash[:pages] : {}
  pages.each do |id, page|

    db_page = Cardboard::Page.where(identifier: id.to_s).first_or_initialize
    db_page.position_position = page[:position] || :last
    db_page.update_attributes!(page.slice(:title, :parent_id)) 

    self.populate_parts(page[:parts], db_page)
  end

  for remove_page in Cardboard::Page.all.map(&:identifier) - pages.map{|k,v|k.to_s}
    Cardboard::Page.where(identifier: remove_page).first.destroy
  end

  Cardboard::Page.create(identifier: "index", path: "/") if Cardboard::Page.root.nil?
end

.populate_parts(page_parts, db_page) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/cardboard/helpers/seed.rb', line 27

def self.populate_parts(page_parts, db_page)
  page_parts ||= {}
  page_parts.each do |id, part|
    db_part = db_page.parts.where(identifier: id.to_s).first_or_initialize
    db_part.part_position_position = part[:position] || :last
    db_part.update_attributes!(:repeatable => part[:repeatable])
    
    db_part.subparts.first_or_create! 

    db_part.subparts.each do |db_part|
      self.populate_fields(part[:fields], db_part)
    end
  end
  for remove_part in db_page.parts.map(&:identifier) - page_parts.map{|k,v|k.to_s}
    db_page.parts.where(identifier: remove_part).first.destroy
  end
end

.populate_settings(filehash = nil) ⇒ Object



69
70
71
72
73
74
75
76
77
# File 'lib/cardboard/helpers/seed.rb', line 69

def self.populate_settings(filehash = nil)
  settings = filehash ? filehash[:settings] : nil
  if settings
    db_settings = Cardboard::Setting.first_or_create
    self.populate_fields(settings, db_settings)
  end
  Cardboard::Setting.add("company_name", type: "string", default:  Cardboard.application.site_title, position: 0)
  # Cardboard::Setting.add("google_analytics", type: "string", position: 1)
end