Compare commits
1 commit
develop
...
rubocop-fi
Author | SHA1 | Date | |
---|---|---|---|
|
9f1a2fa2b2 |
208 changed files with 515 additions and 325 deletions
7
Gemfile
7
Gemfile
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
source 'https://rubygems.org'
|
||||
ruby '2.3.0'
|
||||
|
||||
|
@ -47,10 +48,10 @@ end
|
|||
group :development, :test do
|
||||
gem 'better_errors'
|
||||
gem 'binding_of_caller'
|
||||
gem 'faker'
|
||||
gem 'pry-byebug'
|
||||
gem 'pry-rails'
|
||||
gem 'rubocop'
|
||||
gem 'tunemygc'
|
||||
gem 'faker'
|
||||
gem 'rubocop', '~> 0.46.0' # match code climate https://github.com/tootsuite/mastodon/issues/1758
|
||||
gem 'timecop'
|
||||
gem 'tunemygc'
|
||||
end
|
||||
|
|
10
Gemfile.lock
10
Gemfile.lock
|
@ -166,7 +166,6 @@ GEM
|
|||
cocaine (~> 0.5.5)
|
||||
mime-types
|
||||
mimemagic (~> 0.3.0)
|
||||
parallel (1.12.0)
|
||||
parser (2.4.0.0)
|
||||
ast (~> 2.2)
|
||||
pg (0.21.0)
|
||||
|
@ -241,14 +240,13 @@ GEM
|
|||
rspec-mocks (~> 3.6.0)
|
||||
rspec-support (~> 3.6.0)
|
||||
rspec-support (3.6.0)
|
||||
rubocop (0.49.1)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 2.3.3.1, < 3.0)
|
||||
rubocop (0.46.0)
|
||||
parser (>= 2.3.1.1, < 3.0)
|
||||
powerpack (~> 0.1)
|
||||
rainbow (>= 1.99.1, < 3.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (~> 1.0, >= 1.0.1)
|
||||
ruby-progressbar (1.8.1)
|
||||
ruby-progressbar (1.9.0)
|
||||
sass (3.5.1)
|
||||
sass-listen (~> 4.0.0)
|
||||
sass-listen (4.0.0)
|
||||
|
@ -333,7 +331,7 @@ DEPENDENCIES
|
|||
rails (~> 5.0.0)
|
||||
redis (~> 3.3.3)
|
||||
rspec-rails
|
||||
rubocop
|
||||
rubocop (~> 0.46.0)
|
||||
sass-rails
|
||||
shoulda-matchers
|
||||
simplecov
|
||||
|
|
1
Rakefile
1
Rakefile
|
@ -1,5 +1,6 @@
|
|||
#!/usr/bin/env rake
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Add your own tasks in files placed in lib/tasks ending in .rake,
|
||||
# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ApplicationCable
|
||||
class Channel < ActionCable::Channel::Base
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ApplicationCable
|
||||
class Connection < ActionCable::Connection::Base
|
||||
identified_by :current_user
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MapChannel < ApplicationCable::Channel
|
||||
# Called when the consumer has successfully
|
||||
# become a subscriber of this channel.
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccessController < ApplicationController
|
||||
before_action :require_user, only: [:access, :access_request,
|
||||
:approve_access, :approve_access_post,
|
||||
:deny_access, :deny_access_post, :request_access]
|
||||
before_action :set_map, only: [:access, :access_request,
|
||||
:approve_access, :approve_access_post,
|
||||
:deny_access, :deny_access_post, :request_access]
|
||||
before_action :require_user, only: %i(access access_request
|
||||
approve_access approve_access_post
|
||||
deny_access deny_access_post request_access)
|
||||
before_action :set_map, only: %i(access access_request
|
||||
approve_access approve_access_post
|
||||
deny_access deny_access_post request_access)
|
||||
after_action :verify_authorized
|
||||
|
||||
# GET maps/:id/request_access
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class DeprecatedController < ApplicationController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class MappingsController < WithUpdatesController
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class MapsController < WithUpdatesController
|
||||
def searchable_columns
|
||||
[:name, :desc]
|
||||
%i(name desc)
|
||||
end
|
||||
|
||||
def apply_filters(collection)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class MetacodesController < RestfulController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class RestfulController < ActionController::Base
|
||||
|
@ -7,7 +8,7 @@ module Api
|
|||
|
||||
snorlax_used_rest!
|
||||
|
||||
before_action :load_resource, only: [:show, :update, :destroy]
|
||||
before_action :load_resource, only: %i(show update destroy)
|
||||
after_action :verify_authorized
|
||||
|
||||
def index
|
||||
|
@ -91,7 +92,7 @@ module Api
|
|||
end
|
||||
|
||||
def doorkeeper_user
|
||||
return unless doorkeeper_token.present?
|
||||
return if doorkeeper_token.blank?
|
||||
doorkeeper_render_error unless valid_doorkeeper_token?
|
||||
@doorkeeper_user ||= User.find(doorkeeper_token.resource_owner_id)
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class SessionsController < ApplicationController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class StarsController < RestfulController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class SynapsesController < WithUpdatesController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class TokensController < RestfulController
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class TopicsController < WithUpdatesController
|
||||
def searchable_columns
|
||||
[:name, :desc, :link]
|
||||
%i(name desc link)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class UsersController < RestfulController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V2
|
||||
class WithUpdatesController < RestfulController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationController < ActionController::Base
|
||||
include ApplicationHelper
|
||||
include Pundit
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ExploreController < ApplicationController
|
||||
before_action :require_authentication, only: [:mine, :shared, :starred]
|
||||
before_action :require_authentication, only: %i(mine shared starred)
|
||||
before_action :authorize_explore
|
||||
after_action :verify_authorized
|
||||
after_action :verify_policy_scoped
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# bad code that should be checked over before entering one of the
|
||||
# nice files from the right side of this repo
|
||||
class HacksController < ApplicationController
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MainController < ApplicationController
|
||||
before_action :authorize_main
|
||||
after_action :verify_authorized
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MappingsController < ApplicationController
|
||||
before_action :require_user, only: [:create, :update, :destroy]
|
||||
before_action :require_user, only: %i(create update destroy)
|
||||
after_action :verify_authorized, except: :index
|
||||
after_action :verify_policy_scoped, only: :index
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MapsController < ApplicationController
|
||||
before_action :require_user, only: [:create, :update, :destroy, :events, :follow, :unfollow]
|
||||
before_action :set_map, only: [:show, :conversation, :update, :destroy, :contains, :events, :export, :follow, :unfollow, :unfollow_from_email]
|
||||
before_action :require_user, only: %i(create update destroy events follow unfollow)
|
||||
before_action :set_map, only: %i(show conversation update destroy contains events export follow unfollow unfollow_from_email)
|
||||
after_action :verify_authorized
|
||||
|
||||
# GET maps/:id
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MessagesController < ApplicationController
|
||||
before_action :require_user, except: [:show]
|
||||
after_action :verify_authorized
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MetacodeSetsController < ApplicationController
|
||||
before_action :require_admin
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MetacodesController < ApplicationController
|
||||
before_action :require_admin, except: [:index, :show]
|
||||
before_action :set_metacode, only: [:edit, :update]
|
||||
before_action :require_admin, except: %i(index show)
|
||||
before_action :set_metacode, only: %i(edit update)
|
||||
|
||||
# GET /metacodes
|
||||
# GET /metacodes.json
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class NotificationsController < ApplicationController
|
||||
before_action :set_receipts, only: [:index, :show, :mark_read, :mark_unread]
|
||||
before_action :set_notification, only: [:show, :mark_read, :mark_unread]
|
||||
before_action :set_receipt, only: [:show, :mark_read, :mark_unread]
|
||||
before_action :set_receipts, only: %i(index show mark_read mark_unread)
|
||||
before_action :set_notification, only: %i(show mark_read mark_unread)
|
||||
before_action :set_receipt, only: %i(show mark_read mark_unread)
|
||||
|
||||
def index
|
||||
@notifications = current_user.mailbox.notifications.page(params[:page]).per(25)
|
||||
|
@ -27,14 +28,14 @@ class NotificationsController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.html do
|
||||
case @notification.notification_code
|
||||
when MAP_ACCESS_APPROVED, MAP_INVITE_TO_EDIT
|
||||
redirect_to map_path(@notification.notified_object.map)
|
||||
when TOPIC_ADDED_TO_MAP
|
||||
redirect_to map_path(@notification.notified_object.map)
|
||||
when TOPIC_CONNECTED_1
|
||||
redirect_to topic_path(@notification.notified_object.topic1)
|
||||
when TOPIC_CONNECTED_2
|
||||
redirect_to topic_path(@notification.notified_object.topic2)
|
||||
when MAP_ACCESS_APPROVED, MAP_INVITE_TO_EDIT
|
||||
redirect_to map_path(@notification.notified_object.map)
|
||||
when TOPIC_ADDED_TO_MAP
|
||||
redirect_to map_path(@notification.notified_object.map)
|
||||
when TOPIC_CONNECTED_1
|
||||
redirect_to topic_path(@notification.notified_object.topic1)
|
||||
when TOPIC_CONNECTED_2
|
||||
redirect_to topic_path(@notification.notified_object.topic2)
|
||||
end
|
||||
end
|
||||
format.json do
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class SearchController < ApplicationController
|
||||
include TopicsHelper
|
||||
include MapsHelper
|
||||
|
@ -7,7 +8,7 @@ class SearchController < ApplicationController
|
|||
|
||||
before_action :authorize_search
|
||||
after_action :verify_authorized
|
||||
after_action :verify_policy_scoped, only: [:maps, :mappers, :synapses, :topics]
|
||||
after_action :verify_policy_scoped, only: %i(maps mappers synapses topics)
|
||||
|
||||
# get /search/topics?term=SOMETERM
|
||||
def topics
|
||||
|
@ -140,13 +141,13 @@ class SearchController < ApplicationController
|
|||
topic1id = params[:topic1id]
|
||||
topic2id = params[:topic2id]
|
||||
|
||||
if term && !term.empty?
|
||||
if term.present?
|
||||
@synapses = policy_scope(Synapse)
|
||||
.where('LOWER("desc") like ?', '%' + term.downcase.strip + '%')
|
||||
.order('"desc"')
|
||||
|
||||
@synapses = @synapses.uniq(&:desc)
|
||||
elsif topic1id && !topic1id.empty?
|
||||
elsif topic1id.present?
|
||||
one = policy_scope(Synapse).where(topic1_id: topic1id, topic2_id: topic2id)
|
||||
two = policy_scope(Synapse).where(topic2_id: topic1id, topic1_id: topic2id)
|
||||
@synapses = one + two
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class StarsController < ApplicationController
|
||||
before_action :require_user
|
||||
before_action :set_map
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class SynapsesController < ApplicationController
|
||||
include TopicsHelper
|
||||
|
||||
before_action :require_user, only: [:create, :update, :destroy]
|
||||
before_action :require_user, only: %i(create update destroy)
|
||||
after_action :verify_authorized, except: :index
|
||||
after_action :verify_policy_scoped, only: :index
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class TokensController < ApplicationController
|
||||
before_action :require_user, only: [:new]
|
||||
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class TopicsController < ApplicationController
|
||||
include TopicsHelper
|
||||
|
||||
before_action :require_user, only: [:create, :update, :destroy, :follow, :unfollow]
|
||||
before_action :set_topic, only: [:show, :update, :relative_numbers,
|
||||
:relatives, :network, :destroy,
|
||||
:follow, :unfollow, :unfollow_from_email]
|
||||
before_action :require_user, only: %i(create update destroy follow unfollow)
|
||||
before_action :set_topic, only: %i(show update relative_numbers
|
||||
relatives network destroy
|
||||
follow unfollow unfollow_from_email)
|
||||
after_action :verify_authorized, except: :autocomplete_topic
|
||||
|
||||
respond_to :html, :js, :json
|
||||
|
@ -13,7 +14,7 @@ class TopicsController < ApplicationController
|
|||
# GET /topics/autocomplete_topic
|
||||
def autocomplete_topic
|
||||
term = params[:term]
|
||||
if term && !term.empty?
|
||||
if term.present?
|
||||
topics = policy_scope(Topic)
|
||||
.where('LOWER("name") like ?', term.downcase + '%')
|
||||
.order('"name"')
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Users
|
||||
class PasswordsController < Devise::PasswordsController
|
||||
protected
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Users
|
||||
class RegistrationsController < Devise::RegistrationsController
|
||||
before_action :configure_sign_up_params, only: [:create]
|
||||
|
@ -29,7 +30,7 @@ module Users
|
|||
end
|
||||
|
||||
def configure_sign_up_params
|
||||
devise_parameter_sanitizer.permit(:sign_up, keys: [:name, :joinedwithcode])
|
||||
devise_parameter_sanitizer.permit(:sign_up, keys: %i(name joinedwithcode))
|
||||
end
|
||||
|
||||
def configure_account_update_params
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Users
|
||||
class SessionsController < Devise::SessionsController
|
||||
after_action :store_location, only: [:new]
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class UsersController < ApplicationController
|
||||
before_action :require_user, only: [:edit, :update, :updatemetacodes, :update_metacode_focus]
|
||||
before_action :require_user, only: %i(edit update updatemetacodes update_metacode_focus)
|
||||
|
||||
respond_to :html, :json
|
||||
|
||||
|
@ -100,7 +101,7 @@ class UsersController < ApplicationController
|
|||
@user.settings.metacode_focus = params[:value]
|
||||
@user.save
|
||||
respond_to do |format|
|
||||
format.json { render json: { success: "success" }}
|
||||
format.json { render json: { success: 'success' } }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class NotificationDecorator
|
||||
class << self
|
||||
def decorate(notification, receipt)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ApplicationHelper
|
||||
def invite_link
|
||||
"#{request.base_url}/join" + (current_user ? "?code=#{current_user.code}" : '')
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module ContentHelper
|
||||
def resource_name
|
||||
:user
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module DeviseHelper
|
||||
def devise_error_messages!
|
||||
resource.errors.to_a[0]
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module InMetacodeSetsHelper
|
||||
end
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MainHelper
|
||||
end
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MapMailerHelper
|
||||
def access_approved_subject(map)
|
||||
map.name + ' - access approved'
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MappingHelper
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MapsHelper
|
||||
# JSON autocomplete format for typeahead
|
||||
def autocomplete_map_array_json(maps)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module MetacodesHelper
|
||||
def metacodeset
|
||||
metacodes = current_user.settings.metacodes
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module SynapsesHelper
|
||||
## this one is for building our custom JSON autocomplete format for typeahead
|
||||
def autocomplete_synapse_generic_json(unique)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module TopicMailerHelper
|
||||
def added_to_map_subject(topic, map)
|
||||
topic.name + ' was added to map ' + map.name
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module TopicsHelper
|
||||
## this one is for building our custom JSON autocomplete format for typeahead
|
||||
def autocomplete_array_json(topics)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module UsersHelper
|
||||
# build custom json autocomplete for typeahead
|
||||
def autocomplete_user_array_json(users)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationMailer < ActionMailer::Base
|
||||
default from: 'team@metamaps.cc'
|
||||
layout 'mailer'
|
||||
|
@ -6,24 +7,24 @@ class ApplicationMailer < ActionMailer::Base
|
|||
class << self
|
||||
def mail_for_notification(notification)
|
||||
case notification.notification_code
|
||||
when MAP_ACCESS_REQUEST
|
||||
request = notification.notified_object
|
||||
MapMailer.access_request(request)
|
||||
when MAP_ACCESS_APPROVED
|
||||
request = notification.notified_object
|
||||
MapMailer.access_approved(request)
|
||||
when MAP_INVITE_TO_EDIT
|
||||
user_map = notification.notified_object
|
||||
MapMailer.invite_to_edit(user_map)
|
||||
when TOPIC_ADDED_TO_MAP
|
||||
event = notification.notified_object
|
||||
TopicMailer.added_to_map(event, notification.recipients[0])
|
||||
when TOPIC_CONNECTED_1
|
||||
synapse = notification.notified_object
|
||||
TopicMailer.connected(synapse, synapse.topic1, notification.recipients[0])
|
||||
when TOPIC_CONNECTED_2
|
||||
synapse = notification.notified_object
|
||||
TopicMailer.connected(synapse, synapse.topic2, notification.recipients[0])
|
||||
when MAP_ACCESS_REQUEST
|
||||
request = notification.notified_object
|
||||
MapMailer.access_request(request)
|
||||
when MAP_ACCESS_APPROVED
|
||||
request = notification.notified_object
|
||||
MapMailer.access_approved(request)
|
||||
when MAP_INVITE_TO_EDIT
|
||||
user_map = notification.notified_object
|
||||
MapMailer.invite_to_edit(user_map)
|
||||
when TOPIC_ADDED_TO_MAP
|
||||
event = notification.notified_object
|
||||
TopicMailer.added_to_map(event, notification.recipients[0])
|
||||
when TOPIC_CONNECTED_1
|
||||
synapse = notification.notified_object
|
||||
TopicMailer.connected(synapse, synapse.topic1, notification.recipients[0])
|
||||
when TOPIC_CONNECTED_2
|
||||
synapse = notification.notified_object
|
||||
TopicMailer.connected(synapse, synapse.topic2, notification.recipients[0])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MapActivityMailer < ApplicationMailer
|
||||
default from: 'team@metamaps.cc'
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MapMailer < ApplicationMailer
|
||||
include MapMailerHelper
|
||||
default from: 'team@metamaps.cc'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class TopicMailer < ApplicationMailer
|
||||
include TopicMailerHelper
|
||||
default from: 'team@metamaps.cc'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class AccessRequest < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :map
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationRecord < ActiveRecord::Base
|
||||
self.abstract_class = true
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Attachment < ApplicationRecord
|
||||
belongs_to :attachable, polymorphic: true
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Attachable
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Routing
|
||||
extend ActiveSupport::Concern
|
||||
include Rails.application.routes.url_helpers
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Event < ApplicationRecord
|
||||
KINDS = %w(user_present_on_map user_not_present_on_map
|
||||
conversation_started_on_map
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class ConversationStartedOnMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class SynapseAddedToMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class SynapseRemovedFromMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class SynapseUpdated < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class TopicAddedToMap < Event
|
||||
after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class TopicMovedOnMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class TopicRemovedFromMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class TopicUpdated < Event
|
||||
#after_create :notify_users!
|
||||
# after_create :notify_users!
|
||||
|
||||
def self.publish!(topic, user, meta)
|
||||
create!(kind: 'topic_updated',
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class UserNotPresentOnMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Events
|
||||
class UserPresentOnMap < Event
|
||||
# after_create :notify_users!
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
class Follow < ApplicationRecord
|
||||
|
||||
class Follow < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :followed, polymorphic: true
|
||||
has_one :follow_reason, dependent: :destroy
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class FollowReason < ApplicationRecord
|
||||
REASONS = %w(created commented contributed followed shared_on starred).freeze
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class InMetacodeSet < ApplicationRecord
|
||||
belongs_to :metacode, class_name: 'Metacode', foreign_key: 'metacode_id'
|
||||
belongs_to :metacode_set, class_name: 'MetacodeSet', foreign_key: 'metacode_set_id'
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Map < ApplicationRecord
|
||||
ATTRS_TO_WATCH = %w(name desc permission).freeze
|
||||
|
||||
|
@ -15,7 +16,7 @@ class Map < ApplicationRecord
|
|||
has_many :messages, as: :resource, dependent: :destroy
|
||||
has_many :stars, dependent: :destroy
|
||||
has_many :follows, as: :followed, dependent: :destroy
|
||||
has_many :followers, :through => :follows, source: :user
|
||||
has_many :followers, through: :follows, source: :user
|
||||
|
||||
has_many :access_requests, dependent: :destroy
|
||||
has_many :user_maps, dependent: :destroy
|
||||
|
@ -89,10 +90,10 @@ class Map < ApplicationRecord
|
|||
|
||||
def as_json(_options = {})
|
||||
json = super(
|
||||
methods: [:user_name, :user_image, :star_count, :topic_count, :synapse_count,
|
||||
:contributor_count, :collaborator_ids, :screenshot_url],
|
||||
except: [:screenshot_content_type, :screenshot_file_size, :screenshot_file_name,
|
||||
:screenshot_updated_at]
|
||||
methods: %i(user_name user_image star_count topic_count synapse_count
|
||||
contributor_count collaborator_ids screenshot_url),
|
||||
except: %i(screenshot_content_type screenshot_file_size screenshot_file_name
|
||||
screenshot_updated_at)
|
||||
)
|
||||
json[:created_at_clean] = created_at_str
|
||||
json[:updated_at_clean] = updated_at_str
|
||||
|
@ -142,7 +143,7 @@ class Map < ApplicationRecord
|
|||
protected
|
||||
|
||||
def after_created
|
||||
FollowService.follow(self, self.user, 'created')
|
||||
FollowService.follow(self, user, 'created')
|
||||
# notify users following the map creator
|
||||
end
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Mapping < ApplicationRecord
|
||||
scope :topicmapping, -> { where(mappable_type: :Topic) }
|
||||
scope :synapsemapping, -> { where(mappable_type: :Synapse) }
|
||||
|
@ -24,7 +25,7 @@ class Mapping < ApplicationRecord
|
|||
end
|
||||
|
||||
def as_json(_options = {})
|
||||
super(methods: [:user_name, :user_image])
|
||||
super(methods: %i(user_name user_image))
|
||||
end
|
||||
|
||||
def after_created
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Message < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :resource, polymorphic: true
|
||||
|
@ -6,15 +7,14 @@ class Message < ApplicationRecord
|
|||
delegate :name, to: :user, prefix: true
|
||||
|
||||
after_create :after_created
|
||||
#after_create :after_created_async
|
||||
|
||||
# after_create :after_created_async
|
||||
|
||||
def user_image
|
||||
user.image.url
|
||||
end
|
||||
|
||||
def as_json(_options = {})
|
||||
json = super(methods: [:user_name, :user_image])
|
||||
json = super(methods: %i(user_name user_image))
|
||||
json
|
||||
end
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Metacode < ApplicationRecord
|
||||
has_many :in_metacode_sets
|
||||
has_many :metacode_sets, through: :in_metacode_sets
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class MetacodeSet < ApplicationRecord
|
||||
belongs_to :user
|
||||
has_many :in_metacode_sets
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class PermittedParams < Struct.new(:params)
|
||||
%w(map synapse topic mapping token).each do |kind|
|
||||
define_method(kind) do
|
||||
|
@ -15,18 +16,18 @@ class PermittedParams < Struct.new(:params)
|
|||
end
|
||||
|
||||
def map_attributes
|
||||
[:name, :desc, :permission, :arranged]
|
||||
%i(name desc permission arranged)
|
||||
end
|
||||
|
||||
def synapse_attributes
|
||||
[:desc, :category, :weight, :permission, :topic1_id, :topic2_id]
|
||||
%i(desc category weight permission topic1_id topic2_id)
|
||||
end
|
||||
|
||||
def topic_attributes
|
||||
[:name, :desc, :link, :permission, :metacode_id]
|
||||
%i(name desc link permission metacode_id)
|
||||
end
|
||||
|
||||
def mapping_attributes
|
||||
[:xloc, :yloc, :map_id, :mappable_type, :mappable_id]
|
||||
%i(xloc yloc map_id mappable_type mappable_id)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
# frozen_string_literal: true
|
||||
class Star < ActiveRecord::Base
|
||||
|
||||
class Star < ApplicationRecord
|
||||
belongs_to :user
|
||||
belongs_to :map
|
||||
validates :map, uniqueness: { scope: :user, message: 'You have already starred this map' }
|
||||
|
||||
#after_create :after_created_async
|
||||
#before_destroy :before_destroyed
|
||||
# after_create :after_created_async
|
||||
# before_destroy :before_destroyed
|
||||
|
||||
protected
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Synapse < ApplicationRecord
|
||||
ATTRS_TO_WATCH = %w(desc category permission defer_to_map_id).freeze
|
||||
|
||||
|
@ -38,7 +39,7 @@ class Synapse < ApplicationRecord
|
|||
|
||||
def collaborator_ids
|
||||
if defer_to_map
|
||||
defer_to_map.editors.select { |mapper| mapper != user }.map(&:id)
|
||||
defer_to_map.editors.reject { |mapper| mapper == user }.map(&:id)
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
@ -54,7 +55,7 @@ class Synapse < ApplicationRecord
|
|||
end
|
||||
|
||||
def as_json(_options = {})
|
||||
super(methods: [:user_name, :user_image, :collaborator_ids])
|
||||
super(methods: %i(user_name user_image collaborator_ids))
|
||||
end
|
||||
|
||||
def as_rdf
|
||||
|
@ -96,7 +97,7 @@ class Synapse < ApplicationRecord
|
|||
|
||||
def before_destroyed
|
||||
# hard to know how to do this yet, because the synapse actually gets destroyed
|
||||
#NotificationService.notify_followers(topic1, 'topic_disconnected', self)
|
||||
#NotificationService.notify_followers(topic2, 'topic_disconnected', self)
|
||||
# NotificationService.notify_followers(topic1, 'topic_disconnected', self)
|
||||
# NotificationService.notify_followers(topic2, 'topic_disconnected', self)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Token < ApplicationRecord
|
||||
belongs_to :user
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Topic < ApplicationRecord
|
||||
ATTRS_TO_WATCH = %w(name desc link metacode_id permission defer_to_map_id).freeze
|
||||
include TopicsHelper
|
||||
|
@ -16,7 +17,7 @@ class Topic < ApplicationRecord
|
|||
has_many :mappings, as: :mappable, dependent: :destroy
|
||||
has_many :maps, through: :mappings
|
||||
has_many :follows, as: :followed, dependent: :destroy
|
||||
has_many :followers, :through => :follows, source: :user
|
||||
has_many :followers, through: :follows, source: :user
|
||||
|
||||
belongs_to :metacode
|
||||
|
||||
|
@ -25,7 +26,7 @@ class Topic < ApplicationRecord
|
|||
after_create :after_created_async
|
||||
after_update :after_updated
|
||||
after_update :after_updated_async
|
||||
#before_destroy :before_destroyed
|
||||
# before_destroy :before_destroyed
|
||||
|
||||
validates :permission, presence: true
|
||||
validates :permission, inclusion: { in: Perm::ISSIONS.map(&:to_s) }
|
||||
|
@ -69,7 +70,7 @@ class Topic < ApplicationRecord
|
|||
end
|
||||
|
||||
def as_json(options = {})
|
||||
super(methods: [:user_name, :user_image, :collaborator_ids])
|
||||
super(methods: %i(user_name user_image collaborator_ids))
|
||||
.merge(inmaps: inmaps(options[:user]), inmapsLinks: inmapsLinks(options[:user]),
|
||||
map_count: map_count(options[:user]), synapse_count: synapse_count(options[:user]))
|
||||
end
|
||||
|
@ -89,7 +90,7 @@ class Topic < ApplicationRecord
|
|||
|
||||
def collaborator_ids
|
||||
if defer_to_map
|
||||
defer_to_map.editors.select { |mapper| mapper != user }.map(&:id)
|
||||
defer_to_map.editors.reject { |mapper| mapper == user }.map(&:id)
|
||||
else
|
||||
[]
|
||||
end
|
||||
|
@ -156,7 +157,7 @@ class Topic < ApplicationRecord
|
|||
end
|
||||
|
||||
def after_created_async
|
||||
FollowService.follow(self, self.user, 'created')
|
||||
FollowService.follow(self, user, 'created')
|
||||
# notify users following the topic creator
|
||||
end
|
||||
handle_asynchronously :after_created_async
|
||||
|
@ -183,6 +184,6 @@ class Topic < ApplicationRecord
|
|||
|
||||
def before_destroyed
|
||||
# hard to know how to do this yet, because the topic actually gets destroyed
|
||||
#NotificationService.notify_followers(self, 'topic_deleted', ?)
|
||||
# NotificationService.notify_followers(self, 'topic_deleted', ?)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require 'open-uri'
|
||||
|
||||
class User < ApplicationRecord
|
||||
|
@ -53,24 +54,22 @@ class User < ApplicationRecord
|
|||
# override default as_json
|
||||
def as_json(_options = {})
|
||||
json = { id: id,
|
||||
name: name,
|
||||
image: image.url(:sixtyfour),
|
||||
admin: admin }
|
||||
if (_options[:follows])
|
||||
name: name,
|
||||
image: image.url(:sixtyfour),
|
||||
admin: admin }
|
||||
if _options[:follows]
|
||||
json['follows'] = {
|
||||
topics: following.active.where(followed_type: 'Topic').to_a.map(&:followed_id),
|
||||
maps: following.active.where(followed_type: 'Map').to_a.map(&:followed_id)
|
||||
}
|
||||
end
|
||||
if (_options[:follow_settings])
|
||||
json['follow_topic_on_created'] = settings.follow_topic_on_created == "1"
|
||||
json['follow_topic_on_contributed'] = settings.follow_topic_on_contributed == "1"
|
||||
json['follow_map_on_created'] = settings.follow_map_on_created == "1"
|
||||
json['follow_map_on_contributed'] = settings.follow_map_on_contributed == "1"
|
||||
end
|
||||
if (_options[:email])
|
||||
json['email'] = email
|
||||
if _options[:follow_settings]
|
||||
json['follow_topic_on_created'] = settings.follow_topic_on_created == '1'
|
||||
json['follow_topic_on_contributed'] = settings.follow_topic_on_contributed == '1'
|
||||
json['follow_map_on_created'] = settings.follow_map_on_created == '1'
|
||||
json['follow_map_on_contributed'] = settings.follow_map_on_contributed == '1'
|
||||
end
|
||||
json['email'] = email if _options[:email]
|
||||
json
|
||||
end
|
||||
|
||||
|
@ -134,19 +133,19 @@ class User < ApplicationRecord
|
|||
|
||||
def has_map_open(map)
|
||||
latestEvent = Event.where(map: map, user: self)
|
||||
.where(kind: ['user_present_on_map', 'user_not_present_on_map'])
|
||||
.where(kind: %w(user_present_on_map user_not_present_on_map))
|
||||
.order(:created_at)
|
||||
.last
|
||||
latestEvent && latestEvent.kind == 'user_present_on_map'
|
||||
end
|
||||
|
||||
def has_map_with_synapse_open(synapse)
|
||||
synapse.maps.any?{|map| has_map_open(map)}
|
||||
synapse.maps.any? { |map| has_map_open(map) }
|
||||
end
|
||||
|
||||
def settings
|
||||
self[:settings] = UserPreference.new if self[:settings].nil?
|
||||
if not self[:settings].respond_to?(:follow_topic_on_created)
|
||||
unless self[:settings].respond_to?(:follow_topic_on_created)
|
||||
self[:settings].initialize_follow_settings
|
||||
end
|
||||
self[:settings]
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class UserMap < ApplicationRecord
|
||||
belongs_to :map
|
||||
belongs_to :user
|
||||
|
@ -18,7 +19,7 @@ class UserMap < ApplicationRecord
|
|||
def after_created_async
|
||||
FollowService.follow(map, user, 'shared_on')
|
||||
if access_request
|
||||
NotificationService.access_approved(self.access_request)
|
||||
NotificationService.access_approved(access_request)
|
||||
else
|
||||
NotificationService.invite_to_edit(self)
|
||||
end
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class UserPreference
|
||||
attr_accessor :metacodes, :metacode_focus, :follow_topic_on_created, :follow_topic_on_contributed,
|
||||
:follow_map_on_created, :follow_map_on_contributed
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhook < ApplicationRecord
|
||||
belongs_to :hookable, polymorphic: true
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
Webhooks::Slack::Base = Struct.new(:webhook, :event) do
|
||||
include Routing
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::ConversationStartedOnMap < Webhooks::Slack::Base
|
||||
def text
|
||||
"There is a live conversation starting on map *#{event.map.name}*. #{view_map_on_metamaps('Join in!')}"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::SynapseAddedToMap < Webhooks::Slack::Base
|
||||
def text
|
||||
connector = eventable.desc.empty? ? '->' : eventable.desc
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::SynapseRemovedFromMap < Webhooks::Slack::Base
|
||||
def text
|
||||
connector = eventable.desc.empty? ? '->' : eventable.desc
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::TopicAddedToMap < Webhooks::Slack::Base
|
||||
def text
|
||||
"*#{eventable.name}* was added by *#{event.user.name}* to the map *#{view_map_on_metamaps}*"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::TopicMovedOnMap < Webhooks::Slack::Base
|
||||
def text
|
||||
"*#{eventable.name}* was moved by *#{event.user.name}* on the map *#{view_map_on_metamaps}*"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::TopicRemovedFromMap < Webhooks::Slack::Base
|
||||
def text
|
||||
"*#{eventable.name}* was removed by *#{event.user.name}* from the map *#{view_map_on_metamaps}*"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class Webhooks::Slack::UserPresentOnMap < Webhooks::Slack::Base
|
||||
def text
|
||||
"Mapper *#{event.user.name}* has joined the map *#{event.map.name}*. #{view_map_on_metamaps('Map with them')}"
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ApplicationPolicy
|
||||
attr_reader :user, :record
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class ExplorePolicy < ApplicationPolicy
|
||||
def active?
|
||||
true
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
class HackPolicy < ApplicationPolicy
|
||||
def load_url_title?
|
||||
true
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue