From c7343761aa1d1398fd129fb94464a26c0bdaf68e Mon Sep 17 00:00:00 2001 From: Devin Howard Date: Sat, 20 Aug 2016 12:32:18 +0800 Subject: [PATCH] module Api::V1 --- app/controllers/api/mappings_controller.rb | 2 - app/controllers/api/maps_controller.rb | 2 - app/controllers/api/restful_controller.rb | 46 ---------------- app/controllers/api/synapses_controller.rb | 2 - app/controllers/api/tokens_controller.rb | 17 ------ app/controllers/api/topics_controller.rb | 2 - app/controllers/api/v1/mappings_controller.rb | 6 +++ app/controllers/api/v1/maps_controller.rb | 6 +++ app/controllers/api/v1/restful_controller.rb | 54 +++++++++++++++++++ app/controllers/api/v1/synapses_controller.rb | 6 +++ app/controllers/api/v1/tokens_controller.rb | 17 ++++++ app/controllers/api/v1/topics_controller.rb | 6 +++ app/serializers/api/v1/event_serializer.rb | 18 +++++++ app/serializers/api/v1/map_serializer.rb | 19 +++++++ app/serializers/api/v1/mapping_serializer.rb | 22 ++++++++ app/serializers/api/v1/metacode_serializer.rb | 11 ++++ app/serializers/api/v1/synapse_serializer.rb | 17 ++++++ app/serializers/api/v1/token_serializer.rb | 11 ++++ app/serializers/api/v1/topic_serializer.rb | 16 ++++++ app/serializers/api/v1/user_serializer.rb | 19 +++++++ app/serializers/api/v1/webhook_serializer.rb | 7 +++ app/serializers/event_serializer.rb | 14 ----- app/serializers/map_serializer.rb | 15 ------ app/serializers/mapping_serializer.rb | 18 ------- app/serializers/metacode_serializer.rb | 7 --- app/serializers/synapse_serializer.rb | 13 ----- app/serializers/token_serializer.rb | 7 --- app/serializers/topic_serializer.rb | 12 ----- app/serializers/user_serializer.rb | 15 ------ app/serializers/webhook_serializer.rb | 3 -- config/routes.rb | 16 +++--- 31 files changed, 244 insertions(+), 182 deletions(-) delete mode 100644 app/controllers/api/mappings_controller.rb delete mode 100644 app/controllers/api/maps_controller.rb delete mode 100644 app/controllers/api/restful_controller.rb delete mode 100644 app/controllers/api/synapses_controller.rb delete mode 100644 app/controllers/api/tokens_controller.rb delete mode 100644 app/controllers/api/topics_controller.rb create mode 100644 app/controllers/api/v1/mappings_controller.rb create mode 100644 app/controllers/api/v1/maps_controller.rb create mode 100644 app/controllers/api/v1/restful_controller.rb create mode 100644 app/controllers/api/v1/synapses_controller.rb create mode 100644 app/controllers/api/v1/tokens_controller.rb create mode 100644 app/controllers/api/v1/topics_controller.rb create mode 100644 app/serializers/api/v1/event_serializer.rb create mode 100644 app/serializers/api/v1/map_serializer.rb create mode 100644 app/serializers/api/v1/mapping_serializer.rb create mode 100644 app/serializers/api/v1/metacode_serializer.rb create mode 100644 app/serializers/api/v1/synapse_serializer.rb create mode 100644 app/serializers/api/v1/token_serializer.rb create mode 100644 app/serializers/api/v1/topic_serializer.rb create mode 100644 app/serializers/api/v1/user_serializer.rb create mode 100644 app/serializers/api/v1/webhook_serializer.rb delete mode 100644 app/serializers/event_serializer.rb delete mode 100644 app/serializers/map_serializer.rb delete mode 100644 app/serializers/mapping_serializer.rb delete mode 100644 app/serializers/metacode_serializer.rb delete mode 100644 app/serializers/synapse_serializer.rb delete mode 100644 app/serializers/token_serializer.rb delete mode 100644 app/serializers/topic_serializer.rb delete mode 100644 app/serializers/user_serializer.rb delete mode 100644 app/serializers/webhook_serializer.rb diff --git a/app/controllers/api/mappings_controller.rb b/app/controllers/api/mappings_controller.rb deleted file mode 100644 index 15fde6bc..00000000 --- a/app/controllers/api/mappings_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Api::MappingsController < API::RestfulController -end diff --git a/app/controllers/api/maps_controller.rb b/app/controllers/api/maps_controller.rb deleted file mode 100644 index bb2d553d..00000000 --- a/app/controllers/api/maps_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Api::MapsController < API::RestfulController -end diff --git a/app/controllers/api/restful_controller.rb b/app/controllers/api/restful_controller.rb deleted file mode 100644 index d4b1025a..00000000 --- a/app/controllers/api/restful_controller.rb +++ /dev/null @@ -1,46 +0,0 @@ -class API::RestfulController < ActionController::Base - include Pundit - include PunditExtra - - snorlax_used_rest! - - load_and_authorize_resource only: [:show, :update, :destroy] - - def create - instantiate_resource - resource.user = current_user - authorize resource - create_action - respond_with_resource - end - - private - - def accessible_records - if current_user - visible_records - else - public_records - end - end - - def current_user - super || token_user || doorkeeper_user || nil - end - - def token_user - token = params[:access_token] - access_token = Token.find_by_token(token) - @token_user ||= access_token.user if access_token - end - - def doorkeeper_user - return unless doorkeeper_token.present? - doorkeeper_render_error unless valid_doorkeeper_token? - @doorkeeper_user ||= User.find(doorkeeper_token.resource_owner_id) - end - - def permitted_params - @permitted_params ||= PermittedParams.new(params) - end -end diff --git a/app/controllers/api/synapses_controller.rb b/app/controllers/api/synapses_controller.rb deleted file mode 100644 index 47cb6056..00000000 --- a/app/controllers/api/synapses_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Api::SynapsesController < API::RestfulController -end diff --git a/app/controllers/api/tokens_controller.rb b/app/controllers/api/tokens_controller.rb deleted file mode 100644 index cea6ac5f..00000000 --- a/app/controllers/api/tokens_controller.rb +++ /dev/null @@ -1,17 +0,0 @@ -class Api::TokensController < API::RestfulController - def my_tokens - raise Pundit::NotAuthorizedError unless current_user - instantiate_collection page_collection: false, timeframe_collection: false - respond_with_collection - end - - private - - def resource_serializer - "#{resource_name}_serializer".camelize.constantize - end - - def visible_records - current_user.tokens - end -end diff --git a/app/controllers/api/topics_controller.rb b/app/controllers/api/topics_controller.rb deleted file mode 100644 index 4ccc619c..00000000 --- a/app/controllers/api/topics_controller.rb +++ /dev/null @@ -1,2 +0,0 @@ -class Api::TopicsController < API::RestfulController -end diff --git a/app/controllers/api/v1/mappings_controller.rb b/app/controllers/api/v1/mappings_controller.rb new file mode 100644 index 00000000..fca59c00 --- /dev/null +++ b/app/controllers/api/v1/mappings_controller.rb @@ -0,0 +1,6 @@ +module Api + module V1 + class MappingsController < RestfulController + end + end +end diff --git a/app/controllers/api/v1/maps_controller.rb b/app/controllers/api/v1/maps_controller.rb new file mode 100644 index 00000000..b50c1ee8 --- /dev/null +++ b/app/controllers/api/v1/maps_controller.rb @@ -0,0 +1,6 @@ +module Api + module V1 + class MapsController < RestfulController + end + end +end diff --git a/app/controllers/api/v1/restful_controller.rb b/app/controllers/api/v1/restful_controller.rb new file mode 100644 index 00000000..e0004444 --- /dev/null +++ b/app/controllers/api/v1/restful_controller.rb @@ -0,0 +1,54 @@ +module Api + module V1 + class RestfulController < ActionController::Base + include Pundit + include PunditExtra + + snorlax_used_rest! + + load_and_authorize_resource only: [:show, :update, :destroy] + + def create + instantiate_resource + resource.user = current_user + authorize resource + create_action + respond_with_resource + end + + private + + def accessible_records + if current_user + visible_records + else + public_records + end + end + + def current_user + super || token_user || doorkeeper_user || nil + end + + def resource_serializer + "Api::V1::#{resource_name.camelize}Serializer".constantize + end + + def token_user + token = params[:access_token] + access_token = Token.find_by_token(token) + @token_user ||= access_token.user if access_token + end + + def doorkeeper_user + return unless doorkeeper_token.present? + doorkeeper_render_error unless valid_doorkeeper_token? + @doorkeeper_user ||= User.find(doorkeeper_token.resource_owner_id) + end + + def permitted_params + @permitted_params ||= PermittedParams.new(params) + end + end + end +end diff --git a/app/controllers/api/v1/synapses_controller.rb b/app/controllers/api/v1/synapses_controller.rb new file mode 100644 index 00000000..a0979ed2 --- /dev/null +++ b/app/controllers/api/v1/synapses_controller.rb @@ -0,0 +1,6 @@ +module Api + module V1 + class SynapsesController < RestfulController + end + end +end diff --git a/app/controllers/api/v1/tokens_controller.rb b/app/controllers/api/v1/tokens_controller.rb new file mode 100644 index 00000000..020ee2c9 --- /dev/null +++ b/app/controllers/api/v1/tokens_controller.rb @@ -0,0 +1,17 @@ +module Api + module V1 + class TokensController < RestfulController + def my_tokens + raise Pundit::NotAuthorizedError unless current_user + instantiate_collection page_collection: false, timeframe_collection: false + respond_with_collection + end + + private + + def visible_records + current_user.tokens + end + end + end +end diff --git a/app/controllers/api/v1/topics_controller.rb b/app/controllers/api/v1/topics_controller.rb new file mode 100644 index 00000000..d05ba3f6 --- /dev/null +++ b/app/controllers/api/v1/topics_controller.rb @@ -0,0 +1,6 @@ +module Api + module V1 + class TopicsController < RestfulController + end + end +end diff --git a/app/serializers/api/v1/event_serializer.rb b/app/serializers/api/v1/event_serializer.rb new file mode 100644 index 00000000..69b34de0 --- /dev/null +++ b/app/serializers/api/v1/event_serializer.rb @@ -0,0 +1,18 @@ +module Api + module V1 + class EventSerializer < ActiveModel::Serializer + attributes :id, :sequence_id, :kind, :map_id, :created_at + + has_one :actor, serializer: UserSerializer, root: 'users' + has_one :map, serializer: MapSerializer + + def actor + object.user || object.eventable.try(:user) + end + + def map + object.eventable.try(:map) || object.eventable.map + end + end + end +end diff --git a/app/serializers/api/v1/map_serializer.rb b/app/serializers/api/v1/map_serializer.rb new file mode 100644 index 00000000..1f9ab8d0 --- /dev/null +++ b/app/serializers/api/v1/map_serializer.rb @@ -0,0 +1,19 @@ +module Api + module V1 + class MapSerializer < ActiveModel::Serializer + attributes :id, + :name, + :desc, + :permission, + :screenshot, + :created_at, + :updated_at + + has_many :topics, serializer: TopicSerializer + has_many :synapses, serializer: SynapseSerializer + has_many :mappings, serializer: MappingSerializer + has_many :contributors, root: :users, serializer: UserSerializer + has_many :collaborators, root: :users, serializer: UserSerializer + end + end +end diff --git a/app/serializers/api/v1/mapping_serializer.rb b/app/serializers/api/v1/mapping_serializer.rb new file mode 100644 index 00000000..d88856c4 --- /dev/null +++ b/app/serializers/api/v1/mapping_serializer.rb @@ -0,0 +1,22 @@ +module Api + module V1 + class MappingSerializer < ActiveModel::Serializer + attributes :id, + :xloc, + :yloc, + :created_at, + :updated_at, + :mappable_id, + :mappable_type + + has_one :user, serializer: UserSerializer + has_one :map, serializer: MapSerializer + + def filter(keys) + keys.delete(:xloc) unless object.mappable_type == 'Topic' + keys.delete(:yloc) unless object.mappable_type == 'Topic' + keys + end + end + end +end diff --git a/app/serializers/api/v1/metacode_serializer.rb b/app/serializers/api/v1/metacode_serializer.rb new file mode 100644 index 00000000..e071f7d8 --- /dev/null +++ b/app/serializers/api/v1/metacode_serializer.rb @@ -0,0 +1,11 @@ +module Api + module V1 + class MetacodeSerializer < ActiveModel::Serializer + attributes :id, + :name, + :manual_icon, + :color, + :aws_icon + end + end +end diff --git a/app/serializers/api/v1/synapse_serializer.rb b/app/serializers/api/v1/synapse_serializer.rb new file mode 100644 index 00000000..4c3bfa22 --- /dev/null +++ b/app/serializers/api/v1/synapse_serializer.rb @@ -0,0 +1,17 @@ +module Api + module V1 + class SynapseSerializer < ActiveModel::Serializer + attributes :id, + :desc, + :category, + :weight, + :permission, + :created_at, + :updated_at + + has_one :topic1, root: :topics, serializer: TopicSerializer + has_one :topic2, root: :topics, serializer: TopicSerializer + has_one :user, serializer: UserSerializer + end + end +end diff --git a/app/serializers/api/v1/token_serializer.rb b/app/serializers/api/v1/token_serializer.rb new file mode 100644 index 00000000..117129f6 --- /dev/null +++ b/app/serializers/api/v1/token_serializer.rb @@ -0,0 +1,11 @@ +module Api + module V1 + class TokenSerializer < ActiveModel::Serializer + attributes :id, + :token, + :description, + :created_at, + :updated_at + end + end +end diff --git a/app/serializers/api/v1/topic_serializer.rb b/app/serializers/api/v1/topic_serializer.rb new file mode 100644 index 00000000..7fc09a97 --- /dev/null +++ b/app/serializers/api/v1/topic_serializer.rb @@ -0,0 +1,16 @@ +module Api + module V1 + class TopicSerializer < ActiveModel::Serializer + attributes :id, + :name, + :desc, + :link, + :permission, + :created_at, + :updated_at + + has_one :user, serializer: UserSerializer + has_one :metacode, serializer: MetacodeSerializer + end + end +end diff --git a/app/serializers/api/v1/user_serializer.rb b/app/serializers/api/v1/user_serializer.rb new file mode 100644 index 00000000..9090b697 --- /dev/null +++ b/app/serializers/api/v1/user_serializer.rb @@ -0,0 +1,19 @@ +module Api + module V1 + class UserSerializer < ActiveModel::Serializer + attributes :id, + :name, + :avatar, + :is_admin, + :generation + + def avatar + object.image.url(:sixtyfour) + end + + def is_admin + object.admin + end + end + end +end diff --git a/app/serializers/api/v1/webhook_serializer.rb b/app/serializers/api/v1/webhook_serializer.rb new file mode 100644 index 00000000..724522ad --- /dev/null +++ b/app/serializers/api/v1/webhook_serializer.rb @@ -0,0 +1,7 @@ +module Api + module V1 + class WebhookSerializer < ActiveModel::Serializer + attributes :text, :username, :icon_url # , :attachments + end + end +end diff --git a/app/serializers/event_serializer.rb b/app/serializers/event_serializer.rb deleted file mode 100644 index 891a1712..00000000 --- a/app/serializers/event_serializer.rb +++ /dev/null @@ -1,14 +0,0 @@ -class EventSerializer < ActiveModel::Serializer - attributes :id, :sequence_id, :kind, :map_id, :created_at - - has_one :actor, serializer: UserSerializer, root: 'users' - has_one :map, serializer: MapSerializer - - def actor - object.user || object.eventable.try(:user) - end - - def map - object.eventable.try(:map) || object.eventable.map - end -end diff --git a/app/serializers/map_serializer.rb b/app/serializers/map_serializer.rb deleted file mode 100644 index 67ed033a..00000000 --- a/app/serializers/map_serializer.rb +++ /dev/null @@ -1,15 +0,0 @@ -class MapSerializer < ActiveModel::Serializer - attributes :id, - :name, - :desc, - :permission, - :screenshot, - :created_at, - :updated_at - - has_many :topics, serializer: TopicSerializer - has_many :synapses, serializer: SynapseSerializer - has_many :mappings, serializer: MappingSerializer - has_many :contributors, root: :users, serializer: UserSerializer - has_many :collaborators, root: :users, serializer: UserSerializer -end diff --git a/app/serializers/mapping_serializer.rb b/app/serializers/mapping_serializer.rb deleted file mode 100644 index ae53b492..00000000 --- a/app/serializers/mapping_serializer.rb +++ /dev/null @@ -1,18 +0,0 @@ -class MappingSerializer < ActiveModel::Serializer - attributes :id, - :xloc, - :yloc, - :created_at, - :updated_at, - :mappable_id, - :mappable_type - - has_one :user, serializer: UserSerializer - has_one :map, serializer: MapSerializer - - def filter(keys) - keys.delete(:xloc) unless object.mappable_type == 'Topic' - keys.delete(:yloc) unless object.mappable_type == 'Topic' - keys - end -end diff --git a/app/serializers/metacode_serializer.rb b/app/serializers/metacode_serializer.rb deleted file mode 100644 index e6e60211..00000000 --- a/app/serializers/metacode_serializer.rb +++ /dev/null @@ -1,7 +0,0 @@ -class MetacodeSerializer < ActiveModel::Serializer - attributes :id, - :name, - :manual_icon, - :color, - :aws_icon -end diff --git a/app/serializers/synapse_serializer.rb b/app/serializers/synapse_serializer.rb deleted file mode 100644 index e33be293..00000000 --- a/app/serializers/synapse_serializer.rb +++ /dev/null @@ -1,13 +0,0 @@ -class SynapseSerializer < ActiveModel::Serializer - attributes :id, - :desc, - :category, - :weight, - :permission, - :created_at, - :updated_at - - has_one :topic1, root: :topics, serializer: TopicSerializer - has_one :topic2, root: :topics, serializer: TopicSerializer - has_one :user, serializer: UserSerializer -end diff --git a/app/serializers/token_serializer.rb b/app/serializers/token_serializer.rb deleted file mode 100644 index 4d593c0e..00000000 --- a/app/serializers/token_serializer.rb +++ /dev/null @@ -1,7 +0,0 @@ -class TokenSerializer < ActiveModel::Serializer - attributes :id, - :token, - :description, - :created_at, - :updated_at -end diff --git a/app/serializers/topic_serializer.rb b/app/serializers/topic_serializer.rb deleted file mode 100644 index 82a2a1b7..00000000 --- a/app/serializers/topic_serializer.rb +++ /dev/null @@ -1,12 +0,0 @@ -class TopicSerializer < ActiveModel::Serializer - attributes :id, - :name, - :desc, - :link, - :permission, - :created_at, - :updated_at - - has_one :user, serializer: UserSerializer - has_one :metacode, serializer: MetacodeSerializer -end diff --git a/app/serializers/user_serializer.rb b/app/serializers/user_serializer.rb deleted file mode 100644 index e2c69bac..00000000 --- a/app/serializers/user_serializer.rb +++ /dev/null @@ -1,15 +0,0 @@ -class UserSerializer < ActiveModel::Serializer - attributes :id, - :name, - :avatar, - :is_admin, - :generation - - def avatar - object.image.url(:sixtyfour) - end - - def is_admin - object.admin - end -end diff --git a/app/serializers/webhook_serializer.rb b/app/serializers/webhook_serializer.rb deleted file mode 100644 index 8108c86c..00000000 --- a/app/serializers/webhook_serializer.rb +++ /dev/null @@ -1,3 +0,0 @@ -class WebhookSerializer < ActiveModel::Serializer - attributes :text, :username, :icon_url # , :attachments -end diff --git a/config/routes.rb b/config/routes.rb index 83f03051..476d1942 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -9,13 +9,15 @@ Metamaps::Application.routes.draw do get 'search/mappers', to: 'main#searchmappers', as: :searchmappers get 'search/synapses', to: 'main#searchsynapses', as: :searchsynapses - namespace :api, path: '/api/v1', defaults: { format: :json } do - resources :maps, only: [:create, :show, :update, :destroy] - resources :synapses, only: [:create, :show, :update, :destroy] - resources :topics, only: [:create, :show, :update, :destroy] - resources :mappings, only: [:create, :show, :update, :destroy] - resources :tokens, only: [:create, :destroy] do - get :my_tokens, on: :collection + namespace :api, path: '/api', default: { format: :json } do + namespace :v1, path: '/v1' do + resources :maps, only: [:create, :show, :update, :destroy] + resources :synapses, only: [:create, :show, :update, :destroy] + resources :topics, only: [:create, :show, :update, :destroy] + resources :mappings, only: [:create, :show, :update, :destroy] + resources :tokens, only: [:create, :destroy] do + get :my_tokens, on: :collection + end end end