primer 0.1.0 → 0.2.0
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/History.txt +17 -0
- data/README.rdoc +74 -35
- data/example/README.rdoc +33 -23
- data/example/application.rb +2 -2
- data/example/console.rb +133 -0
- data/example/db/blog.sqlite3 +0 -0
- data/example/{models → db}/connection.rb +0 -0
- data/example/environment.rb +17 -4
- data/example/models/comment.rb +5 -0
- data/example/models/post.rb +5 -0
- data/example/script/setup_database.rb +8 -2
- data/example/views/comments.erb +6 -0
- data/example/views/layout.erb +1 -1
- data/example/views/show.erb +5 -1
- data/lib/primer/bus/amqp.rb +7 -5
- data/lib/primer/bus/amqp.rbc +1045 -0
- data/lib/primer/bus/memory.rbc +344 -0
- data/lib/primer/bus.rb +3 -2
- data/lib/primer/bus.rbc +872 -0
- data/lib/primer/cache/memory.rbc +1443 -0
- data/lib/primer/cache/redis.rb +2 -2
- data/lib/primer/cache/redis.rbc +1643 -0
- data/lib/primer/cache.rb +2 -16
- data/lib/primer/cache.rbc +1502 -0
- data/lib/primer/enabler.rbc +414 -0
- data/lib/primer/helpers.rbc +1438 -0
- data/lib/primer/lazyness.rb +63 -0
- data/lib/primer/lazyness.rbc +1442 -0
- data/lib/primer/real_time.rbc +1999 -0
- data/lib/primer/route_set.rb +1 -0
- data/lib/primer/route_set.rbc +1475 -0
- data/lib/primer/watcher/active_record_macros.rb +13 -3
- data/lib/primer/watcher/active_record_macros.rbc +1796 -0
- data/lib/primer/watcher/macros.rb +11 -14
- data/lib/primer/watcher/macros.rbc +1628 -0
- data/lib/primer/watcher.rb +2 -7
- data/lib/primer/watcher.rbc +1416 -0
- data/lib/primer/worker/active_record_agent.rb +30 -33
- data/lib/primer/worker/active_record_agent.rbc +2840 -0
- data/lib/primer/worker/changes_agent.rb +20 -0
- data/lib/primer/worker/changes_agent.rbc +578 -0
- data/lib/primer/worker.rb +20 -3
- data/lib/primer/worker.rbc +1254 -0
- data/lib/primer.rb +10 -2
- data/lib/primer.rbc +944 -0
- data/spec/db/test.sqlite3 +0 -0
- data/spec/models/artist.rb +3 -2
- data/spec/models/artist.rbc +288 -0
- data/spec/models/blog_post.rb +3 -1
- data/spec/models/blog_post.rbc +181 -0
- data/spec/models/calendar.rbc +209 -0
- data/spec/models/concert.rbc +211 -0
- data/spec/models/performance.rbc +177 -0
- data/spec/models/person.rb +1 -0
- data/spec/models/person.rbc +306 -0
- data/spec/models/watchable.rbc +363 -0
- data/spec/primer/bus_spec.rbc +940 -0
- data/spec/primer/cache_spec.rb +3 -3
- data/spec/primer/cache_spec.rbc +8535 -0
- data/spec/primer/helpers/erb_spec.rb +14 -14
- data/spec/primer/helpers/erb_spec.rbc +2485 -0
- data/spec/primer/lazyness_spec.rb +61 -0
- data/spec/primer/lazyness_spec.rbc +1408 -0
- data/spec/primer/watcher/active_record_spec.rb +15 -15
- data/spec/primer/watcher/active_record_spec.rbc +5202 -0
- data/spec/primer/watcher_spec.rbc +2645 -0
- data/spec/schema.rbc +775 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/spec_helper.rbc +1193 -0
- data/spec/templates/page.erb +0 -1
- metadata +77 -70
- data/example/models/blog_post.rb +0 -4
@@ -1,36 +1,30 @@
|
|
1
1
|
module Primer
|
2
2
|
class Worker
|
3
3
|
|
4
|
-
class ActiveRecordAgent
|
5
|
-
|
6
|
-
Primer.bus.subscribe :active_record do |event, class_name, attributes, changes|
|
7
|
-
model = class_name.constantize.new(attributes)
|
8
|
-
model.instance_eval do
|
9
|
-
@attributes = attributes
|
10
|
-
@changed_attributes = changes if changes
|
11
|
-
end
|
12
|
-
__send__("on_#{event}", model)
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
def self.macros
|
17
|
-
Watcher::ActiveRecordMacros
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.on_create(model)
|
21
|
-
notify_belongs_to_associations(model)
|
22
|
-
end
|
4
|
+
class ActiveRecordAgent < Agent
|
5
|
+
topic :active_record
|
23
6
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
7
|
+
def on_message(message)
|
8
|
+
event, class_name, attributes, changes = *message
|
9
|
+
model = class_name.constantize.new(attributes)
|
10
|
+
|
11
|
+
model.instance_eval do
|
12
|
+
@attributes = attributes
|
13
|
+
@changed_attributes = changes if changes
|
14
|
+
end
|
15
|
+
|
16
|
+
case event
|
17
|
+
when 'create'
|
18
|
+
notify_belongs_to_associations(model)
|
19
|
+
when 'update'
|
20
|
+
notify_attributes(model, model.changes)
|
21
|
+
when 'destroy'
|
22
|
+
notify_attributes(model, model.attributes)
|
23
|
+
notify_has_many_associations(model)
|
24
|
+
end
|
31
25
|
end
|
32
26
|
|
33
|
-
def
|
27
|
+
def notify_attributes(model, fields)
|
34
28
|
foreign_keys = model.class.primer_foreign_key_mappings
|
35
29
|
|
36
30
|
fields.each do |attribute, value|
|
@@ -42,14 +36,14 @@ module Primer
|
|
42
36
|
end
|
43
37
|
end
|
44
38
|
|
45
|
-
def
|
39
|
+
def notify_belongs_to_associations(model)
|
46
40
|
model.class.reflect_on_all_associations.each do |assoc|
|
47
41
|
next unless assoc.macro == :belongs_to
|
48
42
|
notify_belongs_to_association(model, assoc.name)
|
49
43
|
end
|
50
44
|
end
|
51
45
|
|
52
|
-
def
|
46
|
+
def notify_belongs_to_association(model, assoc_name, change = nil)
|
53
47
|
assoc = model.class.reflect_on_association(assoc_name)
|
54
48
|
owner_class = assoc.class_name.constantize
|
55
49
|
|
@@ -69,7 +63,7 @@ module Primer
|
|
69
63
|
notify_has_many_through_association(previous, mirror.name)
|
70
64
|
end
|
71
65
|
|
72
|
-
def
|
66
|
+
def notify_has_many_associations(model)
|
73
67
|
model.class.reflect_on_all_associations.each do |assoc|
|
74
68
|
next unless assoc.macro == :has_many
|
75
69
|
next if assoc.options[:dependent] == :destroy
|
@@ -87,7 +81,7 @@ module Primer
|
|
87
81
|
end
|
88
82
|
end
|
89
83
|
|
90
|
-
def
|
84
|
+
def notify_has_many_through_association(model, through_name)
|
91
85
|
model.class.reflect_on_all_associations.each do |assoc|
|
92
86
|
next unless assoc.macro == :has_many
|
93
87
|
|
@@ -107,10 +101,13 @@ module Primer
|
|
107
101
|
end
|
108
102
|
end
|
109
103
|
|
110
|
-
def
|
104
|
+
def mirror_association(object_class, related_class, macro)
|
105
|
+
long_name = object_class.name
|
106
|
+
short_name = long_name.split('::').last
|
107
|
+
|
111
108
|
related_class.reflect_on_all_associations.find do |mirror_assoc|
|
112
109
|
mirror_assoc.macro == macro and
|
113
|
-
mirror_assoc.class_name
|
110
|
+
[long_name, short_name].include?(mirror_assoc.class_name)
|
114
111
|
end
|
115
112
|
end
|
116
113
|
end
|