diff options
author | Valery Sizov <vsv2711@gmail.com> | 2015-04-21 13:21:57 +0300 |
---|---|---|
committer | Valery Sizov <vsv2711@gmail.com> | 2015-04-21 19:31:34 +0300 |
commit | b35b54e0bf4ca973966ede1add15d88327a013d2 (patch) | |
tree | 665f0a5cbfb24ab9453e687dccf152a8f6eb6e40 | |
parent | b3e2939aa2904c92aba0399d511cb05228bfc9be (diff) | |
download | gitlab-ci-b35b54e0bf4ca973966ede1add15d88327a013d2.tar.gz |
projects search on dashboard
-rw-r--r-- | app/assets/stylesheets/sections/projects.scss | 13 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 6 | ||||
-rw-r--r-- | app/models/project.rb | 7 | ||||
-rw-r--r-- | app/models/user.rb | 6 | ||||
-rw-r--r-- | app/views/projects/_gitlab.html.haml | 9 | ||||
-rw-r--r-- | app/views/projects/_search.html.haml | 14 | ||||
-rw-r--r-- | app/views/projects/index.html.haml | 2 | ||||
-rw-r--r-- | lib/api/projects.rb | 4 | ||||
-rw-r--r-- | spec/controllers/projects_controller_spec.rb | 26 | ||||
-rw-r--r-- | spec/features/projects_spec.rb | 1 |
10 files changed, 73 insertions, 15 deletions
diff --git a/app/assets/stylesheets/sections/projects.scss b/app/assets/stylesheets/sections/projects.scss index cef59c9..bc9da2f 100644 --- a/app/assets/stylesheets/sections/projects.scss +++ b/app/assets/stylesheets/sections/projects.scss @@ -42,3 +42,16 @@ border-radius: 0; } } + +.search{ + width: 300px; + + .search-input{ + height: 35px; + } + + form{ + margin-top: 0; + margin-bottom: 0; + } +} diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 2fbf3f6..2e9a9b6 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -1,4 +1,6 @@ class ProjectsController < ApplicationController + PROJECTS_PER_PAGE = 100 + before_filter :authenticate_user!, except: [:build, :badge, :index, :show] before_filter :project, only: [:build, :integration, :show, :badge, :edit, :update, :destroy] before_filter :authorize_access_project!, except: [:build, :gitlab, :badge, :index, :show, :new, :create] @@ -16,8 +18,8 @@ class ProjectsController < ApplicationController def gitlab current_user.reset_cache if params[:reset_cache] @page = (params[:page] || 1).to_i - @per_page = 100 - @gl_projects = current_user.gitlab_projects(@page, @per_page) + @per_page = PROJECTS_PER_PAGE + @gl_projects = current_user.gitlab_projects(params[:search], @page, @per_page) @projects = Project.where(gitlab_id: @gl_projects.map(&:id)).ordered_by_last_commit_date @total_count = @gl_projects.size @gl_projects.reject! { |gl_project| @projects.map(&:gitlab_id).include?(gl_project.id) } diff --git a/app/models/project.rb b/app/models/project.rb index 247824c..a3cb161 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -90,12 +90,11 @@ ls -la project end - def from_gitlab(user, page, per_page, scope = :owned) + def from_gitlab(user, scope = :owned, options) opts = { private_token: user.private_token } - opts[:per_page] = per_page if per_page.present? - opts[:page] = page if page.present? + opts.merge! options - projects = Network.new.projects(user.url, opts, scope) + projects = Network.new.projects(user.url, opts.compact, scope) if projects projects.map { |pr| OpenStruct.new(pr) } diff --git a/app/models/user.rb b/app/models/user.rb index 129ddc1..71b0c19 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -8,9 +8,9 @@ class User @attributes = hash end - def gitlab_projects(page = 1, per_page = 100) - Rails.cache.fetch(cache_key(page, per_page)) do - Project.from_gitlab(self, page, per_page, :authorized) + def gitlab_projects(search = nil, page = 1, per_page = 100) + Rails.cache.fetch(cache_key(page, per_page, search)) do + Project.from_gitlab(self, :authorized, { page: page, per_page: per_page, search: search }) end end diff --git a/app/views/projects/_gitlab.html.haml b/app/views/projects/_gitlab.html.haml index d11d850..3dd759f 100644 --- a/app/views/projects/_gitlab.html.haml +++ b/app/views/projects/_gitlab.html.haml @@ -1,7 +1,10 @@ .clearfix.light .pull-left.fetch-status - Fetched from GitLab (#{link_to current_user.url, current_user.url, no_turbolink}) #{time_ago_in_words(current_user.sync_at)} ago. - = link_to gitlab_projects_path(reset_cache: true), remote: true, class: 'sync-now btn btn-small btn-default' do + Fetched from GitLab (#{link_to current_user.url, current_user.url, no_turbolink}) + - if params[:search].present? + by keyword: "#{params[:search]}", + #{time_ago_in_words(current_user.sync_at)} ago. + = link_to gitlab_projects_path(reset_cache: true, search: params[:search]), remote: true, class: 'sync-now btn btn-small btn-default' do %i.icon-refresh Sync now %br @@ -48,7 +51,7 @@ - if @total_count == @per_page %li - = link_to gitlab_projects_path(page: @page + 1), class: 'btn', remote: true do + = link_to gitlab_projects_path(page: @page + 1, search: params[:search]), class: 'btn', remote: true do Next %i.icon-angle-right diff --git a/app/views/projects/_search.html.haml b/app/views/projects/_search.html.haml new file mode 100644 index 0000000..ad428a5 --- /dev/null +++ b/app/views/projects/_search.html.haml @@ -0,0 +1,14 @@ +.search + = form_tag "#", method: :get, class: 'navbar-form' do |f| + .form-group + .input-group + = search_field_tag "search", params[:search], placeholder: "Search", class: "search-input form-control" + .input-group-addon + %i.icon-search + + +:coffeescript + $('.search .navbar-form').submit -> + query = $('.search .navbar-form .search-input').val() + $.get '#{gitlab_projects_path}' + '?search=' + query + false
\ No newline at end of file diff --git a/app/views/projects/index.html.haml b/app/views/projects/index.html.haml index 9e45ec1..824ba80 100644 --- a/app/views/projects/index.html.haml +++ b/app/views/projects/index.html.haml @@ -2,6 +2,8 @@ = content_for :title do %h3.project-title Dashboard + .pull-right + = render "search" .projects %p.fetch-status.light diff --git a/lib/api/projects.rb b/lib/api/projects.rb index ea10a82..e61a944 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -108,7 +108,7 @@ module API # GET /projects get do gitlab_projects = Project.from_gitlab( - current_user, params[:page], params[:per_page], :authorized + current_user, :authorized, { page: params[:page], per_page: params[:per_page] } ) ids = gitlab_projects.map { |project| project.id } @@ -122,7 +122,7 @@ module API # GET /projects/owned get "owned" do gitlab_projects = Project.from_gitlab( - current_user, params[:page], params[:per_page], :owned + current_user, :owned, { page: params[:page], per_page: params[:per_page] } ) ids = gitlab_projects.map { |project| project.id } diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb index 88aeb7a..dea35f6 100644 --- a/spec/controllers/projects_controller_spec.rb +++ b/spec/controllers/projects_controller_spec.rb @@ -42,7 +42,7 @@ describe ProjectsController do end end - describe "POST /:projects" do + describe "POST /projects" do let(:project_dump) { File.read(Rails.root.join('spec/support/gitlab_stubs/raw_project.yml')) } let(:gitlab_url) { GitlabCi.config.gitlab_server.url } @@ -66,4 +66,28 @@ describe ProjectsController do expect(response.code).to eq('302') end end + + describe "GET /gitlab" do + let(:gitlab_url) { GitlabCi.config.gitlab_server.url } + + let (:user_data) do + data = JSON.parse File.read(Rails.root.join('spec/support/gitlab_stubs/user.json')) + data.merge("url" => gitlab_url) + end + + let(:user) do + User.new(user_data) + end + + it "searches projects" do + allow(controller).to receive(:reset_cache) { true } + allow(controller).to receive(:current_user) { user } + Network.any_instance.should_receive(:projects).with(anything(), hash_including(search: 'str'), :authorized) + + xhr :get, :gitlab, { search: "str", format: "js" }.with_indifferent_access + + expect(response).to be_success + expect(response.code).to eq('200') + end + end end diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index 034dfc1..819919b 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -13,6 +13,7 @@ describe "Projects" do end it { page.should have_content "GitLab / gitlab-shell" } + it { page.should have_selector ".search input#search" } end describe "GET /projects/:id" do |