person_data_export.rb 1.71 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 = person_data_attr_to_hash(attrs, person)

    attrs
  end

  def person_data_attr_to_hash(attrs, person)
    attrs['articles-count'] = person.articles.count
    attrs['data'] = profile_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)
    communities_count = person.communities.count - person.softwares.count
    attrs['communities-count'] = person.respond_to?("softwares") ?
                                 communities_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,
      "type" => profile.type
    }
  end

end