module Travis
  module Api
    module Serialize
      module V2
        module Http
          class Permissions
            attr_reader :permissions, :options

            def initialize(permissions, options = {})
              @permissions = permissions
              @options = options
            end

            def data
              {
                'permissions' => repo_ids,
                'admin'       => admin_ids,
                'pull'        => pull_ids,
                'push'        => push_ids
              }
            end

            private
              def filtered_ids(perm = nil)
                if perm
                  permissions.find_all { |p| p.send("#{perm}?") }.map { |permission| permission.repository_id }
                else
                  permissions.map { |permission| permission.repository_id }
                end
              end

              def repo_ids
                filtered_ids
              end

              def admin_ids
                filtered_ids(:admin)
              end

              def pull_ids
                filtered_ids(:pull)
              end

              def push_ids
                filtered_ids(:push)
              end
          end
        end
      end
    end
  end
end
