class Redmine::CsvBaseService

Constants

API_LOCATION

Public Class Methods

new(token) click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 9
def initialize(token)
  @token = token
end

Public Instance Methods

get() click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 13
def get
  http_response = http_request(generate_url)
  encoded_body = http_response.body.force_encoding("ISO-8859-1").encode("UTF-8")
  csv = parse_csv(encoded_body)
  parse_results(csv)
end

Private Instance Methods

generate_url() click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 22
def generate_url
  URI("#{API_LOCATION}/time_entries/report.csv?#{query}&key=#{@token}")
end
http_request(url) click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 26
def http_request(url)
  req = Net::HTTP::Get.new(url)
  Net::HTTP.start(url.hostname, url.port, use_ssl: true) do |http|
    http.request(req)
  end
end
parse_csv(body) click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 41
def parse_csv(body)
  separated_csv_entries = CSV.parse(body, col_sep: ",")
  keys = separated_csv_entries.shift[1..-2]
  entries = separated_csv_entries.shift[1..-2]
  keys.zip(entries).to_h
rescue CSV::MalformedCSVError
  raise_bad_data_error
end
parse_results(_csv) click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 37
def parse_results(_csv)
  # to be implemented in concrete service
end
query() click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 33
def query
  # to be implemented in concrete service
end
raise_bad_data_error() click to toggle source
# File lib/renuo/cli/app/redmine/csv_base_service.rb, line 50
def raise_bad_data_error
  error = "Malformed CSV, please use comma delimiters (Redmine language setting?)"
  Rails.logger.error error
  raise Redmine::BadData, error
end