Skip to content

Commit 9e9a8a8

Browse files
committed
Merge pull request #116 from aoberoi/feat.layout-control
adds initial_layout_class_list feature to token generation
2 parents 52e1f8c + cdd218d commit 9e9a8a8

File tree

4 files changed

+42
-5
lines changed

4 files changed

+42
-5
lines changed

README.md

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ Once a Session is created, you can start generating Tokens for clients to use wh
7777
You can generate a token either by calling the `opentok.generate_token(session_id, options)` method,
7878
or by calling the `Session#generate_token(options)` method on the an instance after creating it. The
7979
`options` parameter is an optional Hash used to set the role, expire time, and connection data of
80-
the Token.
80+
the Token. For layout control in archives and broadcasts, the initial layout class list of streams
81+
published from connections using this token can be set as well.
8182

8283
```ruby
8384
# Generate a Token from just a session_id (fetched from a database)
@@ -88,9 +89,10 @@ token = session.generate_token
8889

8990
# Set some options in a token
9091
token = session.generate_token({
91-
:role => :moderator
92-
:expire_time => Time.now.to_i+(7 * 24 * 60 * 60) # in one week
93-
:data => 'name=Johnny'
92+
:role => :moderator
93+
:expire_time => Time.now.to_i+(7 * 24 * 60 * 60) # in one week
94+
:data => 'name=Johnny',
95+
:initial_layout_classes => ['focus', 'inactive']
9496
});
9597
```
9698

lib/opentok/token_generator.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,15 @@ def generate_token
8181
end
8282
data_params[:connection_data] = data
8383
end
84+
85+
if opts[:initial_layout_classes]
86+
if opts[:initial_layout_classes].is_a?(Array)
87+
data_params[:initial_layout_class_list] = opts[:initial_layout_classes].join(' ')
88+
else
89+
data_params[:initial_layout_class_list] = opts[:initial_layout_classes].to_s
90+
end
91+
end
92+
8493
digest = OpenSSL::Digest.new('sha1')
8594
data_string = Addressable::URI.form_encode data_params
8695
meta_string = Addressable::URI.form_encode({

spec/matchers/token.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
RSpec::Matchers.define :carry_token_data do |input_data|
88
option_to_token_key = {
99
:api_key => :partner_id,
10-
:data => :connection_data
10+
:data => :connection_data,
11+
:initial_layout_classes => :initial_layout_class_list
1112
}
1213
match do |token|
1314
decoded_token = Base64.decode64(token[4..token.length])

spec/shared/opentok_generates_tokens.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,31 @@
6868
expect(data_bearing_token).to carry_valid_token_signature api_secret
6969
end
7070

71+
it "generates tokens with initial layout classes" do
72+
layout_classes = ["focus", "small"]
73+
layout_class_bearing_token = opentok.generate_token session_id, :initial_layout_classes => layout_classes
74+
expect(layout_class_bearing_token).to be_an_instance_of String
75+
expect(layout_class_bearing_token).to carry_token_data :session_id => session_id
76+
expect(layout_class_bearing_token).to carry_token_data :api_key => api_key
77+
expect(layout_class_bearing_token).to carry_token_data :role => default_role
78+
expect(layout_class_bearing_token).to carry_token_data :initial_layout_classes => layout_classes.join(' ')
79+
expect(layout_class_bearing_token).to carry_token_data [:nonce, :create_time]
80+
expect(layout_class_bearing_token).to carry_valid_token_signature api_secret
81+
end
82+
83+
it "generates tokens with one initial layout class" do
84+
layout_class = "focus"
85+
layout_class_bearing_token = opentok.generate_token session_id, :initial_layout_classes => layout_class
86+
expect(layout_class_bearing_token).to be_an_instance_of String
87+
expect(layout_class_bearing_token).to carry_token_data :session_id => session_id
88+
expect(layout_class_bearing_token).to carry_token_data :api_key => api_key
89+
expect(layout_class_bearing_token).to carry_token_data :role => default_role
90+
expect(layout_class_bearing_token).to carry_token_data :initial_layout_classes => layout_class
91+
expect(layout_class_bearing_token).to carry_token_data [:nonce, :create_time]
92+
expect(layout_class_bearing_token).to carry_valid_token_signature api_secret
93+
end
94+
95+
7196
# TODO a context about using a bad session_id
7297
end
7398

0 commit comments

Comments
 (0)