redcrumbs 0.5.0 → 0.5.1

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.
@@ -1,68 +0,0 @@
1
- require 'dm-core'
2
- require 'dm-types'
3
- require 'dm-timestamps'
4
- require 'dm-redis-adapter'
5
-
6
- ## Note to self: Syntax to grab all by an attribute is - Notification.all(:subject_type => "User")
7
- ## The attribute must be indexed as with subject_type below
8
-
9
- module Redcrumbs
10
- class Crumb
11
-
12
- include DataMapper::Resource
13
- include Crumb::Getters
14
- include Crumb::Setters
15
- include Crumb::Expiry
16
-
17
- DataMapper.setup(:default, {:adapter => "redis", :host => Redcrumbs.redis.client.host, :port => Redcrumbs.redis.client.port, :password => Redcrumbs.redis.client.password})
18
-
19
- property :id, Serial
20
- property :subject_id, Integer, :index => true, :lazy => false
21
- property :subject_type, String, :index => true, :lazy => false
22
- property :modifications, Json, :default => "{}", :lazy => false
23
- property :created_at, DateTime
24
- property :updated_at, DateTime
25
- property :stored_creator, Json, :lazy => false
26
- property :stored_target, Json, :lazy => false
27
- property :stored_subject, Json, :lazy => false
28
- property :creator_id, Integer, :index => true
29
- property :target_id, Integer, :index => true
30
-
31
- DataMapper.finalize
32
-
33
- after :save, :set_mortality
34
-
35
- attr_accessor :_subject, :_creator, :_target
36
-
37
- def initialize(params = {})
38
- if self.subject = params[:subject]
39
- self.target = self.full_subject.target if self.subject.respond_to?(:target)
40
- self.creator = self.full_subject.creator if self.subject.respond_to?(:creator)
41
- end
42
- self.modifications = params[:modifications] unless !params[:modifications]
43
- end
44
-
45
- def self.build_with_modifications(subject)
46
- unless subject.watched_changes.empty?
47
- params = {:modifications => subject.watched_changes}
48
- params.merge!({:subject => subject})
49
- new(params)
50
- end
51
- end
52
-
53
- def set_context_from(subject)
54
- self.subject = subject unless !!subject_id
55
- self.target ||= self.subject.target if self.subject.respond_to?(:target)
56
- self.creator ||= self.subject.creator if self.subject.respond_to?(:creator)
57
- end
58
-
59
- def redis_key
60
- "redcrumbs_crumbs:#{id}"
61
- end
62
-
63
- # Designed to mimic ActiveRecord's count. Probably not performant and only should be used for tests really
64
- def self.count
65
- Redcrumbs.redis.keys("redcrumbs_crumbs:*").size - 8
66
- end
67
- end
68
- end
@@ -1,23 +0,0 @@
1
- module Redcrumbs
2
- module Crumb::Expiry
3
- extend ActiveSupport::Concern
4
-
5
- def mortal?
6
- !!Redcrumbs.mortality
7
- end
8
-
9
- def expire_at
10
- Time.now + Redcrumbs.mortality
11
- end
12
-
13
- def time_to_live
14
- Redcrumbs.redis.ttl(redis_key) if mortal?
15
- end
16
-
17
- private
18
-
19
- def set_mortality
20
- Redcrumbs.redis.expireat(redis_key, expire_at.to_i) if mortal?
21
- end
22
- end
23
- end
@@ -1,74 +0,0 @@
1
- module Redcrumbs
2
- module Crumb::Getters
3
- extend ActiveSupport::Concern
4
-
5
- def subject
6
- if !self.stored_subject.blank?
7
- subject_from_storage
8
- elsif subject_type && subject_id
9
- full_subject
10
- end
11
- end
12
-
13
- def full_subject
14
- if self._subject.blank? || self._subject.new_record?
15
- self._subject = subject_type.classify.constantize.find(subject_id)
16
- else
17
- self._subject
18
- end
19
- end
20
-
21
- def subject_from_storage
22
- self._subject ||= subject_type.constantize.new(self.stored_subject, :without_protection => true)
23
- end
24
-
25
- def creator
26
- if !self.stored_creator.blank?
27
- initialize_creator_from_hash_of_attributes
28
- elsif !self.creator_id.blank?
29
- full_creator
30
- end
31
- end
32
-
33
- def creator_class
34
- Redcrumbs.creator_class_sym.to_s.classify.constantize
35
- end
36
-
37
- def initialize_creator_from_hash_of_attributes
38
- self._creator ||= creator_class.new(self.stored_creator, :without_protection => true)
39
- end
40
-
41
- # grabbing full creator/target should cache the result. Check to see is it a new_record (i.e. from storage) first
42
- def full_creator
43
- if self._creator.blank? || self._creator.new_record?
44
- self._creator = creator_class.where(Redcrumbs.creator_primary_key => self.creator_id).first
45
- else
46
- self._creator
47
- end
48
- end
49
-
50
- def target
51
- if !self.stored_target.blank?
52
- initialize_target_from_hash_of_attributes
53
- elsif !self.target_id.blank?
54
- full_target
55
- end
56
- end
57
-
58
- def initialize_target_from_hash_of_attributes
59
- self._target ||= target_class.new(self.stored_target, :without_protection => true)
60
- end
61
-
62
- def target_class
63
- self._target ||= Redcrumbs.target_class_sym.to_s.classify.constantize
64
- end
65
-
66
- def full_target
67
- if self._target.blank? || self._target.new_record?
68
- self._target = target_class.where(Redcrumbs.target_primary_key => self.target_id).first
69
- else
70
- self._target
71
- end
72
- end
73
- end
74
- end
@@ -1,28 +0,0 @@
1
- module Redcrumbs
2
- module Crumb::Setters
3
- extend ActiveSupport::Concern
4
-
5
- def subject=(subject)
6
- self._subject = subject
7
- self.stored_subject = subject.storeable_attributes_and_method_attributes
8
- self.subject_type = subject.class.to_s
9
- self.subject_id = subject.id
10
- end
11
-
12
- def creator=(creator)
13
- unless !creator
14
- self._creator = creator
15
- self.stored_creator = creator.attributes.select {|attribute| Redcrumbs.store_creator_attributes.include?(attribute.to_sym)}
16
- self.creator_id = creator[Redcrumbs.creator_primary_key]
17
- end
18
- end
19
-
20
- def target=(target)
21
- unless !target
22
- self._target = target
23
- self.stored_target = target.attributes.select {|attribute| Redcrumbs.store_target_attributes.include?(attribute.to_sym)}
24
- self.target_id = target[Redcrumbs.target_primary_key]
25
- end
26
- end
27
- end
28
- end
@@ -1,8 +0,0 @@
1
- require "rails/engine"
2
- require "redcrumbs"
3
-
4
- module Redcrumbs
5
- class Engine < Rails::Engine
6
- # Nothing to see here. Consider moving the Crumb model from engine into lib in the future.
7
- end
8
- end