governor_blogger 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -9,7 +9,7 @@ source "http://rubygems.org"
9
9
  gem 'gdata'
10
10
  gem 'nokogiri'
11
11
  gem 'governor'
12
- gem 'governor_background'
12
+ gem 'governor_background', '>= 0.3.0'
13
13
 
14
14
  group :development, :test do
15
15
  gem 'jeweler', '~> 1.5.2'
@@ -24,5 +24,7 @@ group :development, :test do
24
24
  gem 'devise'
25
25
  gem 'governor_blogger', :path => './'
26
26
  gem 'delayed_job'
27
+ gem 'resque'
28
+ gem 'resque-status', :require => 'resque/status'
27
29
  gem 'dynamic_form'
28
30
  end
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: ./
3
3
  specs:
4
- governor_blogger (0.1.0)
4
+ governor_blogger (0.1.1)
5
5
  gdata
6
6
  governor
7
- governor_background
7
+ governor_background (>= 0.3.0)
8
8
  nokogiri
9
9
 
10
10
  GEM
@@ -60,16 +60,18 @@ GEM
60
60
  rails (>= 3.0.0)
61
61
  gdata (1.1.2)
62
62
  git (1.2.5)
63
- governor (0.3.1)
64
- rails (~> 3.0.5)
65
- governor_background (0.1.0)
63
+ governor (0.5.4)
64
+ rails (>= 3.0.5)
65
+ governor_background (0.3.0)
66
66
  governor
67
67
  i18n (0.5.0)
68
68
  jeweler (1.5.2)
69
69
  bundler (~> 1.0.0)
70
70
  git (>= 1.2.5)
71
71
  rake
72
- mail (2.2.17)
72
+ json (1.4.6)
73
+ macaddr (1.0.0)
74
+ mail (2.2.19)
73
75
  activesupport (>= 2.3.6)
74
76
  i18n (>= 0.4.0)
75
77
  mime-types (~> 1.16)
@@ -98,11 +100,26 @@ GEM
98
100
  rake (>= 0.8.7)
99
101
  thor (~> 0.14.4)
100
102
  rake (0.8.7)
103
+ redis (2.2.0)
104
+ redis-namespace (0.10.0)
105
+ redis (< 3.0.0)
106
+ redisk (0.2.2)
107
+ redis (>= 0.1.1)
108
+ redis-namespace (>= 0.1.0)
109
+ resque (1.15.0)
110
+ json (~> 1.4.6)
111
+ redis-namespace (>= 0.10.0)
112
+ sinatra (>= 0.9.2)
113
+ vegas (~> 0.1.2)
114
+ resque-status (0.2.3)
115
+ redisk (>= 0.2.1)
116
+ resque (>= 1.3.1)
117
+ uuid (>= 2.0.2)
101
118
  rspec (2.5.0)
102
119
  rspec-core (~> 2.5.0)
103
120
  rspec-expectations (~> 2.5.0)
104
121
  rspec-mocks (~> 2.5.0)
105
- rspec-core (2.5.1)
122
+ rspec-core (2.5.2)
106
123
  rspec-expectations (2.5.0)
107
124
  diff-lcs (~> 1.1.2)
108
125
  rspec-mocks (2.5.0)
@@ -111,11 +128,19 @@ GEM
111
128
  activesupport (~> 3.0)
112
129
  railties (~> 3.0)
113
130
  rspec (~> 2.5.0)
131
+ sinatra (1.2.3)
132
+ rack (~> 1.1)
133
+ tilt (>= 1.2.2, < 2.0)
114
134
  sqlite3 (1.3.3)
115
135
  thor (0.14.6)
136
+ tilt (1.3)
116
137
  treetop (1.4.9)
117
138
  polyglot (>= 0.3.1)
118
- tzinfo (0.3.26)
139
+ tzinfo (0.3.27)
140
+ uuid (2.3.2)
141
+ macaddr (~> 1.0)
142
+ vegas (0.1.8)
143
+ rack (>= 1.0.0)
119
144
  warden (1.0.3)
120
145
  rack (>= 1.0.0)
121
146
  will_paginate (3.0.pre2)
@@ -132,11 +157,13 @@ DEPENDENCIES
132
157
  factory_girl_rails (~> 1.1.beta)
133
158
  gdata
134
159
  governor
135
- governor_background
160
+ governor_background (>= 0.3.0)
136
161
  governor_blogger!
137
162
  jeweler (~> 1.5.2)
138
163
  mocha
139
164
  nokogiri
165
+ resque
166
+ resque-status
140
167
  rspec-rails
141
168
  sqlite3
142
169
  will_paginate (~> 3.0.beta)
@@ -11,7 +11,7 @@ articles to Blogger[http://www.blogger.com].
11
11
  == Dependencies
12
12
 
13
13
  * Governor[http://carpeliam.github.com/governor/]
14
- * GovernorBackground[http://carpeliam.github.com/governor_background/]
14
+ * GovernorBackground[https://github.com/carpeliam/governor_background]
15
15
  * And because of the GovernorBackground dependency, either
16
16
  Delayed_Job[https://github.com/collectiveidea/delayed_job] or
17
17
  Resque[https://github.com/defunkt/resque]. If you use Resque, it's highly
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -1,5 +1,5 @@
1
1
  en:
2
2
  governor_background:
3
- post_to_blogger_completed: '"%{resource}" was completed successfully.'
4
- post_to_blogger_failed: '"%{resource}" could not be created: %{message}.'
5
- post_to_blogger_killed: '"%{resource}" was interrupted: %{message}.'
3
+ blogger_post_completed: 'Your article was successfully posted to Blogger.'
4
+ blogger_post_failed: 'Unable to post to Blogger: %{message}.'
5
+ blogger_post_killed: 'Your post to Blogger was interrupted: %{message}.'
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{governor_blogger}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Liam Morley"]
12
- s.date = %q{2011-04-24}
12
+ s.date = %q{2011-05-15}
13
13
  s.description = %q{A plugin for the Rails 3-based Governor blogging system that posts and updates articles to Blogger.com.}
14
14
  s.email = %q{liam@carpeliam.com}
15
15
  s.extra_rdoc_files = [
@@ -31,6 +31,7 @@ Gem::Specification.new do |s|
31
31
  "lib/generators/governor/templates/blogger.rb",
32
32
  "lib/generators/governor/templates/migrations/add_blogger.rb",
33
33
  "lib/governor_blogger.rb",
34
+ "lib/governor_blogger/blogger.rb",
34
35
  "lib/governor_blogger/instance_methods.rb",
35
36
  "lib/governor_blogger/rails.rb",
36
37
  "spec/governor_blogger_spec.rb",
@@ -141,7 +142,7 @@ Gem::Specification.new do |s|
141
142
  s.add_runtime_dependency(%q<gdata>, [">= 0"])
142
143
  s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
143
144
  s.add_runtime_dependency(%q<governor>, [">= 0"])
144
- s.add_runtime_dependency(%q<governor_background>, [">= 0"])
145
+ s.add_runtime_dependency(%q<governor_background>, [">= 0.3.0"])
145
146
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
146
147
  s.add_development_dependency(%q<sqlite3>, [">= 0"])
147
148
  s.add_development_dependency(%q<rspec-rails>, [">= 0"])
@@ -153,12 +154,14 @@ Gem::Specification.new do |s|
153
154
  s.add_development_dependency(%q<devise>, [">= 0"])
154
155
  s.add_development_dependency(%q<governor_blogger>, [">= 0"])
155
156
  s.add_development_dependency(%q<delayed_job>, [">= 0"])
157
+ s.add_development_dependency(%q<resque>, [">= 0"])
158
+ s.add_development_dependency(%q<resque-status>, [">= 0"])
156
159
  s.add_development_dependency(%q<dynamic_form>, [">= 0"])
157
160
  else
158
161
  s.add_dependency(%q<gdata>, [">= 0"])
159
162
  s.add_dependency(%q<nokogiri>, [">= 0"])
160
163
  s.add_dependency(%q<governor>, [">= 0"])
161
- s.add_dependency(%q<governor_background>, [">= 0"])
164
+ s.add_dependency(%q<governor_background>, [">= 0.3.0"])
162
165
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
163
166
  s.add_dependency(%q<sqlite3>, [">= 0"])
164
167
  s.add_dependency(%q<rspec-rails>, [">= 0"])
@@ -170,13 +173,15 @@ Gem::Specification.new do |s|
170
173
  s.add_dependency(%q<devise>, [">= 0"])
171
174
  s.add_dependency(%q<governor_blogger>, [">= 0"])
172
175
  s.add_dependency(%q<delayed_job>, [">= 0"])
176
+ s.add_dependency(%q<resque>, [">= 0"])
177
+ s.add_dependency(%q<resque-status>, [">= 0"])
173
178
  s.add_dependency(%q<dynamic_form>, [">= 0"])
174
179
  end
175
180
  else
176
181
  s.add_dependency(%q<gdata>, [">= 0"])
177
182
  s.add_dependency(%q<nokogiri>, [">= 0"])
178
183
  s.add_dependency(%q<governor>, [">= 0"])
179
- s.add_dependency(%q<governor_background>, [">= 0"])
184
+ s.add_dependency(%q<governor_background>, [">= 0.3.0"])
180
185
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
181
186
  s.add_dependency(%q<sqlite3>, [">= 0"])
182
187
  s.add_dependency(%q<rspec-rails>, [">= 0"])
@@ -188,6 +193,8 @@ Gem::Specification.new do |s|
188
193
  s.add_dependency(%q<devise>, [">= 0"])
189
194
  s.add_dependency(%q<governor_blogger>, [">= 0"])
190
195
  s.add_dependency(%q<delayed_job>, [">= 0"])
196
+ s.add_dependency(%q<resque>, [">= 0"])
197
+ s.add_dependency(%q<resque-status>, [">= 0"])
191
198
  s.add_dependency(%q<dynamic_form>, [">= 0"])
192
199
  end
193
200
  end
@@ -1,4 +1,5 @@
1
1
  require 'governor_blogger/rails'
2
+ require 'governor_blogger/blogger'
2
3
  require 'governor_blogger/instance_methods'
3
4
 
4
5
  blogger = Governor::Plugin.new('blogger')
@@ -12,6 +13,17 @@ end
12
13
 
13
14
  Governor::PluginManager.register blogger
14
15
 
16
+ GovernorBackground.register('blogger_post') do |article|
17
+ # article.post_to_blogger
18
+ blogger = GovernorBlogger::Blogger.new(article)
19
+ id = if article.blogger_id.blank?
20
+ blogger.post
21
+ else
22
+ blogger.put
23
+ end
24
+ article.reload.update_attribute :blogger_id, id
25
+ end
26
+
15
27
  module GovernorBlogger
16
28
  class Configuration
17
29
  cattr_accessor :username, :password, :blog_id
@@ -0,0 +1,44 @@
1
+ module GovernorBlogger
2
+ class Blogger
3
+ def initialize(article)
4
+ @article = article
5
+ @blogger = GData::Client::Blogger.new
6
+
7
+ # log in
8
+ @blogger.clientlogin(GovernorBlogger.config.username, GovernorBlogger.config.password)
9
+ end
10
+
11
+ def post
12
+ entry = Nokogiri::XML::Builder.new do |xml|
13
+ xml.entry(:xmlns => 'http://www.w3.org/2005/Atom') do
14
+ xml.title @article.title, :type => 'text'
15
+ xml.content(:type => 'xhtml') { |content| content << body }
16
+ end
17
+ end.to_xml
18
+ # post to page, retrieve blogger_id
19
+ response = @blogger.post(page, entry)
20
+ post_id = response.headers['location'].match(%r{posts/default/(\d+)})[1]
21
+ post_id
22
+ end
23
+
24
+ def put
25
+ # retrieve post
26
+ xml = @blogger.get(page).to_xml
27
+ # transform XML
28
+ xml.children.detect{|e| e.name == 'title' }.text = @article.title
29
+ xml.children.detect{|e| e.name == 'content' }.text = body
30
+ # post back to page
31
+ @blogger.put(page, xml)
32
+ end
33
+
34
+ private
35
+ def body
36
+ Nokogiri::XML.fragment(Governor::Formatters.format_article @article).to_s
37
+ end
38
+
39
+ def page
40
+ "http://www.blogger.com/feeds/#{GovernorBlogger.config.blog_id}/posts/default/#{@article.blogger_id}".chomp '/'
41
+ end
42
+ end
43
+ end
44
+
@@ -32,7 +32,7 @@ module GovernorBlogger
32
32
  end
33
33
 
34
34
  def post_to_blogger_in_background
35
- run_in_background :post_to_blogger
35
+ GovernorBackground.run('blogger_post', self)
36
36
  end
37
37
  end
38
38
  end
@@ -2,8 +2,34 @@ require 'spec_helper'
2
2
 
3
3
  module Governor
4
4
  describe GovernorBlogger do
5
- it "registers the plugin" do
5
+ it "registers the plugin with Governor" do
6
6
  Governor::PluginManager.plugins.size == 1
7
7
  end
8
+
9
+ it "registers a job with GovernorBackground" do
10
+ GovernorBackground.retrieve('blogger_post').should_not be_blank
11
+ end
12
+
13
+ it "can post to blogger" do
14
+ article = get_article
15
+ article.blogger_id.should == 12345
16
+ end
17
+
18
+ it "can update blogger" do
19
+ article = get_article
20
+ blogger = mock('blogger')
21
+ GovernorBlogger::Blogger.expects(:new).with(article).returns blogger
22
+ blogger.expects(:put)
23
+ article.update_attribute :title, "Some new title"
24
+ end
25
+
26
+ def get_article
27
+ article = Factory.build(:article, :author => Factory(:user))
28
+ blogger = mock('blogger')
29
+ GovernorBlogger::Blogger.expects(:new).with(article).returns blogger
30
+ blogger.expects(:post).returns 12345
31
+ article.save
32
+ article
33
+ end
8
34
  end
9
35
  end
@@ -9,8 +9,10 @@ gem 'sqlite3'
9
9
 
10
10
  gem 'devise'
11
11
  gem 'delayed_job'
12
+ gem 'resque'
13
+ gem 'resque-status', :require => 'resque/status'
12
14
  gem 'governor'
13
- gem 'governor_background'
15
+ gem 'governor_background', '>= 0.3.0'
14
16
  gem 'governor_blogger', :path => '../..'
15
17
 
16
18
  gem 'dynamic_form'
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: ../..
3
3
  specs:
4
- governor_blogger (0.1.0)
4
+ governor_blogger (0.1.1)
5
5
  gdata
6
6
  governor
7
- governor_background
7
+ governor_background (>= 0.3.0)
8
8
  nokogiri
9
9
 
10
10
  GEM
@@ -44,7 +44,7 @@ GEM
44
44
  delayed_job (2.1.4)
45
45
  activesupport (~> 3.0)
46
46
  daemons
47
- devise (1.3.3)
47
+ devise (1.3.4)
48
48
  bcrypt-ruby (~> 2.1.2)
49
49
  orm_adapter (~> 0.0.3)
50
50
  warden (~> 1.0.3)
@@ -52,19 +52,21 @@ GEM
52
52
  erubis (2.6.6)
53
53
  abstract (>= 1.0.0)
54
54
  gdata (1.1.2)
55
- governor (0.3.1)
56
- rails (~> 3.0.5)
57
- governor_background (0.1.0)
55
+ governor (0.5.4)
56
+ rails (>= 3.0.5)
57
+ governor_background (0.3.0)
58
58
  governor
59
59
  i18n (0.5.0)
60
- mail (2.2.17)
60
+ json (1.4.6)
61
+ macaddr (1.0.0)
62
+ mail (2.2.19)
61
63
  activesupport (>= 2.3.6)
62
64
  i18n (>= 0.4.0)
63
65
  mime-types (~> 1.16)
64
66
  treetop (~> 1.4.8)
65
67
  mime-types (1.16)
66
68
  nokogiri (1.4.4)
67
- orm_adapter (0.0.4)
69
+ orm_adapter (0.0.5)
68
70
  polyglot (0.3.1)
69
71
  rack (1.2.2)
70
72
  rack-mount (0.6.14)
@@ -85,13 +87,36 @@ GEM
85
87
  rake (>= 0.8.7)
86
88
  thor (~> 0.14.4)
87
89
  rake (0.8.7)
90
+ redis (2.2.0)
91
+ redis-namespace (0.10.0)
92
+ redis (< 3.0.0)
93
+ redisk (0.2.2)
94
+ redis (>= 0.1.1)
95
+ redis-namespace (>= 0.1.0)
96
+ resque (1.15.0)
97
+ json (~> 1.4.6)
98
+ redis-namespace (>= 0.10.0)
99
+ sinatra (>= 0.9.2)
100
+ vegas (~> 0.1.2)
101
+ resque-status (0.2.3)
102
+ redisk (>= 0.2.1)
103
+ resque (>= 1.3.1)
104
+ uuid (>= 2.0.2)
105
+ sinatra (1.2.6)
106
+ rack (~> 1.1)
107
+ tilt (>= 1.2.2, < 2.0)
88
108
  sqlite3 (1.3.3)
89
109
  thor (0.14.6)
110
+ tilt (1.3)
90
111
  treetop (1.4.9)
91
112
  polyglot (>= 0.3.1)
92
- tzinfo (0.3.26)
93
- warden (1.0.3)
113
+ tzinfo (0.3.27)
114
+ uuid (2.3.2)
115
+ macaddr (~> 1.0)
116
+ vegas (0.1.8)
94
117
  rack (>= 1.0.0)
118
+ warden (1.0.4)
119
+ rack (>= 1.0)
95
120
  will_paginate (3.0.pre2)
96
121
 
97
122
  PLATFORMS
@@ -102,8 +127,10 @@ DEPENDENCIES
102
127
  devise
103
128
  dynamic_form
104
129
  governor
105
- governor_background
130
+ governor_background (>= 0.3.0)
106
131
  governor_blogger!
107
132
  rails (= 3.0.5)
133
+ resque
134
+ resque-status
108
135
  sqlite3
109
136
  will_paginate (~> 3.0.beta)
@@ -5,3 +5,5 @@ require File.expand_path('../config/application', __FILE__)
5
5
  require 'rake'
6
6
 
7
7
  RailsApp::Application.load_tasks
8
+
9
+ require 'resque/tasks' if defined?(Resque)
@@ -1,3 +1,3 @@
1
- GovernorBlogger.config.username = ''
2
- GovernorBlogger.config.password = ''
3
- GovernorBlogger.config.blog_id = ''
1
+ GovernorBlogger.config.username = 'user'
2
+ GovernorBlogger.config.password = 'pass'
3
+ GovernorBlogger.config.blog_id = '1234567890123456789'
@@ -33,4 +33,11 @@ module Governor
33
33
  end
34
34
  end
35
35
  end
36
+ end
37
+
38
+ # get GovernorBackground to run jobs directly
39
+ module GovernorBackground
40
+ def self.run(job_name, *arguments)
41
+ retrieve(job_name).call(*arguments)
42
+ end
36
43
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: governor_blogger
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Liam Morley
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-24 00:00:00 -04:00
18
+ date: 2011-05-15 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -69,10 +69,12 @@ dependencies:
69
69
  requirements:
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- hash: 3
72
+ hash: 19
73
73
  segments:
74
74
  - 0
75
- version: "0"
75
+ - 3
76
+ - 0
77
+ version: 0.3.0
76
78
  requirement: *id004
77
79
  - !ruby/object:Gem::Dependency
78
80
  type: :development
@@ -240,7 +242,7 @@ dependencies:
240
242
  - !ruby/object:Gem::Dependency
241
243
  type: :development
242
244
  prerelease: false
243
- name: dynamic_form
245
+ name: resque
244
246
  version_requirements: &id016 !ruby/object:Gem::Requirement
245
247
  none: false
246
248
  requirements:
@@ -251,6 +253,34 @@ dependencies:
251
253
  - 0
252
254
  version: "0"
253
255
  requirement: *id016
256
+ - !ruby/object:Gem::Dependency
257
+ type: :development
258
+ prerelease: false
259
+ name: resque-status
260
+ version_requirements: &id017 !ruby/object:Gem::Requirement
261
+ none: false
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ hash: 3
266
+ segments:
267
+ - 0
268
+ version: "0"
269
+ requirement: *id017
270
+ - !ruby/object:Gem::Dependency
271
+ type: :development
272
+ prerelease: false
273
+ name: dynamic_form
274
+ version_requirements: &id018 !ruby/object:Gem::Requirement
275
+ none: false
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ hash: 3
280
+ segments:
281
+ - 0
282
+ version: "0"
283
+ requirement: *id018
254
284
  description: A plugin for the Rails 3-based Governor blogging system that posts and updates articles to Blogger.com.
255
285
  email: liam@carpeliam.com
256
286
  executables: []
@@ -275,6 +305,7 @@ files:
275
305
  - lib/generators/governor/templates/blogger.rb
276
306
  - lib/generators/governor/templates/migrations/add_blogger.rb
277
307
  - lib/governor_blogger.rb
308
+ - lib/governor_blogger/blogger.rb
278
309
  - lib/governor_blogger/instance_methods.rb
279
310
  - lib/governor_blogger/rails.rb
280
311
  - spec/governor_blogger_spec.rb