Module: Pollster

Defined in:
lib/pollster.rb,
lib/pollster/api.rb,
lib/pollster/version.rb,
lib/pollster/api_error.rb,
lib/pollster/api_client.rb,
lib/pollster/models/tag.rb,
lib/pollster/models/poll.rb,
lib/pollster/models/chart.rb,
lib/pollster/configuration.rb,
lib/pollster/models/question.rb,
lib/pollster/models/poll_question.rb,
lib/pollster/models/chart_estimate.rb,
lib/pollster/models/question_responses.rb,
lib/pollster/models/inline_response_200.rb,
lib/pollster/models/inline_response_200_3.rb,
lib/pollster/models/inline_response_200_4.rb,
lib/pollster/models/poll_question_responses.rb,
lib/pollster/models/chart_pollster_trendlines.rb,
lib/pollster/models/question_poll_responses_raw.rb,
lib/pollster/models/pollster_chart_poll_questions.rb,
lib/pollster/models/question_poll_responses_clean.rb,
lib/pollster/models/chart_pollster_estimate_summary.rb,
lib/pollster/models/chart_estimate_lowess_parameters.rb,
lib/pollster/models/poll_question_sample_subpopulations.rb

Defined Under Namespace

Classes: Api, ApiClient, ApiError, Chart, ChartEstimate, ChartEstimateLowessParameters, ChartPollsterEstimateSummary, Configuration, InlineResponse200, InlineResponse2003, InlineResponse2004, Poll, PollQuestion, PollQuestionResponses, PollQuestionSampleSubpopulations, PollsterChartPollQuestions, Question, QuestionPollResponsesClean, QuestionPollResponsesRaw, QuestionResponses, Tag

Constant Summary collapse

VERSION =
"2.0.0"
ChartPollsterTrendlinePoint =
RubyImmutableStruct.new(:label, :date, :value, :low, :high) do
  def self.from_tsv_line(tsv_line)
    if m = ChartPollsterTrendlinePoint::TsvLineRegex.match(tsv_line)
      ChartPollsterTrendlinePoint.new(
        m[:label],
        Date.parse(m[:date]),
        m[:value].to_f,
        m[:low].empty? ? nil : m[:low].to_f,
        m[:high].empty? ? nil : m[:high].to_f
      )
    else
      raise ArgumentError.new("TSV line `#{tsv_line}` is not a valid ChartPollsterTrendlinePoint line")
    end
  end
end
ChartPollsterTrendlines =
RubyImmutableStruct.new(:points) do
  ExpectedHeaderLine = "label\tdate\tvalue\tlow\thigh"

  def by_label
    ret = points.group_by(&:label)
    ret.values.each { |arr| arr.sort_by!(&:date) }
    ret
  end

  def self.from_tsv(tsv)
    lines = tsv.split(/(?:\r?\n)+/).reject(&:empty?)
    if /\A#{ExpectedHeaderLine}/ !~ lines[0]
      raise ArgumentError.new("First line of TSV is `#{lines[0]}`; expected `#{ExpectedHeaderLine}`")
    else
      points = lines[1..-1].map { |tsv_line| ChartPollsterTrendlinePoint.from_tsv_line(tsv_line) }
      ChartPollsterTrendlines.new(points)
    end
  end
end
QuestionPollResponseRaw =
RubyImmutableStruct.new(
  :response_text,
  :pollster_label,
  :value,
  :poll_slug,
  :survey_house,
  :start_date,
  :end_date,
  :question_text,
  :sample_subpopulation,
  :observations,
  :margin_of_error,
  :mode,
  :partisanship,
  :partisan_affiliation
) do
  def self.from_tsv_line(tsv_line)
    if m = QuestionPollResponseRaw::TsvLineRegex.match(tsv_line)
      QuestionPollResponseRaw.new(
        m[:response_text],
        m[:pollster_label],
        m[:value].to_f,
        m[:poll_slug],
        m[:survey_house],
        Date.parse(m[:start_date]),
        Date.parse(m[:end_date]),
        m[:question_text],
        m[:sample_subpopulation],
        m[:observations].empty? ? nil : m[:observations].to_i,
        m[:margin_of_error].empty? ? nil : m[:margin_of_error].to_f,
        m[:mode],
        m[:partisanship],
        m[:partisan_affiliation]
      )
    else
      raise ArgumentError.new("TSV line `#{tsv_line}` is not a valid QuestionPollResponseRaw line")
    end
  end
end
PollsterChartPollQuestion =
RubyImmutableStruct.new(
  :responses,
  :poll_slug,
  :survey_house,
  :start_date,
  :end_date,
  :question_text,
  :sample_subpopulation,
  :observations,
  :margin_of_error,
  :mode,
  :partisanship,
  :partisan_affiliation
) do
  def self.from_tsv_line_with_labels(tsv_line, labels)
    if m = PollsterChartPollQuestion::TsvLineRegex.match(tsv_line)
      # split(..., -1) avoids omitting trailing blanks
      values = m[:values].split(/\t/, -1).map{ |v| v.empty? ? nil : v.to_f }

      if values.length != labels.length
        raise ArgumentError.new("TSV line `#{tsv_line}` has #{values.length} values for #{labels.length} labels")
      end

      responses = {}
      for i in 0...(labels.length)
        responses[labels[i]] = values[i]
      end

      PollsterChartPollQuestion.new(
        responses,
        m[:poll_slug],
        m[:survey_house],
        Date.parse(m[:start_date]),
        Date.parse(m[:end_date]),
        m[:question_text],
        m[:sample_subpopulation],
        m[:observations].empty? ? nil : m[:observations].to_i,
        m[:margin_of_error].empty? ? nil : m[:margin_of_error].to_f,
        m[:mode],
        m[:partisanship],
        m[:partisan_affiliation]
      )
    else
      raise ArgumentError.new("TSV line `#{tsv_line}` is not a valid PollsterChartPollQuestion line")
    end
  end
end
QuestionPollResponseClean =
RubyImmutableStruct.new(
  :responses,
  :poll_slug,
  :survey_house,
  :start_date,
  :end_date,
  :question_text,
  :sample_subpopulation,
  :observations,
  :margin_of_error,
  :mode,
  :partisanship,
  :partisan_affiliation
) do
  def self.from_tsv_line_with_labels(tsv_line, labels)
    if m = QuestionPollResponseClean::TsvLineRegex.match(tsv_line)
      # split(..., -1) avoids omitting trailing blanks
      values = m[:values].split(/\t/, -1).map{ |v| v.empty? ? nil : v.to_f }

      if values.length != labels.length
        raise ArgumentError.new("TSV line `#{tsv_line}` has #{values.length} values for #{labels.length} labels")
      end

      responses = {}
      for i in 0...(labels.length)
        responses[labels[i]] = values[i]
      end

      QuestionPollResponseClean.new(
        responses,
        m[:poll_slug],
        m[:survey_house],
        Date.parse(m[:start_date]),
        Date.parse(m[:end_date]),
        m[:question_text],
        m[:sample_subpopulation],
        m[:observations].empty? ? nil : m[:observations].to_i,
        m[:margin_of_error].empty? ? nil : m[:margin_of_error].to_f,
        m[:mode],
        m[:partisanship],
        m[:partisan_affiliation]
      )
    else
      raise ArgumentError.new("TSV line `#{tsv_line}` is not a valid QuestionPollResponseClean line")
    end
  end
end

Class Method Summary collapse

Class Method Details

.configureObject

Customize default settings for the SDK using block.

Pollster.configure do |config|
  config.username = "xxx"
  config.password = "xxx"
end

If no block given, return the default Configuration object.



38
39
40
41
42
43
44
# File 'lib/pollster.rb', line 38

def configure
  if block_given?
    yield(Configuration.default)
  else
    Configuration.default
  end
end