OSDN Git Service

t#31018:add search om license
authoryasushiito <yas@pen-chan.jp>
Sat, 23 Mar 2013 05:01:39 +0000 (14:01 +0900)
committeryasushiito <yas@pen-chan.jp>
Sat, 23 Mar 2013 05:01:39 +0000 (14:01 +0900)
app/controllers/licenses_controller.rb
app/models/license.rb
app/views/licenses/search.html.erb [new file with mode: 0644]
config/locales/pettanr.ja.yml
config/routes.rb
script/uploader.rb
spec/controllers/licenses_controller_spec.rb
spec/models/license_spec.rb

index 59e24e2..d30b226 100644 (file)
@@ -23,6 +23,15 @@ class LicensesController < ApplicationController
     end
   end
 
+  def search
+    @licenses = License.list_by_name(params[:name])
+    
+    respond_to do |format|
+      format.html
+      format.json { render json: @licenses.to_json }
+    end
+  end
+  
   def list
     @licenses = License.all
 
index 70f6ff3..6607b20 100644 (file)
@@ -46,6 +46,10 @@ class License < ActiveRecord::Base
     {:include => {:license_group => {}}}
   end
   
+  def self.list_by_name name
+    License.find :all, :conditions => ['licenses.name = ?', name], :order => 'licenses.updated_at desc'
+  end
+  
   def self.store name, attr
     r = License.replace_system_picture attr
     attr['credit_pictures'] = attr['credit_pictures'].to_json
diff --git a/app/views/licenses/search.html.erb b/app/views/licenses/search.html.erb
new file mode 100644 (file)
index 0000000..fd970c6
--- /dev/null
@@ -0,0 +1,18 @@
+<h1><%= t '.title' -%></h1>\r
+<table>\r
+  <tr>\r
+    <th><%= t_m 'License.caption' -%></th>\r
+    <th><%= t_m 'License.license_group_id' -%></th>\r
+  </tr>\r
+  <% @licenses.each do |license| %>\r
+    <tr>\r
+      <td>\r
+        <%= link_to t('link.marker'), license_path(license) %>\r
+        <%= link_to h(license.caption), license.url %>\r
+      </td>\r
+      <td>\r
+        <%= link_to h(license.license_group.caption), license_group_path(license.license_group) %>\r
+      </td>\r
+    </tr>\r
+  <% end -%>\r
+</table>\r
index d1c3e5c..d7d53bd 100644 (file)
@@ -657,6 +657,8 @@ ja:
       title: ライセンス一覧
     show:
       title: ライセンス詳細
+    search:
+      title: ライセンス検索
     list:
       title: ライセンス 生一覧
     browse:
index 74d783f..2d628a7 100644 (file)
@@ -239,6 +239,7 @@ Pettanr::Application.routes.draw do
     collection do
       get :index
       get :show
+      get :search
       get :list
     end
     member do
index fb66a5a..9af12a2 100644 (file)
@@ -9,3 +9,11 @@ if ARGV.size < 1
   puts "upload on child dirs"\r
   exit\r
 end\r
+\r
+lsname = ARGV[0]\r
+u = 'http://localhost:3000/licenses/search.json?name=' + lsname\r
+r = RestClient.get(u)\r
+p r\r
+o = JSON.parse r\r
+oid = o['id']\r
+oid\r
index 215c20b..3d36e6b 100644 (file)
@@ -126,6 +126,65 @@ if MagicNumber['run_mode'] == 1
     end
   end
   
+  describe '管理名検索の一覧に於いて' do
+    before do
+      @l = FactoryGirl.create :license, :license_group_id => @lg.id, :system_picture_id => @sp.id
+      sign_in @user
+      License.stub(:list_by_name).with(any_args).and_return([@l])
+    end
+    context 'つつがなく終わるとき' do
+      it 'ライセンスモデルに管理名検索を問い合わせている' do
+        License.should_receive(:list_by_name).exactly(1)
+        get :search, :name => @l.name
+      end
+      it '@licensesにリストを取得している' do
+        get :search, :name => @l.name
+        assigns(:licenses).should have_at_least(1).items
+      end
+      context 'html形式' do
+        it 'ステータスコード200 OKを返す' do
+          get :search, :name => @l.name
+          response.should be_success 
+        end
+        it 'searchテンプレートを描画する' do
+          get :search, :name => @l.name
+          response.should render_template("search")
+        end
+      end
+      context 'json形式' do
+        it 'ステータスコード200 OKを返す' do
+          get :search, :name => @l.name, :format => :json
+          response.should be_success 
+        end
+        it 'jsonデータを返す' do
+          get :search, :name => @l.name, :format => :json
+          lambda{JSON.parse(response.body)}.should_not raise_error(JSON::ParserError)
+        end
+        it 'データがリスト構造になっている' do
+          get :search, :name => @l.name, :format => :json
+          json = JSON.parse response.body
+          json.should have_at_least(1).items
+        end
+        it 'リストの先頭くらいはライセンスっぽいものであって欲しい' do
+          get :search, :name => @l.name, :format => :json
+          json = JSON.parse response.body
+          json.first.has_key?("name").should be_true
+          json.first.has_key?("caption").should be_true
+          json.first.has_key?("url").should be_true
+        end
+      end
+    end
+    context 'ユーザ権限がないとき' do
+      before do
+        sign_out @user
+      end
+      it 'ステータスコード200 okを返す' do
+        get :index
+        response.status.should eq 200
+      end
+    end
+  end
+  
 else
   describe '一覧表示に於いて' do
     before do
index e0dafd4..4c94fd1 100644 (file)
@@ -223,6 +223,22 @@ describe License do
     end
   end
   
+  describe '管理名検索に於いて' do
+    before do
+      @sp = FactoryGirl.create :system_picture
+      @lg = FactoryGirl.create :license_group
+      @l = FactoryGirl.create :license, :name => 'peta2.0', :license_group_id => @lg.id, :system_picture_id => @sp.id
+      @lg2 = FactoryGirl.create :license_group, :name => 'pubdm'
+      @l2 = FactoryGirl.create :license, :name => 'pettan2.2b', :url => @l.url + 'l2', :license_group_id => @lg.id, :system_picture_id => @sp.id
+    end
+    context 'つつがなく終わるとき' do
+      it 'リストを返す' do
+        l = License.list_by_name @l2.name
+        l.should eq [@l2]
+      end
+    end
+  end
+  
   describe '更新に於いて' do
     before do
       @lg = FactoryGirl.create :license_group