Commit 738d396bf88ec6a853e624c2775be06be5921597
1 parent
7e575db7
Exists in
theme-brasil-digital-from-staging
and in
3 other branches
api: apply article filters in search method
Showing
3 changed files
with
60 additions
and
1 deletions
Show diff stats
lib/noosfero/api/v1/search.rb
... | ... | @@ -16,7 +16,7 @@ module Noosfero |
16 | 16 | profile = environment.profiles.find(params[:profile_id]) if params[:profile_id] |
17 | 17 | scope = profile.nil? ? environment.articles.is_public : profile.articles.is_public |
18 | 18 | scope = scope.where(:type => params[:type]) if params[:type] && !(params[:type] == 'Article') |
19 | - scope = scope.where(:parent_id => params[:parent_id]) if params[:parent_id].present? | |
19 | + scope = scope.where(make_conditions_with_parameter(params)) | |
20 | 20 | scope = scope.joins(:categories).where(:categories => {:id => params[:category_ids]}) if params[:category_ids].present? |
21 | 21 | scope = scope.where('children_count > 0') if params[:has_children].present? |
22 | 22 | query = params[:query] || "" | ... | ... |
... | ... | @@ -0,0 +1,50 @@ |
1 | +module Noosfero | |
2 | + module API | |
3 | + module V1 | |
4 | + class Search < Grape::API | |
5 | + | |
6 | + resource :search do | |
7 | + resource :article do | |
8 | + paginate per_page: 20, max_per_page: 200 | |
9 | + get do | |
10 | + # Security checks | |
11 | + sanitize_params_hash(params) | |
12 | + # APIHelpers | |
13 | + asset = :articles | |
14 | + context = environment | |
15 | + | |
16 | + profile = environment.profiles.find(params[:profile_id]) if params[:profile_id] | |
17 | + scope = profile.nil? ? environment.articles.is_public : profile.articles.is_public | |
18 | + scope = scope.where(:type => params[:type]) if params[:type] && !(params[:type] == 'Article') | |
19 | + scope = scope.where(:parent_id => params[:parent_id]) if params[:parent_id].present? | |
20 | + scope = scope.joins(:categories).where(:categories => {:id => params[:category_ids]}) if params[:category_ids].present? | |
21 | +<<<<<<< HEAD | |
22 | + | |
23 | + scope = scope.where('children_count > 0') if params[:has_children].present? | |
24 | + | |
25 | +======= | |
26 | +>>>>>>> staging | |
27 | + query = params[:query] || "" | |
28 | + order = "more_recent" | |
29 | + | |
30 | + options = {:filter => order, :template_id => params[:template_id]} | |
31 | + | |
32 | + paginate_options = params.select{|k,v| [:page, :per_page].include?(k.to_sym)}.symbolize_keys | |
33 | + paginate_options.each_pair{|k,v| v=v.to_i} | |
34 | + paginate_options[:page]=1 if !paginate_options.keys.include?(:page) | |
35 | + | |
36 | + search_result = find_by_contents(asset, context, scope, query, paginate_options, options) | |
37 | + | |
38 | + articles = search_result[:results] | |
39 | + | |
40 | + result = present_articles_paginated(articles) | |
41 | + | |
42 | + result | |
43 | + end | |
44 | + end | |
45 | + end | |
46 | + | |
47 | + end | |
48 | + end | |
49 | + end | |
50 | +end | ... | ... |
test/unit/api/search_test.rb
... | ... | @@ -147,4 +147,13 @@ class SearchTest < ActiveSupport::TestCase |
147 | 147 | assert_includes ids, json['articles'].last["id"] |
148 | 148 | end |
149 | 149 | |
150 | + should 'list only articles that was archived' do | |
151 | + article1 = fast_create(Article, :profile_id => person.id) | |
152 | + article2 = fast_create(Article, :profile_id => person.id, archived: true) | |
153 | + | |
154 | + get "/api/v1/search/article?archived=true" | |
155 | + json = JSON.parse(last_response.body) | |
156 | + assert_equal [article2.id], json['articles'].map {|a| a['id']} | |
157 | + end | |
158 | + | |
150 | 159 | end | ... | ... |