module Pupa # An event at which people's votes are recorded. class VoteEvent include Model self.schema = File.expand_path(File.join('..', '..', '..', 'schemas', 'popolo', 'vote_event.json'), __dir__) include Concerns::Timestamps include Concerns::Sourceable attr_accessor :identifier, :motion_id, :organization_id, :legislative_session_id, :start_date, :end_date, :result, :group_results, :counts dump :identifier, :motion_id, :organization_id, :legislative_session_id, :start_date, :end_date, :result, :group_results, :counts foreign_key :motion_id, :organization_id, :legislative_session_id def initialize(*args) @group_results = [] @counts = [] super end # Returns the vote event's identifier and organization ID. # # @return [String] the vote event's identifier and organization ID def to_s "#{identifier} in #{organization_id}" end # Sets the group results. # # @param [Array] group_results a list of group results def group_results=(group_results) @group_results = symbolize_keys(group_results) end # Sets the counts. # # @param [Array] counts a list of counts def counts=(counts) @counts = symbolize_keys(counts) end # Adds a group result. # # @param [String] result the result of the vote event within a group of voters # @param [String] group a group of voters def add_group_result(result, group: nil) data = {result: result} if group data[:group] = group end if result.present? @group_results << data end end # Adds a count. # # @param [String] option an option in a vote event # @param [String] value the number of votes for an option # @param [String] group a group of voters def add_count(option, value, group: nil) data = {option: option, value: value} if group data[:group] = group end if option.present? && value.present? @counts << data end end end end