class Dotloop::Loop

Constants

LOOP_DETAILS_FIELDS
LOOP_FIELDS

Attributes

client[RW]

Public Class Methods

new(client:) click to toggle source
# File lib/dotloop/loop.rb, line 50
def initialize(client:)
  @client = client
end

Public Instance Methods

all(options = {}) click to toggle source
# File lib/dotloop/loop.rb, line 54
def all(options = {})
  raise_if_invalid_batch_size(options)
  options[:batch_size] ||= BATCH_SIZE
  Array.new.tap do |arr|
    (1..MAX_LOOPS).each do |i|
      options[:batch_number] = i
      current_batch = batch(options)
      arr.push current_batch
      break if current_batch.size < options[:batch_size]
    end
  end.flatten
end
batch(options = {}) click to toggle source
# File lib/dotloop/loop.rb, line 67
def batch(options = {})
  @client.get("/profile/#{profile_id(options)}/loop", query_params(options))[:data].map do |attrs|
    lp = Dotloop::Models::Loop.new(attrs)
    lp.client = client
    lp.profile_id = profile_id(options)
    lp
  end
end
create(profile_id:, params: {}) click to toggle source
# File lib/dotloop/loop.rb, line 93
def create(profile_id:, params: {})
  data = {
    name: params['name'],
    status: params['status'],
    transactionType: params['transactionType']
  }

  loop_data = @client.post("/profile/#{profile_id.to_i}/loop", data)[:data]
  lp = Dotloop::Models::Loop.new(loop_data)
  lp.client = client
  lp.profile_id = profile_id.to_i
  lp
end
detail(profile_id:, loop_id:) click to toggle source
# File lib/dotloop/loop.rb, line 84
def detail(profile_id:, loop_id:)
  loop_detail = @client.get("/profile/#{profile_id.to_i}/loop/#{loop_id.to_i}/detail")[:data]
  loop_detail = Dotloop::LoopDetail.new(loop_detail).details
  ld = Dotloop::Models::LoopDetail.new(loop_detail)
  ld.profile_id = profile_id.to_i
  ld.loop_id = loop_id.to_i
  ld
end
find(profile_id:, loop_id:) click to toggle source
# File lib/dotloop/loop.rb, line 76
def find(profile_id:, loop_id:)
  loop_data = @client.get("/profile/#{profile_id.to_i}/loop/#{loop_id.to_i}")[:data]
  lp = Dotloop::Models::Loop.new(loop_data)
  lp.client = client
  lp.profile_id = profile_id.to_i
  lp
end
loop_it(profile_id:, params: {}) click to toggle source
# File lib/dotloop/loop.rb, line 107
def loop_it(profile_id:, params: {})
  loop_data = @client.post("/loop-it?profile_id=#{profile_id}", params)[:data]
  lp = Dotloop::Models::Loop.new(loop_data)
  lp.client = client
  lp.profile_id = profile_id.to_i
  lp
end
update(profile_id:, loop_id:, params: {}) click to toggle source
# File lib/dotloop/loop.rb, line 115
def update(profile_id:, loop_id:, params: {})
  data = {}
  params.each do |key, value|
    LOOP_FIELDS.include?(key.to_s) || next
    data[key] = value.to_s
  end

  loop_data = @client.patch("/profile/#{profile_id.to_i}/loop/#{loop_id.to_i}", data)[:data]
  lp = Dotloop::Models::Loop.new(loop_data)
  lp.client = client
  lp.profile_id = profile_id.to_i
  lp
end
update_details(profile_id:, loop_id:, params: {}) click to toggle source
# File lib/dotloop/loop.rb, line 129
def update_details(profile_id:, loop_id:, params: {})
  data = {}
  LOOP_DETAILS_FIELDS.keys.each do |key|
    (detail_fields = params[key])
    detail_fields.is_a?(Hash) || next
    data[key] = {}
    detail_fields.each do |k, v|
      LOOP_DETAILS_FIELDS[key].include?(k.to_s) || next
      data[key][k] = v.to_s
    end
  end

  loop_detail = @client.patch("/profile/#{profile_id.to_i}/loop/#{loop_id.to_i}/detail", data)[:data]
  loop_detail = Dotloop::LoopDetail.new(loop_detail).details
  Dotloop::Models::LoopDetail.new(loop_detail)
end

Private Instance Methods

query_params(options) click to toggle source
# File lib/dotloop/loop.rb, line 152
def query_params(options)
  {
    batch_number:        batch_number(options),
    batch_size:          options[:batch_size].to_i,
    sort:                options[:sort],
    filter:              options[:filter],
    include_details:     options[:include_details]
  }.delete_if { |_, v| should_delete(v) }
end
raise_if_invalid_batch_size(options) click to toggle source
# File lib/dotloop/loop.rb, line 148
def raise_if_invalid_batch_size(options)
  raise 'invalid batch size provided, allowed values minimum 1 and maximum 100' if !options[:batch_size].nil? && (options[:batch_size] < 1 || options[:batch_size] > 100)
end