Skip to content

Instantly share code, notes, and snippets.

@bogn83
Forked from elight/dci_alt.rb
Created February 15, 2023 21:15
Show Gist options
  • Save bogn83/fd5b77e1e28f9f680fc3c311ba5531c6 to your computer and use it in GitHub Desktop.
Save bogn83/fd5b77e1e28f9f680fc3c311ba5531c6 to your computer and use it in GitHub Desktop.
DCI with delegation instead of extension
class User < ActiveRecord::Base
# ... lots of persistence stuff
end
class GitHubUserProvisioner < SimpleDelegator
def provision_with!(user_info, extra_user_hash)
self.github_login = extra_user_hash['login']
self.name = user_info['name']
self.email = user_info['email']
self.github_url = user_info['urls']['GitHub']
self.blog_url = user_info['urls']['Blog']
self.gravatar_id = extra_user_hash['gravatar_id']
self.location = extra_user_hash['location']
save!
end
end
# And, say, in your SessionController in your controller action
class SessionController < ApplicationController
def create
user = User.new
provisioner = GitHubUserProvisioner.new(user)
provisioner.provision_with!(*yank_oauth_stuff_off_request)
end
private
def yank_oauth_stuff_off_request
# ...
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment