redcrumbs 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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