crewmate/crewmate

View on GitHub
app/models/project/conversions.rb

Summary

Maintainability
A
2 hrs
Test Coverage
# -*- encoding : utf-8 -*-
class Project
  def to_xml(options = {})
    options[:indent] ||= 2
    xml = options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
    xml.instruct! unless options[:skip_instruct]
    xml.project :id => id do
      xml.tag! 'name', name
      xml.tag! 'permalink', permalink
      xml.tag! 'created-at', created_at.to_s(:db)
      xml.tag! 'updated-at', updated_at.to_s(:db)
      xml.tag! 'archived', archived
      xml.tag! 'owner-user-id', user_id
      xml.people :count => people.size do
        for person in people
          person.to_xml(options.merge({ :skip_instruct => true, :root => :person }))
        end
      end
    end
  end

  def to_api_hash(options = {})
    base = {
      :id => id,
      :organization_id => organization_id,
      :name => name,
      :permalink => permalink,
      :archived => archived,
      :created_at => created_at.to_s(:api_time),
      :updated_at => updated_at.to_s(:api_time),
      :archived => archived,
      :owner_user_id => user_id
    }

    base[:type] = self.class.to_s if options[:emit_type]

    if Array(options[:include]).include? :people
      base[:people] = people.map {|p| p.to_api_hash(options)}
    end

    if Array(options[:include]).include? :task_lists
      base[:task_lists] = task_lists.map {|p| p.to_api_hash(options)}
    end

    if Array(options[:include]).include? :invitations
      base[:invitations] = invitations.map {|p| p.to_api_hash(options)}
    end

    if Array(options[:include]).include? :pages
      base[:pages] = pages.map {|p| p.to_api_hash(options)}
    end

    if Array(options[:include]).include? :uploads
      base[:uploads] = uploads.map {|p| p.to_api_hash(options)}
    end

    if Array(options[:include]).include? :conversations
      base[:conversations] = conversations.map {|p| p.to_api_hash(options)}
    end

    base
  end
end