diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/api/api.rb | 17 | ||||
-rw-r--r-- | app/assets/javascripts/parts/sidebar_user_stats.coffee | 2 | ||||
-rw-r--r-- | app/assets/javascripts/tweets.coffee.erb | 2 | ||||
-rw-r--r-- | app/controllers/apidocs_controller.rb | 12 | ||||
-rw-r--r-- | app/controllers/application_controller.rb | 7 | ||||
-rw-r--r-- | app/controllers/sessions_controller.rb | 16 | ||||
-rw-r--r-- | app/controllers/tweets_controller.rb | 2 | ||||
-rw-r--r-- | app/controllers/users_controller.rb | 11 | ||||
-rw-r--r-- | app/models/favorite.rb | 41 | ||||
-rw-r--r-- | app/models/retweet.rb | 40 | ||||
-rw-r--r-- | app/models/settings.rb | 4 | ||||
-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 |