aptible-rails 0.4.12 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 38a2e5fb3f7144a4d434f645c1a85a02c387dc56
4
- data.tar.gz: fa23b67121c9e933e98d89730c7dab9ba3363647
3
+ metadata.gz: dc1c1db94972af41d22e03c859b11fe13e6c6074
4
+ data.tar.gz: fac8a5dca172e1aa46fa6af418e4e9ee70658a0d
5
5
  SHA512:
6
- metadata.gz: 7ca33fea7206a36d43ea0b9aaa67f5b027736e681bd25fab8c1e817abd8b95bdc7051d379e349c169b729eda18e516816cc8820332cd5f8ac37aba59497bd1fa
7
- data.tar.gz: f0aaf57aa9485b7a7006a6ebdc220d84482313a7b677bab50c0b2244bd8967d17cc782d025165456bf384299f966d53123d0091a80cebe074cd993a11c916f49
6
+ metadata.gz: d292f742fe7e8722fbdfd58d9aee624eea2a0ae00631831a2dddeb050eb0f35212a5e6eee24c661e22743bba813f0fb8ba4b484b34c33fbbaf685da75996d847
7
+ data.tar.gz: 2d1c48ee5c2b2eece49ca6bdb0ae1294605835df2b9279c406cac2776e2c416b9a13552a342bd009ef004aa9286006f42a799637724e1f3a710a54efcbdd4bdc
@@ -2,4 +2,16 @@ class AccountDecorator < ApplicationDecorator
2
2
  def needs_startup_guide?
3
3
  object.apps.count == 0 && object.databases.count == 0
4
4
  end
5
+
6
+ def cached_permissions
7
+ garner.bind(h.controller.session_token) do
8
+ object.permissions
9
+ end
10
+ end
11
+
12
+ # rubocop:disable PredicateName
13
+ def has_scope?(scope)
14
+ cached_permissions.map(&:scope).include? scope
15
+ end
16
+ # rubocop:enable PredicateName
5
17
  end
@@ -14,7 +14,8 @@ require_relative 'resource_decorator'
14
14
  require_relative 'criterion_decorator'
15
15
  require_relative 'account_decorator'
16
16
  require_relative 'app_decorator'
17
- require_relative 'database_decorator'
18
17
  require_relative 'operation_decorator'
19
18
  require_relative 'organization_decorator'
19
+ require_relative 'role_decorator'
20
20
  require_relative 'user_decorator'
21
+ require_relative 'database_decorator'
@@ -1,5 +1,18 @@
1
1
  class OperationDecorator < ApplicationDecorator
2
+ # TODO: cleanup after manual migration of user data to operations
3
+
2
4
  def past_tense
3
5
  object.type.humanize + (type[-1] == 'e' ? 'd' : 'ed')
4
6
  end
7
+
8
+ def creator_gravatar
9
+ return nil if object.user.nil? && object.user_email.nil?
10
+ email = object.user_email || object.user.email
11
+ h.gravatar_url(email, 32)
12
+ end
13
+
14
+ def creator_name
15
+ return nil if object.user.nil? && object.user_name.nil?
16
+ object.user_name || object.user.name
17
+ end
5
18
  end
@@ -2,7 +2,7 @@
2
2
  class ResourceDecorator < ApplicationDecorator
3
3
  def last_operation_gravatar
4
4
  garner.bind(h.controller.session_token).bind(object) do
5
- h.gravatar_url(last_operation.user.email, 32)
5
+ last_operation.decorate.creator_gravatar
6
6
  end
7
7
  end
8
8
 
@@ -0,0 +1,16 @@
1
+ class RoleDecorator < ApplicationDecorator
2
+ def can?(scope, account)
3
+ role_scopes = account_permissions(account).map(&:scope)
4
+ role_scopes.include?('manage') || role_scopes.include?(scope)
5
+ end
6
+
7
+ def has?(scope, account)
8
+ account_permissions(account).map(&:scope).include?(scope)
9
+ end
10
+
11
+ def cached_permissions
12
+ garner.bind(h.controller.session_token) do
13
+ object.permissions
14
+ end
15
+ end
16
+ end
@@ -1,13 +1,41 @@
1
1
  class UserDecorator < ApplicationDecorator
2
+ def can?(scope, account)
3
+ return true if object.can_manage?(account.organization)
4
+ user_scopes = account_permissions(account).map(&:scope)
5
+ user_scopes.include?('manage') || user_scopes.include?(scope)
6
+ end
7
+
2
8
  def cached_organizations
9
+ garner
10
+ .bind(h.controller.session_token)
11
+ .bind(h.controller.current_organization) do
12
+ object.organizations
13
+ end
14
+ end
15
+
16
+ def organization_count
17
+ cached_organizations.count
18
+ end
19
+
20
+ def cached_roles
3
21
  garner.bind(h.controller.session_token) do
4
- object.organizations
22
+ object.roles
5
23
  end
6
24
  end
7
25
 
8
- def organization_count
26
+ def cached_permissions
9
27
  garner.bind(h.controller.session_token) do
10
- object.organizations.count
28
+ permissions = []
29
+ cached_roles.each do |role|
30
+ permissions += role.permissions
31
+ end
32
+ permissions
33
+ end
34
+ end
35
+
36
+ def account_permissions(account)
37
+ cached_permissions.select do |permission|
38
+ permission.links[:account].href == account.href
11
39
  end
12
40
  end
13
41
 
@@ -1,7 +1,7 @@
1
1
  require 'garner'
2
2
 
3
3
  Garner.configure do |config|
4
- config.global_cache_options = { expires_in: 10.minutes }
4
+ config.expires_in = 10.minutes
5
5
  config.binding_key_strategy = Garner::Strategies::Binding::Key::CacheKey
6
6
  config.whiny_nils = false
7
7
  end
@@ -1,5 +1,5 @@
1
1
  module Aptible
2
2
  module Rails
3
- VERSION = '0.4.12'
3
+ VERSION = '0.5.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aptible-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.12
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Frank Macreery
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-09 00:00:00.000000000 Z
11
+ date: 2014-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gem_config
@@ -190,6 +190,7 @@ files:
190
190
  - lib/aptible/rails/decorators/operation_decorator.rb
191
191
  - lib/aptible/rails/decorators/organization_decorator.rb
192
192
  - lib/aptible/rails/decorators/resource_decorator.rb
193
+ - lib/aptible/rails/decorators/role_decorator.rb
193
194
  - lib/aptible/rails/decorators/user_decorator.rb
194
195
  - lib/aptible/rails/draper_extensions.rb
195
196
  - lib/aptible/rails/garner.rb
@@ -224,3 +225,4 @@ specification_version: 4
224
225
  summary: Rails helpers for Aptible service applications
225
226
  test_files:
226
227
  - spec/spec_helper.rb
228
+ has_rdoc: