bloom-ad_gear_client 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -20,6 +20,7 @@ begin
20
20
 
21
21
  gem.add_dependency "activeresource", "> 2.0"
22
22
  gem.add_dependency "francois-rest-client", "~> 1"
23
+ gem.add_dependency "nokogiri"
23
24
  end
24
25
 
25
26
  Jeweler::RubyforgeTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.5
1
+ 0.3.6
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{ad_gear_client}
5
- s.version = "0.3.5"
5
+ s.version = "0.3.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Fran\303\247ois Beausoleil"]
9
- s.date = %q{2009-09-23}
9
+ s.date = %q{2009-09-25}
10
10
  s.email = %q{francois@teksol.info}
11
11
  s.extra_rdoc_files = [
12
12
  "LICENSE",
@@ -90,16 +90,19 @@ Gem::Specification.new do |s|
90
90
  s.add_development_dependency(%q<mocha>, [">= 0.9.5"])
91
91
  s.add_runtime_dependency(%q<activeresource>, ["> 2.0"])
92
92
  s.add_runtime_dependency(%q<francois-rest-client>, ["~> 1"])
93
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
93
94
  else
94
95
  s.add_dependency(%q<lsegal-yard>, [">= 0.2.3"])
95
96
  s.add_dependency(%q<mocha>, [">= 0.9.5"])
96
97
  s.add_dependency(%q<activeresource>, ["> 2.0"])
97
98
  s.add_dependency(%q<francois-rest-client>, ["~> 1"])
99
+ s.add_dependency(%q<nokogiri>, [">= 0"])
98
100
  end
99
101
  else
100
102
  s.add_dependency(%q<lsegal-yard>, [">= 0.2.3"])
101
103
  s.add_dependency(%q<mocha>, [">= 0.9.5"])
102
104
  s.add_dependency(%q<activeresource>, ["> 2.0"])
103
105
  s.add_dependency(%q<francois-rest-client>, ["~> 1"])
106
+ s.add_dependency(%q<nokogiri>, [">= 0"])
104
107
  end
105
108
  end
@@ -33,6 +33,7 @@ module AdGear
33
33
  autoload :Base, "ad_gear/base"
34
34
 
35
35
  # AdGear models themselves
36
+ autoload :Advertiser, "ad_gear/advertiser"
36
37
  autoload :Site, "ad_gear/site"
37
38
  autoload :AdSpot, "ad_gear/ad_spot"
38
39
  autoload :AdSpotMembership, "ad_gear/ad_spot_membership"
@@ -89,6 +90,7 @@ module AdGear
89
90
  AdGear::Base.use_digest_authentication = config.use_digest_authentication
90
91
  end
91
92
 
93
+ # TODO: Programatically determine if we can use Nokogiri
92
94
  ActiveSupport::XmlMini.backend = "Nokogiri"
93
95
 
94
96
  # Can't require before now, because our own method is overwritten
@@ -1,7 +1,9 @@
1
1
  module AdGear
2
2
  class AdUnit < AdGear::Base
3
3
  has_many :ad_unit_files, :ad_unit_clicks, :ad_unit_interactions, :ad_unit_variables
4
- belongs_to :campaign, :format
4
+ has_many :placement_memberships
5
+ belongs_to :web_campaign, :as => :campaign
6
+ belongs_to :format
5
7
 
6
8
  def active?
7
9
  state == "active"
@@ -13,16 +13,17 @@ module AdGear
13
13
  # class AdGear::AdSpot < AdGear::Base
14
14
  # belongs_to :format
15
15
  # belongs_to :bookable, :polymorphic => true
16
+ # belongs_to :web_campaign, :as => :campaign
16
17
  # end
17
18
  #
18
19
  # include AdGear
19
- # AdSpot.new(:format => Format.find(1), :bookable => Publisher.find(2)).attributes
20
- # #=> {"format_id" => 1, "bookable_id" => 2, "bookable_type" => "Publisher"}
20
+ # AdSpot.new(:format => Format.find(1), :bookable => Publisher.find(2), :web_campaign => WebCampaign.find(3)).attributes
21
+ # #=> {"format_id" => 1, "bookable_id" => 2, "bookable_type" => "Publisher", "campaign_id" => 3}
21
22
  def self.belongs_to(*attributes)
22
23
  options = attributes.extract_options!
23
24
  attributes.each do |attribute|
24
25
  attribute_name = attribute.to_s
25
- belongs_to_associations[attribute_name] = options
26
+ belongs_to_associations[attribute_name] = options.reverse_merge(:as => attribute_name)
26
27
 
27
28
  if options[:polymorphic] then
28
29
  polymorphic_belongs_to_attribute_writer_for(attribute_name)
@@ -138,8 +139,8 @@ module AdGear
138
139
 
139
140
  def self.polymorphic_belongs_to_attribute_reader_for(attribute_name) #:nodoc:
140
141
  define_method(attribute_name) do
141
- klass = @attributes[belongs_to_attribute_name_for_class(attribute_name)]
142
- id = @attributes[belongs_to_attribute_name_for_id(attribute_name)]
142
+ klass = @attributes[self.class.belongs_to_attribute_name_for_class(attribute_name)]
143
+ id = @attributes[self.class.belongs_to_attribute_name_for_id(attribute_name)]
143
144
  id.blank? ? nil : AdGear.const_get(AdGear.const_get(klass)).find(id)
144
145
  end
145
146
  end
@@ -152,17 +153,17 @@ module AdGear
152
153
 
153
154
  def self.belongs_to_attribute_reader_for(attribute_name) #:nodoc:
154
155
  define_method(attribute_name) do
155
- id = @attributes[belongs_to_attribute_name_for_id(attribute_name)]
156
+ id = @attributes[self.class.belongs_to_attribute_name_for_id(attribute_name)]
156
157
  id.blank? ? nil : AdGear.const_get(attribute_name.classify).find(id)
157
158
  end
158
159
  end
159
160
 
160
161
  def self.belongs_to_attribute_name_for_class(association_name)
161
- "#{association_name}_type"
162
+ "%s_type" % belongs_to_associations[association_name][:as]
162
163
  end
163
164
 
164
165
  def self.belongs_to_attribute_name_for_id(association_name)
165
- "#{association_name}_id"
166
+ "%s_id" % belongs_to_associations[association_name][:as]
166
167
  end
167
168
  end
168
169
  end
@@ -8,7 +8,7 @@
8
8
  #
9
9
  class Array
10
10
  def to_xml_with_module_prefixing(options = {})
11
- raise "Not all elements respond to to_xml" unless all? { |e| e.respond_to? :to_xml }
11
+ raise "Not all elements respond to to_xml in #{self.inspect}" unless all? { |e| e.respond_to? :to_xml }
12
12
  root = all? { |e| e.is_a?(first.class) && first.class.to_s != "Hash" } ?
13
13
  ActiveSupport::Inflector.pluralize(ActiveSupport::Inflector.underscore(first.class.to_s.split("::").last)) : "records"
14
14
  to_xml_without_module_prefixing({ :root => root }.merge(options))
@@ -14,9 +14,14 @@ module AdGear
14
14
 
15
15
  def <<(object)
16
16
  root = if object.kind_of?(Hash) then
17
- # Instantiate an object from the Hash, which will obviously be a new object
18
- object = @klass.new(object)
19
- @new
17
+ if object.has_key?("id") || object.has_key?(:id) then
18
+ object = @klass.new(object)
19
+ @saved
20
+ else
21
+ # Instantiate an object from the Hash, which will obviously be a new object
22
+ object = @klass.new(object)
23
+ @new
24
+ end
20
25
  elsif object.respond_to?(:new_record?) && object.new_record?
21
26
  @new
22
27
  else
@@ -36,6 +41,22 @@ module AdGear
36
41
 
37
42
  alias_method :size, :length
38
43
 
44
+ def empty?
45
+ combined.empty?
46
+ end
47
+
48
+ def [](*args)
49
+ combined[*args]
50
+ end
51
+
52
+ def first
53
+ combined.first
54
+ end
55
+
56
+ def last
57
+ combined.last
58
+ end
59
+
39
60
  def to_xml(options={})
40
61
  xml = options[:builder] || Builder::XmlMarkup.new
41
62
  xml.__send__(@name) do
@@ -54,5 +75,10 @@ module AdGear
54
75
  end
55
76
  end
56
77
  end
78
+
79
+ private
80
+ def combined
81
+ @new + @saved
82
+ end
57
83
  end
58
84
  end
@@ -1,4 +1,5 @@
1
1
  module AdGear
2
2
  class WebCampaign < AdGear::Base
3
+ has_many :web_placements
3
4
  end
4
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bloom-ad_gear_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Fran\xC3\xA7ois Beausoleil"
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-09-23 00:00:00 -07:00
12
+ date: 2009-09-25 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -52,6 +52,16 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: "1"
54
54
  version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: nokogiri
57
+ type: :runtime
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
55
65
  description:
56
66
  email: francois@teksol.info
57
67
  executables: []