Class: Origen::Users::User

Inherits:
Object show all
Defined in:
lib/origen/users/user.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*args) ⇒ User

Returns a new instance of User.

[View source]

21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/origen/users/user.rb', line 21

def initialize(*args)
  if args.last.is_a?(Symbol)
    @role = args.pop
  else
    @role = :user
  end
  if args.size == 2
    @name = args.first
  end
  id = args.pop
  if id.to_s =~ /(.*)@/
    @email = id
    @id = Regexp.last_match(1)
  else
    @id = id
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method, *args, &block) ⇒ Object

Provides methods to access attributes available from LDAP

[View source]

142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/origen/users/user.rb', line 142

def method_missing(method, *args, &block)
  l = Origen.ldap.lookup(self)
  if l
    if l.attribute_names.include?(method)
      l[method]
    else
      super
    end
  else
    super
  end
end

Instance Attribute Details

#email(options = {}) ⇒ Object


82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'lib/origen/users/user.rb', line 82

def email(options = {})
  if current?
    @email ||= ENV['ORIGEN_EMAIL'] || ENV['ORIGEN_USER_EMAIL'] || email_from_rc || begin
      if Origen.site_config.email_domain
        "#{id}@#{Origen.site_config.email_domain}"
      end
    end
  else
    @email ||= if Origen.site_config.email_domain
                 "#{id}@#{Origen.site_config.email_domain}"
               end

  end
end

#nameObject


74
75
76
# File 'lib/origen/users/user.rb', line 74

def name
  @name ||= ENV['ORIGEN_NAME'] || ENV['ORIGEN_USER_NAME'] || name_from_rc || @id
end

#roleObject (readonly)

Returns the value of attribute role.


10
11
12
# File 'lib/origen/users/user.rb', line 10

def role
  @role
end

Class Method Details

.currentObject

[View source]

17
18
19
# File 'lib/origen/users/user.rb', line 17

def self.current
  Origen.current_user
end

.current_user_idObject

[View source]

13
14
15
# File 'lib/origen/users/user.rb', line 13

def self.current_user_id
  `whoami`.strip
end

Instance Method Details

#==(user) ⇒ Object

[View source]

131
132
133
134
135
136
137
138
139
# File 'lib/origen/users/user.rb', line 131

def ==(user)
  if user.is_a?(Origen::Users::User)
    user.id == id
  elsif user.is_a?(String)
    user.downcase == id
  else
    super
  end
end

#admin?Boolean

Returns true if the user is an admin for the current application

Returns:

  • (Boolean)
[View source]

59
60
61
# File 'lib/origen/users/user.rb', line 59

def admin?
  role == :admin
end

#auth_sessionObject

Returns a private global Origen session store (stored in the user’s home directory and only readable by them). See - origen-sdk.org/origen/guides/misc/session/#Global_Sessions

[View source]

173
174
175
176
177
178
179
# File 'lib/origen/users/user.rb', line 173

def auth_session
  @session ||= begin
    @session = Origen.session.user
    @session.private = true
    @session
  end
end

#current?Boolean

Returns true if the user is the current user

Returns:

  • (Boolean)
[View source]

64
65
66
# File 'lib/origen/users/user.rb', line 64

def current?
  id.to_s.downcase == self.class.current_user_id
end

#decrypt(text) ⇒ Object

[View source]

208
209
210
# File 'lib/origen/users/user.rb', line 208

def decrypt(text)
  text
end

#email_from_rcObject

[View source]

97
98
99
# File 'lib/origen/users/user.rb', line 97

def email_from_rc
  RevisionControl::Git.user_email
end

#encrypt(text) ⇒ Object

[View source]

212
213
214
# File 'lib/origen/users/user.rb', line 212

def encrypt(text)
  text
end

#id(options = {}) ⇒ Object Also known as: core_id, username

[View source]

50
51
52
53
54
# File 'lib/origen/users/user.rb', line 50

def id(options = {})
  # Way to force Origen to use the new user ID in case of WSL where the core ID might not match the WSL login name
  # User needs to setup the environment variable in their .bashrc or .tcshrc file
  ENV['ORIGEN_USER_ID'] || @id.to_s.downcase
end

#initialsObject

Returns the user’s initials in lower case

[View source]

69
70
71
72
# File 'lib/origen/users/user.rb', line 69

def initials
  initials = name.split(/\s+/).map { |n| n[0].chr }.join('')
  initials.downcase
end

#lookup(default = 'Unknown') ⇒ Object

Fetch user data from the FSL application directory

Examples:


User.new("r49409").lookup.motunixdomain   # => ["cde-tx32.sps.mot.com"]
[View source]

106
107
108
109
110
111
112
113
114
115
116
117
# File 'lib/origen/users/user.rb', line 106

def lookup(default = 'Unknown')
  data = Origen.ldap.lookup(self)
  if block_given?
    if data
      yield data
    else
      default
    end
  else
    data
  end
end

#name_and_emailObject

Returns a string like “Stephen McGinty <stephen.mcginty@nxp.com>”

[View source]

166
167
168
# File 'lib/origen/users/user.rb', line 166

def name_and_email
  "#{name} <#{email}>"
end

#name_from_rcObject

[View source]

78
79
80
# File 'lib/origen/users/user.rb', line 78

def name_from_rc
  RevisionControl::Git.user_name
end

#password(options = {}) ⇒ Object

Returns the password for the current user. If the user hasn’t supplied it yet they will be prompted to enter it, it will then be stored

First, try in the global session, if its not defined, ask for it.

[View source]

185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/origen/users/user.rb', line 185

def password(options = {})
  unless current?
    fail "You can only reference the password for the current user (#{self.class.current_user_id})!"
  end

  if options[:refresh]
    auth_session[:password] = nil
  end

  if auth_session[:password]
    password = decrypt(auth_session[:password])
  else
    puts 'Please enter your password:'
    password = (STDIN.noecho(&:gets) || '').chomp

    # TODO: Need some kind of callback here to optionally verify password correctness via LDAP or similar

    auth_session[:password] = encrypt(password)
  end

  password
end

#rawObject Also known as: display

Prints all raw data available on the given user from the FSL application directory.

Most of the useful data is already exposed through the available user methods, but if you want to get any of these parameters they can be fetched via the lookup method.

[View source]

125
126
127
128
# File 'lib/origen/users/user.rb', line 125

def raw
  Origen.ldap.display(self)
  nil
end

#respond_to?(method, include_private = false) ⇒ Boolean

Returns:

  • (Boolean)
[View source]

155
156
157
158
159
160
161
162
163
# File 'lib/origen/users/user.rb', line 155

def respond_to?(method, include_private = false)
  super || begin
    if Origen.ldap.available?
      Origen.ldap.lookup(self) && Origen.ldap.lookup(self).attribute_names.include?(method.to_sym)
    else
      false
    end
  end
end

#send(options) ⇒ Object

Send the user an email

Examples:

User.current.send subject: "Complete", message: "Your job is done!"
User.new("r49409").send subject: "Complete", message: "Your job is done!"
[View source]

44
45
46
47
48
# File 'lib/origen/users/user.rb', line 44

def send(options)
  options[:body] ||= options[:message]
  options[:to] = self
  Origen.mailer.send_email(options)
end