nomo 0.0.5 → 0.0.6
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/conditional_get.rb +6 -2
- data/lib/nomo/model.rb +16 -12
- data/lib/nomo/page.rb +9 -17
- data/lib/nomo/version.rb +1 -1
- data/vendor/assets/javascripts/nomo.js.coffee +0 -0
- metadata +7 -6
data/lib/nomo/conditional_get.rb
CHANGED
@@ -4,8 +4,12 @@ module Nomo
|
|
4
4
|
|
5
5
|
def fresh_when(record_or_options, additional_options = {})
|
6
6
|
if record_or_options.is_a? Nomo::Page
|
7
|
-
|
8
|
-
|
7
|
+
nomo_page = record_or_options
|
8
|
+
|
9
|
+
record_or_options = { etag: nomo_page.etag,
|
10
|
+
last_modified: nomo_page.last_modified }
|
11
|
+
|
12
|
+
response.headers['X-Nomo-Key'] = nomo_page.key
|
9
13
|
end
|
10
14
|
|
11
15
|
super
|
data/lib/nomo/model.rb
CHANGED
@@ -3,38 +3,42 @@ module Nomo
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
module ClassMethods
|
6
|
-
def has_page(name
|
6
|
+
def has_page(name)
|
7
7
|
page_method = :"#{name}_page"
|
8
8
|
modify_page_method = :"modify_#{name}_page!"
|
9
9
|
|
10
10
|
define_method page_method do
|
11
11
|
@nomo_pages ||= {}
|
12
|
-
@nomo_pages[name] ||= Nomo::Page.new(self, name
|
12
|
+
@nomo_pages[name] ||= Nomo::Page.new(self, name)
|
13
13
|
end
|
14
14
|
|
15
15
|
define_method modify_page_method do
|
16
16
|
page = send(page_method)
|
17
17
|
page.modify!
|
18
18
|
end
|
19
|
+
|
20
|
+
after_save modify_page_method
|
21
|
+
after_touch modify_page_method
|
22
|
+
after_destroy modify_page_method
|
19
23
|
end
|
20
24
|
|
21
25
|
def modifies_page(association, name)
|
22
|
-
|
26
|
+
modify_association_page_method = :"modify_#{association}_#{name}_page!"
|
23
27
|
|
24
|
-
define_method
|
28
|
+
define_method modify_association_page_method do
|
25
29
|
record = send(association)
|
26
30
|
record.send(:"modify_#{name}_page!")
|
27
31
|
end
|
28
32
|
|
29
|
-
after_save
|
30
|
-
after_touch
|
31
|
-
after_destroy
|
33
|
+
after_save modify_association_page_method
|
34
|
+
after_touch modify_association_page_method
|
35
|
+
after_destroy modify_association_page_method
|
32
36
|
end
|
33
37
|
|
34
38
|
def modifies_pages(association, name)
|
35
|
-
|
39
|
+
modify_association_pages_method = :"modify_#{association}_#{name}_pages!"
|
36
40
|
|
37
|
-
define_method
|
41
|
+
define_method modify_association_pages_method do
|
38
42
|
Nomo.redis.multi do
|
39
43
|
for record in send(association)
|
40
44
|
record.send(:"modify_#{name}_page!")
|
@@ -42,9 +46,9 @@ module Nomo
|
|
42
46
|
end
|
43
47
|
end
|
44
48
|
|
45
|
-
after_save
|
46
|
-
after_touch
|
47
|
-
after_destroy
|
49
|
+
after_save modify_association_pages_method
|
50
|
+
after_touch modify_association_pages_method
|
51
|
+
after_destroy modify_association_pages_method
|
48
52
|
end
|
49
53
|
end
|
50
54
|
end
|
data/lib/nomo/page.rb
CHANGED
@@ -2,41 +2,33 @@ module Nomo
|
|
2
2
|
class Page
|
3
3
|
attr_reader :record
|
4
4
|
attr_reader :name
|
5
|
-
attr_reader :options
|
6
5
|
|
7
|
-
def initialize(record, name
|
8
|
-
@record
|
9
|
-
@name
|
10
|
-
@options = options
|
6
|
+
def initialize(record, name)
|
7
|
+
@record = record
|
8
|
+
@name = name
|
11
9
|
end
|
12
10
|
|
13
11
|
def etag
|
14
|
-
|
15
|
-
Digest::MD5.hexdigest(parts.join('/'))
|
12
|
+
@etag ||= Digest::MD5.hexdigest([key, last_modified].join('/'))
|
16
13
|
end
|
17
14
|
|
18
15
|
def last_modified
|
19
16
|
@last_modified ||= Time.parse(redis.get(key) || record.updated_at.to_s).utc
|
20
|
-
@last_modified < record.updated_at ? record.updated_at.utc : @last_modified
|
21
17
|
end
|
22
18
|
|
23
19
|
def modify!
|
20
|
+
@etag = nil
|
24
21
|
@last_modified = Time.now.utc
|
25
|
-
|
22
|
+
|
23
|
+
redis.set(key, @last_modified)
|
26
24
|
end
|
27
25
|
|
28
26
|
def cache_key
|
29
|
-
|
30
|
-
parts.join('/')
|
27
|
+
[record.cache_key, name, etag].join('/')
|
31
28
|
end
|
32
29
|
|
33
30
|
def key
|
34
|
-
|
35
|
-
parts = [record.class.to_s.tableize, record.id, name]
|
36
|
-
@key = parts.join('/')
|
37
|
-
end
|
38
|
-
|
39
|
-
@key
|
31
|
+
@key ||= [record.class.to_s.tableize, record.id, name].join('/')
|
40
32
|
end
|
41
33
|
|
42
34
|
private
|
data/lib/nomo/version.rb
CHANGED
File without changes
|
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.
|
4
|
+
version: 0.0.6
|
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-06-
|
12
|
+
date: 2012-06-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: redis
|
16
|
-
requirement: &
|
16
|
+
requirement: &70098459256180 !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: *
|
24
|
+
version_requirements: *70098459256180
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: redis-namespace
|
27
|
-
requirement: &
|
27
|
+
requirement: &70098459255260 !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: *
|
35
|
+
version_requirements: *70098459255260
|
36
36
|
description: 304 Not Modified Headers made easy.
|
37
37
|
email:
|
38
38
|
- sausman@stackd.com
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/nomo/rails/engine.rb
|
54
54
|
- lib/nomo/version.rb
|
55
55
|
- nomo.gemspec
|
56
|
+
- vendor/assets/javascripts/nomo.js.coffee
|
56
57
|
homepage: https://github.com/stackd/nomo
|
57
58
|
licenses: []
|
58
59
|
post_install_message:
|