aptible-rails 0.4.12 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
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: