Class: Slacky::User
- Inherits:
-
Object
- Object
- Slacky::User
- Defined in:
- lib/slacky/user.rb
Constant Summary collapse
- @@decorator =
@@config = @@db = nil
Instance Attribute Summary collapse
-
#data ⇒ Object
Returns the value of attribute data.
-
#email ⇒ Object
Returns the value of attribute email.
-
#first_name ⇒ Object
Returns the value of attribute first_name.
-
#last_name ⇒ Object
Returns the value of attribute last_name.
-
#slack_id ⇒ Object
Returns the value of attribute slack_id.
-
#slack_im_id ⇒ Object
Returns the value of attribute slack_im_id.
-
#timezone ⇒ Object
Returns the value of attribute timezone.
-
#tz ⇒ Object
readonly
Returns the value of attribute tz.
-
#username ⇒ Object
Returns the value of attribute username.
-
#valid ⇒ Object
writeonly
Sets the attribute valid.
Class Method Summary collapse
- .config=(config) ⇒ Object
- .db ⇒ Object
- .decorator=(decorator) ⇒ Object
- .find(user) ⇒ Object
- .find_by_data(query) ⇒ Object
- .hydrate(result) ⇒ Object
- .initialize_table ⇒ Object
- .invalidate_all_users ⇒ Object
Instance Method Summary collapse
-
#initialize(attrs = {}) ⇒ User
constructor
A new instance of User.
- #populate(member) ⇒ Object
- #reset ⇒ Object
- #save ⇒ Object
- #valid? ⇒ Boolean
- #validate ⇒ Object
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
#data ⇒ Object
Returns the value of attribute data.
5 6 7 |
# File 'lib/slacky/user.rb', line 5 def data @data end |
#email ⇒ Object
Returns the value of attribute email.
5 6 7 |
# File 'lib/slacky/user.rb', line 5 def email @email end |
#first_name ⇒ Object
Returns the value of attribute first_name.
5 6 7 |
# File 'lib/slacky/user.rb', line 5 def first_name @first_name end |
#last_name ⇒ Object
Returns the value of attribute last_name.
5 6 7 |
# File 'lib/slacky/user.rb', line 5 def last_name @last_name end |
#slack_id ⇒ Object
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_id ⇒ Object
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 |
#timezone ⇒ Object
Returns the value of attribute timezone.
5 6 7 |
# File 'lib/slacky/user.rb', line 5 def timezone @timezone end |
#tz ⇒ Object (readonly)
Returns the value of attribute tz.
7 8 9 |
# File 'lib/slacky/user.rb', line 7 def tz @tz end |
#username ⇒ Object
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
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 |
.db ⇒ Object
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_table ⇒ Object
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_users ⇒ Object
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 |
#reset ⇒ Object
121 122 123 |
# File 'lib/slacky/user.rb', line 121 def reset @data = {} end |
#save ⇒ Object
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
9 10 11 |
# File 'lib/slacky/user.rb', line 9 def valid? @valid end |
#validate ⇒ Object
108 109 110 111 |
# File 'lib/slacky/user.rb', line 108 def validate @valid = true self end |