diff --git a/app/controllers/v1/licenses_controller.rb b/app/controllers/v1/licenses_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..f18dca6d1333a13e917a701c0130176515759e0d --- /dev/null +++ b/app/controllers/v1/licenses_controller.rb @@ -0,0 +1,60 @@ +class V1::LicensesController < ApplicationController + before_action :authenticate_user!, only: [:create, :update, :destroy] + before_action :set_license, only: [:show, :update, :destroy] + + # GET /licenses + # GET /licenses.json + def index + @licenses = License.all + + render json: @licenses + end + + # GET /licenses/1 + # GET /licenses/1.json + def show + render json: @license + end + + # POST /licenses + # POST /licenses.json + def create + @license = License.new(license_params) + + if @license.save + render json: @license, status: :created + else + render json: @license.errors, status: :unprocessable_entity + end + end + + # PATCH/PUT /licenses/1 + # PATCH/PUT /licenses/1.json + def update + @license = License.find(params[:id]) + + if @license.update(license_params) + head :no_content + else + render json: @license.errors, status: :unprocessable_entity + end + end + + # DELETE /licenses/1 + # DELETE /licenses/1.json + def destroy + @license.destroy + + head :no_content + end + + private + + def set_license + @license = License.find(params[:id]) + end + + def license_params + params.require(:license).permit(:name, :description, :url, :image_url) + end +end diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb index 3722e1b562449bf29850655909fa5f0edbd04865..cab9c1ed19cc28c288087b2cd7841f55a370f5be 100644 --- a/app/models/learning_object.rb +++ b/app/models/learning_object.rb @@ -51,6 +51,7 @@ class LearningObject < ActiveRecord::Base belongs_to :publisher, polymorphic: true belongs_to :language + belongs_to :license belongs_to :object_type belongs_to :attachment, class_name: 'LearningObject::Attachment' diff --git a/app/models/license.rb b/app/models/license.rb new file mode 100644 index 0000000000000000000000000000000000000000..5bc15243c08c0d622808a74920fa68bba4ca0776 --- /dev/null +++ b/app/models/license.rb @@ -0,0 +1,3 @@ +class License < ActiveRecord::Base + validates :name, presence: true +end diff --git a/app/policies/license_policy.rb b/app/policies/license_policy.rb new file mode 100644 index 0000000000000000000000000000000000000000..adb7750ca3bdd3402ead90e2f67e32907d7b7e76 --- /dev/null +++ b/app/policies/license_policy.rb @@ -0,0 +1,21 @@ +class LicensePolicy < ApplicationPolicy + def index? + record + end + + def show? + record + end + + def create? + record if user.is_admin? + end + + def update? + record if user.is_admin? + end + + def destroy? + record if user.is_admin? + end +end diff --git a/app/serializers/learning_object_obaa_serializer.rb b/app/serializers/learning_object_obaa_serializer.rb index 9558ff4a27ca44e1f9dd5f8f558e583b443dc312..5944fb49f9dcbc41dce8d80abba8bc63efe0931c 100644 --- a/app/serializers/learning_object_obaa_serializer.rb +++ b/app/serializers/learning_object_obaa_serializer.rb @@ -1,11 +1,6 @@ class LearningObjectObaaSerializer < ActiveModel::Serializer # "educational": { # "description": "? não existe no PortalMecHomologa" -# }, -# "rights": { # nao existe no PortalMecHomologa -# "copyrightAndOhterRestrictions":"true", -# "cost": "false", -# "description": "nome da licença" # }, def general @@ -38,6 +33,14 @@ class LearningObjectObaaSerializer < ActiveModel::Serializer } end + def rights + { + copyrightAndOhterRestrictions: 'true', + cost: 'false', + description: object.license.try(:name) + } + end + def metametadata { identifier: { @@ -57,7 +60,7 @@ class LearningObjectObaaSerializer < ActiveModel::Serializer end # attributes :id , :name, :created_at, :updated_at, :description, :author, :score, :likes_count - attributes :id, :general, :identifier, :technical, :metametadata + attributes :id, :general, :identifier, :technical, :rights, :metametadata # has_many :tags # has_many :attachments diff --git a/app/serializers/learning_object_serializer.rb b/app/serializers/learning_object_serializer.rb index f20e83db71d9f3957e88db3d25bd048781cc2411..ddfb352bfef79ee1dca9bcbc815434be1e1d52a1 100644 --- a/app/serializers/learning_object_serializer.rb +++ b/app/serializers/learning_object_serializer.rb @@ -7,7 +7,7 @@ class LearningObjectSerializer < ActiveModel::Serializer object.default_attachment.try(:retrieve_url) end - attributes :id, :name, :description, :author, :thumbnail, :publisher, :language, :default_location, :default_mime_type, :score, :likes_count, :shares_count, :created_at, :updated_at + attributes :id, :name, :description, :author, :thumbnail, :publisher, :language, :default_location, :default_mime_type, :score, :license, :likes_count, :shares_count, :created_at, :updated_at has_many :tags has_many :attachments diff --git a/app/serializers/license_serializer.rb b/app/serializers/license_serializer.rb new file mode 100644 index 0000000000000000000000000000000000000000..52cc601b822ac7fad57128b4b42e49524482fd77 --- /dev/null +++ b/app/serializers/license_serializer.rb @@ -0,0 +1,3 @@ +class LicenseSerializer < ActiveModel::Serializer + attributes :id, :name, :description, :url, :image_url +end diff --git a/config/routes.rb b/config/routes.rb index 6fdb5623de22e551215a0815e980ab058584c575..3d1d7ced7c04f5118bc2db548cac8cf9c24cb62c 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -62,12 +62,13 @@ Rails.application.routes.draw do get :users, to: 'institutions#users' end end - resources :scores, only: [:index, :update] - resources :object_types, except: [:new, :edit] - resources :mime_types, except: [:new, :edit] - resources :languages, except: [:new, :edit] resources :complaints, only: [:index, :create] + resources :languages, except: [:new, :edit] + resources :licenses, except: [:new, :edit] + resources :mime_types, except: [:new, :edit] + resources :object_types, except: [:new, :edit] resources :roles, except: [:new, :edit] + resources :scores, only: [:index, :update] post '/package', to: 'packages#link' end diff --git a/db/migrate/20160516125724_create_licenses.rb b/db/migrate/20160516125724_create_licenses.rb new file mode 100644 index 0000000000000000000000000000000000000000..dd447797a2598788e75f7ec9bb89296fa7522691 --- /dev/null +++ b/db/migrate/20160516125724_create_licenses.rb @@ -0,0 +1,12 @@ +class CreateLicenses < ActiveRecord::Migration + def change + create_table :licenses do |t| + t.string :name, index: true + t.text :description + t.string :image_url + t.string :url + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20160516125800_add_license_to_learning_objects.rb b/db/migrate/20160516125800_add_license_to_learning_objects.rb new file mode 100644 index 0000000000000000000000000000000000000000..283adeecb97a22884a57837fdea4211d7e8e1e9f --- /dev/null +++ b/db/migrate/20160516125800_add_license_to_learning_objects.rb @@ -0,0 +1,5 @@ +class AddLicenseToLearningObjects < ActiveRecord::Migration + def change + add_reference :learning_objects, :license, index: true + end +end diff --git a/db/seeds.rb b/db/seeds.rb index 8259284babccce34d2a3b8b63af9301683277774..0cc0d52f1cfe1fb6431d0d6a224dd5cbcd6cc298 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -22,6 +22,7 @@ User.create( require_relative 'seeds/complaints' require_relative 'seeds/institutions' require_relative 'seeds/languages' +require_relative 'seeds/licenses' require_relative 'seeds/object_types' require_relative 'seeds/ratings' require_relative 'seeds/scores' diff --git a/db/seeds/licenses.rb b/db/seeds/licenses.rb new file mode 100644 index 0000000000000000000000000000000000000000..b670e4583944e2a1f170138b1a45a4130d492ec5 --- /dev/null +++ b/db/seeds/licenses.rb @@ -0,0 +1,10 @@ +License.create(name: 'CC BY', description: 'Creative Commons Atribuição', url: 'https://creativecommons.org/licenses/by/4.0/deed.pt_BR', image_url: 'https://licensebuttons.net/l/by/3.0/88x31.png') +License.create(name: 'CC BY-SA', description: 'Creative Commons Atribuição-CompartilhaIgual', url: 'https://creativecommons.org/licenses/by-sa/4.0/deed.pt_BR', image_url: 'https://licensebuttons.net/l/by-sa/3.0/88x31.png') +License.create(name: 'CC BY-ND', description: 'Creative Commons Atribuição-SemDerivações', url: 'https://creativecommons.org/licenses/by-nd/4.0/deed.pt_BR', image_url: 'https://licensebuttons.net/l/by-nd/3.0/88x31.png') +License.create(name: 'CC BY-NC', description: 'Creative Commons Atribuição-NãoComercial', url: 'https://creativecommons.org/licenses/by-nc/4.0/deed.pt_BR', image_url: 'https://licensebuttons.net/l/by-nc/3.0/88x31.png') +License.create(name: 'CC BY-NC-SA', description: 'Creative Commons Atribuição-NãoComercial-CompartilhaIgual', url: 'https://creativecommons.org/licenses/by-nc-sa/4.0/deed.pt_BR', image_url: 'https://licensebuttons.net/l/by-nc-sa/3.0/88x31.png') +License.create(name: 'CC BY-NC-ND', description: 'Creative Commons Atribuição-SemDerivações-SemDerivados', url: 'https://creativecommons.org/licenses/by-nc-nd/4.0/deed.pt_BR', image_url: 'https://licensebuttons.net/l/by-nc-nd/3.0/88x31.png') +License.create(name: 'MIT', description: 'MIT', url: 'https://opensource.org/licenses/MIT', image_url: '') +License.create(name: 'GPL-2.0', description: 'GNU General Public License v2', url: 'https://opensource.org/licenses/GPL-2.0', image_url: '') +License.create(name: 'GPL-3.0', description: 'GNU General Public License v3', url: 'https://opensource.org/licenses/GPL-3.0', image_url: '') +License.create(name: 'Apache', description: 'Apache v2', url: 'https://www.apache.org/licenses/LICENSE-2.0', image_url: '') diff --git a/test/controllers/v1/licenses_controller_test.rb b/test/controllers/v1/licenses_controller_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..6cd9d7a9347e87286ac40d67f80852d06311e095 --- /dev/null +++ b/test/controllers/v1/licenses_controller_test.rb @@ -0,0 +1,50 @@ +require 'test_helper' + +class V1::LicensesControllerTest < ActionController::TestCase + tests V1::LicensesController + include Devise::TestHelpers + + setup do + @license = licenses(:one) + end + + test "should get index" do + skip + get :index + assert_response :success + assert_not_nil assigns(:licenses) + end + + test "should create license" do + auth_request users(:admin) + + assert_difference('License.count') do + post :create, license: { description: @license.description, name: @license.name, url: @license.url, image_url: @license.image_url } + end + + assert_response 201 + end + + test "should show license" do + skip + get :show, id: @license + assert_response :success + end + + test "should update license" do + auth_request users(:admin) + + put :update, id: @license, license: { description: @license.description, name: @license.name, url: @license.url, image_url: @license.image_url } + assert_response 204 + end + + test "should destroy license" do + auth_request users(:admin) + + assert_difference('License.count', -1) do + delete :destroy, id: @license + end + + assert_response 204 + end +end diff --git a/test/fixtures/licenses.yml b/test/fixtures/licenses.yml new file mode 100644 index 0000000000000000000000000000000000000000..0d9a9e4790f4c916eb726c85610dbc31950bed49 --- /dev/null +++ b/test/fixtures/licenses.yml @@ -0,0 +1,13 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + name: MyString + description: MyText + url: MyString + image_url: MyString + +two: + name: MyString + description: MyText + url: MyString + image_url: MyString diff --git a/test/models/license_test.rb b/test/models/license_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..c56bac9d45cc94bcd2506e20ffad3061998c4f41 --- /dev/null +++ b/test/models/license_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class LicenseTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end