From b1cf2727bc9ce858de982021aaf11d23147e436f Mon Sep 17 00:00:00 2001 From: mallowlabs Date: Tue, 9 Jun 2015 15:05:24 +0900 Subject: [PATCH] Added: search API refs #166 --- app/controllers/api/v1/message_controller.rb | 13 ++++++++++ config/routes.rb | 1 + .../api/v1/message_controller_spec.rb | 24 +++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/app/controllers/api/v1/message_controller.rb b/app/controllers/api/v1/message_controller.rb index ba9211a8b..3a2145c3e 100644 --- a/app/controllers/api/v1/message_controller.rb +++ b/app/controllers/api/v1/message_controller.rb @@ -97,6 +97,19 @@ def destroy when :error_on_destroy then render_error "destroy error" end end + + def search + room_id = params[:room_id] + query = params[:query] + + messages = {} + Room.with_room(room_id, current_user) do |room| + return render_error("room does not exist", 403) unless room + + messages = Message.find_by_text(:text => query, :rooms => [ room ], :limit => 20) + end unless query.blank? + render :json => messages.map { |m| { :room => m[:room], :messages => m[:messages].map(&:to_hash) } } + end end end end diff --git a/config/routes.rb b/config/routes.rb index cb0b45d11..094312374 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -17,6 +17,7 @@ namespace(:v1) do get 'room/list', :controller => 'room', :action => 'list' get 'message/list', :controller => 'message', :action => 'list' + get 'message/search', :controller => 'message', :action => 'search' get 'user', :controller => 'user', :action => 'show' post 'user', :controller => 'user', :action => 'update' get 'user/add_device', :controller => 'user', :action => 'add_device' diff --git a/spec/controllers/api/v1/message_controller_spec.rb b/spec/controllers/api/v1/message_controller_spec.rb index d9aeb0eac..0a15201ff 100644 --- a/spec/controllers/api/v1/message_controller_spec.rb +++ b/spec/controllers/api/v1/message_controller_spec.rb @@ -425,4 +425,28 @@ its(:response_code) { should == 403 } end end + + describe "search" do + context 'normal' do + before { + get :search, :room_id => @room.id, :query => 'hoge', :format => 'json' + } + subject { response.body } + it { should have_json("//body[text() = 'hoge']") } + end + context 'empty query' do + before { + get :search, :room_id => @room.id, :format => 'json' + } + subject { response } + its(:response_code) { should == 200 } + end + context 'private room' do + before { + get :search, :room_id => @private_room.id, :query => 'hoge', :format => 'json' + } + subject { response.body } + it { should have_json("/status[text() = 'error']") } + end + end end