diff options
| author | Xinhui | 2016-08-05 15:25:39 +0200 |
|---|---|---|
| committer | Xinhui | 2016-08-05 15:25:43 +0200 |
| commit | 96b1abb62d9ae34c9ee7b334c374476b78f82b9b (patch) | |
| tree | 5d732f165743511ca27e4049db8961232ae655af /lib | |
| parent | 6ad42c2e2aa43b18ec2d6d94b998c7e27e55ea78 (diff) | |
| download | chouette-core-96b1abb62d9ae34c9ee7b334c374476b78f82b9b.tar.bz2 | |
Refactoring - Rake task users:sync
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/tasks/organisations.rake | 13 | ||||
| -rw-r--r-- | lib/tasks/users.rake | 39 |
2 files changed, 45 insertions, 7 deletions
diff --git a/lib/tasks/organisations.rake b/lib/tasks/organisations.rake index 06e1d3da7..24b02b630 100644 --- a/lib/tasks/organisations.rake +++ b/lib/tasks/organisations.rake @@ -5,7 +5,6 @@ namespace :organisations do conn = Faraday.new(:url => conf[:url]) do |c| c.headers['Authorization'] = "Token token=\"#{conf[:key]}\"" - c.request :url_encoded c.adapter Faraday.default_adapter end @@ -14,12 +13,12 @@ namespace :organisations do end def sync_organisations data - data.each do |org| - Organisation.sync_or_create(code: org['code'], name: org['name']).tap do |organisation| - organisation.name = org['name'] - organisation.synced_at = Time.now - organisation.save if organisation.changed? - puts "✓ Organisation #{organisation.name} has been updated" unless Rails.env.test? + data.each do |el| + Organisation.find_or_create_by(code: el['code']).tap do |org| + org.name = el['name'] + org.synced_at = Time.now + org.save if org.changed? + puts "✓ Organisation #{org.name} has been updated" unless Rails.env.test? end end end 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 |
