zuck 0.0.7 → 0.0.8

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/CHANGELOG.markdown CHANGED
@@ -1,3 +1,7 @@
1
+ 0.0.8
2
+ -----
3
+ - validate the countries before fetching a reach estimate
4
+
1
5
  0.0.7
2
6
  -----
3
7
  - don't downcase keywords when normalizing, it matters for keywords
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.7
1
+ 0.0.8
@@ -7,7 +7,29 @@ module Zuck
7
7
  class InvalidGenderError < InvalidSpecError; end
8
8
  class ParamsMissingError < InvalidSpecError; end
9
9
 
10
-
10
+ # FB ads api wants uppercase 2 digit iso country codes
11
+ ISO_COUNTRY_CODES = %w{ AX AF AL DZ AS AD AO AI AQ AG AR
12
+ AM AW AU AT AZ BS BH BD BB BY BE
13
+ BZ BJ BM BT BO BA BW BV BR IO BN
14
+ BG BF BI KH CM CA CV KY CF TD CL
15
+ CN CX CC CO KM CD CG CK CR CI HR
16
+ CU CY CZ DK DJ DM DO EC EG SV GQ
17
+ ER EE ET FK FO FJ FI FR GF PF TF
18
+ GA GM GE DE GH GI GR GL GD GP GU
19
+ GT GN GW GY HT HM HN HK HU IS IN
20
+ ID IR IQ IE IL IT JM JP JO KZ KE
21
+ KI KP KR KW KG LA LV LB LS LR LY
22
+ LI LT LU MO MK MG MW MY MV ML MT
23
+ MH MQ MR MU YT MX FM MD MC MN MS
24
+ MA MZ MM NA NR NP NL AN NC NZ NI
25
+ NE NG NU NF MP NO OM PK PW PS PA
26
+ PG PY PE PH PN PL PT PR QA RE RO
27
+ RU RW SH KN LC PM VC WS SM ST SA
28
+ SN CS SC SL SG SK SI SB SO ZA GS
29
+ ES LK SD SR SJ SZ SE CH SY TW TJ
30
+ TZ TH TL TG TK TO TT TN TR TM TC
31
+ TV UG UA AE GB US UM UY UZ VU VA
32
+ VE VN VG VI WF EH YE ZM ZW }
11
33
 
12
34
  #
13
35
  # Some helpers around https://developers.facebook.com/docs/reference/ads-api/targeting-specs/
@@ -56,7 +78,7 @@ module Zuck
56
78
  build_spec
57
79
  end
58
80
 
59
- # @return [Hash] The reach for the options given in {#initialize}, see
81
+ # @return [Hash] The reach for the options given in {#initialize}, see
60
82
  # https://developers.facebook.com/docs/reference/ads-api/reachestimate/
61
83
  def fetch_reach
62
84
  validate_spec
@@ -160,12 +182,20 @@ module Zuck
160
182
  @spec[:countries] = normalize_countries(@spec[:countries])
161
183
  @spec[:keywords] = normalize_array(@spec[:keywords])
162
184
  @spec[:broad_age] ||= false
163
- raise(InvalidCountryError, "Need to set :countries") unless @spec[:countries].present?
185
+ validate_countries
164
186
  unless @spec[:keywords].present? or @spec[:connections].present?
165
187
  raise(ParamsMissingError, "Need to set :keywords or :connections")
166
188
  end
167
189
  end
168
190
 
191
+ def validate_countries
192
+ raise(InvalidCountryError, "Need to set :countries") unless @spec[:countries].present?
193
+ raise(InvalidCountryError, "Must supply between 1 and 25 countries") if @spec[:countries].length > 25
194
+ invalid_countries = @spec[:countries] - Zuck::ISO_COUNTRY_CODES
195
+ return if invalid_countries.empty?
196
+ raise(InvalidCountryError, "Invalid countrie(s): #{invalid_countries}")
197
+ end
198
+
169
199
  def build_spec
170
200
  return unless @spec
171
201
  age = @spec.delete(:age_class)
@@ -105,6 +105,14 @@ describe Zuck::TargetingSpec do
105
105
  }.to raise_error("Gender can only be male or female")
106
106
  end
107
107
 
108
+ it "does not accept invalid countries" do
109
+ expect{
110
+ z = Zuck::TargetingSpec.new(graph, ad_account, countries: ['XX'], keywords: ['foo'], gender: 'female')
111
+ z.send(:validate_spec)
112
+ }.to raise_error('Invalid countrie(s): ["XX"]')
113
+ end
114
+
115
+
108
116
  it "does not accept targetings with neither :keywords nor :connections" do
109
117
  expect{
110
118
  ts = Zuck::TargetingSpec.new(graph, ad_account, countries: ['US'], gender: 'female')
data/zuck.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "zuck"
8
- s.version = "0.0.7"
8
+ s.version = "0.0.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jannis Hermanns"]
12
- s.date = "2013-06-19"
12
+ s.date = "2013-07-01"
13
13
  s.description = "This gem allows to easily access facebook's ads api in ruby. See https://developers.facebook.com/docs/reference/ads-api/"
14
14
  s.email = "jannis@gmail.com"
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -2,14 +2,14 @@
2
2
  name: zuck
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.7
5
+ version: 0.0.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jannis Hermanns
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-19 00:00:00.000000000 Z
12
+ date: 2013-07-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rvm
@@ -371,7 +371,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
371
371
  - !ruby/object:Gem::Version
372
372
  segments:
373
373
  - 0
374
- hash: -190800530639217496
374
+ hash: -4054154295877984613
375
375
  version: '0'
376
376
  none: false
377
377
  required_rubygems_version: !ruby/object:Gem::Requirement