arpa 0.0.2

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 (139) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +42 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE.txt +22 -0
  7. data/README.md +138 -0
  8. data/Rakefile +2 -0
  9. data/arpa.gemspec +33 -0
  10. data/lib/arpa.rb +91 -0
  11. data/lib/arpa/additions/resource.rb +29 -0
  12. data/lib/arpa/assets/stylesheets/ar_accordion.scss +80 -0
  13. data/lib/arpa/controllers/profiles_controller.rb +106 -0
  14. data/lib/arpa/controllers/resources_controller.rb +47 -0
  15. data/lib/arpa/controllers/roles_controller.rb +106 -0
  16. data/lib/arpa/data_mappers/action_mapper.rb +13 -0
  17. data/lib/arpa/data_mappers/base.rb +117 -0
  18. data/lib/arpa/data_mappers/profile_mapper.rb +14 -0
  19. data/lib/arpa/data_mappers/resource_mapper.rb +11 -0
  20. data/lib/arpa/data_mappers/role_mapper.rb +14 -0
  21. data/lib/arpa/entities/action.rb +24 -0
  22. data/lib/arpa/entities/permissions.rb +35 -0
  23. data/lib/arpa/entities/profile.rb +22 -0
  24. data/lib/arpa/entities/resource.rb +58 -0
  25. data/lib/arpa/entities/role.rb +28 -0
  26. data/lib/arpa/exceptions/record_invalid.rb +13 -0
  27. data/lib/arpa/repositories/actions/creator.rb +18 -0
  28. data/lib/arpa/repositories/actions/finder.rb +23 -0
  29. data/lib/arpa/repositories/actions/remover.rb +22 -0
  30. data/lib/arpa/repositories/actions/repository_action.rb +15 -0
  31. data/lib/arpa/repositories/base.rb +15 -0
  32. data/lib/arpa/repositories/profiles/creator.rb +18 -0
  33. data/lib/arpa/repositories/profiles/finder.rb +29 -0
  34. data/lib/arpa/repositories/profiles/remover.rb +29 -0
  35. data/lib/arpa/repositories/profiles/repository_profile.rb +12 -0
  36. data/lib/arpa/repositories/profiles/updater.rb +23 -0
  37. data/lib/arpa/repositories/registrator.rb +44 -0
  38. data/lib/arpa/repositories/resources/creator.rb +18 -0
  39. data/lib/arpa/repositories/resources/finder.rb +45 -0
  40. data/lib/arpa/repositories/resources/remover.rb +22 -0
  41. data/lib/arpa/repositories/resources/repository_resource.rb +12 -0
  42. data/lib/arpa/repositories/roles/creator.rb +18 -0
  43. data/lib/arpa/repositories/roles/finder.rb +29 -0
  44. data/lib/arpa/repositories/roles/remover.rb +29 -0
  45. data/lib/arpa/repositories/roles/repository_role.rb +13 -0
  46. data/lib/arpa/repositories/roles/updater.rb +23 -0
  47. data/lib/arpa/services/actions/create/action_creator.rb +50 -0
  48. data/lib/arpa/services/actions/remove/action_remover.rb +24 -0
  49. data/lib/arpa/services/base.rb +41 -0
  50. data/lib/arpa/services/profiles/create/profile_creator.rb +32 -0
  51. data/lib/arpa/services/profiles/profile_manager_creator.rb +22 -0
  52. data/lib/arpa/services/profiles/profile_manager_remover.rb +24 -0
  53. data/lib/arpa/services/profiles/profile_manager_updater.rb +22 -0
  54. data/lib/arpa/services/profiles/remove/profile_remover.rb +25 -0
  55. data/lib/arpa/services/profiles/update/profile_updater.rb +32 -0
  56. data/lib/arpa/services/resources/create/resource_creator.rb +42 -0
  57. data/lib/arpa/services/resources/remove/resource_remover.rb +31 -0
  58. data/lib/arpa/services/resources/resource_manager_creator.rb +50 -0
  59. data/lib/arpa/services/roles/create/role_creator.rb +33 -0
  60. data/lib/arpa/services/roles/remove/role_remover.rb +25 -0
  61. data/lib/arpa/services/roles/role_manager_creator.rb +23 -0
  62. data/lib/arpa/services/roles/role_manager_remover.rb +23 -0
  63. data/lib/arpa/services/roles/role_manager_updater.rb +22 -0
  64. data/lib/arpa/services/roles/update/role_updater.rb +32 -0
  65. data/lib/arpa/services/verifier.rb +24 -0
  66. data/lib/arpa/validators/action_validator.rb +17 -0
  67. data/lib/arpa/validators/profile_validator.rb +19 -0
  68. data/lib/arpa/validators/resource_validator.rb +17 -0
  69. data/lib/arpa/validators/role_validator.rb +20 -0
  70. data/lib/arpa/version.rb +3 -0
  71. data/lib/arpa/views/profiles/_form.html.erb +41 -0
  72. data/lib/arpa/views/profiles/edit.html.erb +6 -0
  73. data/lib/arpa/views/profiles/index.html.erb +29 -0
  74. data/lib/arpa/views/profiles/new.html.erb +5 -0
  75. data/lib/arpa/views/profiles/show.html.erb +37 -0
  76. data/lib/arpa/views/resources/index.html.erb +27 -0
  77. data/lib/arpa/views/resources/show.html.erb +33 -0
  78. data/lib/arpa/views/roles/_form.html.erb +55 -0
  79. data/lib/arpa/views/roles/edit.html.erb +6 -0
  80. data/lib/arpa/views/roles/index.html.erb +29 -0
  81. data/lib/arpa/views/roles/new.html.erb +5 -0
  82. data/lib/arpa/views/roles/show.html.erb +37 -0
  83. data/lib/config/locales/arpa.en.yml +38 -0
  84. data/lib/generators/ar/install_generator.rb +74 -0
  85. data/lib/generators/ar/templates/migration.rb +48 -0
  86. data/spec/factories/repository_actions.rb +19 -0
  87. data/spec/factories/repository_profiles.rb +11 -0
  88. data/spec/factories/repository_resources.rb +15 -0
  89. data/spec/factories/repository_roles.rb +11 -0
  90. data/spec/lib/ar/additions/resource_spec.rb +34 -0
  91. data/spec/lib/ar/data_mappers/action_mapper_spec.rb +46 -0
  92. data/spec/lib/ar/data_mappers/base_spec.rb +47 -0
  93. data/spec/lib/ar/data_mappers/profile_mapper_spec.rb +43 -0
  94. data/spec/lib/ar/data_mappers/resource_mapper_spec.rb +38 -0
  95. data/spec/lib/ar/data_mappers/role_mapper_spec.rb +47 -0
  96. data/spec/lib/ar/entities/action_spec.rb +19 -0
  97. data/spec/lib/ar/entities/permissions_spec.rb +61 -0
  98. data/spec/lib/ar/entities/resource_spec.rb +35 -0
  99. data/spec/lib/ar/repositories/actions/finder_spec.rb +40 -0
  100. data/spec/lib/ar/repositories/base_spec.rb +37 -0
  101. data/spec/lib/ar/repositories/profiles/finder_spec.rb +43 -0
  102. data/spec/lib/ar/repositories/profiles/remover_spec.rb +31 -0
  103. data/spec/lib/ar/repositories/resources/finder_spec.rb +92 -0
  104. data/spec/lib/ar/repositories/resources/remover_spec.rb +38 -0
  105. data/spec/lib/ar/repositories/roles/finder_spec.rb +43 -0
  106. data/spec/lib/ar/repositories/roles/remover_spec.rb +31 -0
  107. data/spec/lib/ar/requests/profiles/create_request_spec.rb +51 -0
  108. data/spec/lib/ar/requests/profiles/remove_request_spec.rb +36 -0
  109. data/spec/lib/ar/requests/resources/create_request_spec.rb +107 -0
  110. data/spec/lib/ar/requests/roles/create_request_spec.rb +40 -0
  111. data/spec/lib/ar/requests/roles/remove_request_spec.rb +23 -0
  112. data/spec/lib/ar/requests/roles/update_request_spec.rb +50 -0
  113. data/spec/lib/ar/services/actions/create/action_creator_spec.rb +88 -0
  114. data/spec/lib/ar/services/actions/remove/action_remover_spec.rb +36 -0
  115. data/spec/lib/ar/services/base_spec.rb +94 -0
  116. data/spec/lib/ar/services/profiles/create/profile_creator_spec.rb +68 -0
  117. data/spec/lib/ar/services/profiles/profile_manager_creator_spec.rb +31 -0
  118. data/spec/lib/ar/services/profiles/profile_manager_remover_spec.rb +44 -0
  119. data/spec/lib/ar/services/profiles/profile_manager_updater_spec.rb +31 -0
  120. data/spec/lib/ar/services/profiles/remove/profile_remover_spec.rb +45 -0
  121. data/spec/lib/ar/services/profiles/update/profile_updater_spec.rb +68 -0
  122. data/spec/lib/ar/services/resources/create/resource_creator_spec.rb +87 -0
  123. data/spec/lib/ar/services/resources/remove/resource_remover_spec.rb +50 -0
  124. data/spec/lib/ar/services/resources/resource_manager_creator_spec.rb +71 -0
  125. data/spec/lib/ar/services/roles/create/role_creator_spec.rb +68 -0
  126. data/spec/lib/ar/services/roles/remove/role_remover_spec.rb +50 -0
  127. data/spec/lib/ar/services/roles/role_manager_creator_spec.rb +31 -0
  128. data/spec/lib/ar/services/roles/role_manager_remover_spec.rb +32 -0
  129. data/spec/lib/ar/services/roles/role_manager_updater_spec.rb +31 -0
  130. data/spec/lib/ar/services/roles/update/role_updater_spec.rb +68 -0
  131. data/spec/lib/ar/services/verifier_spec.rb +44 -0
  132. data/spec/lib/ar/validators/action_validator_spec.rb +15 -0
  133. data/spec/lib/ar/validators/profile_validator_spec.rb +16 -0
  134. data/spec/lib/ar/validators/resource_validator_spec.rb +15 -0
  135. data/spec/lib/ar/validators/role_validator_spec.rb +16 -0
  136. data/spec/spec_helper.rb +33 -0
  137. data/spec/support/repositories/test_repository.rb +2 -0
  138. data/spec/support/schema.rb +58 -0
  139. metadata +380 -0
@@ -0,0 +1,45 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Resources
4
+ class Finder
5
+ include Arpa::Repositories::Base
6
+
7
+ def find(id)
8
+ record = repository_class.find(id)
9
+ mapper_instance.map_to_entity(record)
10
+ end
11
+
12
+ def all
13
+ repository_class.all.collect do |record|
14
+ mapper_instance.map_to_entity(record)
15
+ end
16
+ end
17
+
18
+ def by_full_name(full_name)
19
+ record = repository_class.where(full_name: full_name).first
20
+ mapper_instance.map_to_entity(record) if record
21
+ end
22
+
23
+ def permissions(profile_ids)
24
+ records = repository_class.joins(actions: [roles: :profiles])
25
+ .where(repository_profiles: {id: profile_ids})
26
+
27
+ resources = records.collect do |record|
28
+ mapper_instance.map_to_entity(record)
29
+ end
30
+
31
+ Arpa::Entities::Permissions.new(resources)
32
+ end
33
+
34
+ def mapper_instance
35
+ Arpa::DataMappers::ResourceMapper.instance
36
+ end
37
+
38
+ def repository_class
39
+ RepositoryResource
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,22 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Resources
4
+ class Remover
5
+ include Arpa::Repositories::Base
6
+
7
+ def destroy(entity)
8
+ repository_class.destroy(entity.id)
9
+ end
10
+
11
+ def mapper_instance
12
+ Arpa::DataMappers::ResourceMapper.instance
13
+ end
14
+
15
+ def repository_class
16
+ RepositoryResource
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,12 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Resources
4
+ class RepositoryResource < ActiveRecord::Base
5
+ default_scope {order(name: :asc)}
6
+
7
+ has_many :actions, dependent: :destroy, class_name: 'Arpa::Repositories::Actions::RepositoryAction'
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,18 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Roles
4
+ class Creator
5
+ include Arpa::Repositories::Registrator
6
+
7
+ def mapper_instance
8
+ Arpa::DataMappers::RoleMapper.instance
9
+ end
10
+
11
+ def repository_class
12
+ RepositoryRole
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Roles
4
+ class Finder
5
+ include Arpa::Repositories::Base
6
+
7
+ def find(id)
8
+ record = repository_class.find(id)
9
+ mapper_instance.map_to_entity(record)
10
+ end
11
+
12
+ def all
13
+ repository_class.all.collect do |record|
14
+ mapper_instance.map_to_entity(record)
15
+ end
16
+ end
17
+
18
+ def mapper_instance
19
+ Arpa::DataMappers::RoleMapper.instance
20
+ end
21
+
22
+ def repository_class
23
+ RepositoryRole
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Roles
4
+ class Remover
5
+ include Arpa::Repositories::Base
6
+
7
+ def destroy(entity)
8
+ repository_class.destroy(entity.id)
9
+ end
10
+
11
+ def disable(entity)
12
+ record = mapper_instance.map_to_record(entity)
13
+ repository_class.update(record.id, removed: true)
14
+ record.reload
15
+ mapper_instance.map_to_entity(record)
16
+ end
17
+
18
+ def mapper_instance
19
+ Arpa::DataMappers::RoleMapper.instance
20
+ end
21
+
22
+ def repository_class
23
+ RepositoryRole
24
+ end
25
+
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,13 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Roles
4
+ class RepositoryRole < ActiveRecord::Base
5
+ default_scope {where(removed: false).order(name: :asc)}
6
+
7
+ has_and_belongs_to_many :actions, class_name: 'Arpa::Repositories::Actions::RepositoryAction'
8
+ has_and_belongs_to_many :profiles, class_name: 'Arpa::Repositories::Profiles::RepositoryProfile'
9
+
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module Arpa
2
+ module Repositories
3
+ module Roles
4
+ class Updater
5
+ include Arpa::Repositories::Registrator
6
+
7
+ def post_update(entity, record)
8
+ record.action_ids = entity.action_ids
9
+ record.save!
10
+ end
11
+
12
+ def mapper_instance
13
+ Arpa::DataMappers::RoleMapper.instance
14
+ end
15
+
16
+ def repository_class
17
+ RepositoryRole
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,50 @@
1
+ module Arpa
2
+ module Services
3
+ module Actions
4
+ module Create
5
+ class ActionCreator
6
+
7
+ def create_many(params)
8
+ params[:actions_names].collect do |action_name|
9
+ create(action_params(params, action_name))
10
+ end
11
+ end
12
+
13
+ def create(params)
14
+ action = action_instance(params)
15
+
16
+ action_found = finder_repo.by_name_and_resource(params[:name], params[:resource_id])
17
+ return action_found if action_found
18
+
19
+ validate_action(action)
20
+ creator_repo.create(action)
21
+ end
22
+
23
+ private
24
+
25
+ def action_params(params, action_name)
26
+ {name: action_name, resource_id: params[:resource].id}
27
+ end
28
+
29
+ def action_instance(params)
30
+ Arpa::Entities::Action.new(params)
31
+ end
32
+
33
+ def validate_action(action)
34
+ validator = Arpa::Validators::ActionValidator.new(action)
35
+ raise Arpa::Exceptions::RecordInvalid.new(message: validator.errors.messages, errors: validator.errors) unless validator.valid?
36
+ end
37
+
38
+ def finder_repo
39
+ @finder_repo ||= Arpa::Repositories::Actions::Finder.new
40
+ end
41
+
42
+ def creator_repo
43
+ @creator_repo ||= Arpa::Repositories::Actions::Creator.new
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,24 @@
1
+ module Arpa
2
+ module Services
3
+ module Actions
4
+ module Remove
5
+ class ActionRemover
6
+
7
+ def remove_nonexistent_actions(params)
8
+ params[:resource].actions.each do |action|
9
+ exist = params[:actions_names].include?(action.name)
10
+ remover_repo.destroy(action) unless exist
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def remover_repo
17
+ @remover_repo ||= Arpa::Repositories::Actions::Remover.new
18
+ end
19
+
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module Arpa
2
+ module Services
3
+ module Base
4
+
5
+ def self.included(base)
6
+ base.extend ClassMethods
7
+ end
8
+
9
+ def manager_action callback, &block
10
+ begin_transaction do
11
+ begin
12
+ result = block.call
13
+ callback[:success].call result
14
+ rescue => e
15
+ callback[:fail].call e
16
+ end
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def begin_transaction
23
+ self.class._repository_transaction.transaction do
24
+ yield
25
+ end
26
+ end
27
+
28
+ module ClassMethods
29
+ def repository_transaction repository_transaction_class
30
+ @repository_transaction = repository_transaction_class
31
+ end
32
+
33
+ def _repository_transaction
34
+ @repository_transaction ||= 'ActiveRecord::Base'
35
+ @repository_transaction.constantize
36
+ end
37
+
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ module Arpa
2
+ module Services
3
+ module Profiles
4
+ module Create
5
+ class ProfileCreator
6
+
7
+ def create(params)
8
+ profile = profile_instance(params)
9
+ validate_profile(profile)
10
+ creator_repo.create(profile)
11
+ end
12
+
13
+ private
14
+
15
+ def profile_instance(params)
16
+ Arpa::Entities::Profile.new(params)
17
+ end
18
+
19
+ def validate_profile(profile)
20
+ validator = Arpa::Validators::ProfileValidator.new(profile)
21
+ raise Arpa::Exceptions::RecordInvalid.new(message: validator.errors.messages, errors: validator.errors) unless validator.valid?
22
+ end
23
+
24
+ def creator_repo
25
+ @creator_repo ||= Arpa::Repositories::Profiles::Creator.new
26
+ end
27
+
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ module Arpa
2
+ module Services
3
+ module Profiles
4
+ class ProfileManagerCreator
5
+ include Arpa::Services::Base
6
+
7
+ def create(params, callback)
8
+ manager_action callback do
9
+ profile_creator.create(params[:profile])
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def profile_creator
16
+ @profile_creator ||= Arpa::Services::Profiles::Create::ProfileCreator.new
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module Arpa
2
+ module Services
3
+ module Profiles
4
+ class ProfileManagerRemover
5
+ include Arpa::Services::Base
6
+
7
+ def remove(params, callback)
8
+ manager_action callback do
9
+ role = params[:profile]
10
+ disable = params[:disable]
11
+ profile_remover.remove(role, disable)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def profile_remover
18
+ @profile_remover ||= Arpa::Services::Profiles::Remove::ProfileRemover.new
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module Arpa
2
+ module Services
3
+ module Profiles
4
+ class ProfileManagerUpdater
5
+ include Arpa::Services::Base
6
+
7
+ def update(params, callback)
8
+ manager_action callback do
9
+ profile_updater.update(params[:profile])
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def profile_updater
16
+ @profile_updater ||= Arpa::Services::Profiles::Update::ProfileUpdater.new
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module Arpa
2
+ module Services
3
+ module Profiles
4
+ module Remove
5
+ class ProfileRemover
6
+
7
+ def remove(entity, disable = false)
8
+ if disable
9
+ remover_repo.disable(entity)
10
+ else
11
+ remover_repo.destroy(entity)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def remover_repo
18
+ @remover_repo ||= Arpa::Repositories::Profiles::Remover.new
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end