Class: SysArcana::Data::Post

Inherits:
Hashie::Dash
  • Object
show all
Extended by:
DataLogger
Includes:
DataLogger
Defined in:
lib/sysarcana/data/posts.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.allObject



20
21
22
23
24
# File 'lib/sysarcana/data/posts.rb', line 20

def self.all
  log(action: 'Post.all') do
    all_slugs.map { |slug| find(slug) }
  end
end

.all_slugsObject



26
27
28
# File 'lib/sysarcana/data/posts.rb', line 26

def self.all_slugs
  SysArcana::Data.redis.smembers("posts")
end

.find(slug) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/sysarcana/data/posts.rb', line 30

def self.find(slug)
  log(action: 'Post.find', slug: slug) do
    result = SysArcana::Data.redis.hgetall("post:#{slug}")
    if result == {}
      log(action: 'Post.find', slug: slug, result: 'not-found')
      nil
    else
      log(action: 'Post.find', slug: slug, result: 'found')
      new(result)
    end        
  end
end

.publish!(post) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/sysarcana/data/posts.rb', line 43

def self.publish!(post)
  log(action: 'Post.publish!', slug: post.slug) do
    post.published_at = Time.now.utc.iso8601
    post.save!
    SysArcana::Data.redis.zadd "posts_published", post.published_at.to_i, post.slug
  end
end

.publishedObject



51
52
53
54
55
# File 'lib/sysarcana/data/posts.rb', line 51

def self.published
  log(action: 'Post.published') do
    published_slugs.map { |slug| find(slug) }
  end
end

.published_slugsObject



57
58
59
# File 'lib/sysarcana/data/posts.rb', line 57

def self.published_slugs
  SysArcana::Data.redis.zrevrange("posts_published", 0, -1)
end

.save!(post) ⇒ Object



61
62
63
64
65
66
67
68
# File 'lib/sysarcana/data/posts.rb', line 61

def self.save!(post)
  log(action: 'save!', slug: post.slug) do
    SysArcana::Data.redis.multi do |r|
      r.mapped_hmset "post:#{post.slug}", post
      r.sadd "posts", post.slug
    end
  end
end

Instance Method Details

#publish!Object



12
13
14
# File 'lib/sysarcana/data/posts.rb', line 12

def publish!
  Post.publish!(self)
end

#save!Object



16
17
18
# File 'lib/sysarcana/data/posts.rb', line 16

def save!
  Post.save!(self)
end