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 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