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.
- checksums.yaml +15 -0
- data/.gitignore +1 -0
- data/.travis.yml +33 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +140 -105
- data/gemfiles/Gemfile.rails-3.1.x +12 -0
- data/gemfiles/Gemfile.rails-3.2.x +12 -0
- data/gemfiles/Gemfile.rails-4.0.x +12 -0
- data/gemfiles/Gemfile.rails-4.1.x +12 -0
- data/lib/generators/redcrumbs/templates/initializer.rb +9 -26
- data/lib/redcrumbs.rb +12 -7
- data/lib/redcrumbs/config.rb +55 -5
- data/lib/redcrumbs/creation.rb +60 -47
- data/lib/redcrumbs/crumb.rb +100 -0
- data/lib/redcrumbs/options.rb +8 -3
- data/lib/redcrumbs/serializable_association.rb +193 -0
- data/lib/redcrumbs/users.rb +27 -37
- data/lib/redcrumbs/version.rb +1 -1
- data/redcrumbs.gemspec +11 -9
- data/spec/redcrumbs/config_spec.rb +168 -0
- data/spec/redcrumbs/creation_spec.rb +271 -0
- data/spec/redcrumbs/crumb_spec.rb +254 -0
- data/spec/redcrumbs/options_spec.rb +70 -0
- data/spec/redcrumbs/serializable_association_spec.rb +101 -0
- data/spec/redcrumbs/users_spec.rb +55 -0
- data/spec/spec_helper.rb +27 -0
- data/spec/support/models.rb +34 -0
- data/spec/support/schema.rb +26 -0
- metadata +106 -34
- data/app/models/redcrumbs/crumb.rb +0 -68
- data/app/models/redcrumbs/crumb/expiry.rb +0 -23
- data/app/models/redcrumbs/crumb/getters.rb +0 -74
- data/app/models/redcrumbs/crumb/setters.rb +0 -28
- data/lib/redcrumbs/engine.rb +0 -8
@@ -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
|