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.
Files changed (72) hide show
  1. data/History.txt +17 -0
  2. data/README.rdoc +74 -35
  3. data/example/README.rdoc +33 -23
  4. data/example/application.rb +2 -2
  5. data/example/console.rb +133 -0
  6. data/example/db/blog.sqlite3 +0 -0
  7. data/example/{models → db}/connection.rb +0 -0
  8. data/example/environment.rb +17 -4
  9. data/example/models/comment.rb +5 -0
  10. data/example/models/post.rb +5 -0
  11. data/example/script/setup_database.rb +8 -2
  12. data/example/views/comments.erb +6 -0
  13. data/example/views/layout.erb +1 -1
  14. data/example/views/show.erb +5 -1
  15. data/lib/primer/bus/amqp.rb +7 -5
  16. data/lib/primer/bus/amqp.rbc +1045 -0
  17. data/lib/primer/bus/memory.rbc +344 -0
  18. data/lib/primer/bus.rb +3 -2
  19. data/lib/primer/bus.rbc +872 -0
  20. data/lib/primer/cache/memory.rbc +1443 -0
  21. data/lib/primer/cache/redis.rb +2 -2
  22. data/lib/primer/cache/redis.rbc +1643 -0
  23. data/lib/primer/cache.rb +2 -16
  24. data/lib/primer/cache.rbc +1502 -0
  25. data/lib/primer/enabler.rbc +414 -0
  26. data/lib/primer/helpers.rbc +1438 -0
  27. data/lib/primer/lazyness.rb +63 -0
  28. data/lib/primer/lazyness.rbc +1442 -0
  29. data/lib/primer/real_time.rbc +1999 -0
  30. data/lib/primer/route_set.rb +1 -0
  31. data/lib/primer/route_set.rbc +1475 -0
  32. data/lib/primer/watcher/active_record_macros.rb +13 -3
  33. data/lib/primer/watcher/active_record_macros.rbc +1796 -0
  34. data/lib/primer/watcher/macros.rb +11 -14
  35. data/lib/primer/watcher/macros.rbc +1628 -0
  36. data/lib/primer/watcher.rb +2 -7
  37. data/lib/primer/watcher.rbc +1416 -0
  38. data/lib/primer/worker/active_record_agent.rb +30 -33
  39. data/lib/primer/worker/active_record_agent.rbc +2840 -0
  40. data/lib/primer/worker/changes_agent.rb +20 -0
  41. data/lib/primer/worker/changes_agent.rbc +578 -0
  42. data/lib/primer/worker.rb +20 -3
  43. data/lib/primer/worker.rbc +1254 -0
  44. data/lib/primer.rb +10 -2
  45. data/lib/primer.rbc +944 -0
  46. data/spec/db/test.sqlite3 +0 -0
  47. data/spec/models/artist.rb +3 -2
  48. data/spec/models/artist.rbc +288 -0
  49. data/spec/models/blog_post.rb +3 -1
  50. data/spec/models/blog_post.rbc +181 -0
  51. data/spec/models/calendar.rbc +209 -0
  52. data/spec/models/concert.rbc +211 -0
  53. data/spec/models/performance.rbc +177 -0
  54. data/spec/models/person.rb +1 -0
  55. data/spec/models/person.rbc +306 -0
  56. data/spec/models/watchable.rbc +363 -0
  57. data/spec/primer/bus_spec.rbc +940 -0
  58. data/spec/primer/cache_spec.rb +3 -3
  59. data/spec/primer/cache_spec.rbc +8535 -0
  60. data/spec/primer/helpers/erb_spec.rb +14 -14
  61. data/spec/primer/helpers/erb_spec.rbc +2485 -0
  62. data/spec/primer/lazyness_spec.rb +61 -0
  63. data/spec/primer/lazyness_spec.rbc +1408 -0
  64. data/spec/primer/watcher/active_record_spec.rb +15 -15
  65. data/spec/primer/watcher/active_record_spec.rbc +5202 -0
  66. data/spec/primer/watcher_spec.rbc +2645 -0
  67. data/spec/schema.rbc +775 -0
  68. data/spec/spec_helper.rb +3 -0
  69. data/spec/spec_helper.rbc +1193 -0
  70. data/spec/templates/page.erb +0 -1
  71. metadata +77 -70
  72. 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
- def self.bind_to_bus
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 self.on_update(model)
25
- notify_attributes(model, model.changes)
26
- end
27
-
28
- def self.on_destroy(model)
29
- notify_attributes(model, model.attributes)
30
- notify_has_many_associations(model)
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 self.notify_attributes(model, fields)
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 self.notify_belongs_to_associations(model)
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 self.notify_belongs_to_association(model, assoc_name, change = nil)
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 self.notify_has_many_associations(model)
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 self.notify_has_many_through_association(model, through_name)
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 self.mirror_association(object_class, related_class, macro)
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 == object_class.name
110
+ [long_name, short_name].include?(mirror_assoc.class_name)
114
111
  end
115
112
  end
116
113
  end