Skip to content

Commit ba47fb9

Browse files
authored
Merge pull request #6 from lininglink/update-video
Add update_video method
2 parents ba9018c + 0018a0b commit ba47fb9

File tree

6 files changed

+185
-148
lines changed

6 files changed

+185
-148
lines changed

lib/fb.rb

Lines changed: 5 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,12 @@
11
# frozen_string_literal: true
22

33
require_relative "fb/version"
4-
5-
require 'net/http'
6-
require 'json'
4+
require_relative "object"
75

86
require_relative "fb/config"
97
require_relative "fb/http_request"
108

11-
module Fb
12-
class Error < StandardError; end
13-
14-
class Business
15-
attr_reader :id, :name
16-
17-
def initialize(options = {})
18-
@access_token = options[:access_token]
19-
@id = options[:id]
20-
@name = options[:name]
21-
end
22-
23-
def owned_pages
24-
@owned_pages ||= begin
25-
params = { access_token: @access_token, fields: "category,name,access_token" }
26-
request = HTTPRequest.new path: "/#{@id}/owned_pages", params: params
27-
request.run.body['data'].map do |page_data|
28-
# unless page_data.key?("access_token")
29-
# page_data.merge! access_token: @access_token
30-
# end
31-
Page.new symbolize_keys(page_data)
32-
end
33-
end
34-
end
35-
36-
def client_pages
37-
@client_pages ||= begin
38-
params = { access_token: @access_token, fields: "category,name,access_token" }
39-
request = HTTPRequest.new path: "/#{@id}/client_pages", params: params
40-
request.run.body['data'].map do |page_data|
41-
# unless page_data.key?("access_token")
42-
# page_data.merge! access_token: @access_token
43-
# end
44-
Page.new symbolize_keys(page_data)
45-
end
46-
end
47-
end
48-
49-
private
50-
51-
def symbolize_keys(hash)
52-
{}.tap do |new_hash|
53-
hash.each_key {|key| new_hash[key.to_sym] = hash[key] }
54-
end
55-
end
56-
end
57-
58-
class User
59-
def initialize(options = {})
60-
@access_token = options[:access_token]
61-
end
62-
63-
def email
64-
@email ||= begin
65-
request = HTTPRequest.new path: '/me', params: {
66-
fields: :email,
67-
access_token: @access_token
68-
}
69-
request.run.body['email']
70-
end
71-
end
72-
73-
def revoke_permissions
74-
params = { access_token: @access_token }
75-
request = HTTPRequest.new path: '/me/permissions', params: params, method: :delete
76-
request.run.body['success']
77-
end
78-
79-
def pages
80-
@pages ||= begin
81-
params = { access_token: @access_token, fields: "category,name,access_token" }
82-
request = HTTPRequest.new path: '/me/accounts', params: params
83-
request.run.body['data'].map do |page_data|
84-
# unless page_data.key?("access_token")
85-
# page_data.merge! access_token: @access_token
86-
# end
87-
Page.new symbolize_keys(page_data)
88-
end
89-
end
90-
end
91-
92-
def businesses
93-
@businesses ||= begin
94-
params = { access_token: @access_token, fields: "name,access_token" }
95-
request = HTTPRequest.new path: '/me/businesses', params: params
96-
request.run.body['data'].map do |business_data|
97-
unless business_data.key?("access_token")
98-
business_data.merge! access_token: @access_token
99-
end
100-
Business.new symbolize_keys(business_data)
101-
end
102-
end
103-
end
104-
105-
private
106-
107-
def symbolize_keys(hash)
108-
{}.tap do |new_hash|
109-
hash.each_key {|key| new_hash[key.to_sym] = hash[key] }
110-
end
111-
end
112-
end
113-
114-
class Page
115-
attr_reader :id, :name, :category
116-
117-
def initialize(options = {})
118-
@id = options[:id]
119-
@name = options[:name]
120-
@category = options[:category]
121-
@access_token = options[:access_token]
122-
end
123-
124-
def thumbnail_url
125-
"https://graph.facebook.com/#{@id}/picture?width=240&height=240"
126-
end
127-
128-
# # For test the page token - temporary code
129-
# def feed
130-
# params = { access_token: @access_token }
131-
# request = HTTPRequest.new(path: "/#{@id}/feed", params: params)
132-
# request.run.body['data']
133-
# end
134-
135-
# Either link or message must be supplied.
136-
# https://developers.facebook.com/docs/graph-api/reference/v21.0/page/feed#publish
137-
def publish(options = {})
138-
params = { access_token: @access_token }
139-
params[:link] = options[:link] if options[:link]
140-
params[:message] = options[:message] if options[:message]
141-
request = HTTPRequest.new(path: "/#{@id}/feed", method: :post, params: params)
142-
request.run.body['id']
143-
end
144-
145-
# crossposted_video_id must be provided.
146-
# @see https://developers.facebook.com/docs/video-api/guides/crossposting
147-
def crosspost_video(options = {})
148-
params = { access_token: @access_token }
149-
params[:crossposted_video_id] = options[:crossposted_video_id] || ""
150-
# params[:message] = options[:message] if options[:message]
151-
request = HTTPRequest.new(path: "/#{@id}/videos", method: :post, params: params)
152-
request.run.body['id']
153-
end
154-
end
155-
end
9+
require "fb/business"
10+
require "fb/error"
11+
require "fb/page"
12+
require "fb/user"

lib/fb/business.rb

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
require 'net/http'
2+
require 'json'
3+
4+
module Fb
5+
class Business
6+
attr_reader :id, :name
7+
8+
def initialize(options = {})
9+
@access_token = options[:access_token]
10+
@id = options[:id]
11+
@name = options[:name]
12+
end
13+
14+
def owned_pages
15+
@owned_pages ||= begin
16+
params = { access_token: @access_token, fields: "category,name,access_token" }
17+
request = HTTPRequest.new path: "/#{@id}/owned_pages", params: params
18+
request.run.body['data'].map do |page_data|
19+
# unless page_data.key?("access_token")
20+
# page_data.merge! access_token: @access_token
21+
# end
22+
Page.new symbolize_keys(page_data)
23+
end
24+
end
25+
end
26+
27+
def client_pages
28+
@client_pages ||= begin
29+
params = { access_token: @access_token, fields: "category,name,access_token" }
30+
request = HTTPRequest.new path: "/#{@id}/client_pages", params: params
31+
request.run.body['data'].map do |page_data|
32+
# unless page_data.key?("access_token")
33+
# page_data.merge! access_token: @access_token
34+
# end
35+
Page.new symbolize_keys(page_data)
36+
end
37+
end
38+
end
39+
40+
private
41+
42+
def symbolize_keys(options)
43+
options.convert_keys { |k| k.to_sym }
44+
end
45+
end
46+
end

lib/fb/error.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Fb
2+
class Error < StandardError; end
3+
end

lib/fb/page.rb

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
require 'net/http'
2+
require 'json'
3+
4+
module Fb
5+
class Page
6+
attr_reader :id, :name, :category
7+
8+
def initialize(options = {})
9+
@id = options[:id]
10+
@name = options[:name]
11+
@category = options[:category]
12+
@access_token = options[:access_token]
13+
end
14+
15+
def thumbnail_url
16+
"https://graph.facebook.com/#{@id}/picture?width=240&height=240"
17+
end
18+
19+
# # For test the page token - temporary code
20+
# def feed
21+
# params = { access_token: @access_token }
22+
# request = HTTPRequest.new(path: "/#{@id}/feed", params: params)
23+
# request.run.body['data']
24+
# end
25+
26+
# Either link or message must be supplied.
27+
# https://developers.facebook.com/docs/graph-api/reference/v21.0/page/feed#publish
28+
def publish(options = {})
29+
params = { access_token: @access_token }
30+
params[:link] = options[:link] if options[:link]
31+
params[:message] = options[:message] if options[:message]
32+
request = HTTPRequest.new(path: "/#{@id}/feed", method: :post, params: params)
33+
request.run.body['id']
34+
end
35+
36+
# crossposted_video_id must be provided.
37+
# @returns newly posted video id.
38+
# @see https://developers.facebook.com/docs/video-api/guides/crossposting
39+
def crosspost_video(options = {})
40+
params = { access_token: @access_token }
41+
params[:crossposted_video_id] = options[:crossposted_video_id] || ""
42+
43+
request = HTTPRequest.new(path: "/#{@id}/videos", method: :post, params: params)
44+
request.run.body['id']
45+
end
46+
47+
# crossposted_video_id must be provided.
48+
# @return True if update is successful.
49+
# @see https://developers.facebook.com/docs/graph-api/reference/video/#Updating
50+
def update_video(video_id, options = {})
51+
params = { access_token: @access_token }
52+
params[:name] = options[:name] || ""
53+
params[:description] = options[:description] if options[:description]
54+
request = HTTPRequest.new(path: "/#{video_id}", method: :post, params: params)
55+
request.run.body['success']
56+
end
57+
end
58+
end

lib/fb/user.rb

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
require 'net/http'
2+
require 'json'
3+
4+
module Fb
5+
class User
6+
def initialize(options = {})
7+
@access_token = options[:access_token]
8+
end
9+
10+
def email
11+
@email ||= begin
12+
request = HTTPRequest.new path: '/me', params: {
13+
fields: :email,
14+
access_token: @access_token
15+
}
16+
request.run.body['email']
17+
end
18+
end
19+
20+
def revoke_permissions
21+
params = { access_token: @access_token }
22+
request = HTTPRequest.new path: '/me/permissions', params: params, method: :delete
23+
request.run.body['success']
24+
end
25+
26+
def pages
27+
@pages ||= begin
28+
params = { access_token: @access_token, fields: "category,name,access_token" }
29+
request = HTTPRequest.new path: '/me/accounts', params: params
30+
request.run.body['data'].map do |page_data|
31+
# unless page_data.key?("access_token")
32+
# page_data.merge! access_token: @access_token
33+
# end
34+
Page.new symbolize_keys(page_data)
35+
end
36+
end
37+
end
38+
39+
def businesses
40+
@businesses ||= begin
41+
params = { access_token: @access_token, fields: "name,access_token" }
42+
request = HTTPRequest.new path: '/me/businesses', params: params
43+
request.run.body['data'].map do |business_data|
44+
unless business_data.key?("access_token")
45+
business_data.merge! access_token: @access_token
46+
end
47+
Business.new symbolize_keys(business_data)
48+
end
49+
end
50+
end
51+
52+
private
53+
54+
def symbolize_keys(options)
55+
options.convert_keys { |k| k.to_sym }
56+
end
57+
end
58+
end

lib/object.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# frozen_string_literal: true
2+
3+
class Object
4+
# Now you can options.convert_keys { |k| k.to_sym }
5+
def convert_keys(&blk)
6+
case self
7+
when Array
8+
self.map { |v| v.convert_keys(&blk) }
9+
when Hash
10+
self.map { |k, v| [blk.call(k), v.convert_keys(&blk)] }.to_h
11+
else
12+
self
13+
end
14+
end
15+
end

0 commit comments

Comments
 (0)