On 01/03/2011 02:20 PM, [email protected] wrote:
> From: Ladislav Martincik<[email protected]>
>
> ---
>   src/app/controllers/admin/roles_controller.rb |   69 
> ++++++++++++++++++++++++-
>   src/app/views/admin/roles/_form.haml          |    8 +++
>   src/app/views/admin/roles/_list.haml          |   30 +++++++++++
>   src/app/views/admin/roles/_properties.haml    |    5 ++
>   src/app/views/admin/roles/edit.haml           |    4 ++
>   src/app/views/admin/roles/index.haml          |    3 +-
>   src/app/views/admin/roles/new.haml            |    3 +
>   src/config/routes.rb                          |    3 +-
>   src/features/role.feature                     |   39 ++++++++++++++
>   src/features/step_definitions/role_steps.rb   |   24 +++++++++
>   src/features/step_definitions/user_steps.rb   |    4 +-
>   src/features/support/paths.rb                 |    3 +
>   12 files changed, 190 insertions(+), 5 deletions(-)
>   create mode 100644 src/app/views/admin/roles/_form.haml
>   create mode 100644 src/app/views/admin/roles/_list.haml
>   create mode 100644 src/app/views/admin/roles/_properties.haml
>   create mode 100644 src/app/views/admin/roles/edit.haml
>   create mode 100644 src/app/views/admin/roles/new.haml
>   create mode 100644 src/features/role.feature
>   create mode 100644 src/features/step_definitions/role_steps.rb
>
> diff --git a/src/app/controllers/admin/roles_controller.rb 
> b/src/app/controllers/admin/roles_controller.rb
> index 95868d4..70f0097 100644
> --- a/src/app/controllers/admin/roles_controller.rb
> +++ b/src/app/controllers/admin/roles_controller.rb
> @@ -1,6 +1,73 @@
>   class Admin::RolesController<  ApplicationController
>     before_filter :require_user
> +  before_filter :load_roles, :only =>  [:index, :show]
>
> -  def index
> +  def create
> +    @role = Role.new(params[:role])
> +
> +    # TODO: (lmartinc) Fix this and let user select the scope. Consult with 
> sseago.
> +    @role.scope = BasePermissionObject.to_s if @role.scope.nil?
> +
> +    if @role.save
> +      flash[:notice] = 'Role successfully saved!'
> +      redirect_to admin_roles_path and return
> +    end
> +
> +    render :action =>  'new'
> +  end
> +
> +  def show
> +    @role = Role.find(params[:id])
> +
> +    @url_params = params.clone
> +    @tab_captions = ['Properties']
> +    @details_tab = params[:details_tab].blank? ? 'properties' : 
> params[:details_tab]
> +    respond_to do |format|
> +      format.js do
> +        if @url_params.delete :details_pane
> +          render :partial =>  'layouts/details_pane' and return
> +        end
> +        render :partial =>  @details_tab
> +      end
> +      format.html { render :partial =>  @details_tab }
> +    end
> +  end
> +
> +  def edit
> +    @role = Role.find(params[:id])
>     end
> +
> +  def update
> +    @role = Role.find(params[:id])
> +
> +    if params[:commit] == "Reset"
> +      redirect_to edit_admin_role_url(@role) and return
> +    end
> +
> +    if @role.update_attributes(params[:role])
> +      flash[:notice] = 'Role updated successfully!'
> +      redirect_to admin_roles_url and return
> +    end
> +
> +    render :action =>  'edit'
> +  end
> +
> +  def multi_destroy
> +    Role.destroy(params[:role_selected])
> +    redirect_to admin_roles_url
> +  end
> +
> +  protected
> +
> +  def load_roles
> +    @header = [
> +      { :name =>  "Role name", :sort_attr =>  :name }
> +    ]
> +    @roles = Role.paginate(:all,
> +      :page =>  params[:page] || 1,
> +      :order =>  (params[:order_field] || 'name') +' '+ (params[:order_dir] 
> || 'asc')
> +    )
> +    @url_params = params.clone
> +  end
> +
>   end
> diff --git a/src/app/views/admin/roles/_form.haml 
> b/src/app/views/admin/roles/_form.haml
> new file mode 100644
> index 0000000..fc10dd2
> --- /dev/null
> +++ b/src/app/views/admin/roles/_form.haml
> @@ -0,0 +1,8 @@
> += form.error_messages
> +%fieldset.clear
> +  = form.label :name, 'Name', :class =>  "grid_3 alpha"
> +  = form.text_field :name, :class =>  "grid_5"
> +%fieldset.clearfix
> +  = form.submit "Save",  :class =>  "submit formbutton"
> +  = form.submit "Reset", :class =>  "submit formbutton"
> +  = link_to t(:cancel), admin_roles_path, :class =>  'button formbutton'
> diff --git a/src/app/views/admin/roles/_list.haml 
> b/src/app/views/admin/roles/_list.haml
> new file mode 100644
> index 0000000..d825e2f
> --- /dev/null
> +++ b/src/app/views/admin/roles/_list.haml
> @@ -0,0 +1,30 @@
> +- form_tag do
> +  = link_to "New Role", new_admin_role_path, :class =>  'button'
> +  = restful_submit_tag "Destroy", "destroy", multi_destroy_admin_roles_path, 
> 'DELETE', :id =>  'delete_button'
> +  %p
> +    Select:&nbsp;
> +    = link_to "All", @url_params.merge(:select =>  'all')
> +    %span>  ,&nbsp;
> +    = link_to "None", @url_params.merge(:select =>  'none')
> +  %table#roles_table
> +    = sortable_table_header @header
> +    - @roles.each do |role|
> +      %tr
> +        %td
> +          - selected = @url_params[:select] == 'all'
> +          %input{:name =>  "role_selected[]", :type =>  "checkbox", :value 
> =>  role.id, :id =>  "role_checkbox_#{role.id}", :checked =>  selected }
> +          = link_to role.name, admin_role_path(role)
> +
> +:javascript
> +  $(document).ready(function () {
> +    $('#delete_button').click(function(e) {
> +      if ($("#roles_table inp...@type=radio]:checked").length == 0) {
> +        alert('Please select any user to be deleted before clicking Delete 
> button.');
> +        e.preventDefault();
> +      } else {
> +        if (!confirm("Are you sure you want to delete this user?")) {
> +          e.preventDefault();
> +        }
> +      }
> +    });
> +  });
> diff --git a/src/app/views/admin/roles/_properties.haml 
> b/src/app/views/admin/roles/_properties.haml
> new file mode 100644
> index 0000000..8645d33
> --- /dev/null
> +++ b/src/app/views/admin/roles/_properties.haml
> @@ -0,0 +1,5 @@
> +.grid_13
> +  %h2 #[email protected]}
> +  %strong Scope:
> +  %span #[email protected]}
> +  = link_to t(:edit), edit_admin_role_path(@role), :class =>  'button 
> formbutton'
> diff --git a/src/app/views/admin/roles/edit.haml 
> b/src/app/views/admin/roles/edit.haml
> new file mode 100644
> index 0000000..7aa428e
> --- /dev/null
> +++ b/src/app/views/admin/roles/edit.haml
> @@ -0,0 +1,4 @@
> +%h2 Editing Role: #[email protected]}
> +
> +- form_for @role, :url =>  admin_role_path(@role), :html =>  { :method =>  
> :put } do |f|
> +  = render :partial =>  "form", :locals =>  { :form =>  f }
> diff --git a/src/app/views/admin/roles/index.haml 
> b/src/app/views/admin/roles/index.haml
> index d063630..62ccbc6 100644
> --- a/src/app/views/admin/roles/index.haml
> +++ b/src/app/views/admin/roles/index.haml
> @@ -1 +1,2 @@
> -admin/roles/index.haml
> +- content_for :list do
> +  = render :partial =>  'list'
> diff --git a/src/app/views/admin/roles/new.haml 
> b/src/app/views/admin/roles/new.haml
> new file mode 100644
> index 0000000..7fe46ba
> --- /dev/null
> +++ b/src/app/views/admin/roles/new.haml
> @@ -0,0 +1,3 @@
> +%h2 New Role
> +- form_for Role.new, :url =>  admin_roles_path do |f|
> +    = render :partial =>  "form", :locals =>  { :form =>  f }
> diff --git a/src/config/routes.rb b/src/config/routes.rb
> index 17d72d1..fa48dfd 100644
> --- a/src/config/routes.rb
> +++ b/src/config/routes.rb
> @@ -44,10 +44,11 @@ ActionController::Routing::Routes.draw do |map|
>     map.connect '/set_layout', :controller =>  'application', :action =>  
> 'set_layout'
>
>     map.namespace 'admin' do |r|
> -    r.resources :hardware_profiles, :pool_families, :provider_accounts, 
> :realms, :roles, :settings
> +    r.resources :hardware_profiles, :pool_families, :provider_accounts, 
> :realms, :settings
>       r.resources :providers, :collection =>  { :multi_destroy =>  :delete }
>       r.resources :users, :collection =>  { :multi_destroy =>  :delete }
>       r.resources :provider_accounts, :collection =>  { :multi_destroy =>  
> :delete }
> +    r.resources :roles, :collection =>  { :multi_destroy =>  :delete }
>     end
>
>     map.resources :pools
> diff --git a/src/features/role.feature b/src/features/role.feature
> new file mode 100644
> index 0000000..1975f5a
> --- /dev/null
> +++ b/src/features/role.feature
> @@ -0,0 +1,39 @@
> +Feature: Manage Roles
> +  In order to manage roles
> +  As an admin
> +  I want to add/edit/remove roles
> +
> +  Background:
> +    Given I am an authorised user
> +    And I am logged in
> +    And there's no role
> +    And a role "Captan" exists
> +    And I am using new UI
> +
> +  Scenario: Change the name
> +    Given I am on the admin roles page
> +    And there is a role "Captan"
> +    When I follow "Captan"
> +    And I follow "Edit"
> +    Then I should see "Editing Role:"
> +    When I fill in "role[name]" with "Admiral"
> +    And I press "Save"
> +    Then I should see "Role updated successfully!"
> +
> +  Scenario: Show role detials
> +    Given a role "Admiral" exists
> +    And I am on the admin roles page
> +    When I follow "Admiral"
> +    Then I should be on Admiral's role page
> +
> +  Scenario: Delete roles
> +    Given a role "Admiral" exists
> +    And I am on the admin roles page
> +    And there are 2 roles
> +    When I check "Admiral" role
> +    And I check "Captan" role
> +    And I press "Destroy"
> +    Then there should only be 0 roles
> +    And I should be on the admin roles page
> +    And I should not see "Captan"
> +    And I should not see "Admiral"
> diff --git a/src/features/step_definitions/role_steps.rb 
> b/src/features/step_definitions/role_steps.rb
> new file mode 100644
> index 0000000..3dac6d0
> --- /dev/null
> +++ b/src/features/step_definitions/role_steps.rb
> @@ -0,0 +1,24 @@
> +Given /there's no role/ do
> +  Role.destroy_all
> +end
> +
> +Given /^a role "([^"]*)" exists$/ do |role_name|
> +  Role.create(:name =>  role_name, :scope =>  BasePermissionObject.to_s)
> +end
> +
> +Given /^there is a role "([^"]*)"$/ do |name|
> +  Role.find_by_name(name).should_not == nil
> +end
> +
> +Given /^there are (\d+) roles$/ do |number|
> +  Role.count.should == number.to_i
> +end
> +
> +When /^(?:|I )check "([^"]*)" role$/ do |role_name|
> +  role = Role.find_by_name(role_name)
> +  check("role_checkbox_#{role.id}")
> +end
> +
> +Then /^there should only be (\d+) roles$/ do |number|
> +  Role.count.should == number.to_i
> +end
> diff --git a/src/features/step_definitions/user_steps.rb 
> b/src/features/step_definitions/user_steps.rb
> index c6467e8..ed474e3 100644
> --- a/src/features/step_definitions/user_steps.rb
> +++ b/src/features/step_definitions/user_steps.rb
> @@ -3,9 +3,9 @@ Given /^there is a user "([^"]*)"$/ do |name|
>   end
>
>   Given /^there are (\d+) users$/ do |number|
> -  User.all.size.should == number.to_i
> +  User.count.should == number.to_i
>   end
>
>   Then /^there should only be (\d+) users$/ do |number|
> -  User.all.size.should == number.to_i
> +  User.count.should == number.to_i
>   end
> diff --git a/src/features/support/paths.rb b/src/features/support/paths.rb
> index c3309fe..54486af 100644
> --- a/src/features/support/paths.rb
> +++ b/src/features/support/paths.rb
> @@ -20,6 +20,9 @@ module NavigationHelpers
>       when /^(.*)'s user page$/i
>          admin_user_path(User.find_by_login($1))
>
> +    when /^(.*)'s role page$/i
> +       admin_role_path(Role.find_by_name($1))
> +
>       when /the account page/
>         account_path
>

ACK - there are not permissions checks in actions but this code will be 
reworked so I think it's OK for now.
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to