diff options
| author | Xinhui | 2016-08-10 10:43:13 +0200 | 
|---|---|---|
| committer | Xinhui | 2016-08-10 10:43:13 +0200 | 
| commit | 53526748c12eb790647b656254b009a08278b70f (patch) | |
| tree | dae69edd198142e25f9334391cd3d9568ed96987 /app/models | |
| parent | 0857749941849c71a6d24f2a38891d3c19964126 (diff) | |
| download | chouette-core-53526748c12eb790647b656254b009a08278b70f.tar.bz2 | |
Refactoring move portail sync code into models
Diffstat (limited to 'app/models')
| -rw-r--r-- | app/models/organisation.rb | 30 | ||||
| -rw-r--r-- | app/models/user.rb | 40 | 
2 files changed, 69 insertions, 1 deletions
diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 9d6e92825..fc5e2699e 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -21,4 +21,34 @@ class Organisation < ActiveRecord::Base    def add_rule_parameter_set      RuleParameterSet.default_for_all_modes( self).save    end + +  def self.portail_api_request +    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/organizations' +    if resp.status == 200 +      JSON.parse resp.body +    else +      raise "Error on api request status : #{resp.status} => #{resp.body}" +    end +  end + +  def self.portail_sync +    self.portail_api_request.each do |el| +      Organisation.find_or_create_by(code: el['code']).tap do |org| +        org.name = el['name'] +        if org.changed? +          org.synced_at = Time.now +          org.save +          puts "✓ Organisation #{org.name} has been updated" unless Rails.env.test? +        end +      end +    end +  end  end diff --git a/app/models/user.rb b/app/models/user.rb index 3262001f3..fa4c77d96 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,6 +39,45 @@ class User < ActiveRecord::Base      end    end +  def self.portail_api_request +    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' +    if resp.status == 200 +      JSON.parse resp.body +    else +      raise "Error on api request status : #{resp.status} => #{resp.body}" +    end +  end + +  def self.portail_sync +    self.portail_api_request.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.locked_at    = el['locked_at'] + +        # 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 + +        if user.changed? +          user.synced_at = Time.now +          user.save +          puts "✓ user #{user.username} has been updated" unless Rails.env.test? +        end +      end +    end +  end +    private    # remove organisation and referentials if last user of it @@ -47,5 +86,4 @@ class User < ActiveRecord::Base        organisation.destroy      end    end -  end  | 
