@@ -4,9 +4,20 @@ class Service < ActiveRecord::Base |
||
| 4 | 4 |
serialize :options, Hash |
| 5 | 5 |
|
| 6 | 6 |
belongs_to :user |
| 7 |
+ has_many :agents |
|
| 7 | 8 |
|
| 8 | 9 |
validates_presence_of :user_id, :provider, :name, :token |
| 9 | 10 |
|
| 11 |
+ before_destroy :disable_agents |
|
| 12 |
+ |
|
| 13 |
+ def disable_agents |
|
| 14 |
+ self.agents.each do |agent| |
|
| 15 |
+ agent.service_id = nil |
|
| 16 |
+ agent.disabled = true |
|
| 17 |
+ agent.save!(validate: false) |
|
| 18 |
+ end |
|
| 19 |
+ end |
|
| 20 |
+ |
|
| 10 | 21 |
def toggle_availability! |
| 11 | 22 |
self.global = !self.global |
| 12 | 23 |
self.save! |
@@ -1,11 +1,27 @@ |
||
| 1 | 1 |
class MigrateAgentsToServiceAuthentication < ActiveRecord::Migration |
| 2 |
+ def twitter_consumer_key(agent) |
|
| 3 |
+ agent.options['consumer_key'].presence || agent.credential('twitter_consumer_key')
|
|
| 4 |
+ end |
|
| 5 |
+ |
|
| 6 |
+ def twitter_consumer_secret(agent) |
|
| 7 |
+ agent.options['consumer_secret'].presence || agent.credential('twitter_consumer_secret')
|
|
| 8 |
+ end |
|
| 9 |
+ |
|
| 10 |
+ def twitter_oauth_token(agent) |
|
| 11 |
+ agent.options['oauth_token'].presence || agent.options['access_key'].presence || agent.credential('twitter_oauth_token')
|
|
| 12 |
+ end |
|
| 13 |
+ |
|
| 14 |
+ def twitter_oauth_token_secret(agent) |
|
| 15 |
+ agent.options['oauth_token_secret'].presence || agent.options['access_secret'].presence || agent.credential('twitter_oauth_token_secret')
|
|
| 16 |
+ end |
|
| 17 |
+ |
|
| 2 | 18 |
def up |
| 3 | 19 |
agents = Agent.where(type: ['Agents::TwitterUserAgent', 'Agents::TwitterStreamAgent', 'Agents::TwitterPublishAgent']).each do |agent| |
| 4 | 20 |
service = agent.user.services.create!( |
| 5 | 21 |
provider: 'twitter', |
| 6 | 22 |
name: "Migrated '#{agent.name}'",
|
| 7 |
- token: agent.twitter_oauth_token, |
|
| 8 |
- secret: agent.twitter_oauth_token_secret |
|
| 23 |
+ token: twitter_oauth_token(agent), |
|
| 24 |
+ secret: twitter_oauth_token_secret(agent) |
|
| 9 | 25 |
) |
| 10 | 26 |
agent.service_id = service.id |
| 11 | 27 |
agent.save! |
@@ -15,8 +31,8 @@ class MigrateAgentsToServiceAuthentication < ActiveRecord::Migration |
||
| 15 | 31 |
|
| 16 | 32 |
Your Twitter agents were successfully migrated. You need to update your .env file and add the following two lines: |
| 17 | 33 |
|
| 18 |
- TWITTER_OAUTH_KEY=#{agents.first.twitter_consumer_key}
|
|
| 19 |
- TWITTER_OAUTH_SECRET=#{agents.first.twitter_consumer_secret}
|
|
| 34 |
+ TWITTER_OAUTH_KEY=#{twitter_consumer_key(agents.first)}
|
|
| 35 |
+ TWITTER_OAUTH_SECRET=#{twitter_consumer_secret(agents.first)}
|
|
| 20 | 36 |
|
| 21 | 37 |
|
| 22 | 38 |
EOF |
@@ -101,3 +101,8 @@ bob_manual_event_agent: |
||
| 101 | 101 |
type: Agents::ManualEventAgent |
| 102 | 102 |
user: bob |
| 103 | 103 |
name: "Bob's event testing agent" |
| 104 |
+ |
|
| 105 |
+bob_basecamp_agent: |
|
| 106 |
+ type: Agents::BasecampAgent |
|
| 107 |
+ user: bob |
|
| 108 |
+ service: generic |
@@ -14,6 +14,15 @@ describe Service do |
||
| 14 | 14 |
@service.global.should == false |
| 15 | 15 |
end |
| 16 | 16 |
|
| 17 |
+ it "disables all agents before beeing destroyed" do |
|
| 18 |
+ agent = agents(:bob_basecamp_agent) |
|
| 19 |
+ service = agent.service |
|
| 20 |
+ service.destroy |
|
| 21 |
+ agent.reload |
|
| 22 |
+ agent.service_id.should be_nil |
|
| 23 |
+ agent.disabled.should be_true |
|
| 24 |
+ end |
|
| 25 |
+ |
|
| 17 | 26 |
describe "preparing for a request" do |
| 18 | 27 |
before(:each) do |
| 19 | 28 |
@service = services(:generic) |