aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/api/api.rb17
-rw-r--r--app/assets/javascripts/parts/sidebar_user_stats.coffee2
-rw-r--r--app/assets/javascripts/tweets.coffee.erb2
-rw-r--r--app/controllers/apidocs_controller.rb12
-rw-r--r--app/controllers/application_controller.rb7
-rw-r--r--app/controllers/sessions_controller.rb16
-rw-r--r--app/controllers/tweets_controller.rb2
-rw-r--r--app/controllers/users_controller.rb11
-rw-r--r--app/models/favorite.rb41
-rw-r--r--app/models/retweet.rb40
-rw-r--r--app/models/settings.rb4
-rw-r--r--app/views/tweets/i_responses.json.jbuilder (renamed from app/views/tweets/responses.json.jbuilder)0
12 files changed, 80 insertions, 74 deletions
diff --git a/app/api/api.rb b/app/api/api.rb
index 588e755..3183271 100644
--- a/app/api/api.rb
+++ b/app/api/api.rb
@@ -50,4 +50,21 @@ class Api < Grape::API
route :any, "*path", ignore: true do
raise Aclog::Exceptions::NotFound
end
+
+ class << self
+ def docs
+ Rails.cache.fetch("apidocs") do
+ {}.tap do |h|
+ Api.routes.each {|route|
+ next if route.route_ignore
+ next if route.route_method == "HEAD"
+ method = route.route_method
+ namespace = route.route_namespace.sub(/^\//, "")
+ path = route.route_path.split("/", 3).last.sub(/\(\.:format\)$/, "")
+ ((h[method] ||= {})[namespace] ||= {})[path] = route
+ }
+ end
+ end
+ end
+ end
end
diff --git a/app/assets/javascripts/parts/sidebar_user_stats.coffee b/app/assets/javascripts/parts/sidebar_user_stats.coffee
index cc880d5..2b3f078 100644
--- a/app/assets/javascripts/parts/sidebar_user_stats.coffee
+++ b/app/assets/javascripts/parts/sidebar_user_stats.coffee
@@ -10,7 +10,7 @@ Parts.sidebar_user_stats = ->
Math.round(this.stats.reactions_count / this.stats.tweets_count * 100) / 100
superagent
- .get "/" + Helpers.user_screen_name() + "/stats"
+ .get "/i/api/users/stats?screen_name=" + Helpers.user_screen_name()
.accept "json"
.end (err, res) ->
vm.stats = res.body
diff --git a/app/assets/javascripts/tweets.coffee.erb b/app/assets/javascripts/tweets.coffee.erb
index cd40568..87f333c 100644
--- a/app/assets/javascripts/tweets.coffee.erb
+++ b/app/assets/javascripts/tweets.coffee.erb
@@ -42,7 +42,7 @@ Views.tweets =
if status.allowed && status.reactions_count > 0
status.loading = true
superagent
- .get "/i/" + status.id_str + "/responses"
+ .get "/i/api/tweets/responses?id=" + status.id_str
.accept "json"
.end (rerr, rres) ->
rjson = rres.body
diff --git a/app/controllers/apidocs_controller.rb b/app/controllers/apidocs_controller.rb
index b22ecf3..3057405 100644
--- a/app/controllers/apidocs_controller.rb
+++ b/app/controllers/apidocs_controller.rb
@@ -12,17 +12,7 @@ class ApidocsController < ApplicationController
private
def set_apidocs
- @apidocs = Rails.cache.fetch("apidocs", expired_in: 1.days) do
- h = {}
- Api.routes.reject {|r| r.route_ignore }.each {|route|
- next if route.route_method == "HEAD"
- method = route.route_method
- namespace = route.route_namespace.sub(/^\//, "")
- path = route.route_path.split("/", 3).last.sub(/\(\.:format\)$/, "")
- ((h[method] ||= {})[namespace] ||= {})[path] = route
- }
- h
- end
+ @apidocs = Api.docs
end
def set_sidebar
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 7700a2c..15cc108 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -17,11 +17,10 @@ class ApplicationController < ActionController::Base
end
def current_user
- @_current_user ||= begin
+ @_current_user ||=
if logged_in?
User.find(session[:user_id])
end
- end
end
def authorized_to_show_user?(user)
@@ -39,4 +38,8 @@ class ApplicationController < ActionController::Base
end
object
end
+
+ def safe_redirect?(to)
+ to[0] == "/" && !to.include?("//")
+ end
end
diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb
index f5d609c..335d84e 100644
--- a/app/controllers/sessions_controller.rb
+++ b/app/controllers/sessions_controller.rb
@@ -5,11 +5,6 @@ class SessionsController < ApplicationController
account = Account.register(user_id: auth.uid,
oauth_token: auth.credentials.token,
oauth_token_secret: auth.credentials.secret)
- begin
- WorkerManager.update_account(account)
- rescue Aclog::Exceptions::WorkerConnectionError
- end
-
User.create_or_update_from_json(
{ id: account.user_id,
screen_name: auth.extra.raw_info.screen_name,
@@ -17,13 +12,18 @@ class SessionsController < ApplicationController
profile_image_url_https: auth.extra.raw_info.profile_image_url_https,
protected: auth.extra.raw_info.protected })
+ begin
+ WorkerManager.update_account(account)
+ rescue Aclog::Exceptions::WorkerConnectionError
+ end
+
session[:user_id] = account.user_id
to = request.env["omniauth.params"]["redirect_after_login"].to_s
- if to == "/" || to[0] != "/" || to.include?("//")
- redirect_to user_path(auth.extra.raw_info.screen_name)
- else
+ if safe_redirect?(to)
redirect_to to
+ else
+ redirect_to user_path(auth.extra.raw_info.screen_name)
end
end
diff --git a/app/controllers/tweets_controller.rb b/app/controllers/tweets_controller.rb
index d994a0f..8708898 100644
--- a/app/controllers/tweets_controller.rb
+++ b/app/controllers/tweets_controller.rb
@@ -15,7 +15,7 @@ class TweetsController < ApplicationController
redirect_to tweet
end
- def responses
+ def i_responses
authorize! @tweet = Tweet.find(params[:id])
end
diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index fa0de47..3e95fb6 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -17,15 +17,14 @@ class UsersController < ApplicationController
@sidebars = [:user]
end
+ def i_stats
+ user = User.find(screen_name: params[:screen_name])
+ render json: user.stats.to_h
+ end
+
def i_suggest_screen_name
- sleep 1 if Rails.env.development?
users = User.suggest_screen_name(params[:head].to_s).limit(10)
filtered = users.map {|user| { name: user.name, screen_name: user.screen_name, profile_image_url: user.profile_image_url(:mini) } }
render json: filtered
end
-
- def stats
- user = User.find(screen_name: params[:screen_name])
- render json: user.stats.to_h
- end
end
diff --git a/app/models/favorite.rb b/app/models/favorite.rb
index 701b8ca..5962f1c 100644
--- a/app/models/favorite.rb
+++ b/app/models/favorite.rb
@@ -2,30 +2,31 @@ class Favorite < ActiveRecord::Base
belongs_to :tweet
belongs_to :user
- # Registers favorite event in bulk from an array of Streaming API events.
- # This method doesn't update Tweet#reactions_count.
- #
- # @param [Array] array An array of Streaming API events.
- def self.create_bulk_from_json(array)
- return if array.empty?
+ class << self
+ # Registers favorite event in bulk from an array of Streaming API events.
+ # This method doesn't update Tweet#reactions_count.
+ #
+ # @param [Array] array An array of Streaming API events.
+ def create_bulk_from_json(array)
+ return if array.empty?
- objects = array.map do |json|
- {
- user_id: json[:source][:id],
- tweet_id: json[:target_object][:id]
+ keys = [:user_id, :tweet_id]
+ objects = array.map {|json|
+ [json[:source][:id], json[:target_object][:id]]
}
- end
- self.import(objects.first.keys, objects.map(&:values), ignore: true)
- end
+ import(keys, objects, ignore: true)
+ end
- # Unregisters favorite event in bulk from an array of Streaming API 'unfavorite' events.
- # This method doesn't update Tweet#reactions_count.
- #
- # @param [Array] array An array of Streaming API events.
- def self.delete_bulk_from_json(array)
- array.each do |json|
- self.delete_all(user_id: json[:source][:id], tweet_id: json[:target_object][:id])
+ # Unregisters favorite event in bulk from an array of Streaming API 'unfavorite' events.
+ # This method doesn't update Tweet#reactions_count.
+ #
+ # @param [Array] array An array of Streaming API events.
+ def delete_bulk_from_json(array)
+ array.each do |json|
+ delete_all(user_id: json[:source][:id],
+ tweet_id: json[:target_object][:id])
+ end
end
end
end
diff --git a/app/models/retweet.rb b/app/models/retweet.rb
index cefd901..b67bd72 100644
--- a/app/models/retweet.rb
+++ b/app/models/retweet.rb
@@ -2,29 +2,29 @@ class Retweet < ActiveRecord::Base
belongs_to :tweet
belongs_to :user
- # Registers retweet event in bulk from an array of Streaming API messages.
- # This doesn't update Tweet#reactions_count.
- #
- # @param [Array] array An array of Streaming API messages.
- def self.create_bulk_from_json(array)
- return if array.empty?
+ class << self
+ # Registers retweet event in bulk from an array of Streaming API messages.
+ # This doesn't update Tweet#reactions_count.
+ #
+ # @param [Array] array An array of Streaming API messages.
+ def create_bulk_from_json(array)
+ return if array.empty?
- objects = array.map do |json|
- {
- id: json[:id],
- user_id: json[:user][:id],
- tweet_id: json[:retweeted_status][:id]
+ keys = [:id, :user_id, :tweet_id]
+ objects = array.map {|json|
+ [json[:id], json[:user][:id], json[:retweeted_status][:id]]
}
- end
- self.import(objects.first.keys, objects.map(&:values), ignore: true)
- end
+ import(keys, objects, ignore: true)
+ end
- # Unregisters retweet events in bulk from array of Streaming API's delete events.
- # This doesn't update Tweet#reactions_count.
- #
- # @param [Array] array An array of Streaming API delete events.
- def self.delete_bulk_from_json(array)
- self.where(id: array.map {|json| json[:delete][:status][:id] }).delete_all
+ # Unregisters retweet events in bulk from array of Streaming API's delete events.
+ # This doesn't update Tweet#reactions_count.
+ #
+ # @param [Array] array An array of Streaming API delete events.
+ def delete_bulk_from_json(array)
+ ids = array.map {|json| json[:delete][:status][:id] }
+ where(id: ids).delete_all
+ end
end
end
diff --git a/app/models/settings.rb b/app/models/settings.rb
deleted file mode 100644
index b3cf53b..0000000
--- a/app/models/settings.rb
+++ /dev/null
@@ -1,4 +0,0 @@
-class Settings < Settingslogic
- namespace Rails.env
- source Rails.root.join("config", "settings.yml")
-end
diff --git a/app/views/tweets/responses.json.jbuilder b/app/views/tweets/i_responses.json.jbuilder
index 62de683..62de683 100644
--- a/app/views/tweets/responses.json.jbuilder
+++ b/app/views/tweets/i_responses.json.jbuilder