Class: Stream::Client

Inherits:
Object
  • Object
show all
Includes:
Activities, Batch
Defined in:
lib/stream/client.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Activities

#activity_partial_update, #batch_activity_partial_update, #get_activities

Methods included from Batch

#add_to_many, #follow_many, #unfollow_many

Constructor Details

#initialize(api_key = '', api_secret = '', app_id = nil, opts = {}) ⇒ Client

initializes a Stream API Client

Examples:

initialise the client to connect to EU-West location

Stream::Client.new('my_key', 'my_secret', 'my_app_id', :location => 'us-east')

Parameters:

  • api_key (string) (defaults to: '')

    your application api_key

  • api_secret (string) (defaults to: '')

    your application secret

  • app_id (string) (defaults to: nil)

    the id of your application (optional)

  • opts (hash) (defaults to: {})

    extra options



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/stream/client.rb', line 39

def initialize(api_key = '', api_secret = '', app_id = nil, opts = {})
  if api_key.nil? || api_key.empty?
    env_url = ENV.fetch('STREAM_URL', nil)
    if env_url =~ Stream::STREAM_URL_COM_RE
      re = Stream::STREAM_URL_COM_RE
    elsif env_url =~ Stream::STREAM_URL_IO_RE
      re = Stream::STREAM_URL_IO_RE
    end
    raise ArgumentError, 'empty api_key parameter and missing or invalid STREAM_URL env variable' unless re

    matches = re.match(ENV.fetch('STREAM_URL', nil))
    api_key = matches['key']
    api_secret = matches['secret']
    app_id = matches['app_id']
    opts[:location] = matches['location']
    opts[:api_hostname] = matches['api_hostname']
  end

  @api_key = api_key
  @api_secret = api_secret
  @app_id = app_id
  @signer = Stream::Signer.new(api_secret)

  @client_options = {
    api_key: @api_key,
    api_version: opts[:api_version] || 'v1.0',
    location: opts[:location],
    default_timeout: opts[:default_timeout] || 3,
    api_hostname: opts[:api_hostname] || 'stream-io-api.com'
  }
end

Instance Attribute Details

#api_keyObject (readonly)

Returns the value of attribute api_key.



13
14
15
# File 'lib/stream/client.rb', line 13

def api_key
  @api_key
end

#api_secretObject (readonly)

Returns the value of attribute api_secret.



14
15
16
# File 'lib/stream/client.rb', line 14

def api_secret
  @api_secret
end

#app_idObject (readonly)

Returns the value of attribute app_id.



15
16
17
# File 'lib/stream/client.rb', line 15

def app_id
  @app_id
end

#client_optionsObject (readonly)

Returns the value of attribute client_options.



16
17
18
# File 'lib/stream/client.rb', line 16

def client_options
  @client_options
end

Instance Method Details

#collectionsObject



110
111
112
# File 'lib/stream/client.rb', line 110

def collections
  CollectionsClient.new(api_key, api_secret, app_id, client_options)
end

#create_user_session_token(user_id, extra_data = {}) ⇒ string

Deprecated.

Use Client#create_user_token instead

Creates a user token

Parameters:

  • user_id (string)

    the user_if of this token (e.g. User42)

  • extra_data (hash) (defaults to: {})

    additional token data

Returns:

  • (string)


91
92
93
# File 'lib/stream/client.rb', line 91

def create_user_session_token(user_id, extra_data = {})
  create_user_token(user_id, extra_data)
end

#create_user_token(user_id, extra_data = {}) ⇒ string

Creates a user token

Parameters:

  • user_id (string)

    the user_if of this token (e.g. User42)

  • extra_data (hash) (defaults to: {})

    additional token data

Returns:

  • (string)


102
103
104
# File 'lib/stream/client.rb', line 102

def create_user_token(user_id, extra_data = {})
  Stream::Signer.create_user_token(user_id, extra_data, api_secret)
end

#feed(feed_slug, user_id) ⇒ Stream::Feed

Creates a feed instance

Parameters:

  • feed_slug (string)

    the feed slug (eg. flat, aggregated…)

  • user_id (user_id)

    the user_id of this feed (eg. User42)

Returns:



78
79
80
# File 'lib/stream/client.rb', line 78

def feed(feed_slug, user_id)
  Stream::Feed.new(self, feed_slug, user_id)
end

#get_default_paramsObject



136
137
138
# File 'lib/stream/client.rb', line 136

def get_default_params
  { api_key: @api_key }
end

#get_http_clientObject



140
141
142
# File 'lib/stream/client.rb', line 140

def get_http_client
  @get_http_client ||= StreamHTTPClient.new(url_generator)
end

#make_query_params(params) ⇒ Object



144
145
146
# File 'lib/stream/client.rb', line 144

def make_query_params(params)
  get_default_params.merge(params).sort_by { |k, _v| k.to_s }.to_h
end

#make_request(method, relative_url, signature, params = {}, data = {}, headers = {}) ⇒ Object



148
149
150
151
152
# File 'lib/stream/client.rb', line 148

def make_request(method, relative_url, signature, params = {}, data = {}, headers = {})
  headers['Authorization'] = signature
  headers['stream-auth-type'] = 'jwt'
  get_http_client.make_http_request(method, relative_url, make_query_params(params), data, headers)
end

#og(uri) ⇒ Object



131
132
133
134
# File 'lib/stream/client.rb', line 131

def og(uri)
  auth_token = Stream::Signer.create_jwt_token('*', '*', @api_secret, '*')
  make_request(:get, '/og', auth_token, { url: uri })
end

#personalizationObject



106
107
108
# File 'lib/stream/client.rb', line 106

def personalization
  PersonalizationClient.new(api_key, api_secret, app_id, client_options)
end

#reactionsObject



114
115
116
# File 'lib/stream/client.rb', line 114

def reactions
  ReactionsClient.new(api_key, api_secret, app_id, client_options)
end

#update_activities(activities) ⇒ Object



126
127
128
129
# File 'lib/stream/client.rb', line 126

def update_activities(activities)
  auth_token = Stream::Signer.create_jwt_token('activities', '*', @api_secret, '*')
  make_request(:post, '/activities/', auth_token, {}, 'activities' => activities)
end

#update_activity(activity) ⇒ Object



122
123
124
# File 'lib/stream/client.rb', line 122

def update_activity(activity)
  update_activities([activity])
end

#usersObject



118
119
120
# File 'lib/stream/client.rb', line 118

def users
  UsersClient.new(api_key, api_secret, app_id, client_options)
end