nomo 0.0.10 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/lib/nomo/model.rb CHANGED
@@ -4,51 +4,57 @@ module Nomo
4
4
 
5
5
  module ClassMethods
6
6
  def has_page(name, options = {})
7
- page_method = :"#{name}_page"
8
- modify_page_method = :"modify_#{name}_page!"
7
+ page = :"#{name}_page"
8
+ modify_page = :"modify_#{page}"
9
9
 
10
- define_method page_method do
10
+ define_method page do
11
11
  @nomo_pages ||= {}
12
12
  @nomo_pages[name] ||= Nomo::Page.new(self, name, options)
13
13
  end
14
14
 
15
- define_method modify_page_method do
16
- page = send(page_method)
17
- page.modify!
15
+ define_method modify_page do
16
+ page = send(page)
17
+ page.modify
18
18
  end
19
19
 
20
- after_save modify_page_method
21
- after_touch modify_page_method
22
- after_destroy modify_page_method
20
+ after_save modify_page
21
+ after_touch modify_page
22
+ after_destroy modify_page
23
23
  end
24
24
 
25
25
  def modifies_page(association, name)
26
- modify_association_page_method = :"modify_#{association}_#{name}_page!"
26
+ association_page = :"#{association}_#{name}_page"
27
+ modify_association_page = :"modify_#{association_page}"
27
28
 
28
- define_method modify_association_page_method do
29
- record = send(association)
30
- record.send(:"modify_#{name}_page!")
29
+ define_method association_page do
30
+ @nomo_pages ||= {}
31
+ @nomo_pages["#{association}/#{name}"] ||= Nomo::Page.new({ type: association, id: send(:"#{association}_id") }, name, options)
32
+ end
33
+
34
+ define_method modify_association_page do
35
+ page = send(association_page)
36
+ page.modify
31
37
  end
32
38
 
33
- after_save modify_association_page_method
34
- after_touch modify_association_page_method
35
- after_destroy modify_association_page_method
39
+ after_save modify_association_page
40
+ after_touch modify_association_page
41
+ after_destroy modify_association_page
36
42
  end
37
43
 
38
44
  def modifies_pages(association, name)
39
- modify_association_pages_method = :"modify_#{association}_#{name}_pages!"
45
+ modify_association_pages = :"modify_#{association}_#{name}_pages"
40
46
 
41
- define_method modify_association_pages_method do
47
+ define_method modify_association_pages do
42
48
  Nomo.redis.multi do
43
49
  for record in send(association)
44
- record.send(:"modify_#{name}_page!")
50
+ record.send(:"modify_#{name}_page")
45
51
  end
46
52
  end
47
53
  end
48
54
 
49
- after_save modify_association_pages_method
50
- after_touch modify_association_pages_method
51
- after_destroy modify_association_pages_method
55
+ after_save modify_association_pages
56
+ after_touch modify_association_pages
57
+ after_destroy modify_association_pages
52
58
  end
53
59
  end
54
60
  end
data/lib/nomo/page.rb CHANGED
@@ -1,36 +1,35 @@
1
1
  module Nomo
2
2
  class Page
3
- attr_reader :record
4
3
  attr_reader :name
5
4
 
6
- def initialize(record, name, options = {})
7
- @record = record
5
+ def initialize(record_or_hash, name, options = {})
6
+ @record = Nomo::Record.new(record_or_hash)
8
7
  @name = name
9
8
  @options = options
10
9
  end
11
10
 
12
11
  def etag
13
- @etag ||= Digest::MD5.hexdigest([key, last_modified].join('/'))
12
+ @etag ||= Digest::MD5.hexdigest("#{key}/#{last_modified}")
14
13
  end
15
14
 
16
15
  def last_modified
17
- @last_modified ||= Time.parse(redis.get(key) || record.updated_at.to_s).utc
16
+ @last_modified ||= Time.parse(redis.get(key) || @record.updated_at.to_s).utc
18
17
  end
19
18
 
20
- def modify!
19
+ def modify
21
20
  @etag = nil
22
21
  @last_modified = Time.now.utc
23
22
 
24
23
  redis.set(key, @last_modified)
25
- redis.publish 'updates', key
24
+ redis.publish('updates', key)
26
25
  end
27
26
 
28
27
  def cache_key
29
- [record.cache_key, name, etag].join('/')
28
+ "#{key}/#{etag}"
30
29
  end
31
30
 
32
31
  def key
33
- @key ||= [record.class.to_s.tableize, record.id, name].join('/')
32
+ "#{@record.table}/#{@record.id}/#{name}"
34
33
  end
35
34
 
36
35
  def realtime?
@@ -0,0 +1,40 @@
1
+ module Nomo
2
+ class Record
3
+ def initialize(record_or_hash)
4
+ @record_or_hash = record_or_hash
5
+ end
6
+
7
+ def table
8
+ if @record_or_hash.is_a?(Hash)
9
+ @record_or_hash[:type].to_s.tableize
10
+ else
11
+ @record_or_hash.class.to_s.tableize
12
+ end
13
+ end
14
+
15
+ def id
16
+ if @record_or_hash.is_a?(Hash)
17
+ @record_or_hash[:id]
18
+ else
19
+ @record_or_hash.id
20
+ end
21
+ end
22
+
23
+ def updated_at
24
+ record.updated_at
25
+ end
26
+
27
+ private
28
+ def record
29
+ if @record_or_hash.is_a?(Hash)
30
+ @record_or_hash = model.find(@record_or_hash[:id])
31
+ end
32
+
33
+ @record_or_hash
34
+ end
35
+
36
+ def model
37
+ Object.const_get(@record_or_hash[:type].to_s.camelize)
38
+ end
39
+ end
40
+ end
data/lib/nomo/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Nomo
2
- VERSION = "0.0.10"
2
+ VERSION = "0.0.11"
3
3
  end
data/lib/nomo.rb CHANGED
@@ -6,6 +6,7 @@ module Nomo
6
6
  extend self
7
7
 
8
8
  autoload :Model, 'nomo/model'
9
+ autoload :Record, 'nomo/record'
9
10
  autoload :Page, 'nomo/page'
10
11
  autoload :ConditionalGet, 'nomo/conditional_get'
11
12
  autoload :Helpers, 'nomo/helpers'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nomo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-02 00:00:00.000000000 Z
12
+ date: 2012-07-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: redis
16
- requirement: &70260401862160 !ruby/object:Gem::Requirement
16
+ requirement: &70174565056280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70260401862160
24
+ version_requirements: *70174565056280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: redis-namespace
27
- requirement: &70260401861020 !ruby/object:Gem::Requirement
27
+ requirement: &70174565055380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70260401861020
35
+ version_requirements: *70174565055380
36
36
  description: 304 Not Modified Headers made easy.
37
37
  email:
38
38
  - sausman@stackd.com
@@ -51,6 +51,7 @@ files:
51
51
  - lib/nomo/model.rb
52
52
  - lib/nomo/page.rb
53
53
  - lib/nomo/rails/engine.rb
54
+ - lib/nomo/record.rb
54
55
  - lib/nomo/version.rb
55
56
  - nomo.gemspec
56
57
  - vendor/assets/javascripts/nomo.js.coffee.erb