hydra-role-management 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile +4 -0
  4. data/README.md +9 -0
  5. data/Rakefile +56 -0
  6. data/app/controllers/concerns/hydra/role_management/roles_behavior.rb +30 -0
  7. data/app/controllers/concerns/hydra/role_management/user_roles_behavior.rb +30 -0
  8. data/app/controllers/roles_controller.rb +4 -0
  9. data/app/controllers/user_roles_controller.rb +5 -0
  10. data/app/models/concerns/hydra/role_management/user_roles.rb +22 -0
  11. data/app/models/role.rb +11 -0
  12. data/app/views/roles/index.html.erb +11 -0
  13. data/app/views/roles/new.html.erb +5 -0
  14. data/app/views/roles/show.html.erb +19 -0
  15. data/config/routes.rb +7 -0
  16. data/hydra-role-management.gemspec +24 -0
  17. data/lib/generators/roles/roles_generator.rb +71 -0
  18. data/lib/generators/roles/templates/migrations/user_roles.rb +18 -0
  19. data/lib/hydra-role-management.rb +3 -0
  20. data/lib/hydra/role_management.rb +11 -0
  21. data/lib/hydra/role_management/version.rb +5 -0
  22. data/spec/.gitignore +1 -0
  23. data/spec/controllers/roles_controller_spec.rb +66 -0
  24. data/spec/controllers/user_roles_controller_spec.rb +61 -0
  25. data/spec/lib/user_roles_spec.rb +26 -0
  26. data/spec/models/role_spec.rb +35 -0
  27. data/spec/routing/role_management_routes_spec.rb +25 -0
  28. data/spec/spec_helper.rb +14 -0
  29. data/spec/support/Gemfile +28 -0
  30. data/spec/support/app/models/sample.rb +37 -0
  31. data/spec/support/app/models/solr_document.rb +5 -0
  32. data/spec/support/config/initializers/hydra_config.rb +28 -0
  33. data/spec/support/lib/generators/test_app_generator.rb +47 -0
  34. data/spec/support/lib/tasks/rspec.rake +9 -0
  35. metadata +160 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f4279ccff40e9cb0d97b6c2b32865dd860aef573
4
+ data.tar.gz: b9fe3485cbe2a9e361e6fbbb74590953d1d90470
5
+ SHA512:
6
+ metadata.gz: e27635121fed9566b0c356483fd85943cb6320aa43abd8d957ffd0f0a0953eedf1e23753c31b10da06d059a6688d7869c8d8b34c69fa7bb4eeb3e6055ddb3064
7
+ data.tar.gz: 5dff568b6a59753dce5cba52c98d146e0f5f2c722cba626088dbad7468de0aa7174b88b187e38208c9847613a3a0a4902a7f9782cdd6e6290a448322f12014d8
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in hydra-batch-edit.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,9 @@
1
+ An engine gem to provide a RDBMS backed list of roles and their associated user. This replaces the hydra default role mapper.
2
+
3
+
4
+ Installing:
5
+
6
+ * Add: ```gem 'hydra-role-management'``` to your Gemfile and then ```bundle install```
7
+ * ```rails generate roles```
8
+ * ```rake db:migrate```
9
+
data/Rakefile ADDED
@@ -0,0 +1,56 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
3
+ require 'rspec/core/rake_task'
4
+
5
+ ENV["RAILS_ROOT"] ||= 'spec/internal'
6
+
7
+ desc 'Default: run specs.'
8
+ task :default => :spec
9
+
10
+
11
+ task :spec => [:generate] do |t|
12
+ focused_spec = ENV['SPEC'] ? " SPEC=#{File.join(GEM_ROOT, ENV['SPEC'])}" : ''
13
+ within_test_app do
14
+ system "rake myspec#{focused_spec}"
15
+ abort "Error running hydra-role-management" unless $?.success?
16
+ end
17
+ end
18
+
19
+
20
+
21
+ desc "Create the test rails app"
22
+ task :generate do
23
+ unless File.exists?('spec/internal/Rakefile')
24
+ puts "Generating rails app"
25
+ `rails new spec/internal`
26
+ puts "Copying gemfile"
27
+ `cp spec/support/Gemfile spec/internal`
28
+ puts "Copying generator"
29
+ `cp -r spec/support/lib/generators spec/internal/lib`
30
+
31
+ within_test_app do
32
+ puts "Bundle install"
33
+ puts `bundle install`
34
+ puts "running generator"
35
+ puts `rails generate test_app`
36
+
37
+ puts "running migrations"
38
+ puts `rake db:migrate db:test:prepare`
39
+ end
40
+ end
41
+ puts "Running specs"
42
+ end
43
+
44
+ desc "Clean out the test rails app"
45
+ task :clean do
46
+ puts "Removing sample rails app"
47
+ `rm -rf spec/internal`
48
+ end
49
+
50
+ def within_test_app
51
+ FileUtils.cd('spec/internal')
52
+ Bundler.with_clean_env do
53
+ yield
54
+ end
55
+ FileUtils.cd('../..')
56
+ end
@@ -0,0 +1,30 @@
1
+ module Hydra
2
+ module RoleManagement
3
+ module RolesBehavior
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ load_and_authorize_resource
8
+ end
9
+
10
+ def index
11
+ end
12
+
13
+ def show
14
+ end
15
+
16
+ def new
17
+ end
18
+
19
+ def create
20
+ @role.name = params[:role][:name]
21
+ if (@role.save)
22
+ redirect_to role_management.roles_path, notice: 'Role was successfully created.'
23
+ else
24
+ render action: "new"
25
+ end
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ module Hydra
2
+ module RoleManagement
3
+ module UserRolesBehavior
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ load_and_authorize_resource :role
8
+ end
9
+
10
+ def create
11
+ authorize! :add_user, @role
12
+ u = ::User.find_by_user_key(params[:user_key])
13
+ if u
14
+ u.roles << @role
15
+ u.save!
16
+ redirect_to role_management.role_path(@role)
17
+ else
18
+ redirect_to role_management.role_path(@role), :flash=> {:error=>"Unable to find the user #{params[:user_key]}"}
19
+ end
20
+ end
21
+
22
+ def destroy
23
+ authorize! :remove_user, @role
24
+ @role.users.delete(::User.find(params[:id]))
25
+ redirect_to role_management.role_path(@role)
26
+ end
27
+ end
28
+ end
29
+ end
30
+
@@ -0,0 +1,4 @@
1
+ class RolesController < ApplicationController
2
+ include Hydra::RoleManagement::RolesBehavior
3
+ end
4
+
@@ -0,0 +1,5 @@
1
+ class UserRolesController < ApplicationController
2
+ include Hydra::RoleManagement::UserRolesBehavior
3
+ end
4
+
5
+
@@ -0,0 +1,22 @@
1
+ module Hydra
2
+ module RoleManagement
3
+ module UserRoles
4
+ extend ActiveSupport::Concern
5
+ included do
6
+ has_and_belongs_to_many :roles
7
+ end
8
+
9
+ def groups
10
+ g = roles.map(&:name)
11
+ g += ['registered'] unless new_record? || guest?
12
+ g
13
+ end
14
+
15
+
16
+ def admin?
17
+ roles.where(name: 'admin').exists?
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ class Role < ActiveRecord::Base
2
+ has_and_belongs_to_many :users
3
+
4
+ attr_accessible :name
5
+
6
+ validates :name,
7
+ uniqueness: true,
8
+ format: { with: /\A[a-zA-Z0-9._-]+\z/,
9
+ :message => "Only letters, numbers, hyphens, underscores and periods are allowed"}
10
+
11
+ end
@@ -0,0 +1,11 @@
1
+ <h2>Roles</h2>
2
+ <ul>
3
+ <% @roles.each do |role| %>
4
+ <li><%=link_to role.name, role_management.role_path(role) %></li>
5
+ <% end %>
6
+ </ul>
7
+
8
+ <% if can? :create, Role %>
9
+ <%= button_to "Create a new role", role_management.new_role_path, method: :get, class: 'btn btn-primary' %>
10
+ <% end %>
11
+
@@ -0,0 +1,5 @@
1
+ <%= bootstrap_form_for @role, :url=>role_management.roles_path do |f| %>
2
+ <%= f.text_field :name, :label=> 'Role name' %>
3
+ <%= f.actions %>
4
+ <% end %>
5
+
@@ -0,0 +1,19 @@
1
+ <h2>Role: <%= @role.name %></h2>
2
+ <h3>Accounts:</h3>
3
+ <ul>
4
+ <% @role.users.each do |user| %>
5
+ <li><%= user.user_key %>
6
+ <% if can? :remove_user, Role %>
7
+ <%= button_to "Remove User", role_management.role_user_path(@role, user), :method=>:delete, :class=>'btn btn-danger' %>
8
+ <% end %>
9
+ </li>
10
+ <% end %>
11
+ </ul>
12
+ <h3>Add a new account:</h3>
13
+ <%= bootstrap_form_tag role_management.role_users_path(@role) do %>
14
+ <%= bootstrap_text_field_tag 'user_key', '', :label=>'User' %>
15
+ <%= bootstrap_actions do %>
16
+ <%= bootstrap_submit_tag "Add" %>
17
+ <%= bootstrap_cancel_tag %>
18
+ <% end %>
19
+ <% end %>
data/config/routes.rb ADDED
@@ -0,0 +1,7 @@
1
+ Hydra::RoleManagement::Engine.routes.draw do
2
+ # Generic file routes
3
+ resources :roles, :only => [:index, :show, :new, :create] do
4
+ resources :users, :only=>[:create, :destroy], :controller => "user_roles"
5
+ end
6
+ end
7
+
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/hydra/role_management/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Justin Coyne"]
6
+ gem.email = ["justin@curationexperts.com"]
7
+ gem.description = %q{Rails engine to do user roles in an RDBMS for hydra-head}
8
+ gem.summary = %q{Rails engine to do user roles in an RDBMS for hydra-head}
9
+ gem.homepage = "https://github.com/projecthydra/hydra-role-managment"
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "hydra-role-management"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Hydra::RoleManagement::VERSION
17
+
18
+ gem.add_dependency 'cancan'
19
+ gem.add_dependency 'bootstrap_forms'
20
+
21
+ gem.add_development_dependency 'rake'
22
+ gem.add_development_dependency 'rails'
23
+ gem.add_development_dependency 'rspec-rails'
24
+ end
@@ -0,0 +1,71 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'rails/generators'
3
+ require 'rails/generators/migration'
4
+
5
+ class RolesGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+
8
+ source_root File.expand_path('../templates', __FILE__)
9
+
10
+ argument :model_name, :type => :string , :default => "user"
11
+ desc """
12
+ This generator makes the following changes to your application:
13
+ 1. Creates several database migrations if they do not exist in /db/migrate
14
+ 2. Adds user behavior to the user model
15
+ 2. Adds routes
16
+ """
17
+
18
+ # Implement the required interface for Rails::Generators::Migration.
19
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
20
+ def self.next_migration_number(path)
21
+ unless @prev_migration_nr
22
+ @prev_migration_nr = Time.now.utc.strftime("%Y%m%d%H%M%S").to_i
23
+ else
24
+ @prev_migration_nr += 1
25
+ end
26
+ @prev_migration_nr.to_s
27
+ end
28
+
29
+ # Setup the database migrations
30
+ def copy_migrations
31
+ # Can't get this any more DRY, because we need this order.
32
+ %w{user_roles.rb}.each do |f|
33
+ better_migration_template f
34
+ end
35
+ end
36
+
37
+ # Add behaviors to the user model
38
+ def inject_user_roles_behavior
39
+ file_path = "app/models/#{model_name.underscore}.rb"
40
+ if File.exists?(file_path)
41
+ code = "# Connects this user object to Role-management behaviors. " +
42
+ "\n include Hydra::RoleManagement::UserRoles\n"
43
+ inject_into_file file_path, code, { :after => /include Hydra::User/ }
44
+ else
45
+ puts " \e[31mFailure\e[0m hydra-role-management requires a user object. This generators assumes that the model is defined in the file #{file_path}, which does not exist. If you used a different name, please re-run the generator and provide that name as an argument. Such as \b rails -g roles client"
46
+ end
47
+ end
48
+
49
+
50
+ # The engine routes have to come after the devise routes so that /users/sign_in will work
51
+ def inject_routes
52
+ routing_code = "mount Hydra::RoleManagement::Engine => '/'"
53
+ sentinel = /devise_for :users/
54
+ inject_into_file 'config/routes.rb', "\n #{routing_code}\n", { :after => sentinel, :verbose => false }
55
+
56
+ end
57
+
58
+ private
59
+
60
+ def better_migration_template (file)
61
+ begin
62
+ migration_template "migrations/#{file}", "db/migrate/#{file}"
63
+ sleep 1 # ensure scripts have different time stamps
64
+ rescue
65
+ puts " \e[1m\e[34mMigrations\e[0m " + $!.message
66
+ end
67
+ end
68
+
69
+ end
70
+
71
+
@@ -0,0 +1,18 @@
1
+ class UserRoles < ActiveRecord::Migration
2
+ def up
3
+ create_table :roles do |t|
4
+ t.string :name
5
+ end
6
+ create_table :roles_users, :id => false do |t|
7
+ t.references :role
8
+ t.references :user
9
+ end
10
+ add_index :roles_users, [:role_id, :user_id]
11
+ add_index :roles_users, [:user_id, :role_id]
12
+ end
13
+
14
+ def down
15
+ drop_table :roles_users
16
+ drop_table :roles
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ #require "bundler/setup"
2
+ require "hydra/role_management"
3
+ #require "blacklight"
@@ -0,0 +1,11 @@
1
+ module Hydra
2
+ module RoleManagement
3
+ class Engine < ::Rails::Engine
4
+ engine_name 'role_management'
5
+
6
+ # Rails 4 should do this automatically:
7
+ config.paths.add "app/controllers/concerns", eager_load: true
8
+ config.paths.add "app/models/concerns", eager_load: true
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,5 @@
1
+ module Hydra
2
+ module RoleManagement
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
data/spec/.gitignore ADDED
@@ -0,0 +1 @@
1
+ /internal
@@ -0,0 +1,66 @@
1
+ require 'spec_helper'
2
+
3
+ describe RolesController do
4
+ let(:ability) do
5
+ ability = Object.new
6
+ ability.extend(CanCan::Ability)
7
+ controller.stub(:current_ability).and_return(ability)
8
+ ability
9
+ end
10
+
11
+ let(:role) do
12
+ Role.create(name: 'foo')
13
+ end
14
+
15
+
16
+ describe "with a user who cannot edit users" do
17
+ it "should redirect to the homepage" do
18
+ lambda { get :index }.should raise_error CanCan::AccessDenied
19
+ end
20
+ it "should redirect to the homepage" do
21
+ lambda { get :show, id: role }.should raise_error CanCan::AccessDenied
22
+ end
23
+ end
24
+
25
+ describe "with a user who can edit users" do
26
+ before do
27
+ ability.can :read, Role
28
+ end
29
+ it "should be able to see the list of roles" do
30
+ get :index
31
+ response.should be_successful
32
+ assigns[:roles].should == [role]
33
+ end
34
+
35
+ it "should be able to see a single role" do
36
+ get :show, id: role
37
+ response.should be_successful
38
+ assigns[:role].should == role
39
+ end
40
+ end
41
+
42
+ describe "with a user who can create roles" do
43
+ before do
44
+ ability.can :create, Role
45
+ end
46
+ it "should be able to make a new role" do
47
+ get :new
48
+ response.should be_successful
49
+ assigns[:role].should be_kind_of Role
50
+ end
51
+
52
+ it "should be able to create a new role" do
53
+ post :create, :role=>{name: 'my_role'}
54
+ response.should redirect_to @routes.url_helpers.roles_path
55
+ assigns[:role].should_not be_new_record
56
+ assigns[:role].name.should == 'my_role'
57
+ end
58
+ it "should not create role with an error" do
59
+ post :create, :role=>{name: 'my role'}
60
+ assigns[:role].name.should == 'my role'
61
+ assigns[:role].errors[:name].should == ['Only letters, numbers, hyphens, underscores and periods are allowed']
62
+ response.should be_successful
63
+ end
64
+ end
65
+
66
+ end
@@ -0,0 +1,61 @@
1
+ require 'spec_helper'
2
+
3
+ describe UserRolesController do
4
+ let(:ability) do
5
+ ability = Object.new
6
+ ability.extend(CanCan::Ability)
7
+ controller.stub(:current_ability).and_return(ability)
8
+ ability
9
+ end
10
+
11
+ let(:role) do
12
+ Role.create(name: 'foo')
13
+ end
14
+
15
+ describe "with a user who cannot edit users" do
16
+ it "should not be able to add a user" do
17
+ lambda { post :create, role_id: role, user_key: 'foo@example.com'}.should raise_error CanCan::AccessDenied
18
+ end
19
+ it "should not be able to remove a user" do
20
+ lambda { delete :destroy, role_id: role, id: 7}.should raise_error CanCan::AccessDenied
21
+ end
22
+ end
23
+
24
+ describe "with a user who can edit users" do
25
+ before do
26
+ ability.can :read, Role
27
+ end
28
+ describe "adding users" do
29
+ before do
30
+ ability.can :add_user, Role
31
+ end
32
+ it "should not be able to add a user that doesn't exist" do
33
+ User.should_receive(:find_by_user_key).with('foo@example.com').and_return(nil)
34
+ post :create, role_id: role, user_key: 'foo@example.com'
35
+ flash[:error].should == "Unable to find the user foo@example.com"
36
+ end
37
+ it "should be able to add a user" do
38
+ u = User.create!(email: 'foo@example.com', password: 'password', password_confirmation: 'password')
39
+ post :create, role_id: role, user_key: 'foo@example.com'
40
+ role.reload.users.should == [u]
41
+ end
42
+ end
43
+ describe "removing users" do
44
+ before do
45
+ ability.can :remove_user, Role
46
+ end
47
+ let (:user) do
48
+ u = User.new(email: 'foo@example.com', password: 'password', password_confirmation: 'password')
49
+ u.roles = [role]
50
+ u.save!
51
+ u
52
+ end
53
+ it "should be able to remove a user" do
54
+ user.roles.should == [role]
55
+ delete :destroy, role_id: role, id: user.id
56
+ role.reload.users.should == []
57
+ end
58
+ end
59
+ end
60
+ end
61
+
@@ -0,0 +1,26 @@
1
+ require 'spec_helper'
2
+
3
+ describe Hydra::RoleManagement::UserRoles do
4
+ subject do
5
+ User.create!(email: 'fred@example.com', password: 'password')
6
+ end
7
+
8
+ it "should have admin?" do
9
+ subject.should_not be_admin
10
+ end
11
+
12
+ it "should have roles" do
13
+ subject.roles.should == []
14
+ subject.roles << Role.create!(name: 'librarian')
15
+ subject.roles.first.name.should == 'librarian'
16
+
17
+ end
18
+
19
+ it "should have groups" do
20
+ subject.roles.should == []
21
+ subject.roles << Role.create!(name: 'librarian')
22
+ subject.save!
23
+ subject.groups.should include('registered', 'librarian')
24
+ end
25
+
26
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe Role do
4
+ it "should require a name" do
5
+ subject.should_not be_valid
6
+ subject.name = 'foo'
7
+ subject.should be_valid
8
+ end
9
+
10
+ it "should not allow space in the name" do
11
+ subject.name = 'foo bar'
12
+ subject.should_not be_valid
13
+ end
14
+
15
+ it "should not allow comma in the name" do
16
+ subject.name = 'foo,bar'
17
+ subject.should_not be_valid
18
+ end
19
+
20
+ it "should not allow ampersand in the name" do
21
+ subject.name = 'foo&bar'
22
+ subject.should_not be_valid
23
+ end
24
+
25
+ it "should not allow less-than in the name" do
26
+ subject.name = 'foo<bar'
27
+ subject.should_not be_valid
28
+ end
29
+
30
+ it "should validate uniqueness" do
31
+ subject.name ='foo'
32
+ subject.save!
33
+ Role.new(name: 'foo').should_not be_valid
34
+ end
35
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Routes for role_management" do
4
+ before(:each) do
5
+ @routes = Hydra::RoleManagement::Engine.routes
6
+ # so we have to do this instead:
7
+ # engine routes broke in rspec rails 2.12.1, so we had to add this:
8
+ assertion_instance.instance_variable_set(:@routes, @routes)
9
+ end
10
+ it "should route index" do
11
+ { :get => '/roles' }.should route_to( :controller => "roles", :action => "index")
12
+ end
13
+ it "should create roles" do
14
+ { :post => '/roles' }.should route_to( :controller => "roles", :action => "create")
15
+ end
16
+ it "should show roles" do
17
+ { :get => '/roles/7' }.should route_to( :controller => "roles", :action => "show", :id => '7')
18
+ end
19
+ it "should add users" do
20
+ { :post => '/roles/7/users' }.should route_to( :controller => "user_roles", :role_id=>'7', :action => "create")
21
+ end
22
+ it "should remove users" do
23
+ { :delete => '/roles/7/users/5' }.should route_to( :controller => "user_roles", :role_id=>'7', :id=>'5', :action => "destroy")
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ ENV["RAILS_ENV"] ||= 'test'
4
+
5
+ require File.expand_path("config/environment", ENV['RAILS_ROOT'] || File.expand_path("../internal", __FILE__))
6
+ require 'rspec/rails'
7
+
8
+
9
+ RSpec.configure do |config|
10
+ config.use_transactional_fixtures = true
11
+ config.before(:each, :type=>"controller") { @routes = Hydra::RoleManagement::Engine.routes }
12
+ config.include Devise::TestHelpers, :type => :controller
13
+
14
+ end
@@ -0,0 +1,28 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails'
4
+
5
+ # Bundle edge Rails instead:
6
+ # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
+
8
+ gem 'sqlite3'
9
+ gem 'blacklight'
10
+ gem 'hydra-head'
11
+
12
+
13
+ # Gems used only for assets and not required
14
+ # in production environments by default.
15
+ group :assets do
16
+ gem 'sass-rails', '~> 3.2.3'
17
+ gem 'coffee-rails', '~> 3.2.1'
18
+
19
+ # See https://github.com/sstephenson/execjs#readme for more supported runtimes
20
+ #gem 'therubyracer', :platforms => :ruby
21
+
22
+ gem 'uglifier', '>= 1.0.3'
23
+ end
24
+
25
+ gem 'jquery-rails'
26
+
27
+ gem 'hydra-role-management', :path=>'../../'
28
+ gem 'rspec-rails'
@@ -0,0 +1,37 @@
1
+ class Sample
2
+ # This is a stub model for testing.
3
+
4
+ cattr_accessor :objects
5
+ self.objects = {}
6
+
7
+ def self.create(params={})
8
+ obj = Sample.new
9
+ obj.save
10
+ obj
11
+ end
12
+
13
+ def save()
14
+ @pid ||= "sample:#{(rand * 1000).to_i}"
15
+ self.class.objects[@pid] = self
16
+ end
17
+
18
+ def update_attributes(attributes)
19
+ attributes.each do |k, v|
20
+ instance_variable_set "@#{k.to_s}".to_sym, v
21
+
22
+ self.class.send :attr_accessor, k
23
+ end
24
+ end
25
+
26
+ def self.find(pid)
27
+ objects[pid]
28
+ end
29
+
30
+ def pid
31
+ @pid
32
+ end
33
+
34
+ def destroy
35
+ self.class.objects.delete(@pid)
36
+ end
37
+ end
@@ -0,0 +1,5 @@
1
+ # -*- encoding : utf-8 -*-
2
+ class SolrDocument
3
+
4
+ include Blacklight::Solr::Document
5
+ end
@@ -0,0 +1,28 @@
1
+ # The following lines determine which user attributes your hydrangea app will use
2
+ # This configuration allows you to use the out of the box ActiveRecord associations between users and user_attributes
3
+ # It also allows you to specify your own user attributes
4
+ # The easiest way to override these methods would be to create your own module to include in User
5
+ # For example you could create a module for your local LDAP instance called MyLocalLDAPUserAttributes:
6
+ # User.send(:include, MyLocalLDAPAttributes)
7
+ # As long as your module includes methods for full_name, affiliation, and photo the personalization_helper should function correctly
8
+ #
9
+
10
+ # windows doesn't properly require hydra-head (from the gemfile), so we need to require it explicitly here:
11
+ require 'hydra/head' unless defined? Hydra
12
+
13
+ if Hydra.respond_to?(:configure)
14
+ Hydra.configure(:shared) do |config|
15
+ # This specifies the solr field names of permissions-related fields.
16
+ # You only need to change these values if you've indexed permissions by some means other than the Hydra's built-in tooling.
17
+ # If you change these, you must also update the permissions request handler in your solrconfig.xml to return those values
18
+ indexer = Solrizer::Descriptor.new(:string, :stored, :indexed, :multivalued)
19
+ config[:permissions] = {
20
+ :discover => {:group =>ActiveFedora::SolrService.solr_name("discover_access_group", indexer), :individual=>ActiveFedora::SolrService.solr_name("discover_access_person", indexer)},
21
+ :read => {:group =>ActiveFedora::SolrService.solr_name("read_access_group", indexer), :individual=>ActiveFedora::SolrService.solr_name("read_access_person", indexer)},
22
+ :edit => {:group =>ActiveFedora::SolrService.solr_name("edit_access_group", indexer), :individual=>ActiveFedora::SolrService.solr_name("edit_access_person", indexer)},
23
+ :owner => ActiveFedora::SolrService.solr_name("depositor", indexer),
24
+ :embargo_release_date => ActiveFedora::SolrService.solr_name("embargo_release_date", Solrizer::Descriptor.new(:date, :stored, :indexed))
25
+ }
26
+
27
+ end
28
+ end
@@ -0,0 +1,47 @@
1
+ require 'rails/generators'
2
+
3
+ class TestAppGenerator < Rails::Generators::Base
4
+ source_root File.expand_path("../../../../support", __FILE__)
5
+
6
+ # # Inject call to Hydra::BatchEdit.add_routes in config/routes.rb
7
+ # def inject_routes
8
+ # insert_into_file "config/routes.rb", :after => '.draw do' do
9
+ # "\n # Add BatchEdit routes."
10
+ # "\n Hydra::BatchEdit.add_routes(self)"
11
+ # end
12
+ # end
13
+
14
+
15
+ def run_blacklight_generator
16
+ say_status("warning", "GENERATING BL", :yellow)
17
+
18
+ generate 'blacklight', '--devise'
19
+ end
20
+
21
+ def run_hydra_head_generator
22
+ say_status("warning", "GENERATING HH", :yellow)
23
+
24
+ generate 'hydra:head', '-f'
25
+ end
26
+
27
+ def run_roles_generator
28
+ say_status("warning", "GENERATING ROLES", :yellow)
29
+
30
+ generate 'roles', '-f'
31
+
32
+ end
33
+
34
+ # def copy_test_models
35
+ # copy_file "app/models/sample.rb"
36
+ # copy_file "app/models/solr_document.rb"
37
+ # copy_file "db/migrate/20111101221803_create_searches.rb"
38
+ # end
39
+
40
+ def copy_rspec_rake_task
41
+ copy_file "lib/tasks/rspec.rake"
42
+ end
43
+
44
+ def copy_hydra_config
45
+ copy_file "config/initializers/hydra_config.rb"
46
+ end
47
+ end
@@ -0,0 +1,9 @@
1
+ require 'rspec/core/rake_task'
2
+ desc "run the hydra-batch-edit gem spec"
3
+ gem_home = File.expand_path('../../../../..', __FILE__)
4
+ RSpec::Core::RakeTask.new(:myspec) do |t|
5
+ t.pattern = gem_home + '/spec/**/*_spec.rb'
6
+ t.rspec_opts = "--colour"
7
+ t.ruby_opts = "-I#{gem_home}/spec"
8
+ end
9
+
metadata ADDED
@@ -0,0 +1,160 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hydra-role-management
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Justin Coyne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: cancan
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bootstrap_forms
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ description: Rails engine to do user roles in an RDBMS for hydra-head
84
+ email:
85
+ - justin@curationexperts.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - Gemfile
92
+ - README.md
93
+ - Rakefile
94
+ - app/controllers/concerns/hydra/role_management/roles_behavior.rb
95
+ - app/controllers/concerns/hydra/role_management/user_roles_behavior.rb
96
+ - app/controllers/roles_controller.rb
97
+ - app/controllers/user_roles_controller.rb
98
+ - app/models/concerns/hydra/role_management/user_roles.rb
99
+ - app/models/role.rb
100
+ - app/views/roles/index.html.erb
101
+ - app/views/roles/new.html.erb
102
+ - app/views/roles/show.html.erb
103
+ - config/routes.rb
104
+ - hydra-role-management.gemspec
105
+ - lib/generators/roles/roles_generator.rb
106
+ - lib/generators/roles/templates/migrations/user_roles.rb
107
+ - lib/hydra-role-management.rb
108
+ - lib/hydra/role_management.rb
109
+ - lib/hydra/role_management/version.rb
110
+ - spec/.gitignore
111
+ - spec/controllers/roles_controller_spec.rb
112
+ - spec/controllers/user_roles_controller_spec.rb
113
+ - spec/lib/user_roles_spec.rb
114
+ - spec/models/role_spec.rb
115
+ - spec/routing/role_management_routes_spec.rb
116
+ - spec/spec_helper.rb
117
+ - spec/support/Gemfile
118
+ - spec/support/app/models/sample.rb
119
+ - spec/support/app/models/solr_document.rb
120
+ - spec/support/config/initializers/hydra_config.rb
121
+ - spec/support/lib/generators/test_app_generator.rb
122
+ - spec/support/lib/tasks/rspec.rake
123
+ homepage: https://github.com/projecthydra/hydra-role-managment
124
+ licenses: []
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - '>='
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.0.0
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Rails engine to do user roles in an RDBMS for hydra-head
146
+ test_files:
147
+ - spec/.gitignore
148
+ - spec/controllers/roles_controller_spec.rb
149
+ - spec/controllers/user_roles_controller_spec.rb
150
+ - spec/lib/user_roles_spec.rb
151
+ - spec/models/role_spec.rb
152
+ - spec/routing/role_management_routes_spec.rb
153
+ - spec/spec_helper.rb
154
+ - spec/support/Gemfile
155
+ - spec/support/app/models/sample.rb
156
+ - spec/support/app/models/solr_document.rb
157
+ - spec/support/config/initializers/hydra_config.rb
158
+ - spec/support/lib/generators/test_app_generator.rb
159
+ - spec/support/lib/tasks/rspec.rake
160
+ has_rdoc: