Commit c31fef048a61dff9ed08b65db64f6e3becd9e1a9
1 parent
529ab619
Exists in
master
and in
55 other branches
Add software communities endpoint to API
Signed-off-by: Marcos Ronaldo <marcos.rpj2@gmail.com> Signed-off-by: Simião Carvalho <simiaosimis@gmail.com>
Showing
4 changed files
with
72 additions
and
0 deletions
Show diff stats
src/noosfero-spb/software_communities/lib/software_communities_plugin.rb
... | ... | @@ -17,6 +17,10 @@ class SoftwareCommunitiesPlugin < Noosfero::Plugin |
17 | 17 | _('Add Public Software and MPOG features.') |
18 | 18 | end |
19 | 19 | |
20 | + def self.api_mount_points | |
21 | + [SoftwareCommunitiesPlugin::API] | |
22 | + end | |
23 | + | |
20 | 24 | def profile_tabs |
21 | 25 | if context.profile.community? |
22 | 26 | return profile_tabs_software if context.profile.software? | ... | ... |
src/noosfero-spb/software_communities/lib/software_communities_plugin/api.rb
0 → 100644
... | ... | @@ -0,0 +1,23 @@ |
1 | +require File.dirname(__FILE__) + '/../../../../../lib/noosfero/api/helpers' | |
2 | +require_relative 'api_entities' | |
3 | + | |
4 | +class SoftwareCommunitiesPlugin::API < Grape::API | |
5 | + | |
6 | + include Noosfero::API::APIHelpers | |
7 | + | |
8 | + resource :software_communities do | |
9 | + get do | |
10 | + authenticate! | |
11 | + softwares = select_filtered_collection_of(environment,'communities',params).joins(:software_info) | |
12 | + present softwares, :with => Entities::SoftwareCommunity | |
13 | + end | |
14 | + | |
15 | + get ':id' do | |
16 | + authenticate! | |
17 | + software = SoftwareInfo.find_by_id(params[:id]) | |
18 | + present software.community, :with => Entities::SoftwareCommunity | |
19 | + end | |
20 | + | |
21 | + end | |
22 | +end | |
23 | + | ... | ... |
src/noosfero-spb/software_communities/lib/software_communities_plugin/api_entities.rb
0 → 100644
... | ... | @@ -0,0 +1,14 @@ |
1 | +module Entities | |
2 | + class SoftwareInfo < Noosfero::API::Entity | |
3 | + expose :id, :finality, :repository_link, :public_software | |
4 | + end | |
5 | + | |
6 | + class SoftwareCommunity < Noosfero::API::Entity | |
7 | + root 'softwares', 'software' | |
8 | + expose :community, :using => Noosfero::API::Entities::Community do |community, options| | |
9 | + community | |
10 | + end | |
11 | + expose :software_info, :using => SoftwareInfo | |
12 | + end | |
13 | + | |
14 | +end | ... | ... |
src/noosfero-spb/software_communities/test/unit/api_test.rb
0 → 100644
... | ... | @@ -0,0 +1,31 @@ |
1 | +require File.dirname(__FILE__) + '/../../../../test/unit/api/test_helper' | |
2 | +require File.dirname(__FILE__) + '/../helpers/plugin_test_helper' | |
3 | + | |
4 | +class SoftwareCommunitiesApiTest < ActiveSupport::TestCase | |
5 | + | |
6 | + include PluginTestHelper | |
7 | + | |
8 | + def setup | |
9 | + login_api | |
10 | + environment = Environment.default | |
11 | + environment.enable_plugin(SoftwareCommunitiesPlugin) | |
12 | + end | |
13 | + | |
14 | + should 'list all softwares' do | |
15 | + @software_info = create_software_info("software_test") | |
16 | + @software_info2 = create_software_info("software_test2") | |
17 | + | |
18 | + get "/api/v1/software_communities?#{params.to_query}" | |
19 | + json = JSON.parse(last_response.body) | |
20 | + assert_equivalent [@software_info.id, @software_info2.id], json['softwares'].map {|c| c['software_info']['id']} | |
21 | + end | |
22 | + | |
23 | + should 'get software by id' do | |
24 | + @software_info = create_software_info("software_test") | |
25 | + get "/api/v1/software_communities/#{@software_info.id}?#{params.to_query}" | |
26 | + | |
27 | + json = JSON.parse(last_response.body) | |
28 | + assert_equal @software_info.id, json["software"]['software_info']["id"] | |
29 | + end | |
30 | + | |
31 | +end | ... | ... |