Class: Slacky::User

Inherits:
Object
  • Object
show all
Defined in:
lib/slacky/user.rb

Constant Summary collapse

@@decorator =
@@config = @@db = nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) ⇒ User

Returns a new instance of User.



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/slacky/user.rb', line 86

def initialize(attrs={})
  @username    = attrs[:username]
  @slack_id    = attrs[:slack_id]
  @slack_im_id = attrs[:slack_im_id]
  @first_name  = attrs[:first_name]
  @last_name   = attrs[:last_name]
  @email       = attrs[:email]
  @timezone    = attrs[:timezone] || "America/Los_Angeles"
  @valid       = attrs[:valid]
  @data        = attrs[:data] || {}
end

Instance Attribute Details

#dataObject

Returns the value of attribute data.



5
6
7
# File 'lib/slacky/user.rb', line 5

def data
  @data
end

#emailObject

Returns the value of attribute email.



5
6
7
# File 'lib/slacky/user.rb', line 5

def email
  @email
end

#first_nameObject

Returns the value of attribute first_name.



5
6
7
# File 'lib/slacky/user.rb', line 5

def first_name
  @first_name
end

#last_nameObject

Returns the value of attribute last_name.



5
6
7
# File 'lib/slacky/user.rb', line 5

def last_name
  @last_name
end

#slack_idObject

Returns the value of attribute slack_id.



5
6
7
# File 'lib/slacky/user.rb', line 5

def slack_id
  @slack_id
end

#slack_im_idObject

Returns the value of attribute slack_im_id.



5
6
7
# File 'lib/slacky/user.rb', line 5

def slack_im_id
  @slack_im_id
end

#timezoneObject

Returns the value of attribute timezone.



5
6
7
# File 'lib/slacky/user.rb', line 5

def timezone
  @timezone
end

#tzObject (readonly)

Returns the value of attribute tz.



7
8
9
# File 'lib/slacky/user.rb', line 7

def tz
  @tz
end

#usernameObject

Returns the value of attribute username.



5
6
7
# File 'lib/slacky/user.rb', line 5

def username
  @username
end

#valid=(value) ⇒ Object (writeonly)

Sets the attribute valid

Parameters:

  • value

    the value to set the attribute valid to.



6
7
8
# File 'lib/slacky/user.rb', line 6

def valid=(value)
  @valid = value
end

Class Method Details

.config=(config) ⇒ Object



19
20
21
# File 'lib/slacky/user.rb', line 19

def self.config=(config)
  @@config = config
end

.dbObject



23
24
25
26
27
28
# File 'lib/slacky/user.rb', line 23

def self.db
  return @@db if @@db
  @@db = @@config.db
  initialize_table
  @@db
end

.decorator=(decorator) ⇒ Object



15
16
17
# File 'lib/slacky/user.rb', line 15

def self.decorator=(decorator)
  @@decorator = decorator
end

.find(user) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/slacky/user.rb', line 50

def self.find(user)
  return nil unless user
  return user.map { |u| User.find u }.compact if user.is_a? Array
  match = user.match(/^<@(.*)>$/)
  id = ( match ? match[1] : user )
  result = self.db.exec_params "select * from users where slack_id = $1", [ id ]
  if result.ntuples == 0
    username = ( user =~ /^@/ ? user.sub(/^@/, '') : user )
    result = self.db.exec_params "select * from users where username = $1", [ username ]
  end
  return nil if result.ntuples == 0
  hydrate(result)[0]
end

.find_by_data(query) ⇒ Object



64
65
66
67
# File 'lib/slacky/user.rb', line 64

def self.find_by_data(query)
  result = self.db.exec "select * from users where data #{query}"
  hydrate result
end

.hydrate(result) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/slacky/user.rb', line 69

def self.hydrate(result)
  return [] if result.ntuples == 0
  result.map do |row|
    user = self.new username:    row['username'],
                    slack_id:    row['slack_id'],
                    slack_im_id: row['slack_im_id'],
                    first_name:  row['first_name'],
                    last_name:   row['last_name'],
                    email:       row['email'],
                    timezone:    row['timezone'],
                    valid:       row['valid'],
                    data:        JSON.parse(row['data'])
    user.extend @@decorator if @@decorator
    user
  end
end

.initialize_tableObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/slacky/user.rb', line 30

def self.initialize_table
  self.db.exec <<-SQL
create table if not exists users (
  username     varchar(64) not null,
  slack_id     varchar(20) not null,
  slack_im_id  varchar(20),
  first_name   varchar(64),
  last_name    varchar(64),
  email        varchar(128) not null,
  timezone     varchar(256),
  valid        boolean not null default false,
  data         jsonb not null
);
SQL
end

.invalidate_all_usersObject



46
47
48
# File 'lib/slacky/user.rb', line 46

def self.invalidate_all_users
  self.db.exec 'update users set valid = FALSE'
end

Instance Method Details

#populate(member) ⇒ Object



98
99
100
101
102
103
104
105
106
# File 'lib/slacky/user.rb', line 98

def populate(member)
  @username   = member.name
  @first_name = member.profile.first_name
  @last_name  = member.profile.last_name
  @email      = member.profile.email
  @timezone   = member.tz
  @data       = {} unless @data
  self
end

#resetObject



121
122
123
# File 'lib/slacky/user.rb', line 121

def reset
  @data = {}
end

#saveObject



113
114
115
116
117
118
119
# File 'lib/slacky/user.rb', line 113

def save
  User.db.exec_params "delete from users where slack_id = $1", [ @slack_id ]
  User.db.exec_params "insert into users (username, slack_id, slack_im_id, first_name, last_name, email, timezone, valid, data)
                       values ($1, $2, $3, $4, $5, $6, $7, $8, $9)",
                      [ @username, @slack_id, @slack_im_id, @first_name, @last_name, @email, @timezone, @valid, JSON.dump(@data) ]
  self
end

#valid?Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/slacky/user.rb', line 9

def valid?
  @valid
end

#validateObject



108
109
110
111
# File 'lib/slacky/user.rb', line 108

def validate
  @valid = true
  self
end