class V2Intuity::Streams::Stream

Attributes

name[RW]
resource_filters[RW]
start_date[RW]
stream_id[RW]

Public Class Methods

new(options = {}) click to toggle source
# File lib/v2_intuity/streams/stream.rb, line 6
def initialize(options = {})
  @name = options[:name]
  @start_date = options.fetch(:start_date, Time.now.strftime('%Y-%m-%d'))

  @resource_filters = format_resource_filters(options.fetch(:resource_filters, nil))
  @stream_id = options[:stream_id]
end

Public Instance Methods

send_request(method, client, query_filters = []) click to toggle source
# File lib/v2_intuity/streams/stream.rb, line 14
def send_request(method, client, query_filters = [])
  return 'StreamApi client is requied' unless client.class == V2Intuity::Clients::StreamApi

  endpoint, options = build_options(method, query_filters)
  client.build_and_send_request(endpoint, options)
end

Private Instance Methods

build_options(method, query_filters = []) click to toggle source
# File lib/v2_intuity/streams/stream.rb, line 23
def build_options(method, query_filters = [])
  query_filters = query_filters.is_a?(Array) ? query_filters : [query_filters]


  case method
  when V2Intuity::Request::METHODS[:delete]
    raise 'stream id is needed' unless stream_id
    options = { method: method, id: stream_id }

  when V2Intuity::Request::METHODS[:get]

    options = { method: method, id: stream_id} # id can be blank when getting all streams
  when V2Intuity::Request::METHODS[:post]
    raise 'name is required' unless name
    body = { name: name, start_date: start_date,
             resource_filters: resource_filters }.delete_if {|k,v| v.nil?} # supported resource_query_filters include measurement, nutrition, sleep, workout
    options = { method: method, body: body.delete_if {|k,v| v.nil?} }

  when V2Intuity::Request::METHODS[:put]
    raise 'stream id is needed' unless stream_id
    body = { name: name }
    options = { method: method, body: body.delete_if {|k,v| v.nil?}, id: stream_id }

  else
    raise 'incorrect method verb'
  end

  options[:query_filters] = query_filters unless query_filters.empty?

  [V2Intuity::Endpoints::Stream.new, options.delete_if {|k,v| v.nil?} ]
end
format_resource_filters(filters) click to toggle source
# File lib/v2_intuity/streams/stream.rb, line 55
def format_resource_filters(filters)
  return nil unless filters

  filters = filters.is_a?(Array) ? filters : [filters]

  filters.each do |filter|
    filter_class = filter.class
    next if filter_class < V2Intuity::ResourceFilters::ResourceFilter || filter_class == V2Intuity::ResourceFilters::ResourceFilter
    raise 'unsupported filter'
  end

  filter_array = []
  filters.each { |filter| filter_array << filter.name }

  filter_array.uniq
end