person_data_export.rb 1.41 KB
module PersonDataExport

  def person_attr_to_hash person
    attrs = {}

    attrs = person_friends_attrs(attrs, person)

    attrs = person_commuinities_attrs(attrs, person)

    attrs = person_softwares_attrs(attrs, person)

    attrs
  end

  def person_friends_attrs(attrs, person)
    attrs['friends-count'] = person.friends.count
    attrs['friends'] = []
    person.friends.each do |friend|
      attrs['friends'] << profile_attrs(friend)
    end
    attrs
  end

  def person_commuinities_attrs(attrs, person)
    attrs['communities-count'] = person.respond_to?("softwares") ?
                                 person.communities.count - person.softwares.count :
                                 person.communities.count
    attrs['communities'] = []
    person.communities.each do |community|
      if community.respond_to?("software?")
        attrs['communities'] << profile_attrs(community)
      end
    end
    attrs
  end

  def person_softwares_attrs(attrs, person)
    attrs['softwares-count'] = person.respond_to?("softwares") ? person.softwares.count : 0
    attrs['softwares'] = []
    if person.respond_to?("softwares")
      person.softwares.each do |software|
        attrs['softwares'] << profile_attrs(software)
      end
    end
    attrs
  end

  private

  def profile_attrs(profile)
    profile = {
      "id" => profile.id,
      "identifier" => profile.identifier,
      "name" => profile.name
    }
  end

end