live_paper 0.0.28 → 0.0.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/lib/live_paper.rb +3 -0
- data/lib/live_paper/base_object.rb +17 -0
- data/lib/live_paper/image.rb +11 -5
- data/lib/live_paper/link.rb +2 -2
- data/lib/live_paper/payoff.rb +5 -3
- data/lib/live_paper/qr_trigger.rb +1 -1
- data/lib/live_paper/trigger.rb +2 -2
- data/lib/live_paper/version.rb +1 -1
- data/lib/live_paper/wm_trigger.rb +2 -2
- data/spec/live_paper/base_object_spec.rb +57 -3
- data/spec/live_paper/image_spec.rb +3 -2
- data/spec/live_paper/link_spec.rb +1 -0
- data/spec/live_paper/payoff_spec.rb +6 -3
- data/spec/live_paper/trigger_spec.rb +7 -6
- data/spec/spec_helpers/lpp_client.rb +5 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b489f0bf261b6914c0c19e4a8a195c29cbab70cc
|
4
|
+
data.tar.gz: 02d0367b53900498aeef78b9167f1711950ecf05
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0940231ff1e32b771bb54fa88338598339a1194650fd433a23ad5d5cb95cadd51d351bfd15fcc495fabe5b7c7d14b6bce8195acec078f8928b23362fa1654434
|
7
|
+
data.tar.gz: b3d7a0c30820492c7cdf299f061498ff15526a71ba890daacbb57f738272557c9bc2728c3e2206e67d9d9808c896ab770b15ea377f4d11344bc800ff6c3bbf8d
|
data/Rakefile
CHANGED
data/lib/live_paper.rb
CHANGED
@@ -24,6 +24,9 @@ module LivePaper
|
|
24
24
|
def initialize(auth)
|
25
25
|
#todo: tdd, verify hash
|
26
26
|
$lpp_basic_auth = Base64.strict_encode64("#{auth[:id]}:#{auth[:secret]}")
|
27
|
+
BaseObject::request_access_token
|
28
|
+
BaseObject::request_project_id if $lpp_access_token
|
29
|
+
|
27
30
|
@remote_resources={}
|
28
31
|
end
|
29
32
|
|
@@ -8,6 +8,7 @@ module LivePaper
|
|
8
8
|
|
9
9
|
LP_API_HOST="https://www.livepaperapi.com"
|
10
10
|
AUTH_URL = "#{LP_API_HOST}/auth/token"
|
11
|
+
AUTH_VALIDATION_URL = "#{LP_API_HOST}/auth/v1/validate"
|
11
12
|
|
12
13
|
attr_accessor :id, :name, :date_created, :date_modified, :link
|
13
14
|
|
@@ -101,6 +102,7 @@ module LivePaper
|
|
101
102
|
raise "Method '#{verb}' not supported." unless [:get, :post, :put, :delete].include?(verb)
|
102
103
|
|
103
104
|
request_access_token unless $lpp_access_token
|
105
|
+
request_project_id unless $project_id
|
104
106
|
headers = {}
|
105
107
|
headers[:authorization] = "Bearer #{$lpp_access_token}"
|
106
108
|
headers[:accept] = options[:accept] || "application/json"
|
@@ -117,6 +119,7 @@ module LivePaper
|
|
117
119
|
tries += 1
|
118
120
|
if tries < 3
|
119
121
|
request_access_token
|
122
|
+
request_project_id
|
120
123
|
headers[:authorization] = "Bearer #{$lpp_access_token}"
|
121
124
|
retry
|
122
125
|
else
|
@@ -142,6 +145,20 @@ module LivePaper
|
|
142
145
|
$lpp_access_token = @access_token
|
143
146
|
end
|
144
147
|
|
148
|
+
def self.request_project_id
|
149
|
+
project = nil
|
150
|
+
|
151
|
+
RestClient.proxy = ENV['HTTP_PROXY'] || ENV['http_proxy']
|
152
|
+
request = {}.to_json
|
153
|
+
res = RestClient.post AUTH_VALIDATION_URL, request, { :Authorization => "Bearer #{$lpp_access_token}", :Accept => 'application/json'}
|
154
|
+
@project = res.headers[:project_id]
|
155
|
+
|
156
|
+
if @project.nil?
|
157
|
+
raise "Project id not in response header"
|
158
|
+
end
|
159
|
+
|
160
|
+
$project_id = @project
|
161
|
+
end
|
145
162
|
|
146
163
|
def errors
|
147
164
|
begin
|
data/lib/live_paper/image.rb
CHANGED
@@ -6,7 +6,7 @@ module LivePaper
|
|
6
6
|
|
7
7
|
attr_accessor :url
|
8
8
|
|
9
|
-
API_URL = 'https://storage.livepaperapi.com/objects/
|
9
|
+
API_URL = 'https://storage.livepaperapi.com/objects/v2/projects/PROJECTID/files'
|
10
10
|
|
11
11
|
def self.upload(image_uri)
|
12
12
|
# return the original img uri if it is LivePaper storage
|
@@ -21,10 +21,16 @@ module LivePaper
|
|
21
21
|
end
|
22
22
|
|
23
23
|
BaseObject.request_access_token unless $lpp_access_token
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
BaseObject.request_project_id unless $project_id
|
25
|
+
begin
|
26
|
+
response = RestClient.post API_URL.gsub(/PROJECTID/,$project_id),
|
27
|
+
image_bytes,
|
28
|
+
authorization: "Bearer #{$lpp_access_token}",
|
29
|
+
content_type: 'image/jpeg',
|
30
|
+
accept: '*/*'
|
31
|
+
rescue Exception => e
|
32
|
+
puts e.message
|
33
|
+
end
|
28
34
|
response.headers[:location]
|
29
35
|
|
30
36
|
end
|
data/lib/live_paper/link.rb
CHANGED
data/lib/live_paper/payoff.rb
CHANGED
@@ -25,7 +25,7 @@ module LivePaper
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.api_url
|
28
|
-
"#{LP_API_HOST}/api/
|
28
|
+
"#{LP_API_HOST}/api/v2/projects/#{$project_id}/payoffs"
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
@@ -44,7 +44,7 @@ module LivePaper
|
|
44
44
|
|
45
45
|
def parse_webpayoff(data)
|
46
46
|
@type = TYPE[:WEB]
|
47
|
-
@url = data[:
|
47
|
+
@url = data[:url]
|
48
48
|
end
|
49
49
|
|
50
50
|
def update_body
|
@@ -67,13 +67,15 @@ module LivePaper
|
|
67
67
|
def create_webpayoff_body
|
68
68
|
{
|
69
69
|
name: @name,
|
70
|
-
|
70
|
+
type: 'url',
|
71
|
+
url: @url
|
71
72
|
}
|
72
73
|
end
|
73
74
|
|
74
75
|
def create_richpayoff_body
|
75
76
|
{
|
76
77
|
name: @name,
|
78
|
+
type: 'richPayoff',
|
77
79
|
richPayoff: {
|
78
80
|
version: 1,
|
79
81
|
private: {
|
@@ -7,7 +7,7 @@ module LivePaper
|
|
7
7
|
def parse(data)
|
8
8
|
data = JSON.parse(data, symbolize_names: true)[:trigger]
|
9
9
|
assign_attributes data
|
10
|
-
self.qrcode_url=data[:link].select { |item| item[:rel] == "
|
10
|
+
self.qrcode_url=data[:link].select { |item| item[:rel] == "download" }.first[:href]
|
11
11
|
self
|
12
12
|
end
|
13
13
|
|
data/lib/live_paper/trigger.rb
CHANGED
@@ -6,7 +6,7 @@ module LivePaper
|
|
6
6
|
attr_accessor :state, :start_date, :end_date
|
7
7
|
|
8
8
|
def self.api_url
|
9
|
-
"#{LP_API_HOST}/api/
|
9
|
+
"#{LP_API_HOST}/api/v2/projects/#{$project_id}/triggers"
|
10
10
|
end
|
11
11
|
|
12
12
|
def self.item_key
|
@@ -55,4 +55,4 @@ module LivePaper
|
|
55
55
|
|
56
56
|
end
|
57
57
|
|
58
|
-
end
|
58
|
+
end
|
data/lib/live_paper/version.rb
CHANGED
@@ -9,14 +9,14 @@ module LivePaper
|
|
9
9
|
def parse(data)
|
10
10
|
data = JSON.parse(data, symbolize_names: true)[:trigger]
|
11
11
|
assign_attributes data
|
12
|
-
self.wm_url=data[:link].select { |item| item[:rel] == "
|
12
|
+
self.wm_url=data[:link].select { |item| item[:rel] == "download" }.first[:href]
|
13
13
|
self
|
14
14
|
end
|
15
15
|
|
16
16
|
def download_watermark(image_url, options = {})
|
17
17
|
resolution = options[:resolution] || WATERMARK_RESOLUTION
|
18
18
|
strength = options[:strength] || WATERMARK_STRENGTH
|
19
|
-
url = "#{self.wm_url}?
|
19
|
+
url = "#{self.wm_url}?imageURL=#{CGI.escape(image_url)}&resolution=#{resolution}&strength=#{strength}"
|
20
20
|
begin
|
21
21
|
response = WmTrigger.rest_request( url, :get, accept: "image/jpg" )
|
22
22
|
response.body.empty? ? nil : response.body
|
@@ -22,7 +22,8 @@ describe LivePaper::BaseObject do
|
|
22
22
|
before do
|
23
23
|
stub_request(:post, /.*livepaperapi.com\/auth\/token.*/).to_return(:body => lpp_auth_response_json, :status => 200)
|
24
24
|
stub_request(:post, api_url).to_return(:body => lpp_richpayoff_response_json, :status => 200)
|
25
|
-
|
25
|
+
stub_request(:post, LivePaper::BaseObject::AUTH_VALIDATION_URL).to_return(:status => 201, :body => "", :headers => { project_id: 'pid'})
|
26
|
+
end
|
26
27
|
|
27
28
|
describe '#initialize' do
|
28
29
|
let(:data) {
|
@@ -373,13 +374,21 @@ describe LivePaper::BaseObject do
|
|
373
374
|
end
|
374
375
|
|
375
376
|
describe '.request_access_token' do
|
376
|
-
it 'should
|
377
|
+
it 'should correctly get the token' do
|
377
378
|
$lpp_access_token = nil
|
378
379
|
LivePaper::BaseObject.request_access_token
|
379
380
|
expect($lpp_access_token).to eq 'SECRETTOKEN'
|
380
381
|
end
|
381
382
|
end
|
382
383
|
|
384
|
+
describe '.request_project_id' do
|
385
|
+
it 'should correctly get the project id' do
|
386
|
+
$project_id = nil
|
387
|
+
LivePaper::BaseObject.request_project_id
|
388
|
+
expect($project_id).to eq 'pid'
|
389
|
+
end
|
390
|
+
end
|
391
|
+
|
383
392
|
describe 'rest_request' do
|
384
393
|
before do
|
385
394
|
|
@@ -395,6 +404,16 @@ describe LivePaper::BaseObject do
|
|
395
404
|
end
|
396
405
|
end
|
397
406
|
|
407
|
+
context 'when there is no project id' do
|
408
|
+
before do
|
409
|
+
$project_id = nil
|
410
|
+
end
|
411
|
+
it 'should request the project_id' do
|
412
|
+
expect(LivePaper::BaseObject).to receive(:request_project_id)
|
413
|
+
LivePaper::BaseObject.rest_request(api_url, :post)
|
414
|
+
end
|
415
|
+
end
|
416
|
+
|
398
417
|
context 'when there is an access token' do
|
399
418
|
before do
|
400
419
|
$lpp_access_token = 'TOPSECRET'
|
@@ -407,6 +426,9 @@ describe LivePaper::BaseObject do
|
|
407
426
|
|
408
427
|
context 'when the access token is invalid' do
|
409
428
|
before do
|
429
|
+
allow(LivePaper::BaseObject).to receive(:request_project_id) do
|
430
|
+
@project_id = $project_id = 'pid'
|
431
|
+
end
|
410
432
|
$lpp_access_token = 'invalid'
|
411
433
|
|
412
434
|
@response = double('A mock for a response')
|
@@ -423,5 +445,37 @@ describe LivePaper::BaseObject do
|
|
423
445
|
end
|
424
446
|
end
|
425
447
|
|
448
|
+
context 'when there is a project id' do
|
449
|
+
before do
|
450
|
+
$lpp_access_token = 'TOPSECRET'
|
451
|
+
$project_id = 'mypid'
|
452
|
+
end
|
453
|
+
|
454
|
+
it 'should NOT call request_project_id' do
|
455
|
+
expect(LivePaper::BaseObject).to receive(:request_project_id).exactly(0).times
|
456
|
+
LivePaper::BaseObject.rest_request(api_url, :post)
|
457
|
+
end
|
458
|
+
|
459
|
+
context 'when the access token is invalid' do
|
460
|
+
before do
|
461
|
+
allow(LivePaper::BaseObject).to receive(:request_project_id) do
|
462
|
+
@project_id = $project_id = 'pid'
|
463
|
+
end
|
464
|
+
$lpp_access_token = 'invalid'
|
465
|
+
|
466
|
+
@response = double('A mock for a response')
|
467
|
+
allow(@response).to receive(:body) { '{ "accessToken" : "valid_access_token" }' }
|
468
|
+
@response.stub(:code).and_return(401, 401, 200) #fail first two calls
|
469
|
+
RestClient::Request.stub(:execute).and_return(@response)
|
470
|
+
end
|
471
|
+
|
472
|
+
it 'should request a project id' do
|
473
|
+
expect(LivePaper::BaseObject).to receive(:request_project_id).exactly(2).times
|
474
|
+
LivePaper::BaseObject.rest_request(api_url, :put, body: data.to_json)
|
475
|
+
end
|
476
|
+
|
477
|
+
end
|
478
|
+
end
|
479
|
+
|
426
480
|
end
|
427
|
-
end
|
481
|
+
end
|
@@ -6,10 +6,11 @@ describe LivePaper::Image do
|
|
6
6
|
before do
|
7
7
|
$lpp_access_token = "YouBeenHacked"
|
8
8
|
|
9
|
-
stub_request(:post, LivePaper::Image::API_URL).
|
9
|
+
stub_request(:post, LivePaper::Image::API_URL.gsub(/PROJECTID/,'pid')).
|
10
10
|
with(:body => "YOURIMAGEBYTES",
|
11
|
-
:headers => {'Accept'=>'
|
11
|
+
:headers => {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip, deflate', 'Authorization'=>'Bearer YouBeenHacked', 'Content-Length'=>'14', 'Content-Type'=>'image/jpeg', 'User-Agent'=>'Ruby'}).
|
12
12
|
to_return(:status => 201, :body => "", :headers => {location: lpp_img_uri})
|
13
|
+
stub_request(:post, LivePaper::BaseObject::AUTH_VALIDATION_URL).to_return(:status => 201, :body => "", :headers => { project_id: 'pid'})
|
13
14
|
end
|
14
15
|
|
15
16
|
context 'local file' do
|
@@ -6,6 +6,7 @@ describe LivePaper::Link do
|
|
6
6
|
stub_request(:post, LivePaper::Link.api_url).to_return(:body => lpp_link_response_json, :status => 200)
|
7
7
|
stub_request(:get, "#{LivePaper::Link.api_url}/link_id").to_return(:body => lpp_link_response_json, :status => 200)
|
8
8
|
stub_request(:get, "#{LivePaper::Link.api_url}/link_not_existent").to_return(:body => '{}', :status => 404)
|
9
|
+
stub_request(:post, LivePaper::BaseObject::AUTH_VALIDATION_URL).to_return(:status => 201, :body => "", :headers => { project_id: 'pid'})
|
9
10
|
|
10
11
|
@data = {
|
11
12
|
id: 'id',
|
@@ -6,7 +6,8 @@ describe LivePaper::Payoff do
|
|
6
6
|
stub_request(:post, LivePaper::Payoff.api_url).to_return(:body => lpp_richpayoff_response_json, :status => 200)
|
7
7
|
stub_request(:get, "#{LivePaper::Payoff.api_url}/payoff_id").to_return(:body => lpp_payoff_response_json, :status => 200)
|
8
8
|
stub_request(:get, "#{LivePaper::Payoff.api_url}/payoff_not_existent").to_return(:body => '{}', :status => 404)
|
9
|
-
|
9
|
+
stub_request(:post, LivePaper::BaseObject::AUTH_VALIDATION_URL).to_return(:status => 201, :body => "", :headers => { project_id: 'pid'})
|
10
|
+
end
|
10
11
|
|
11
12
|
let(:data) {
|
12
13
|
{
|
@@ -78,6 +79,7 @@ describe LivePaper::Payoff do
|
|
78
79
|
assert_requested :post, LivePaper::Payoff.api_url, :body => {
|
79
80
|
payoff: {
|
80
81
|
name: 'name',
|
82
|
+
type: 'richPayoff',
|
81
83
|
richPayoff: {
|
82
84
|
version: 1,
|
83
85
|
private: {
|
@@ -107,7 +109,8 @@ describe LivePaper::Payoff do
|
|
107
109
|
assert_requested :post, LivePaper::Payoff.api_url, :body => {
|
108
110
|
payoff: {
|
109
111
|
name: data[:name],
|
110
|
-
|
112
|
+
type: 'url',
|
113
|
+
url: data[:url]
|
111
114
|
}
|
112
115
|
}.to_json
|
113
116
|
end
|
@@ -221,4 +224,4 @@ describe LivePaper::Payoff do
|
|
221
224
|
end
|
222
225
|
end
|
223
226
|
|
224
|
-
end
|
227
|
+
end
|
@@ -19,10 +19,11 @@ describe LivePaper::WmTrigger do
|
|
19
19
|
stub_request(:post, LivePaper::WmTrigger.api_url).to_return(:body => lpp_trigger_response_json, :status => 200)
|
20
20
|
stub_request(:get, "#{LivePaper::WmTrigger.api_url}/trigger_id").to_return(:body => lpp_trigger_response_json, :status => 200)
|
21
21
|
stub_request(:get, "#{LivePaper::WmTrigger.api_url}/trigger_not_existent").to_return(:body => '{}', :status => 404)
|
22
|
-
|
22
|
+
stub_request(:post, LivePaper::BaseObject::AUTH_VALIDATION_URL).to_return(:status => 201, :body => "", :headers => { project_id: 'pid'})
|
23
|
+
end
|
23
24
|
|
24
25
|
describe '#initialize without specifying start_date end_date' do
|
25
|
-
let(:data){
|
26
|
+
let(:data){
|
26
27
|
{
|
27
28
|
id: 'id',
|
28
29
|
name: 'name'
|
@@ -116,7 +117,7 @@ describe LivePaper::WmTrigger do
|
|
116
117
|
context 'the requested trigger exists.' do
|
117
118
|
let(:lpp_start_date_response_json) { JSON.parse(lpp_trigger_response_json)['trigger']['startDate'] }
|
118
119
|
let(:lpp_end_date_response_json) { JSON.parse(lpp_trigger_response_json)['trigger']['endDate'] }
|
119
|
-
|
120
|
+
|
120
121
|
before do
|
121
122
|
@trigger = LivePaper::Trigger.get('trigger_id')
|
122
123
|
end
|
@@ -166,13 +167,13 @@ describe LivePaper::WmTrigger do
|
|
166
167
|
let(:strength) { LivePaper::WmTrigger::WATERMARK_STRENGTH }
|
167
168
|
|
168
169
|
before do
|
169
|
-
stub_request(:get, "https://fileapi/id/image?
|
170
|
+
stub_request(:get, "https://fileapi/id/image?imageURL=#{encoded_image_url}&resolution=#{resolution}&strength=#{strength}").to_return(:body => lpp_watermark_response, :status => 200)
|
170
171
|
@trigger = LivePaper::WmTrigger.new data
|
171
172
|
@trigger.wm_url='https://fileapi/id/image'
|
172
173
|
end
|
173
|
-
|
174
|
+
|
174
175
|
it 'should return the watermark image data.' do
|
175
176
|
expect(@trigger.download_watermark(image_url)).to eq 'watermark_data'
|
176
177
|
end
|
177
178
|
end
|
178
|
-
end
|
179
|
+
end
|
@@ -15,7 +15,8 @@ def lpp_payoff_response_json
|
|
15
15
|
"payoff": {
|
16
16
|
"id": "payoff_id",
|
17
17
|
"name": "name",
|
18
|
-
"
|
18
|
+
"type": "url",
|
19
|
+
"url": "url"
|
19
20
|
}
|
20
21
|
}
|
21
22
|
RESPONSE
|
@@ -27,6 +28,7 @@ def lpp_richpayoff_response_json
|
|
27
28
|
"payoff": {
|
28
29
|
"id": "payoff_id",
|
29
30
|
"name": "name",
|
31
|
+
"type": "richPayoff",
|
30
32
|
"dateCreated":"2014-10-07T20:57:01.083+0000",
|
31
33
|
"dateModified":"2014-10-07T20:57:01.083+0000",
|
32
34
|
"link":[
|
@@ -65,12 +67,11 @@ def lpp_trigger_response_json(type='watermark')
|
|
65
67
|
"link": [
|
66
68
|
{"rel":"self", "href": "https://www.livepaperapi.com/api/v1/triggers/trigger_id"},
|
67
69
|
{"rel":"analytics", "href": "https://www.livepaperapi.com/analytics/v1/triggers/trigger_id"},
|
68
|
-
{"rel":"
|
70
|
+
{"rel":"download", "href": "https://fileapi/trigger_id/image"},
|
69
71
|
{"rel":"shortURL", "href": "http://hpgo.co/abc123"}
|
70
72
|
],
|
71
73
|
"state": "ACTIVE",
|
72
74
|
"type": "#{type}",
|
73
|
-
"watermark": "watermark",
|
74
75
|
"startDate":"2014-10-08T20:40:26.376+0000",
|
75
76
|
"endDate":"2015-10-09T02:29:12.376+0000"
|
76
77
|
}
|
@@ -127,4 +128,4 @@ def lpp_delete_error_response
|
|
127
128
|
}
|
128
129
|
RESPONSE
|
129
130
|
|
130
|
-
end
|
131
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: live_paper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.29
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Whitmarsh
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-
|
12
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|