community_data_export.rb 1.63 KB
module CommunityDataExport

  COMMUNITY_FIELDS = %w(public_software acronym finality repository_link)
  LICENSE_INFO_FIELDS = %w(id version link)

  def community_attr_to_hash community
    attrs = {}

    attrs["members-count"] = community.members.count
    attrs["members"] = []

    attrs = community_members(attrs, community)

    if community.respond_to?("software?") && community.software?
      attrs['software_data'] = software_data(community)
      attrs = categories(attrs, community)
    end

    attrs
  end

  def software_data(community)
    software_hash = {}
    COMMUNITY_FIELDS.each do |m|
      software_hash.merge!({m => community.software_info.send(m)})
    end

    software_hash['license_info'] = {}
    LICENSE_INFO_FIELDS.each do |m|
      software_hash['license_info'].merge!({m => community.software_info.license_info.send(m)})
    end
    software_hash
  end

  def categories(attrs, community)
    attrs['software_data']["categories"] = []
    community.categories.each do |category|
      if Category.last.parent.name == "Software"
        category_info = {
          "id" => category.id,
          "name" => category.name,
          "slug" => category.slug,
          "path" => category.path
        }
        attrs['software_data']["categories"] << category_info
      end
    end
    attrs
  end


  def community_members(attrs, community)
    community.members.each do |member|
      attrs_members = {
        "is_admin" => community.admins.include?(member),
        "id" => member.id,
        "identifier" => member.identifier,
        "name" => member.name
      }
      attrs['members'] << attrs_members
    end
    attrs
  end

end