diff --git a/app/models/block.rb b/app/models/block.rb index 18ff28f..7a5dcc8 100644 --- a/app/models/block.rb +++ b/app/models/block.rb @@ -314,6 +314,14 @@ class Block < ApplicationRecord self.observers << block end + def api_content + nil + end + + def display_api_content_by_default? + false + end + private def home_page_path diff --git a/lib/noosfero/api/entities.rb b/lib/noosfero/api/entities.rb index 9943564..24650a4 100644 --- a/lib/noosfero/api/entities.rb +++ b/lib/noosfero/api/entities.rb @@ -88,6 +88,7 @@ module Noosfero root 'blocks', 'block' expose :id, :type, :settings, :position, :enabled expose :mirror, :mirror_block_id, :title + expose :api_content, if: lambda { |object, options| options[:display_api_content] || object.display_api_content_by_default? } end class Box < Entity diff --git a/lib/noosfero/api/v1/blocks.rb b/lib/noosfero/api/v1/blocks.rb index ad7490e..a32ed9e 100644 --- a/lib/noosfero/api/v1/blocks.rb +++ b/lib/noosfero/api/v1/blocks.rb @@ -9,7 +9,7 @@ module Noosfero if block.owner.kind_of?(Profile) return forbidden! unless block.owner.display_info_to?(current_person) end - present block, :with => Entities::Block + present block, :with => Entities::Block, display_api_content: true end end end diff --git a/test/api/blocks_test.rb b/test/api/blocks_test.rb index 57a0d46..fc9388e 100644 --- a/test/api/blocks_test.rb +++ b/test/api/blocks_test.rb @@ -62,4 +62,25 @@ class BlocksTest < ActiveSupport::TestCase json = JSON.parse(last_response.body) assert_equal block.id, json["block"]["id"] end + + should 'display api content by default' do + box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) + block = fast_create(Block, box_id: box.id) + get "/api/v1/blocks/#{block.id}?#{params.to_query}" + json = JSON.parse(last_response.body) + assert json["block"].key?('api_content') + end + + should 'display api content of a specific block' do + class SomeBlock < Block + def api_content + {some_content: { name: 'test'} } + end + end + box = fast_create(Box, :owner_id => environment.id, :owner_type => Environment.name) + block = fast_create(SomeBlock, box_id: box.id) + get "/api/v1/blocks/#{block.id}?#{params.to_query}" + json = JSON.parse(last_response.body) + assert_equal "test", json["block"]["api_content"]["some_content"]["name"] + end end diff --git a/test/api/boxes_test.rb b/test/api/boxes_test.rb index 1fa99f1..713a40d 100644 --- a/test/api/boxes_test.rb +++ b/test/api/boxes_test.rb @@ -38,4 +38,13 @@ class BoxesTest < ActiveSupport::TestCase assert_equal box.id, json["boxes"].first["id"] end + should 'not display block api_content by default' do + Environment.delete_all + environment = fast_create(Environment, :is_default => true) + box = fast_create(Box, :owner_id => environment.id, :owner_type => 'Environment') + block = fast_create(Block, box_id: box.id) + get "/api/v1/environments/default/boxes?#{params.to_query}" + json = JSON.parse(last_response.body) + assert !json["boxes"].first["blocks"].first.key?('api_content') + end end -- libgit2 0.21.2