added service model
This commit is contained in:
parent
704d40cadd
commit
6d23ed5dcd
|
@ -0,0 +1,38 @@
|
|||
class Service < ActiveRecord::Base
|
||||
belongs_to :user
|
||||
validates_uniqueness_of :uid, scope: :type
|
||||
|
||||
class << self
|
||||
|
||||
def first_from_omniauth(auth_hash)
|
||||
@@auth = auth_hash
|
||||
where(type: service_type, uid: options[:uid]).first
|
||||
end
|
||||
|
||||
def initialize_from_omniauth(auth_hash)
|
||||
@@auth = auth_hash
|
||||
service_type.constantize.new(options)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def auth
|
||||
@@auth
|
||||
end
|
||||
|
||||
def service_type
|
||||
"Services::#{options[:provider].camelize}"
|
||||
end
|
||||
|
||||
def options
|
||||
{
|
||||
nickname: auth['info']['nickname'],
|
||||
access_token: auth['credentials']['token'],
|
||||
access_secret: auth['credentials']['secret'],
|
||||
uid: auth['uid'],
|
||||
provider: auth['provider'],
|
||||
info: auth['info']
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,40 @@
|
|||
class Services::Twitter < Service
|
||||
include Rails.application.routes.url_helpers
|
||||
|
||||
def provider
|
||||
"twitter"
|
||||
end
|
||||
|
||||
def post(answer)
|
||||
Rails.logger.debug "posting to Twitter {'answer' => #{answer.id}, 'user' => #{self.user_id}}"
|
||||
post_tweet answer
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def client
|
||||
@client ||= Twitter::REST::Client.new(
|
||||
consumer_key: APP_CONFIG['sharing']['twitter']['consumer_key'],
|
||||
consumer_secret: APP_CONFIG['sharing']['twitter']['consumer_secret'],
|
||||
access_token: self.access_token,
|
||||
access_token_secret: self.access_secret
|
||||
)
|
||||
end
|
||||
|
||||
def post_tweet(answer)
|
||||
client.update prepare_tweet(answer)
|
||||
end
|
||||
|
||||
def prepare_tweet(answer)
|
||||
# TODO: improve this.
|
||||
question_content = answer.question.content
|
||||
answer_content = answer.content
|
||||
answer_url = show_user_answer_url(
|
||||
id: answer.id,
|
||||
username: answer.user.screen_name
|
||||
)
|
||||
Rails.logger.debug "answer_url => #{answer_url}"
|
||||
"#{question_content[0..55]}#{'…' if question_content.length > 56}" \
|
||||
" — #{answer_content[0..55]}#{'…' if answercontent.length > 56} #{answer_url}"
|
||||
end
|
||||
end
|
|
@ -20,6 +20,7 @@ class User < ActiveRecord::Base
|
|||
has_many :friends, through: :active_relationships, source: :target
|
||||
has_many :followers, through: :passive_relationships, source: :source
|
||||
has_many :smiles
|
||||
has_many :services
|
||||
|
||||
SCREEN_NAME_REGEX = /\A[a-zA-Z0-9_]{1,16}\z/
|
||||
WEBSITE_REGEX = /https?:\/\/([A-Za-z.\-]+)\/?(?:.*)/i
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
class CreateServices < ActiveRecord::Migration
|
||||
def change
|
||||
create_table :services do |t|
|
||||
t.string :type, null: false
|
||||
t.integer :user_id, null: false
|
||||
t.string :uid
|
||||
t.string :access_token
|
||||
t.string :access_secret
|
||||
t.string :nickname
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
13
db/schema.rb
13
db/schema.rb
|
@ -11,7 +11,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20141208111714) do
|
||||
ActiveRecord::Schema.define(version: 20141212193625) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
@ -70,6 +70,17 @@ ActiveRecord::Schema.define(version: 20141208111714) do
|
|||
add_index "relationships", ["source_id"], name: "index_relationships_on_source_id", using: :btree
|
||||
add_index "relationships", ["target_id"], name: "index_relationships_on_target_id", using: :btree
|
||||
|
||||
create_table "services", force: true do |t|
|
||||
t.string "type", null: false
|
||||
t.integer "user_id", null: false
|
||||
t.string "uid"
|
||||
t.string "access_token"
|
||||
t.string "access_secret"
|
||||
t.string "nickname"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
end
|
||||
|
||||
create_table "smiles", force: true do |t|
|
||||
t.integer "user_id"
|
||||
t.integer "answer_id"
|
||||
|
|
Loading…
Reference in New Issue