class Strawpoll::Poll

Attributes

id[RW]
multi[RW]
options[RW]
permissive[RW]
title[RW]
votes[RW]

Public Class Methods

create(options = {}) click to toggle source
# File lib/strawpoll/poll.rb, line 75
def create(options = {})
  self.new(options).create
end
get(id) click to toggle source
# File lib/strawpoll/poll.rb, line 67
def get(id)
  raise ArgumentError.new('You must specify id') unless id

  response = API.get(id)

  self.new(response.merge(id: id))
end
new(options = {}) click to toggle source
# File lib/strawpoll/poll.rb, line 5
def initialize(options = {})
  options.symbolize_keys!

  options = {
    multi: false,
    permissive: false,
    votes: [],
  }.merge(options)

  [:id, :title, :options, :votes, :multi, :permissive].each do |attribute|
    self.send("#{attribute}=", options[attribute])
  end

  self
end

Public Instance Methods

create() click to toggle source
# File lib/strawpoll/poll.rb, line 21
def create
  [:title, :options].each do |attribute|
    raise ArgumentError.new('Attributes title and options are required') unless self.send(attribute)
  end

  response = API.create(title: title, options: options, multi: multi, permissive: permissive)

  self.id = response[:id]

  self
end
reload() click to toggle source
# File lib/strawpoll/poll.rb, line 33
def reload
  raise ArgumentError.new('You must specify id') unless id

  API.get(id).tap do |response|
    self.title = response[:title]
    self.multi = response[:multi]
    self.permissive = response[:permissive]
    self.options = response[:options]
    self.votes = response[:votes]
  end

  self
end
vote(option) click to toggle source
# File lib/strawpoll/poll.rb, line 57
def vote(option)
  option = option.to_s
  raise ArgumentError.new('Wrong option') unless options.include?(option)

  API.patch(id, { votes: [options.index(option)] })

  reload
end
votes_count(option = nil) click to toggle source
# File lib/strawpoll/poll.rb, line 47
def votes_count(option = nil)
  result = options.inject({}) do |result, option|
    result[option] = votes[options.index(option)] || 0

    result
  end

  option.nil? ? result : result[option]
end