fb_graph 2.4.0 → 2.4.1

Sign up to get free protection for your applications and to get access to all the features.
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
- require 'cover_me'
9
- CoverMe.config do |c|
10
- c.file_pattern = /(#{CoverMe.config.project.root}\/lib\/.+\.rb)/i
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.0
1
+ 2.4.1
@@ -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
- %w(campaign_id account_id name daily_budget campaign_status lifetime_budget).each do |field|
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
 
@@ -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
- AdCampaign.new ad_campaign[:id], options.merge(ad_campaign).merge(
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
- AdGroup.new ad_group[:id], options.merge(ad_group).merge(
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 => ad_group[:id].to_i,
20
- :adgroup_id => ad_group[:id].to_i
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
@@ -1,6 +1,6 @@
1
1
  module FbGraph
2
2
  class Exception < StandardError
3
- attr_accessor :code, :type, :message
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.blank?
61
- @message = message
62
- else
60
+ if body.present?
63
61
  response = JSON.parse(body).with_indifferent_access
64
- @message = response[:error][:message]
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,3 @@
1
+ {
2
+ "id": "6004167532222"
3
+ }
@@ -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
@@ -1,8 +1,5 @@
1
1
  if RUBY_VERSION >= '1.9'
2
2
  require 'cover_me'
3
- at_exit do
4
- CoverMe.complete!
5
- end
6
3
  end
7
4
 
8
5
  require 'fb_graph'
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.0
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-06 00:00:00.000000000Z
12
+ date: 2012-02-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: httpclient
16
- requirement: &70234285239480 !ruby/object:Gem::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: *70234285239480
24
+ version_requirements: *70212658806840
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rack-oauth2
27
- requirement: &70234285238440 !ruby/object:Gem::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: *70234285238440
35
+ version_requirements: *70212658805880
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70234285237580 !ruby/object:Gem::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: *70234285237580
46
+ version_requirements: *70212658804580
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: cover_me
49
- requirement: &70234285236900 !ruby/object:Gem::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: *70234285236900
57
+ version_requirements: *70212658799880
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70234285235960 !ruby/object:Gem::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: *70234285235960
68
+ version_requirements: *70212658798420
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: webmock
71
- requirement: &70234285235360 !ruby/object:Gem::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: *70234285235360
79
+ version_requirements: *70212658795800
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: actionpack
82
- requirement: &70234285234820 !ruby/object:Gem::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: *70234285234820
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