track forks (#994)

* track forks

* update api and docs

* fix tests
This commit is contained in:
Connor Turland 2016-12-18 16:17:51 -05:00 committed by GitHub
parent 33fc27ffd1
commit 68f0e91259
14 changed files with 46 additions and 7 deletions

View file

@ -124,7 +124,7 @@ class MapsController < ApplicationController
end
def create_map_params
params.permit(:name, :desc, :permission)
params.permit(:name, :desc, :permission, :source_id)
end
def update_map_params

View file

@ -1,6 +1,7 @@
# frozen_string_literal: true
class Map < ApplicationRecord
belongs_to :user
belongs_to :source, class_name: :Map
has_many :topicmappings, -> { Mapping.topicmapping }, class_name: :Mapping, dependent: :destroy
has_many :synapsemappings, -> { Mapping.synapsemapping }, class_name: :Mapping, dependent: :destroy

View file

@ -18,6 +18,7 @@ module Api
def self.embeddable
{
user: {},
source: {},
topics: {},
synapses: {},
mappings: {},

View file

@ -0,0 +1,5 @@
class AddSourceToMaps < ActiveRecord::Migration[5.0]
def change
add_reference :maps, :source, foreign_key: {to_table: :maps}
end
end

View file

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20161216174257) do
ActiveRecord::Schema.define(version: 20161218183817) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -151,6 +151,8 @@ ActiveRecord::Schema.define(version: 20161216174257) do
t.string "screenshot_content_type", limit: 255
t.integer "screenshot_file_size"
t.datetime "screenshot_updated_at"
t.integer "source_id"
t.index ["source_id"], name: "index_maps_on_source_id", using: :btree
t.index ["user_id"], name: "index_maps_on_user_id", using: :btree
end
@ -340,5 +342,6 @@ ActiveRecord::Schema.define(version: 20161216174257) do
add_foreign_key "mailboxer_notifications", "mailboxer_conversations", column: "conversation_id", name: "notifications_on_conversation_id"
add_foreign_key "mailboxer_receipts", "mailboxer_notifications", column: "notification_id", name: "receipts_on_notification_id"
add_foreign_key "mappings", "users", column: "updated_by_id"
add_foreign_key "maps", "maps", column: "source_id"
add_foreign_key "tokens", "users"
end

View file

@ -1,6 +1,6 @@
#type: collection
get:
is: [ searchable: { searchFields: "name, desc" }, embeddable: { embedFields: "user,topics,synapses,mappings,contributors,collaborators" }, orderable, pageable ]
is: [ searchable: { searchFields: "name, desc" }, embeddable: { embedFields: "user,source,topics,synapses,mappings,contributors,collaborators" }, orderable, pageable ]
securedBy: [ null, token, oauth_2_0, cookie ]
queryParameters:
user_id:
@ -23,6 +23,8 @@ post:
description: description
permission:
description: commons, public, or private
source_id:
description: the id of the map this map is a fork of
screenshot:
description: url to a screenshot of the map
contributor_ids:
@ -37,7 +39,7 @@ post:
/{id}:
#type: item
get:
is: [ embeddable: { embedFields: "user,topics,synapses,mappings,contributors,collaborators" } ]
is: [ embeddable: { embedFields: "user,source,topics,synapses,mappings,contributors,collaborators" } ]
securedBy: [ null, token, oauth_2_0, cookie ]
responses:
200:
@ -60,6 +62,9 @@ post:
screenshot:
description: url to a screenshot of the map
required: false
source_id:
description: the id of the map this map is a fork of
required: false
responses:
200:
body:
@ -81,6 +86,9 @@ post:
screenshot:
description: url to a screenshot of the map
required: false
source_id:
description: the id of the map this map is a fork of
required: false
responses:
200:
body:

View file

@ -9,6 +9,7 @@
"created_at": "2016-03-26T08:02:05.379Z",
"updated_at": "2016-03-27T07:20:18.047Z",
"user_id": 1234,
"source_id": null,
"topic_ids": [
58,
59

View file

@ -9,6 +9,7 @@
"created_at": "2016-03-26T08:02:05.379Z",
"updated_at": "2016-03-27T07:20:18.047Z",
"user_id": 1234,
"source_id": null,
"topic_ids": [
58,
59

View file

@ -10,6 +10,7 @@
"created_at": "2016-03-26T08:02:05.379Z",
"updated_at": "2016-03-27T07:20:18.047Z",
"user_id": 1234,
"source_id": 2,
"topic_ids": [
58,
59

View file

@ -33,6 +33,12 @@
"user": {
"$ref": "_user.json"
},
"source_id": {
"$ref": "_optid.json"
},
"source": {
"$ref": "_map.json"
},
"topic_ids": {
"type": "array",
"items": {
@ -111,6 +117,12 @@
{ "required": [ "user" ] }
]
},
{
"oneOf": [
{ "required": [ "source_id" ] },
{ "required": [ "source" ] }
]
},
{
"oneOf": [
{ "required": [ "topic_ids" ] },

View file

@ -0,0 +1,3 @@
{
"type": "integer|nil"
}

View file

@ -61,6 +61,7 @@ const CreateMap = {
if (GlobalUI.lightbox === 'forkmap') {
self.newMap.set('topicsToMap', self.topicsToMap)
self.newMap.set('synapsesToMap', self.synapsesToMap)
self.newMap.set('source_id', Active.Map.id)
}
var formId = GlobalUI.lightbox === 'forkmap' ? '#fork_map' : '#new_map'

View file

@ -5,7 +5,8 @@ require 'rails_helper'
RSpec.describe 'maps API', type: :request do
let(:user) { create(:user, admin: true) }
let(:token) { create(:token, user: user).token }
let(:map) { create(:map, user: user) }
let(:source) { create(:map, user: user) }
let(:map) { create(:map, user: user, source: source) }
describe 'GET /api/v2/maps' do
it 'returns all maps' do
@ -42,7 +43,7 @@ RSpec.describe 'maps API', type: :request do
expect(response).to have_http_status(:success)
expect(response).to match_json_schema(:map)
expect(Map.count).to eq 2
expect(Map.count).to eq 3
end
it 'PATCH /api/v2/maps/:id' do
@ -56,7 +57,7 @@ RSpec.describe 'maps API', type: :request do
delete "/api/v2/maps/#{map.id}", params: { access_token: token }
expect(response).to have_http_status(:no_content)
expect(Map.count).to eq 0
expect(Map.count).to eq 1
end
it 'POST /api/v2/maps/:id/stars' do

View file

@ -4,6 +4,7 @@ FactoryGirl.define do
sequence(:name) { |n| "Cool Map ##{n}" }
permission :commons
arranged { false }
source_id nil
desc ''
user
end