ResultadosDigitais/gooder_data

View on GitHub
lib/gooder_data/project/raw_report.rb

Summary

Maintainability
A
0 mins
Test Coverage
module GooderData
  class Project
    class RawReport < GooderData::ApiClient
      attr_reader :project_id, :object_id, :raw_data, :status

      def initialize(project_id, object_id, options = {})
        super(options)

        @project_id = project_id
        @object_id = object_id
        @status = Status::NOT_FETCHED
      end

      def fetch
        return raw_data if fetched?
        retry_api_to("fetch raw report dataResult for object #{ object_id }") do
          get(raw_report_url)
        end.responds do |response|
          @status = Status::FETCHED unless processing?(response)
          @raw_data = response.parsed_response
        end
      end

      private

      def raw_report_url
        result = export_large_report
        try_hash_chain(result, 'uri').gsub(/^\/gdc/, '')
      end

      def export_large_report
        api_to("execute report #{ object_id }") do
          post("/projects/#{ project_id }/execute/raw/", {
            report_req: {
              reportDefinition: "/gdc/md/#{ project_id }/obj/#{ object_id }"
            }
          })
        end
      end

      def no_content?
        fetched? && !raw_data
      end

      def fetched?
        status == Status::FETCHED
      end
    end
  end
end