Class: Entitlements::Backend::GitHubTeam::Provider
- Inherits:
- 
      BaseProvider
      
        - Object
- BaseProvider
- Entitlements::Backend::GitHubTeam::Provider
 
- Includes:
- Contracts::Core
- Defined in:
- lib/entitlements/backend/github_team/provider.rb
Constant Summary collapse
- C =
- ::Contracts 
Instance Method Summary collapse
- #auto_generate_ignored_users(entitlement_group) ⇒ Object
- #change_ignored?(action) ⇒ Boolean
- #commit(entitlement_group) ⇒ Object
- #diff(entitlement_group, ignored_users = Set.new) ⇒ Object
- #diff_existing_updated(existing_group, group, ignored_users = Set.new) ⇒ Object
- 
  
    
      #initialize(config:)  ⇒ Provider 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    A new instance of Provider. 
- #read(entitlement_group) ⇒ Object
Constructor Details
#initialize(config:) ⇒ Provider
Returns a new instance of Provider.
| 21 22 23 24 25 26 27 28 29 30 31 | # File 'lib/entitlements/backend/github_team/provider.rb', line 21 def initialize(config:) @github = Entitlements::Backend::GitHubTeam::Service.new( org: config.fetch("org"), addr: config.fetch("addr", nil), token: config.fetch("token"), ou: config.fetch("base"), ignore_not_found: config.fetch("ignore_not_found", false) ) @github_team_cache = {} end | 
Instance Method Details
#auto_generate_ignored_users(entitlement_group) ⇒ Object
| 146 147 148 149 150 | # File 'lib/entitlements/backend/github_team/provider.rb', line 146 def auto_generate_ignored_users(entitlement_group) org_members = github.org_members.keys.map(&:downcase) group_members = entitlement_group.member_strings.map(&:downcase) Set.new(group_members - org_members) end | 
#change_ignored?(action) ⇒ Boolean
| 112 113 114 115 116 117 | # File 'lib/entitlements/backend/github_team/provider.rb', line 112 def change_ignored?(action) return false if action.existing.nil? result = diff_existing_updated(action.existing, action.updated, action.ignored_users) result[:added].empty? && result[:removed].empty? && result[:metadata].nil? end | 
#commit(entitlement_group) ⇒ Object
| 125 126 127 128 129 130 131 132 133 134 135 136 137 | # File 'lib/entitlements/backend/github_team/provider.rb', line 125 def commit(entitlement_group) github_team = github.read_team(entitlement_group) # Create the new team and invalidate the cache if github_team.nil? team_name = entitlement_group.cn.downcase github.create_team(entitlement_group:) github.invalidate_predictive_cache(entitlement_group) @github_team_cache.delete(team_name) github_team = github.read_team(entitlement_group) end github.sync_team(entitlement_group, github_team) end | 
#diff(entitlement_group, ignored_users = Set.new) ⇒ Object
| 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | # File 'lib/entitlements/backend/github_team/provider.rb', line 59 def diff(entitlement_group, ignored_users = Set.new) # The current value of the team from `read` might be based on the predictive cache # or on an actual API call. At this stage we don't care. team_identifier = entitlement_group.cn.downcase github_team_group = read(entitlement_group) if github_team_group.nil? github_team_group = create_github_team_group(entitlement_group) end result = diff_existing_updated(github_team_group, entitlement_group, ignored_users) # If there are no differences, return. (If we read from the predictive cache, we just saved ourselves a call # to the API. Hurray.) return result unless result[:added].any? || result[:removed].any? || result[:metadata] # If the group doesn't exist yet, we know we're not using the cache and we can save on any further API calls unless github_team_group.("team_id") == -999 # There are differences so we don't want to use the predictive cache. Call to `from_predictive_cache?` # to determine whether our source of "current state" came from the predictive cache or from the API. # If it returns false, it came from the API, and we should just return what we got # (since pulling the data from the API again would be pointless). return result unless github.from_predictive_cache?(entitlement_group) # If `from_predictive_cache?` returned true, the data came from the predictive cache. We need # to invalidate the predictive cache entry, clean up the instance variable and re-read the refreshed data. github.invalidate_predictive_cache(entitlement_group) @github_team_cache.delete(team_identifier) github_team_group = read(entitlement_group) end # And finally, we have to calculate a new diff, which this time uses the fresh data from the API as # its basis, rather than the predictive cache. diff_existing_updated(github_team_group, entitlement_group, ignored_users) end | 
#diff_existing_updated(existing_group, group, ignored_users = Set.new) ⇒ Object
| 101 102 103 | # File 'lib/entitlements/backend/github_team/provider.rb', line 101 def diff_existing_updated(existing_group, group, ignored_users = Set.new) (existing_group, group, super) end | 
#read(entitlement_group) ⇒ Object
| 40 41 42 43 44 45 46 47 48 49 50 51 | # File 'lib/entitlements/backend/github_team/provider.rb', line 40 def read(entitlement_group) slug = Entitlements::Util::Util.any_to_cn(entitlement_group.cn.downcase) return @github_team_cache[slug] if @github_team_cache[slug] github_team = github.read_team(entitlement_group) # We should not cache a team which does not exist return nil if github_team.nil? Entitlements.logger.debug "Loaded #{github_team.team_dn} (id=#{github_team.team_id}) with #{github_team.member_strings.count} member(s)" @github_team_cache[github_team.team_name] = github_team end |