bullet_train-roles 0.1.3 → 0.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f41c9b86402531e17f5853d967530968368985d44a5130f011c8d6d0844691a7
4
- data.tar.gz: 102b0571926e9a698b2654b8d54128b226e8c67ffdd10f626a18baf23b35c754
3
+ metadata.gz: f03a796a2c17954ad4c25e313caea68ba0b60b7e8901e7c1acf83d869e100592
4
+ data.tar.gz: 131e6518cefb00c6ea280d4ac4bf492961cb6f45b6d0ef3d695b66de9366d906
5
5
  SHA512:
6
- metadata.gz: 92706fc57f271f24cdcc2a6c204bbfeb21fe79e0a0b2cedd480c8ea51c62157e93f4665fe7de98f0ad0ff8b96fc04cd6448d408415faced1936e4d68a0521583
7
- data.tar.gz: 50c64184545ecfcdab68be3163148ae0d1ee3727f23fb415cfa741418d66b1aed71946f4e3902413d118bd22abe2e6715840d2548835f72d3d4f019412297807
6
+ metadata.gz: 7df53d71fb2d393e84a30a5efb1fa9f351781653b40e1cc31e5cf565d4432228b3a78b6924d021908c5d463695dfdeb0dff834a0f1c63a26438774e8159f4438
7
+ data.tar.gz: 56a0c8b76f5105959d828db3f619c863cc917fd3caf1e8dc838151268da68da1bce455ebd3378f68dfa7bf78d804d673df311f6351cfd0a47a2b4f43a6c68c07
data/Gemfile.lock CHANGED
@@ -9,7 +9,7 @@ GIT
9
9
  PATH
10
10
  remote: .
11
11
  specs:
12
- bullet_train-roles (0.1.2)
12
+ bullet_train-roles (0.1.4)
13
13
  active_hash
14
14
  activesupport
15
15
  cancancan
data/README.md CHANGED
@@ -1,12 +1,12 @@
1
1
  # Bullet Train Roles
2
2
 
3
- Bullet Train Roles provides a Yaml-based configuration layer on top of [CanCanCan](https://github.com/CanCanCommunity/cancancan). You can use this configuration file to simplify the definition of many common permissions, while still implementing more complicated permissions in CanCanCan's traditional `app/model/ability.rb`.
3
+ Bullet Train Roles provides a Yaml-based configuration layer on top of [CanCanCan](https://github.com/CanCanCommunity/cancancan). You can use this configuration file to simplify the definition of many common permissions, while still implementing more complicated permissions in CanCanCan's traditional `app/model/ability.rb`.
4
4
 
5
5
  Additionally, Bullet Train Roles makes it trivial to assign the same roles and associated permissions at different levels in your application. For example, you can assign someone administrative privileges at a team level, or only at a project level.
6
6
 
7
7
  Bullet Train Roles was created by [Andrew Culver](http://twitter.com/andrewculver) and [Adam Pallozzi](https://twitter.com/adampallozzi).
8
8
 
9
- ## Example Domain Model
9
+ ## Example Domain Model
10
10
 
11
11
  For the sake of this document, we're going to assume the following example modeling around users and teams:
12
12
 
@@ -15,7 +15,7 @@ For the sake of this document, we're going to assume the following example model
15
15
  - A `Membership` can have zero, one, or many `Role`s assigned.
16
16
  - A `Membership` without a `Role` is just a default team member.
17
17
 
18
- You don't have to name your models the same thing in order to use this Ruby Gem, but it does depend on having a similar structure.
18
+ You don't have to name your models the same thing in order to use this Ruby Gem, but it does depend on having a similar structure.
19
19
 
20
20
  > If you're interested in reading more about how and why Bullet Train implements this structure, you can [read about it on our blog](https://blog.bullettrain.co/teams-should-be-an-mvp-feature/).
21
21
 
@@ -52,10 +52,6 @@ The installer will:
52
52
  - add a basic `permit` call in `app/models/ability.rb`.
53
53
 
54
54
 
55
- ### Limitations
56
-
57
- The generators currently assume you're using PostgreSQL and `jsonb` will be available when generating a `role_ids` column. If you're using MySQL, the generator will use `json` instead, although you won't be able to set a default value and you'll need to take care of this in the model.
58
-
59
55
  ## Usage
60
56
 
61
57
  The provided `Role` model is backed by a Yaml configuration in `config/models/roles.yml`.
data/bin/setup CHANGED
@@ -8,7 +8,7 @@ bundle install
8
8
  # We need to cd into the dummy app because it uses a different Rakefile
9
9
  cd test/dummy
10
10
  bundle install
11
- rake db:test:prepare
11
+ rake db:reset
12
12
  cd ../..
13
13
 
14
14
  # Do any other automated setup that you need to do here
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Roles
4
- VERSION = "0.1.3"
4
+ VERSION = "0.1.4"
5
5
  end
@@ -58,11 +58,6 @@ module BulletTrain
58
58
  adapter_name
59
59
  end
60
60
 
61
- def db_adapter_supports_defaults?
62
- supported_db_adapters = %w[postgresql]
63
- supported_db_adapters.include?(db_adapter)
64
- end
65
-
66
61
  def find_json_data_type_identifier
67
62
  adapter_name = db_adapter
68
63
 
@@ -95,14 +90,6 @@ module BulletTrain
95
90
  File.write(file_location, update_file_content.join)
96
91
  end
97
92
 
98
- def add_default_value_to_migration(file_name, table_name)
99
- file_location = Dir["db/migrate/*_#{file_name}.rb"].last
100
- line_to_match = "add_column :#{table_name.downcase}, :role_ids"
101
- content_to_add = ", default: []\n"
102
-
103
- add_in_file(file_location, line_to_match, content_to_add)
104
- end
105
-
106
93
  def migration_file_exists?(file_name)
107
94
  file_location = Dir["db/migrate/*_#{file_name}.rb"].last
108
95
 
@@ -124,8 +111,6 @@ module BulletTrain
124
111
 
125
112
  generate "migration", "#{migration_file_name} role_ids:#{json_data_type_identifier}"
126
113
 
127
- add_default_value_to_migration(migration_file_name, top_level_model_table_name) if db_adapter_supports_defaults?
128
-
129
114
  puts("Success 🎉🎉\n\n")
130
115
  end
131
116
 
data/lib/models/role.rb CHANGED
@@ -109,23 +109,21 @@ class Role < ActiveYaml::Base
109
109
  class Collection < Array
110
110
  def initialize(model, ary)
111
111
  @model = model
112
-
113
112
  super(ary)
114
113
  end
115
114
 
116
115
  def <<(role)
117
116
  return true if include?(role)
118
-
119
- role_ids = @model.role_ids
120
-
117
+ role_ids = @model.role_ids || []
121
118
  role_ids << role.id
122
-
123
119
  @model.update(role_ids: role_ids)
124
120
  end
125
121
 
126
122
  def delete(role)
127
- @model.role_ids -= [role.key]
128
-
123
+ return @model.save unless include?(role)
124
+ current_role_ids = @model.role_ids || []
125
+ new_role_ids = current_role_ids - [role.key]
126
+ @model.role_ids = new_role_ids
129
127
  @model.save
130
128
  end
131
129
  end
data/lib/roles/support.rb CHANGED
@@ -44,7 +44,7 @@ module Roles
44
44
  after_destroy :invalidate_cache
45
45
 
46
46
  def validate_roles
47
- self.role_ids = role_ids.select(&:present?)
47
+ self.role_ids = role_ids&.select(&:present?) || []
48
48
 
49
49
  return if @allowed_roles.nil?
50
50
 
@@ -66,7 +66,7 @@ module Roles
66
66
  end
67
67
 
68
68
  def roles_without_defaults
69
- role_ids.map { |role_id| Role.find(role_id) }
69
+ role_ids&.map { |role_id| Role.find(role_id) } || []
70
70
  end
71
71
 
72
72
  def manageable_roles
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet_train-roles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Prabin Poudel