aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tasks/users.rake
diff options
context:
space:
mode:
authorXinhui2016-08-05 15:25:39 +0200
committerXinhui2016-08-05 15:25:43 +0200
commit96b1abb62d9ae34c9ee7b334c374476b78f82b9b (patch)
tree5d732f165743511ca27e4049db8961232ae655af /lib/tasks/users.rake
parent6ad42c2e2aa43b18ec2d6d94b998c7e27e55ea78 (diff)
downloadchouette-core-96b1abb62d9ae34c9ee7b334c374476b78f82b9b.tar.bz2
Refactoring - Rake task users:sync
Diffstat (limited to 'lib/tasks/users.rake')
-rw-r--r--lib/tasks/users.rake39
1 files changed, 39 insertions, 0 deletions
diff --git a/lib/tasks/users.rake b/lib/tasks/users.rake
new file mode 100644
index 000000000..ca2264381
--- /dev/null
+++ b/lib/tasks/users.rake
@@ -0,0 +1,39 @@
+namespace :users do
+ def api_retrieve_user
+ conf = Rails.application.config.try(:stif_portail_api)
+ raise 'Rails.application.config.stif_portail_api settings is not defined' unless conf
+
+ conn = Faraday.new(:url => conf[:url]) do |c|
+ c.headers['Authorization'] = "Token token=\"#{conf[:key]}\""
+ c.adapter Faraday.default_adapter
+ end
+
+ resp = conn.get '/api/v1/users'
+ JSON.parse resp.body if resp.status == 200
+ end
+
+ def sync_users data
+ data.each do |el|
+ User.find_or_create_by(username: el['username']).tap do |user|
+ user.name = "#{el['firstname']} #{el['lastname']}"
+ user.email = el['email']
+ user.synced_at = Time.now
+
+ # Set organisation
+ user.organisation = Organisation.find_or_create_by(code: el['organization_code']).tap do |org|
+ org.name = el['organization_name']
+ org.synced_at = Time.now
+ end
+
+ user.save if user.changed?
+ puts "✓ user #{user.name} has been updated" unless Rails.env.test?
+ end
+ end
+ end
+
+ desc "Sync users from stif portail"
+ task sync: :environment do
+ data = api_retrieve_user
+ sync_users(data) if data
+ end
+end