fb_graph 2.4.0 → 2.4.1
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.
- data/Rakefile +9 -3
- data/VERSION +1 -1
- data/lib/fb_graph/ad_campaign.rb +19 -3
- data/lib/fb_graph/ad_campaign_stat.rb +2 -2
- data/lib/fb_graph/ad_group.rb +18 -0
- data/lib/fb_graph/ad_group_stat.rb +2 -2
- data/lib/fb_graph/connections/ad_campaigns.rb +10 -1
- data/lib/fb_graph/connections/ad_groups.rb +12 -3
- data/lib/fb_graph/exception.rb +4 -5
- data/spec/fb_graph/ad_campaign_spec.rb +36 -0
- data/spec/fb_graph/ad_group_spec.rb +39 -0
- data/spec/fb_graph/connections/ad_campaigns_spec.rb +36 -0
- data/spec/fb_graph/connections/ad_groups_spec.rb +26 -0
- data/spec/fb_graph/exception_spec.rb +5 -0
- data/spec/mock_json/ad_accounts/ad_campaigns/post_with_redownload.json +19 -0
- data/spec/mock_json/ad_accounts/ad_campaigns/post_with_valid_access_token.json +3 -0
- data/spec/mock_json/ad_accounts/ad_groups/post_with_redownload.json +51 -0
- data/spec/mock_json/ad_campaigns/test_ad_campaign_update_with_redownload.json +19 -0
- data/spec/mock_json/ad_groups/test_ad_group_update_with_redownload.json +51 -0
- data/spec/spec_helper.rb +0 -3
- metadata +28 -16
data/Rakefile
CHANGED
@@ -5,9 +5,15 @@ require 'rspec/core/rake_task'
|
|
5
5
|
RSpec::Core::RakeTask.new(:spec)
|
6
6
|
|
7
7
|
if RUBY_VERSION >= '1.9'
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
namespace :cover_me do
|
9
|
+
desc "Generates and opens code coverage report."
|
10
|
+
task :report do
|
11
|
+
require 'cover_me'
|
12
|
+
CoverMe.complete!
|
13
|
+
end
|
14
|
+
end
|
15
|
+
task :spec do
|
16
|
+
Rake::Task['cover_me:report'].invoke
|
11
17
|
end
|
12
18
|
else
|
13
19
|
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.4.
|
1
|
+
2.4.1
|
data/lib/fb_graph/ad_campaign.rb
CHANGED
@@ -2,16 +2,32 @@ module FbGraph
|
|
2
2
|
class AdCampaign < Node
|
3
3
|
include Connections::AdGroups
|
4
4
|
|
5
|
-
attr_accessor :campaign_id, :account_id, :name, :start_time, :end_time, :daily_budget, :campaign_status, :lifetime_budget
|
5
|
+
attr_accessor :campaign_id, :account_id, :name, :start_time, :end_time, :updated_time, :daily_budget, :daily_imps, :campaign_status, :lifetime_budget
|
6
6
|
|
7
7
|
def initialize(identifier, attributes = {})
|
8
8
|
super
|
9
|
+
set_attrs(attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
def update(options)
|
13
|
+
response = super(options)
|
14
|
+
|
15
|
+
if options[:redownload]
|
16
|
+
attributes = options.merge(response[:data][:campaigns][identifier]).with_indifferent_access
|
17
|
+
set_attrs(attributes)
|
18
|
+
end
|
19
|
+
|
20
|
+
response
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
9
24
|
|
10
|
-
|
25
|
+
def set_attrs(attributes)
|
26
|
+
%w(campaign_id account_id name daily_budget daily_imps campaign_status lifetime_budget).each do |field|
|
11
27
|
send("#{field}=", attributes[field.to_sym])
|
12
28
|
end
|
13
29
|
|
14
|
-
%w(start_time end_time).each do |field|
|
30
|
+
%w(start_time end_time updated_time).each do |field|
|
15
31
|
if val = attributes[field.to_sym]
|
16
32
|
# Handles integer timestamps and ISO8601 strings
|
17
33
|
time = Time.parse(val) rescue Time.at(val.to_i)
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class AdCampaignStat < Node
|
3
3
|
attr_accessor :start_time, :end_time, :campaign_id, :impressions, :clicks, :spent, :social_impressions, :social_clicks, :social_spent,
|
4
|
-
:unique_impressions, :social_unique_impressions, :unique_clicks, :social_unique_clicks, :connections
|
4
|
+
:actions, :unique_impressions, :social_unique_impressions, :unique_clicks, :social_unique_clicks, :connections
|
5
5
|
|
6
6
|
def initialize(identifier, attributes = {})
|
7
7
|
super
|
8
8
|
|
9
|
-
%w(campaign_id impressions clicks spent social_impressions social_clicks social_spent unique_impressions social_unique_impressions unique_clicks social_unique_clicks connections).each do |field|
|
9
|
+
%w(campaign_id impressions clicks spent social_impressions social_clicks social_spent actions unique_impressions social_unique_impressions unique_clicks social_unique_clicks connections).each do |field|
|
10
10
|
send("#{field}=", attributes[field.to_sym])
|
11
11
|
end
|
12
12
|
|
data/lib/fb_graph/ad_group.rb
CHANGED
@@ -5,7 +5,25 @@ module FbGraph
|
|
5
5
|
|
6
6
|
def initialize(identifier, attributes = {})
|
7
7
|
super
|
8
|
+
set_attrs(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
# We override update to handle the "redownload" parameter
|
12
|
+
# If redownload is specified, the FbGraph::AdGroup object will be updated with the data returned from Facebook.
|
13
|
+
def update(options)
|
14
|
+
response = super(options)
|
15
|
+
|
16
|
+
if options[:redownload]
|
17
|
+
attributes = options.merge(response[:data][:adgroups][identifier]).with_indifferent_access
|
18
|
+
set_attrs(attributes)
|
19
|
+
end
|
20
|
+
|
21
|
+
response
|
22
|
+
end
|
23
|
+
|
24
|
+
protected
|
8
25
|
|
26
|
+
def set_attrs(attributes)
|
9
27
|
%w(ad_id campaign_id name adgroup_status bid_type max_bid targeting creative creative_ids adgroup_id bid_info disapprove_reason_descriptions).each do |field|
|
10
28
|
send("#{field}=", attributes[field.to_sym])
|
11
29
|
end
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class AdGroupStat < Node
|
3
3
|
attr_accessor :start_time, :end_time, :adgroup_id, :impressions, :clicks, :spent, :social_impressions, :social_clicks, :social_spent,
|
4
|
-
:unique_impressions, :social_unique_impressions, :unique_clicks, :social_unique_clicks, :connections
|
4
|
+
:actions, :unique_impressions, :social_unique_impressions, :unique_clicks, :social_unique_clicks, :connections
|
5
5
|
|
6
6
|
def initialize(identifier, attributes = {})
|
7
7
|
super
|
8
8
|
|
9
|
-
%w(adgroup_id impressions clicks spent social_impressions social_clicks social_spent unique_impressions social_unique_impressions unique_clicks social_unique_clicks connections).each do |field|
|
9
|
+
%w(adgroup_id impressions clicks spent social_impressions social_clicks social_spent actions unique_impressions social_unique_impressions unique_clicks social_unique_clicks connections).each do |field|
|
10
10
|
send("#{field}=", attributes[field.to_sym])
|
11
11
|
end
|
12
12
|
|
@@ -12,9 +12,18 @@ module FbGraph
|
|
12
12
|
|
13
13
|
def ad_campaign!(options = {})
|
14
14
|
ad_campaign = post options.merge(:connection => :adcampaigns)
|
15
|
-
|
15
|
+
|
16
|
+
ad_campaign_id = ad_campaign[:id]
|
17
|
+
|
18
|
+
merged_attrs = options.merge(
|
16
19
|
:access_token => options[:access_token] || self.access_token
|
17
20
|
)
|
21
|
+
|
22
|
+
if options[:redownload]
|
23
|
+
merged_attrs = merged_attrs.merge(ad_campaign[:data][:campaigns][ad_campaign_id]).with_indifferent_access
|
24
|
+
end
|
25
|
+
|
26
|
+
AdCampaign.new ad_campaign_id, merged_attrs
|
18
27
|
end
|
19
28
|
end
|
20
29
|
end
|
@@ -14,11 +14,20 @@ module FbGraph
|
|
14
14
|
# cannot be created via the AdCampaign connection
|
15
15
|
def ad_group!(options = {})
|
16
16
|
ad_group = post options.merge(:connection => :adgroups)
|
17
|
-
|
17
|
+
|
18
|
+
adgroup_id = ad_group[:id]
|
19
|
+
|
20
|
+
merged_attrs = options.merge(
|
18
21
|
:access_token => options[:access_token] || self.access_token,
|
19
|
-
:ad_id =>
|
20
|
-
:adgroup_id =>
|
22
|
+
:ad_id => adgroup_id.to_i,
|
23
|
+
:adgroup_id => adgroup_id.to_i
|
21
24
|
)
|
25
|
+
|
26
|
+
if options[:redownload]
|
27
|
+
merged_attrs = merged_attrs.merge(ad_group[:data][:adgroups][adgroup_id]).with_indifferent_access
|
28
|
+
end
|
29
|
+
|
30
|
+
AdGroup.new ad_group[:id], merged_attrs
|
22
31
|
end
|
23
32
|
end
|
24
33
|
end
|
data/lib/fb_graph/exception.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module FbGraph
|
2
2
|
class Exception < StandardError
|
3
|
-
attr_accessor :code, :type
|
3
|
+
attr_accessor :code, :type
|
4
4
|
|
5
5
|
ERROR_HEADER_MATCHERS = {
|
6
6
|
/invalid_token/ => "InvalidToken",
|
@@ -57,13 +57,12 @@ module FbGraph
|
|
57
57
|
|
58
58
|
def initialize(code, message, body = '')
|
59
59
|
@code = code
|
60
|
-
if body.
|
61
|
-
@message = message
|
62
|
-
else
|
60
|
+
if body.present?
|
63
61
|
response = JSON.parse(body).with_indifferent_access
|
64
|
-
|
62
|
+
message = response[:error][:message]
|
65
63
|
@type = response[:error][:type]
|
66
64
|
end
|
65
|
+
super message
|
67
66
|
end
|
68
67
|
end
|
69
68
|
|
@@ -59,3 +59,39 @@ describe FbGraph::AdCampaign, '.fetch' do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
62
|
+
|
63
|
+
describe FbGraph::AdCampaign, '.update' do
|
64
|
+
context "without the redownload parameter" do
|
65
|
+
it "should return true from facebook" do
|
66
|
+
mock_graph :post, '6003590469668', 'true', :name => "New Name" do
|
67
|
+
attributes = {
|
68
|
+
:id => '6003590469668',
|
69
|
+
:name => "Original Name"
|
70
|
+
}
|
71
|
+
ad_campaign = FbGraph::AdCampaign.new(attributes.delete(:id), attributes)
|
72
|
+
ad_campaign.update(:name => "New Name").should be_true
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
context "with the redownload parameter" do
|
79
|
+
it "should update the AdCampaign with the new data from facebook" do
|
80
|
+
mock_graph :post, "6004167532222", 'ad_campaigns/test_ad_campaign_update_with_redownload', :name => "New Name", :redownload => true do
|
81
|
+
attributes = {
|
82
|
+
:id => "6004167532222",
|
83
|
+
:campaign_status => 1,
|
84
|
+
:name => "New Name"
|
85
|
+
}
|
86
|
+
|
87
|
+
ad_campaign = FbGraph::AdCampaign.new(attributes.delete(:id), attributes)
|
88
|
+
ad_campaign.campaign_status.should == 1
|
89
|
+
|
90
|
+
ad_campaign.update(:name => "New Name", :redownload => true)
|
91
|
+
ad_campaign.name.should == "New Name"
|
92
|
+
|
93
|
+
ad_campaign.campaign_status.should == 2
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -51,3 +51,42 @@ describe FbGraph::AdGroup, '.fetch' do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
54
|
+
|
55
|
+
describe FbGraph::AdGroup, '.update' do
|
56
|
+
context "without the redownload parameter" do
|
57
|
+
it "should return true from facebook" do
|
58
|
+
mock_graph :post, '6003590469668', 'true', :max_bid => 500 do
|
59
|
+
attributes = {
|
60
|
+
:id => '6003590469668',
|
61
|
+
:max_bid => 1000
|
62
|
+
}
|
63
|
+
ad_group = FbGraph::AdGroup.new(attributes.delete(:id), attributes)
|
64
|
+
ad_group.update(:max_bid => 500).should be_true
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "with the redownload parameter" do
|
71
|
+
it "should update the AdGroup with the new data from facebook" do
|
72
|
+
mock_graph :post, "6004165047777", 'ad_groups/test_ad_group_update_with_redownload', :max_bid => 500, :redownload => true do
|
73
|
+
attributes = {
|
74
|
+
:id => "6004165047777",
|
75
|
+
:adgroup_id => "6004165047777",
|
76
|
+
:adgroup_status => 1,
|
77
|
+
:max_bid => 1000
|
78
|
+
}
|
79
|
+
|
80
|
+
ad_group = FbGraph::AdGroup.new(attributes.delete(:id), attributes)
|
81
|
+
ad_group.adgroup_status.should == 1
|
82
|
+
|
83
|
+
ad_group.update(:max_bid => 500, :redownload => true)
|
84
|
+
|
85
|
+
ad_group.max_bid.should == "500"
|
86
|
+
|
87
|
+
# Our test assumes that adgroup_status has changed on Facebook's side and is passed back different
|
88
|
+
ad_group.adgroup_status.should == 4
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
describe FbGraph::Connections::AdCampaigns, '#ad_campaign!' do
|
3
|
+
context 'when included by FbGraph::AdAccount' do
|
4
|
+
it 'should return generated ad_account' do
|
5
|
+
mock_graph :post, 'act_22334455/adcampaigns', 'ad_accounts/ad_campaigns/post_with_valid_access_token' do
|
6
|
+
ad_campaign = FbGraph::AdAccount.new('act_22334455', :access_token => 'valid').ad_campaign!(
|
7
|
+
:name => "Campaign 1",
|
8
|
+
:daily_budget => 500
|
9
|
+
)
|
10
|
+
|
11
|
+
ad_campaign.identifier.should == "6004167532222"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'should handle the redownload parameter' do
|
16
|
+
mock_graph :post, 'act_22334455/adcampaigns', 'ad_accounts/ad_campaigns/post_with_redownload' do
|
17
|
+
ad_campaign = FbGraph::AdAccount.new('act_22334455', :access_token => 'valid').ad_campaign!(
|
18
|
+
:name => "Campaign 1",
|
19
|
+
:daily_budget => 500,
|
20
|
+
:redownload => true
|
21
|
+
)
|
22
|
+
|
23
|
+
ad_campaign.identifier.should == "6004167532222"
|
24
|
+
ad_campaign.account_id.should == 22334455
|
25
|
+
ad_campaign.name.should == "Campaign 1"
|
26
|
+
ad_campaign.daily_budget.should == 500
|
27
|
+
ad_campaign.campaign_status.should == 2
|
28
|
+
ad_campaign.daily_imps.should == 0
|
29
|
+
ad_campaign.start_time.should == Time.at(1330282800)
|
30
|
+
ad_campaign.end_time.should == Time.at(1330588800)
|
31
|
+
ad_campaign.updated_time.should == Time.at(1329850926)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -62,6 +62,32 @@ describe FbGraph::Connections::AdGroups, '#ad_group!' do
|
|
62
62
|
ad_group.end_time.should == Time.parse("2011-09-20T16:00:00-04:00")
|
63
63
|
end
|
64
64
|
end
|
65
|
+
|
66
|
+
it 'should handle the redownload parameter' do
|
67
|
+
mock_graph :post, 'act_22334455/adgroups', 'ad_accounts/ad_groups/post_with_redownload' do
|
68
|
+
ad_group = FbGraph::AdAccount.new('act_22334455', :access_token => 'valid').ad_group!(
|
69
|
+
:name => "Test Ad 2",
|
70
|
+
:campaign_id => 11223344,
|
71
|
+
:bid_type => 1,
|
72
|
+
:max_bid => 100,
|
73
|
+
:start_time => Time.parse("2012-02-20T00:00:00Z"),
|
74
|
+
:end_time => Time.parse("2012-02-23T00:00:00Z"),
|
75
|
+
:redownload => true
|
76
|
+
)
|
77
|
+
|
78
|
+
ad_group.identifier.should == "22334455"
|
79
|
+
ad_group.campaign_id.should == 11223344
|
80
|
+
ad_group.name.should == "Test Ad 2"
|
81
|
+
ad_group.bid_type.should == 1
|
82
|
+
# Not sure why...but Facebook returns max_bid as a String
|
83
|
+
ad_group.max_bid.should == "100"
|
84
|
+
ad_group.start_time.should == Time.parse("2012-02-20T00:00:00Z")
|
85
|
+
ad_group.end_time.should == Time.parse("2012-02-23T00:00:00Z")
|
86
|
+
|
87
|
+
# ad_status is not sent, only received
|
88
|
+
ad_group.adgroup_status.should == 4
|
89
|
+
end
|
90
|
+
end
|
65
91
|
end
|
66
92
|
end
|
67
93
|
|
@@ -1,6 +1,11 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe FbGraph::Exception do
|
4
|
+
it 'should properly set its message for inspect' do
|
5
|
+
err = FbGraph::Exception.new(400, 'This is the error message')
|
6
|
+
err.inspect.should == '#<FbGraph::Exception: This is the error message>'
|
7
|
+
end
|
8
|
+
|
4
9
|
context 'when response body is given' do
|
5
10
|
it 'should setup message and type from error' do
|
6
11
|
err = FbGraph::Exception.new(400, 'This is the original message', {
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{
|
2
|
+
"id": "6004167532222",
|
3
|
+
"data": {
|
4
|
+
"campaigns": {
|
5
|
+
"6004167532222": {
|
6
|
+
"account_id": 22334455,
|
7
|
+
"campaign_id": 6004167532222,
|
8
|
+
"name": "Campaign 1",
|
9
|
+
"daily_budget": 500,
|
10
|
+
"campaign_status": 2,
|
11
|
+
"daily_imps": 0,
|
12
|
+
"id": "6004167532222",
|
13
|
+
"start_time": 1330282800,
|
14
|
+
"end_time": 1330588800,
|
15
|
+
"updated_time": 1329850926
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
{
|
2
|
+
"data": {
|
3
|
+
"adgroups": {
|
4
|
+
"22334455": {
|
5
|
+
"name": "Test Ad 2",
|
6
|
+
"adgroup_id": 22334455,
|
7
|
+
"ad_id": 22334455,
|
8
|
+
"creative_ids": [
|
9
|
+
22334455
|
10
|
+
],
|
11
|
+
"end_time": 1329955200,
|
12
|
+
"campaign_id": 11223344,
|
13
|
+
"account_id": 99887766,
|
14
|
+
"ad_status": 4,
|
15
|
+
"id": "22334455",
|
16
|
+
"max_bid": "100",
|
17
|
+
"bid_info": {
|
18
|
+
"1": "100"
|
19
|
+
},
|
20
|
+
"bid_type": 1,
|
21
|
+
"updated_time": 1329766354,
|
22
|
+
"adgroup_status": 4,
|
23
|
+
"targeting": {
|
24
|
+
"countries": [
|
25
|
+
"US"
|
26
|
+
]
|
27
|
+
},
|
28
|
+
"start_time": 1329696000
|
29
|
+
}
|
30
|
+
},
|
31
|
+
"creatives": {
|
32
|
+
"22334455": {
|
33
|
+
"alt_view_tags": [],
|
34
|
+
"name": "asdfasdf",
|
35
|
+
"creative_id": "22334455",
|
36
|
+
"title": "asdfasdf",
|
37
|
+
"body": "fsadfasf",
|
38
|
+
"image_url": "https://fbcdn-photos-a.akamaihd.net/photos-ak-snc1/v41818/flyers/20/8/13297657711344684017_1_bd2a5cd2.jpg",
|
39
|
+
"view_tag": "",
|
40
|
+
"count_current_adgroups": 2,
|
41
|
+
"id": "22334455",
|
42
|
+
"type": 1,
|
43
|
+
"preview_url": "http://www.facebook.com/ads/api/creative_preview.php?cid=22334455",
|
44
|
+
"run_status": 1,
|
45
|
+
"image_hash": "6dda3e0bd951ff99cd474acf58a91cf4",
|
46
|
+
"link_url": "http://example.org"
|
47
|
+
}
|
48
|
+
}
|
49
|
+
},
|
50
|
+
"id": "22334455"
|
51
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
{
|
2
|
+
"result": true,
|
3
|
+
"data": {
|
4
|
+
"campaigns": {
|
5
|
+
"6004167532222": {
|
6
|
+
"account_id": 32128888,
|
7
|
+
"campaign_id": 6004167532222,
|
8
|
+
"name": "New Name",
|
9
|
+
"daily_budget": 500,
|
10
|
+
"campaign_status": 2,
|
11
|
+
"daily_imps": 0,
|
12
|
+
"id": "6004167532222",
|
13
|
+
"start_time": 1330282800,
|
14
|
+
"end_time": 1330588800,
|
15
|
+
"updated_time": 1329853694
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
@@ -0,0 +1,51 @@
|
|
1
|
+
{
|
2
|
+
"result": true,
|
3
|
+
"data": {
|
4
|
+
"adgroups": {
|
5
|
+
"6004165047777": {
|
6
|
+
"adgroup_id": 6004165047777,
|
7
|
+
"ad_id": 6004165047777,
|
8
|
+
"campaign_id": 6004023471111,
|
9
|
+
"name": "Test Ad 1",
|
10
|
+
"ad_status": 4,
|
11
|
+
"adgroup_status": 4,
|
12
|
+
"bid_type": 1,
|
13
|
+
"max_bid": "500",
|
14
|
+
"bid_info": {
|
15
|
+
"1": "500"
|
16
|
+
},
|
17
|
+
"account_id": 32128888,
|
18
|
+
"id": "6004165047777",
|
19
|
+
"creative_ids": [
|
20
|
+
6004165045555
|
21
|
+
],
|
22
|
+
"targeting": {
|
23
|
+
"countries": [
|
24
|
+
"US"
|
25
|
+
]
|
26
|
+
},
|
27
|
+
"start_time": null,
|
28
|
+
"end_time": null,
|
29
|
+
"updated_time": 1329775002
|
30
|
+
}
|
31
|
+
},
|
32
|
+
"creatives": {
|
33
|
+
"6004165045555": {
|
34
|
+
"view_tag": "",
|
35
|
+
"alt_view_tags": [],
|
36
|
+
"creative_id": "6004165045555",
|
37
|
+
"type": 1,
|
38
|
+
"title": "asdfasdf",
|
39
|
+
"body": "fsadfasf",
|
40
|
+
"image_hash": "6dda3e0bd951ff99cd474acf58a91cf4",
|
41
|
+
"link_url": "http://example.org",
|
42
|
+
"name": "asdfasdf",
|
43
|
+
"run_status": 1,
|
44
|
+
"preview_url": "http://www.facebook.com/ads/api/creative_preview.php?cid=6004165045555",
|
45
|
+
"count_current_adgroups": 2,
|
46
|
+
"id": "6004165045555",
|
47
|
+
"image_url": "https://fbcdn-photos-a.akamaihd.net/photos-ak-snc1/v41818/flyers/20/8/13297657711344684017_1_bd2a5cd2.jpg"
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fb_graph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.4.
|
4
|
+
version: 2.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
12
|
+
date: 2012-02-22 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httpclient
|
16
|
-
requirement: &
|
16
|
+
requirement: &70212658806840 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.2.0.2
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70212658806840
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack-oauth2
|
27
|
-
requirement: &
|
27
|
+
requirement: &70212658805880 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 0.14.0
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70212658805880
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rake
|
38
|
-
requirement: &
|
38
|
+
requirement: &70212658804580 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0.8'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70212658804580
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: cover_me
|
49
|
-
requirement: &
|
49
|
+
requirement: &70212658799880 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: 1.2.0
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70212658799880
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: rspec
|
60
|
-
requirement: &
|
60
|
+
requirement: &70212658798420 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '2'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70212658798420
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: webmock
|
71
|
-
requirement: &
|
71
|
+
requirement: &70212658795800 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.6.2
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70212658795800
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: actionpack
|
82
|
-
requirement: &
|
82
|
+
requirement: &70212658793320 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,7 +87,7 @@ dependencies:
|
|
87
87
|
version: 3.0.6
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70212658793320
|
91
91
|
description: A full-stack Facebook Graph API wrapper in Ruby.
|
92
92
|
email: nov@matake.jp
|
93
93
|
executables: []
|
@@ -295,6 +295,7 @@ files:
|
|
295
295
|
- spec/fb_graph/connections/activities_spec.rb
|
296
296
|
- spec/fb_graph/connections/ad_accounts_spec.rb
|
297
297
|
- spec/fb_graph/connections/ad_campaign_stat_spec.rb
|
298
|
+
- spec/fb_graph/connections/ad_campaigns_spec.rb
|
298
299
|
- spec/fb_graph/connections/ad_connection_objects_spec.rb
|
299
300
|
- spec/fb_graph/connections/ad_group_stat_spec.rb
|
300
301
|
- spec/fb_graph/connections/ad_groups_spec.rb
|
@@ -417,8 +418,11 @@ files:
|
|
417
418
|
- spec/fb_graph_spec.rb
|
418
419
|
- spec/helpers/webmock_helper.rb
|
419
420
|
- spec/mock_json/ad_accounts/ad_campaign_stats/test_ad_campaign_stats.json
|
421
|
+
- spec/mock_json/ad_accounts/ad_campaigns/post_with_redownload.json
|
422
|
+
- spec/mock_json/ad_accounts/ad_campaigns/post_with_valid_access_token.json
|
420
423
|
- spec/mock_json/ad_accounts/ad_connection_objects/test_connection_objects.json
|
421
424
|
- spec/mock_json/ad_accounts/ad_group_stats/test_ad_group_stats.json
|
425
|
+
- spec/mock_json/ad_accounts/ad_groups/post_with_redownload.json
|
422
426
|
- spec/mock_json/ad_accounts/ad_groups/post_with_valid_access_token.json
|
423
427
|
- spec/mock_json/ad_accounts/ad_previews/test_ad_previews.json
|
424
428
|
- spec/mock_json/ad_accounts/broad_targeting_categories/test_bct.json
|
@@ -426,7 +430,9 @@ files:
|
|
426
430
|
- spec/mock_json/ad_accounts/test_ad_account.json
|
427
431
|
- spec/mock_json/ad_campaigns/ad_groups/22334455_ad_groups.json
|
428
432
|
- spec/mock_json/ad_campaigns/test_ad_campaign.json
|
433
|
+
- spec/mock_json/ad_campaigns/test_ad_campaign_update_with_redownload.json
|
429
434
|
- spec/mock_json/ad_groups/test_ad_group.json
|
435
|
+
- spec/mock_json/ad_groups/test_ad_group_update_with_redownload.json
|
430
436
|
- spec/mock_json/ad_keyword_suggestions/buffy_suggestions.json
|
431
437
|
- spec/mock_json/ad_keyword_valids/tige_search.json
|
432
438
|
- spec/mock_json/ad_keywords/buffy_search.json
|
@@ -652,6 +658,7 @@ test_files:
|
|
652
658
|
- spec/fb_graph/connections/activities_spec.rb
|
653
659
|
- spec/fb_graph/connections/ad_accounts_spec.rb
|
654
660
|
- spec/fb_graph/connections/ad_campaign_stat_spec.rb
|
661
|
+
- spec/fb_graph/connections/ad_campaigns_spec.rb
|
655
662
|
- spec/fb_graph/connections/ad_connection_objects_spec.rb
|
656
663
|
- spec/fb_graph/connections/ad_group_stat_spec.rb
|
657
664
|
- spec/fb_graph/connections/ad_groups_spec.rb
|
@@ -774,8 +781,11 @@ test_files:
|
|
774
781
|
- spec/fb_graph_spec.rb
|
775
782
|
- spec/helpers/webmock_helper.rb
|
776
783
|
- spec/mock_json/ad_accounts/ad_campaign_stats/test_ad_campaign_stats.json
|
784
|
+
- spec/mock_json/ad_accounts/ad_campaigns/post_with_redownload.json
|
785
|
+
- spec/mock_json/ad_accounts/ad_campaigns/post_with_valid_access_token.json
|
777
786
|
- spec/mock_json/ad_accounts/ad_connection_objects/test_connection_objects.json
|
778
787
|
- spec/mock_json/ad_accounts/ad_group_stats/test_ad_group_stats.json
|
788
|
+
- spec/mock_json/ad_accounts/ad_groups/post_with_redownload.json
|
779
789
|
- spec/mock_json/ad_accounts/ad_groups/post_with_valid_access_token.json
|
780
790
|
- spec/mock_json/ad_accounts/ad_previews/test_ad_previews.json
|
781
791
|
- spec/mock_json/ad_accounts/broad_targeting_categories/test_bct.json
|
@@ -783,7 +793,9 @@ test_files:
|
|
783
793
|
- spec/mock_json/ad_accounts/test_ad_account.json
|
784
794
|
- spec/mock_json/ad_campaigns/ad_groups/22334455_ad_groups.json
|
785
795
|
- spec/mock_json/ad_campaigns/test_ad_campaign.json
|
796
|
+
- spec/mock_json/ad_campaigns/test_ad_campaign_update_with_redownload.json
|
786
797
|
- spec/mock_json/ad_groups/test_ad_group.json
|
798
|
+
- spec/mock_json/ad_groups/test_ad_group_update_with_redownload.json
|
787
799
|
- spec/mock_json/ad_keyword_suggestions/buffy_suggestions.json
|
788
800
|
- spec/mock_json/ad_keyword_valids/tige_search.json
|
789
801
|
- spec/mock_json/ad_keywords/buffy_search.json
|