fb_graph2 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0aada3bb0f27460fa19a74601046d482a0d08117
4
- data.tar.gz: 5c7342702b69f58154689439912e73afca059111
3
+ metadata.gz: a3b9b96bd354676b41303ec71bb42e5a37f83e79
4
+ data.tar.gz: 353b8100ce89c4e3b96f832e209d4612357ff44a
5
5
  SHA512:
6
- metadata.gz: a44c71b1317b8e3c537e17e7511a6a023f355fc7916a5620e113f0e2ee8c8643d990650e4e4bb18b7447570a41891ea201260d21b6d13bc8fe14039ec914b94e
7
- data.tar.gz: 3956dcb25143d937db3b10597e79fbf72083b0348a7ec81ebe58ad6d271ea68857e2bea5113b868d5409fe7598ef6f3da7280a73e18b2d7c958929ac0d12e28d
6
+ metadata.gz: 215b26018c47fa99f1da5d3cd07caaf5ff2c62e15b2bcc289a02dfccd43bacdc0d29bb34706ab568c265189ea5bbc2508733a3cf8f69d3d144b3ebf63c57bc7e
7
+ data.tar.gz: 80c709b966450c3afeb9795b15a5aef28c420cde256bac977bb685654800270c14e27359f6a411769ef345a51b01288861654fbd567e488b9c83b4bcbde6c569
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # FbGraph2
2
2
 
3
- TODO: Write a gem description
3
+ Similar to [fb_graph gem](https://github.com/nov/fb_graph), but supports Graph API v2.0+.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,7 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ See [fb_graph2 Wiki](https://github.com/nov/fb_graph2/wiki).
22
22
 
23
23
  ## Contributing
24
24
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -2,12 +2,13 @@ require 'active_support/all'
2
2
  require 'rack/oauth2'
3
3
 
4
4
  module FbGraph2
5
- cattr_accessor :api_version, :gem_version, :logger, :debugging, :_http_config_
5
+ cattr_accessor :api_version, :gem_version, :logger, :debugging, :_http_config_, :object_classes
6
6
 
7
7
  self.api_version = 'v2.0'
8
8
  self.gem_version = File.read(File.join(__dir__, '../VERSION')).delete("\n\r")
9
9
  self.logger = Logger.new(STDOUT)
10
10
  self.logger.progname = 'FbGraph2'
11
+ self.object_classes = Array.new
11
12
 
12
13
  class << self
13
14
  def root_url
@@ -0,0 +1,17 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module Admins
4
+ def admins(params = {})
5
+ users = self.edge :admins, params
6
+ users.collect do |user|
7
+ User.new(user[:id], user).authenticate self.access_token
8
+ end
9
+ end
10
+
11
+ def admin?(user, params = {})
12
+ users = self.edge :admins, params, edge_scope: user
13
+ users.present?
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,24 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module Blocked
4
+ def blocked(params = {})
5
+ users = self.edge :blocked, params
6
+ users.collect do |user|
7
+ User.new(user[:id], user).authenticate self.access_token
8
+ end
9
+ end
10
+
11
+ def block!(user, params = {})
12
+ self.post params.merge(
13
+ user_id: Util.as_identifier(user)
14
+ ), edge: :blocked
15
+ end
16
+
17
+ def unblock!(user, params = {})
18
+ self.delete params.merge(
19
+ user_id: Util.as_identifier(user)
20
+ ), edge: :blocked
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,8 +1,19 @@
1
1
  module FbGraph2
2
2
  class Edge
3
3
  module Comments
4
+ def assign(attributes)
5
+ super
6
+ if attributes.include?(:comments)
7
+ @_cached_comments = Collection.new attributes[:comments]
8
+ end
9
+ end
10
+
4
11
  def comments(params = {})
5
- comments = self.edge :comments, params
12
+ comments = if @_cached_comments.present? && params.blank?
13
+ @_cached_comments
14
+ else
15
+ self.edge :comments, params
16
+ end
6
17
  comments.collect do |comment|
7
18
  Comment.new(comment[:id], comment).authenticate self.access_token
8
19
  end
@@ -0,0 +1,12 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module GlobalBrandChildren
4
+ def global_brand_children(params = {})
5
+ pages = self.edge :global_brand_children, params
6
+ pages.collect do |page|
7
+ Page.new(page[:id], page).authenticate self.access_token
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -9,15 +9,26 @@ module FbGraph2
9
9
  end
10
10
  end
11
11
 
12
- def liked?(page_id, params = {})
13
- pages = self.edge :likes, params, edge_scope: page_id
12
+ def liked?(page, params = {})
13
+ pages = self.edge :likes, params, edge_scope: page
14
14
  pages.present?
15
15
  end
16
16
  end
17
17
 
18
18
  module LikeeContext
19
+ def assign(attributes)
20
+ super
21
+ if attributes.include?(:likes)
22
+ @_cached_likes = Collection.new attributes[:likes]
23
+ end
24
+ end
25
+
19
26
  def likes(params = {})
20
- users = self.edge :likes, params
27
+ users = if @_cached_likes.present? && params.blank?
28
+ @_cached_likes
29
+ else
30
+ self.edge :likes, params
31
+ end
21
32
  users.collect do |user|
22
33
  User.new(user[:id], user).authenticate self.access_token
23
34
  end
@@ -0,0 +1,14 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module Locations
4
+ def locations(params = {})
5
+ pages = self.edge :locations, params
6
+ pages.collect do |page|
7
+ Page.new(page[:id], page).authenticate self.access_token
8
+ end
9
+ end
10
+
11
+ # TODO: add, delete and update locations
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module Milestones
4
+ def milestones(params = {})
5
+ milestones = self.edge :milestones, params
6
+ milestones.collect do |milestone|
7
+ Milestone.new(milestone[:id], milestone).authenticate self.access_token
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module Offers
4
+ def offers(params = {})
5
+ offers = self.edge :offers, params
6
+ offers.collect do |offer|
7
+ Offer.new(offer[:id], offer).authenticate self.access_token
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,12 @@
1
+ module FbGraph2
2
+ class Edge
3
+ module PromotablePosts
4
+ def promotable_posts(params = {})
5
+ posts = self.edge :promotable_posts, params
6
+ posts.collect do |post|
7
+ Post.new(post[:id], post).authenticate self.access_token
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module FbGraph2
2
+ class Milestone < Node
3
+ register_attributes(
4
+ raw: [:title, :description],
5
+ time: [:created_time, :updated_time, :start_time, :end_time],
6
+ page: [:from]
7
+ )
8
+ end
9
+ end
@@ -4,6 +4,7 @@ module FbGraph2
4
4
 
5
5
  def self.inherited(klass)
6
6
  klass.include AttributeAssigner
7
+ FbGraph2.object_classes << klass
7
8
  end
8
9
 
9
10
  def initialize(id, attributes = {})
@@ -36,6 +37,12 @@ module FbGraph2
36
37
  )
37
38
  end
38
39
 
40
+ def edges
41
+ @edges ||= self.class.included_modules.select do |_module_|
42
+ _module_.name =~ /FbGraph2::Edge/
43
+ end.collect(&:instance_methods).sort
44
+ end
45
+
39
46
  def destroy(params = {}, options = {})
40
47
  delete params, options
41
48
  end
@@ -75,7 +82,7 @@ module FbGraph2
75
82
  File.join [
76
83
  File.join(FbGraph2.root_url, id.to_s),
77
84
  options[:edge],
78
- options[:edge_scope]
85
+ Util.as_identifier(options[:edge_scope])
79
86
  ].compact.collect(&:to_s)
80
87
  end
81
88
 
@@ -0,0 +1,10 @@
1
+ module FbGraph2
2
+ class Offer < Node
3
+ register_attributes(
4
+ raw: [:claim_limit, :coupon_type, :image_url, :published, :redemption_code, :redemption_link, :terms, :title, :message],
5
+ time: [:created_time, :expiration_time, :reminder_time],
6
+ timestamp: [:scheduled_publish_time],
7
+ page: [:from]
8
+ )
9
+ end
10
+ end
@@ -1,5 +1,23 @@
1
1
  module FbGraph2
2
2
  class Page < Node
3
+ include Edge::Admins
4
+ include Edge::Albums
5
+ include Edge::Blocked
6
+ include Edge::Events
7
+ include Edge::Feed
8
+ include Edge::GlobalBrandChildren
9
+ include Edge::Links
10
+ include Edge::Locations
11
+ include Edge::Milestones
12
+ include Edge::Offers
13
+ include Edge::Picture
14
+ include Edge::Photos
15
+ include Edge::Posts
16
+ include Edge::PromotablePosts
17
+ include Edge::Statuses
18
+ include Edge::Tagged
19
+ include Edge::Videos
20
+
3
21
  register_attributes(
4
22
  raw: [
5
23
  :about, :attire, :band_members, :booking_agent, :can_post, :category, :checkins, :company_overview,
@@ -1,5 +1,8 @@
1
1
  module FbGraph2
2
2
  class Photo < Node
3
+ include Edge::Comments
4
+ include Edge::Likes::LikeeContext
5
+
3
6
  register_attributes(
4
7
  raw: [
5
8
  :backdated_time_granularity, :height, :icon, :link, :name, :page_story_id, :picture, :position, :source, :width,
@@ -1,6 +1,8 @@
1
1
  module FbGraph2
2
2
  class Post < Node
3
+ include Edge::Comments
3
4
  include Edge::Likes::LikeeContext
5
+ include Edge::SharedPosts
4
6
 
5
7
  register_attributes(
6
8
  raw: [
@@ -36,7 +36,9 @@ module FbGraph2
36
36
  :middle_name, :name, :name_format, :political, :quotes, :relationship_status, :religion,
37
37
  :timezone, :third_party_id, :verified, :website,
38
38
  # NOTE: in family edge context
39
- :relationship
39
+ :relationship,
40
+ # NOTE: in page admin context
41
+ :perms, :role
40
42
  ],
41
43
  time: [:updated_time], # NOTE: undocumented attribute
42
44
  date: [:birthday],
@@ -0,0 +1,13 @@
1
+ module FbGraph2
2
+ module Util
3
+ module_function
4
+
5
+ def as_identifier(object)
6
+ if object.respond_to? :id
7
+ object.id
8
+ else
9
+ object
10
+ end
11
+ end
12
+ end
13
+ end
@@ -4,14 +4,16 @@ describe FbGraph2::Edge::Accounts do
4
4
  context 'included in User' do
5
5
  describe '#accounts' do
6
6
  let(:me) { FbGraph2::User.me('token') }
7
- it 'should return pages with page token' do
7
+ it 'should return an Array of FbGraph2::Page with page token' do
8
8
  accounts = mock_graph :get, 'me/accounts', 'user/accounts', access_token: 'token' do
9
9
  me.accounts
10
10
  end
11
- account = accounts.first
12
- account.should be_instance_of FbGraph2::Page
13
- account.name.should == 'Identity Conference #idcon'
14
- account.access_token.should == 'page_token'
11
+ accounts.should_not be_blank
12
+ accounts.each do |account|
13
+ account.should be_instance_of FbGraph2::Page
14
+ account.access_token.should == 'page_token'
15
+ end
16
+ accounts.first.name.should == 'Identity Conference #idcon'
15
17
  end
16
18
  end
17
19
  end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph2::Edge::Comments do
4
+ context 'included in Post' do
5
+ let(:post) { FbGraph2::Post.new('post_id').authenticate('token') }
6
+
7
+ describe '#comments' do
8
+ context 'when cached' do
9
+ let(:fetched) do
10
+ mock_graph :get, 'post_id', 'post/liked_and_commented', access_token: 'token' do
11
+ post.fetch
12
+ end
13
+ end
14
+
15
+ context 'without params' do
16
+ it 'should not call API' do
17
+ expect do
18
+ fetched.comments
19
+ end.not_to request_to "#{fetched.id}/comments"
20
+ end
21
+ end
22
+
23
+ context 'with params' do
24
+ it 'should call API' do
25
+ expect do
26
+ fetched.comments no_cache: true
27
+ end.to request_to "#{fetched.id}/comments"
28
+ end
29
+ end
30
+ end
31
+
32
+ context 'otherwise' do
33
+ it 'should return an Array of FbGraph2::Post' do
34
+ comments = mock_graph :get, 'post_id/comments', 'post/comments', access_token: 'token' do
35
+ post.comments
36
+ end
37
+ comments.should_not be_blank
38
+ comments.each do |comment|
39
+ comment.should be_instance_of FbGraph2::Comment
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ describe '#comment!' do
46
+ it 'should return FbGraph2::Post with posted params' do
47
+ comment = mock_graph :post, 'post_id/comments', 'success_with_id', access_token: 'token' do
48
+ post.comment! message: 'hello'
49
+ end
50
+ comment.should be_instance_of FbGraph2::Comment
51
+ comment.id.should == 'created_object_id'
52
+ comment.message.should == 'hello'
53
+ end
54
+ end
55
+ end
56
+ end
@@ -5,10 +5,18 @@ describe FbGraph2::Edge::Feed do
5
5
  let(:me) { FbGraph2::User.me('token') }
6
6
 
7
7
  describe '#feed' do
8
- it :TODO
8
+ it 'should return an Array of FbGraph2::Post' do
9
+ posts = mock_graph :get, 'me/feed', 'user/feed', access_token: 'token' do
10
+ me.feed
11
+ end
12
+ posts.should_not be_blank
13
+ posts.each do |post|
14
+ post.should be_instance_of FbGraph2::Post
15
+ end
16
+ end
9
17
  end
10
18
 
11
- describe 'feed!' do
19
+ describe '#feed!' do
12
20
  it 'should return FbGraph2::Post with posted params' do
13
21
  post = mock_graph :post, 'me/feed', 'success_with_id', access_token: 'token' do
14
22
  me.feed! message: 'hello'
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe FbGraph2::Edge::Likes do
4
+ context 'included in User' do
5
+ let(:me) { FbGraph2::User.me('token') }
6
+
7
+ describe '#likes' do
8
+ it 'should return an Array of FbGraph2::Page' do
9
+ likes = mock_graph :get, 'me/likes', 'user/likes', access_token: 'token' do
10
+ me.likes
11
+ end
12
+ likes.should_not be_blank
13
+ likes.each do |like|
14
+ like.should be_instance_of FbGraph2::Page
15
+ end
16
+ end
17
+ end
18
+
19
+ describe '#liked?' do
20
+ context 'liked' do
21
+ it do
22
+ mock_graph :get, 'me/likes/page_id', 'user/likes', access_token: 'token' do
23
+ me.liked? 'page_id'
24
+ end.should be_true
25
+ end
26
+ end
27
+
28
+ context 'otherwise' do
29
+ it do
30
+ mock_graph :get, 'me/likes/page_id', 'blank_collection', access_token: 'token' do
31
+ me.liked? 'page_id'
32
+ end.should be_false
33
+ end
34
+ end
35
+ end
36
+ end
37
+
38
+ context 'included in Post' do
39
+ let(:post) { FbGraph2::Post.new('post_id').authenticate('token') }
40
+
41
+ describe '#likes' do
42
+ context 'when cached' do
43
+ let(:fetched) do
44
+ mock_graph :get, 'post_id', 'post/liked_and_commented', access_token: 'token' do
45
+ post.fetch
46
+ end
47
+ end
48
+
49
+ context 'without params' do
50
+ it 'should not call API' do
51
+ expect do
52
+ fetched.likes
53
+ end.not_to request_to "#{fetched.id}/likes"
54
+ end
55
+ end
56
+
57
+ context 'with params' do
58
+ it 'should call API' do
59
+ expect do
60
+ fetched.likes no_cache: true
61
+ end.to request_to "#{fetched.id}/likes"
62
+ end
63
+ end
64
+ end
65
+
66
+ context 'otherwise' do
67
+ it 'should return an Array of FbGraph2::User' do
68
+ likes = mock_graph :get, 'post_id/likes', 'post/likes', access_token: 'token' do
69
+ post.likes
70
+ end
71
+ likes.should_not be_blank
72
+ likes.each do |like|
73
+ like.should be_instance_of FbGraph2::User
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ describe '#like!' do
80
+ it 'should return true' do
81
+ mock_graph :post, 'post_id/likes', 'true', access_token: 'token' do
82
+ post.like!
83
+ end.should be_true
84
+ end
85
+ end
86
+
87
+ describe '#unlike!' do
88
+ it 'should return true' do
89
+ mock_graph :delete, 'post_id/likes', 'true', access_token: 'token' do
90
+ post.unlike!
91
+ end.should be_true
92
+ end
93
+ end
94
+ end
95
+ end