wildland_herd 0.1.0

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 (75) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +46 -0
  4. data/lib/generators/wildland_herd/base_resource_generator.rb +97 -0
  5. data/lib/generators/wildland_herd/install_generator.rb +48 -0
  6. data/lib/generators/wildland_herd/organizations/organizations_generator.rb +17 -0
  7. data/lib/generators/wildland_herd/organizations/templates/active_model_serializer.rb +7 -0
  8. data/lib/generators/wildland_herd/organizations/templates/api_controller.rb +8 -0
  9. data/lib/generators/wildland_herd/organizations/templates/factory_girl_factory.rb +5 -0
  10. data/lib/generators/wildland_herd/organizations/templates/migration.rb +8 -0
  11. data/lib/generators/wildland_herd/organizations/templates/model.rb +7 -0
  12. data/lib/generators/wildland_herd/organizations/templates/pundit_policy.rb +5 -0
  13. data/lib/generators/wildland_herd/permissions/permissions_generator.rb +23 -0
  14. data/lib/generators/wildland_herd/permissions/templates/active_model_serializer.rb +7 -0
  15. data/lib/generators/wildland_herd/permissions/templates/api_controller.rb +8 -0
  16. data/lib/generators/wildland_herd/permissions/templates/factory_girl_factory.rb +6 -0
  17. data/lib/generators/wildland_herd/permissions/templates/migration.rb +15 -0
  18. data/lib/generators/wildland_herd/permissions/templates/model.rb +5 -0
  19. data/lib/generators/wildland_herd/permissions/templates/pundit_policy.rb +5 -0
  20. data/lib/generators/wildland_herd/roles/roles_generator.rb +28 -0
  21. data/lib/generators/wildland_herd/roles/templates/active_model_serializer.rb +8 -0
  22. data/lib/generators/wildland_herd/roles/templates/api_controller.rb +8 -0
  23. data/lib/generators/wildland_herd/roles/templates/factory_girl_factory.rb +6 -0
  24. data/lib/generators/wildland_herd/roles/templates/migration.rb +9 -0
  25. data/lib/generators/wildland_herd/roles/templates/model.rb +8 -0
  26. data/lib/generators/wildland_herd/roles/templates/pundit_policy.rb +5 -0
  27. data/lib/generators/wildland_herd/templates/pundit_application_policy.rb +3 -0
  28. data/lib/tasks/default_roles_and_permissions.rake +4 -0
  29. data/lib/wildland_herd.rb +9 -0
  30. data/lib/wildland_herd/acts_as_organization.rb +21 -0
  31. data/lib/wildland_herd/acts_as_permission.rb +34 -0
  32. data/lib/wildland_herd/acts_as_role.rb +37 -0
  33. data/lib/wildland_herd/engine.rb +4 -0
  34. data/lib/wildland_herd/pundit_policy.rb +56 -0
  35. data/lib/wildland_herd/version.rb +3 -0
  36. data/test/dummy/README.rdoc +28 -0
  37. data/test/dummy/Rakefile +6 -0
  38. data/test/dummy/app/assets/javascripts/application.js +13 -0
  39. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  40. data/test/dummy/app/controllers/application_controller.rb +5 -0
  41. data/test/dummy/app/helpers/application_helper.rb +2 -0
  42. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  43. data/test/dummy/bin/bundle +3 -0
  44. data/test/dummy/bin/rails +4 -0
  45. data/test/dummy/bin/rake +4 -0
  46. data/test/dummy/bin/setup +29 -0
  47. data/test/dummy/config.ru +4 -0
  48. data/test/dummy/config/application.rb +26 -0
  49. data/test/dummy/config/boot.rb +5 -0
  50. data/test/dummy/config/database.yml +25 -0
  51. data/test/dummy/config/environment.rb +5 -0
  52. data/test/dummy/config/environments/development.rb +41 -0
  53. data/test/dummy/config/environments/production.rb +79 -0
  54. data/test/dummy/config/environments/test.rb +42 -0
  55. data/test/dummy/config/initializers/assets.rb +11 -0
  56. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  57. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  58. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  59. data/test/dummy/config/initializers/inflections.rb +16 -0
  60. data/test/dummy/config/initializers/mime_types.rb +4 -0
  61. data/test/dummy/config/initializers/session_store.rb +3 -0
  62. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  63. data/test/dummy/config/locales/en.yml +23 -0
  64. data/test/dummy/config/routes.rb +56 -0
  65. data/test/dummy/config/secrets.yml +22 -0
  66. data/test/dummy/public/404.html +67 -0
  67. data/test/dummy/public/422.html +67 -0
  68. data/test/dummy/public/500.html +66 -0
  69. data/test/dummy/public/favicon.ico +0 -0
  70. data/test/integration/navigation_test.rb +8 -0
  71. data/test/lib/generators/install_generator_test.rb +14 -0
  72. data/test/lib/generators/wildland_herd_generator_test.rb +14 -0
  73. data/test/test_helper.rb +20 -0
  74. data/test/wildland_herd_test.rb +7 -0
  75. metadata +198 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ef34cbdf688339590f67e8c818a2f6e494399d30
4
+ data.tar.gz: 9be562f0930080e782f452c42d4d1606c704b793
5
+ SHA512:
6
+ metadata.gz: 089af9e6de8381f37d8db8620387a29f6a6cb59b6eb23106b8841aa6bba67ee3a98723301db89f3b5191271adb10dd56661e16f67b9e1eb7bb29b1311915e657
7
+ data.tar.gz: 56c3d75da963caf1ef6bdfd58e34e30ffc55a30855f35a7797dbd6859ba6310499ff3447efa221fc10830af4692bbe4a5e9ffde80bad686ba71c0da6a5fbfed2
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Joe Weakley
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,46 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ require 'bundler/gem_tasks'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+
8
+ require 'rdoc/task'
9
+
10
+ RDoc::Task.new(:rdoc) do |rdoc|
11
+ rdoc.rdoc_dir = 'rdoc'
12
+ rdoc.title = 'WildlandHerd'
13
+ rdoc.options << '--line-numbers'
14
+ rdoc.rdoc_files.include('README.rdoc')
15
+ rdoc.rdoc_files.include('lib/**/*.rb')
16
+ end
17
+
18
+ APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
19
+ load 'rails/tasks/engine.rake'
20
+
21
+
22
+ load 'rails/tasks/statistics.rake'
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+ task :console do
38
+ require 'irb'
39
+ require 'irb/completion'
40
+ require 'wildland_herd'
41
+ ARGV.clear
42
+ IRB.start
43
+ end
44
+
45
+
46
+ task default: :test
@@ -0,0 +1,97 @@
1
+ require 'rails/generators/named_base'
2
+
3
+ module WildlandHerd
4
+ module Generators
5
+ class BaseResourceGenerator < Rails::Generators::NamedBase
6
+ include Rails::Generators::Migration
7
+ desc "Generates a model with the given NAME (if one does not exist) plus a migration file."
8
+ class_option :generate_migration, type: :boolean, default: true
9
+ class_option :generate_active_model_serializer, type: :boolean, default: true
10
+ class_option :generate_pundit_policy, type: :boolean, default: true
11
+ class_option :generate_factory_girl_factories, type: :boolean, default: true
12
+ class_option :generate_api_controllers, type: :boolean, default: true
13
+ class_option :api_controller_version, type: :string, default: 'v1'
14
+
15
+
16
+ def generate_model
17
+ template 'model.rb', File.join('app/models', "#{singular_name}.rb")
18
+ end
19
+
20
+ def generate_api_controllers
21
+ if options.generate_api_controllers?
22
+ template(
23
+ 'api_controller.rb',
24
+ File.join(
25
+ 'app/controllers/api',
26
+ "#{options.api_controller_version}",
27
+ "#{plural_name}_controller.rb"
28
+ )
29
+ )
30
+ insert_after_version(" resources :#{plural_name}")
31
+ end
32
+ end
33
+
34
+ def generate_active_model_serializer
35
+ if options.generate_active_model_serializer?
36
+ template 'active_model_serializer.rb', File.join('app/serializers', "#{singular_name}_serializer.rb")
37
+ end
38
+ end
39
+
40
+ def generate_factory_girl_factories
41
+ if options.generate_factory_girl_factories?
42
+ template 'factory_girl_factory.rb', File.join('spec/factories', "#{plural_name}.rb")
43
+ end
44
+ end
45
+
46
+
47
+ def generate_pundit_policy
48
+ if options.generate_pundit_policy?
49
+ template 'pundit_policy.rb', File.join('app/policies', "#{singular_name}_policy.rb")
50
+ end
51
+ end
52
+
53
+ def generate_migration
54
+ if options.generate_migration?
55
+ migration_template "migration.rb", "db/migrate/wildland_herd_create_#{table_name}.rb"
56
+ end
57
+ end
58
+
59
+ protected
60
+
61
+ def self.next_migration_number(dirname)
62
+ next_migration_number = current_migration_number(dirname) + 1
63
+ ActiveRecord::Migration.next_migration_number(next_migration_number)
64
+ end
65
+
66
+ def next_migration_number
67
+ self.class.next_migration_number('db/migrations')
68
+ end
69
+
70
+ def insert_after_version(string)
71
+ maybe_create_api_v1_namespace
72
+
73
+ in_root do
74
+ insert_into_file(
75
+ 'config/routes.rb',
76
+ "#{string}\n",
77
+ after: "namespace :#{options.api_controller_version} do\n"
78
+ )
79
+ end
80
+ end
81
+
82
+ def maybe_create_api_v1_namespace
83
+ in_root do
84
+ unless File.readlines('config/routes.rb').grep('namespace :api do')
85
+ route <<-ROUTE
86
+ namespace :api do
87
+ namespace :#{options.api_controller_version} do
88
+ end
89
+ end
90
+ ROUTE
91
+ end
92
+ end
93
+ end
94
+
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,48 @@
1
+ module WildlandHerd
2
+ module Generators
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+ desc "Creates a WildlandHerd initializer and copy locale files to your application."
6
+ class_option :organization_name, type: :string, default: 'organization', description: 'Name of organization class.'
7
+ class_option :permission_name, type: :string, default: 'permission', description: 'Name of permission class.'
8
+ class_option :role_name, type: :string, default: 'role', description: 'Name of role class.'
9
+ class_option :enable_user_management, type: :boolean, default: true
10
+ class_option :add_pundit_policy, type: :boolean, default: true
11
+ class_option :create_sample_data, type: :boolean, default: true
12
+
13
+ def add_pundit_policy
14
+ if options.add_pundit_policy?
15
+ template 'pundit_application_policy.rb', File.join('app/policies', 'application_policy.rb')
16
+ end
17
+ end
18
+
19
+ def generate_models
20
+ invoke(
21
+ 'wildland_herd:organizations',
22
+ [options.organization_name],
23
+ [
24
+ "--role_name=#{options.role_name}",
25
+ "--permission_name=#{options.permission_name}"
26
+ ]
27
+ )
28
+ invoke(
29
+ 'wildland_herd:roles',
30
+ [options.role_name],
31
+ [
32
+ "--organization_name=#{options.organization_name}",
33
+ "--permissions_name=#{options.permission_name}",
34
+ "--enable_user_management=#{options.enable_user_management}",
35
+ ]
36
+ )
37
+ invoke(
38
+ 'wildland_herd:permissions',
39
+ [options.permission_name],
40
+ [
41
+ "--organization_name=#{options.organization_name}",
42
+ "--role_name=#{options.role_name}",
43
+ ]
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,17 @@
1
+ require 'generators/wildland_herd/base_resource_generator'
2
+
3
+ module WildlandHerd
4
+ module Generators
5
+ class OrganizationsGenerator < BaseResourceGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ class_option :role_name, type: :string, default: ''
8
+ class_option :permission_name, type: :string, default: ''
9
+
10
+ protected
11
+
12
+ def attributes
13
+ [:name]
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,7 @@
1
+ class <%= class_name %>Serializer < ActiveModel::Serializer
2
+ embed :ids
3
+ attributes :id, :name, :created_at, :updated_at
4
+
5
+ <% unless options.permission_name.blank? %> has_many :<%= options.permission_name.pluralize %><% end %>
6
+ <% unless options.role_name.blank? %> has_many :<%= options.role_name.pluralize %><% end %>
7
+ end
@@ -0,0 +1,8 @@
1
+ module Api
2
+ module V1
3
+ class <%= class_name.pluralize %>Controller < BaseApiController
4
+
5
+ #Override default logic here
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ FactoryGirl.define do
2
+ factory :<%= singular_name%> do
3
+ sequence(:name) { |n| "Organization #{n}" }
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class WildlandHerdCreate<%= table_name.camelize %> < ActiveRecord::Migration
2
+ def change
3
+ create_table(:<%= table_name %>) do |t|
4
+ t.string :name, null: false, default: ''
5
+ t.timestamps null: false
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,7 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ include WildlandHerd::ActsAsOrganization
3
+ <% unless options.role_name.blank? %> has_many :<%= options.role_name.pluralize %><% end %>
4
+ <% unless options.permission_name.blank? %> has_many :<%= options.permission_name.pluralize %>, through: :<%= options.role_name.pluralize %><% end %>
5
+
6
+ validates :name, uniqueness: true, presence: true
7
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %>Policy < ApplicationPolicy
2
+ def permitted_attributes
3
+ <%= attributes %>
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ require 'generators/wildland_herd/base_resource_generator'
2
+
3
+ module WildlandHerd
4
+ module Generators
5
+ class PermissionsGenerator < BaseResourceGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ class_option :role_name, type: :string, default: 'role', description: 'TODO'
8
+ class_option :organization_name, type: :string, default: '', description: 'TODO'
9
+
10
+ protected
11
+
12
+ def role_table_name
13
+ options.role_name
14
+ end
15
+
16
+ def attributes
17
+ [:name, :permissible_type, :permissible_id, :can_create, :can_read, :can_update, :can_destroy].tap do |attrs|
18
+ attrs << :roles_id unless options.role_name.blank?
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ class <%= class_name %>Serializer < ActiveModel::Serializer
2
+ embed :ids
3
+ attributes :id, :name, :permissible_type, :permissible_id,
4
+ :can_create, :can_read, :can_update, :can_destroy, :created_at, :updated_at
5
+
6
+ <% unless options.role_name.blank? %> has_one :<%= options.role_name %><% end %>
7
+ end
@@ -0,0 +1,8 @@
1
+ module Api
2
+ module V1
3
+ class <%= class_name.pluralize %>Controller < BaseApiController
4
+
5
+ #Override default logic here
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :<%= singular_name%> do
3
+ sequence(:name) { |n| "Permission #{n}" }
4
+ <% unless options.role_name.blank? %> <%= options.role_name %><% end %>
5
+ end
6
+ end
@@ -0,0 +1,15 @@
1
+ class WildlandHerdCreate<%= table_name.camelize %> < ActiveRecord::Migration
2
+ def change
3
+ create_table(:<%= table_name %>) do |t|
4
+ t.string :name, null: false, default: ''
5
+ t.references :<%= role_table_name %>
6
+ t.string :permissible_type, default: nil
7
+ t.integer :permissible_id
8
+ t.boolean :can_create, default: false
9
+ t.boolean :can_read, default: false
10
+ t.boolean :can_update, default: false
11
+ t.boolean :can_destroy, default: false
12
+ t.timestamps null: false
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ include WildlandHerd::ActsAsPermission
3
+ <% unless options.role_name.blank? %> belongs_to :<%= options.role_name %><% end %>
4
+ <% unless options.organization_name.blank? %> has_one :<%= options.organization_name %>, through: :<%= options.role_name %><% end %>
5
+ end
@@ -0,0 +1,5 @@
1
+ class <%= class_name %>Policy < ApplicationPolicy
2
+ def permitted_attributes
3
+ <%= attributes %>
4
+ end
5
+ end
@@ -0,0 +1,28 @@
1
+ require 'generators/wildland_herd/base_resource_generator'
2
+
3
+ module WildlandHerd
4
+ module Generators
5
+ class RolesGenerator < BaseResourceGenerator
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ class_option :organization_name, type: :string, default: ''
8
+ class_option :permission_name, type: :string, default: 'permission'
9
+ class_option :enable_user_management, type: :boolean, default: true
10
+
11
+ protected
12
+
13
+ def organization_table_name
14
+ options.organization_name
15
+ end
16
+
17
+ def user_class_name
18
+ 'user'
19
+ end
20
+
21
+ def attributes
22
+ [:name].tap do |attrs|
23
+ attrs << :organization_id unless options.organization_table_name.blank?
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ class <%= class_name %>Serializer < ActiveModel::Serializer
2
+ embed :ids
3
+ attributes :id, :name, :created_at, :updated_at
4
+
5
+ <% unless options.permission_name.blank? %> has_many :<%= options.permission_name.pluralize %><% end %>
6
+ <% unless options.organization_name.blank? %> has_one :<%= options.organization_name %><% end %>
7
+ <% if options.enable_user_management %> has_many :<%= user_class_name.pluralize %><% end %>
8
+ end
@@ -0,0 +1,8 @@
1
+ module Api
2
+ module V1
3
+ class <%= class_name.pluralize %>Controller < BaseApiController
4
+
5
+ #Override default logic here
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,6 @@
1
+ FactoryGirl.define do
2
+ factory :<%= singular_name%> do
3
+ sequence(:name) { |n| "Role #{n}" }
4
+ <% unless organization_table_name.blank? %> <%= options.organization_name %><% end %>
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class WildlandHerdCreate<%= table_name.camelize %> < ActiveRecord::Migration
2
+ def change
3
+ create_table(:<%= table_name %>) do |t|
4
+ t.string :name, null: false, default: ''
5
+ <% unless organization_table_name.blank? %> t.references :<%= organization_table_name %><% end %>
6
+ t.timestamps null: false
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,8 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ include WildlandHerd::ActsAsRole
3
+ <% unless organization_table_name.blank? %> belongs_to :<%= options.organization_name %><% end %>
4
+ has_many :<%= options.permission_name.pluralize %>
5
+ <% if options.enable_user_management %> has_many :<%= user_class_name.pluralize %> <% end %>
6
+
7
+ validates :name, presence: true
8
+ end