Module: Stream::Activities

Included in:
Client
Defined in:
lib/stream/activities.rb

Instance Method Summary collapse

Instance Method Details

#activity_partial_update(data = {}) ⇒ Object

Partial update activity, via activity ID or Foreign ID + timestamp

Examples:

Identify using activity ID

@client.activity_partial_update(
  id: "4b39fda2-d6e2-42c9-9abf-5301ef071b12",
  set: {
    "product.price.eur": 12.99,
    "colors": {
      "blue": "#0000ff",
      "green": "#00ff00",
    }
  },
  unset: [ "popularity", "size.xl" ]
)

Identify using Foreign ID + timestamp

@client.activity_partial_update(
  foreign_id: 'product:123',
  time: '2016-11-10T13:20:00.000000',
  set: {
   "product.price.eur": 12.99,
   "colors": {
     "blue": "#0000ff",
     "green": "#00ff00",
   }
  },
  unset: [ "popularity", "size.xl" ]
)

Parameters:

  • data (Hash<:id, :foreign_id, :time, :set, :unset>) (defaults to: {})

    the request params (id and foreign_id+timestamp mutually exclusive)

Returns:

  • the updated activity.



97
98
99
100
# File 'lib/stream/activities.rb', line 97

def activity_partial_update(data = {})
  signature = Stream::Signer.create_jwt_token('activities', '*', @api_secret, '*')
  make_request(:post, '/activity/', signature, {}, data)
end

#batch_activity_partial_update(changes = []) ⇒ Object

Batch partial activity update

Examples:

Identify using activity IDs

@client.batch_activity_partial_update([
  {
    id: "4b39fda2-d6e2-42c9-9abf-5301ef071b12",
    set: {
      "product.price.eur": 12.99,
      "colors": {
        "blue": "#0000ff",
        "green": "#00ff00",
      }
    },
    unset: [ "popularity", "size.x2" ]
  },
  {
    id: "8d2dcad8-1e34-11e9-8b10-9cb6d0925edd",
    set: {
      "product.price.eur": 17.99,
      "colors": {
        "red": "#ff0000",
        "green": "#00ff00",
      }
    },
    unset: [ "rating" ]
  }
])

Identify using Foreign IDs + timestamps

@client.batch_activity_partial_update([
  {
    foreign_id: "product:123",
    time: '2016-11-10T13:20:00.000000',
    set: {
      "product.price.eur": 22.99,
      "colors": {
        "blue": "#0000ff",
        "green": "#00ff00",
      }
    },
    unset: [ "popularity", "size.x2" ]
  },
  {
    foreign_id: "product:1234",
    time: '2017-11-10T13:20:00.000000',
    set: {
      "product.price.eur": 37.99,
      "colors": {
        "black": "#000000",
        "white": "#ffffff",
      }
    },
    unset: [ "rating" ]
  }
])

Parameters:

  • changes (Array< Hash<:id, :foreign_id, :time, :set, :unset> >) (defaults to: [])

    the list of changes to be applied

Returns:

  • the updated activities



163
164
165
166
# File 'lib/stream/activities.rb', line 163

def batch_activity_partial_update(changes = [])
  signature = Stream::Signer.create_jwt_token('activities', '*', @api_secret, '*')
  make_request(:post, '/activity/', signature, {}, { changes: changes })
end

#get_activities(params = {}) ⇒ Object

Get activities directly, via ID or Foreign ID + timestamp

Examples:

Retrieve by activity IDs

@client.get_activities(
  ids: [
    '4b39fda2-d6e2-42c9-9abf-5301ef071b12',
    '89b910d3-1ef5-44f8-914e-e7735d79e817'
  ]
)

Retrieve by Foreign IDs + timestamps

@client.get_activities(
  foreign_id_times: [
    { foreign_id: 'post:1000', time: '2016-11-10T13:20:00.000000' },
    { foreign_id: 'like:2000', time: '2018-01-07T09:15:59.123456' }
  ]
)

Parameters:

  • params (Hash<:ids, :foreign_id_times>) (defaults to: {})

    the request params (ids or list of <:foreign_id, :time> objects)

Returns:

  • the found activities, if any.



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/stream/activities.rb', line 26

def get_activities(params = {})
  if params[:foreign_id_times]
    foreign_ids = []
    timestamps = []
    params[:foreign_id_times].each do |e|
      foreign_ids << e[:foreign_id]
      timestamps << e[:time]
    end
    params = {
      foreign_ids: foreign_ids,
      timestamps: timestamps
    }
  end

  uri = params[:enrich] || params[:reactions] ? '/enrich/activities/' : '/activities/'
  if params[:reactions].respond_to?(:keys)
    params[:withOwnReactions] = true if params[:reactions][:own]
    params[:withFirstReactions] = true if params[:reactions][:first]
    params[:withRecentReactions] = true if params[:reactions][:recent]
    params[:withReactionCounts] = true if params[:reactions][:counts]
    params[:withOwnChildren] = true if params[:reactions][:children]
    user_id = params[:reactions][:user_id]
    params[:user_id] = user_id if user_id
    kinds = params[:reactions][:kinds]
    if kinds
      params[:reactionKindsFilter] = kinds.is_a?(Array) ? kinds.join(',') : kinds
    end
  end
  %i[enrich reactions].each { |k| params.delete(k) }

  # Handle multiple IDs by joining with commas
  params[:ids] = params[:ids].join(',') if params[:ids]&.is_a?(Array)

  signature = Stream::Signer.create_jwt_token('activities', '*', @api_secret, '*')
  make_request(:get, uri, signature, params)
end