acts_as_important 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a15ea261b84c9494ce983efa27865b1af4123640
|
4
|
+
data.tar.gz: e43c33d759fc7698577a58d27096790b7ddf5b2e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 16b6c8164c8eb716e28d1c84855ef909b95825f26ef56b02e102e6edd1300ba3a3769d066fa3e2820ff3538d4435ce99e9551f729e0d358cd06a089f74b005b3
|
7
|
+
data.tar.gz: c437495f64b0432e384d14d479d0c829db32a09104e3dede3e1d6d79505b94ef3bd472f82572520197ae54a8588b0d610b9fecbdb14c1b150ea4d0034e345f5a
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module ActsAsImportant
|
2
|
+
module ActMethod #:nodoc:
|
3
|
+
def acts_as_important(options = {})
|
4
|
+
has_many :importance_indicators, :as => :record, :dependent => :destroy
|
5
|
+
|
6
|
+
has_many :active_importance_indicators, :class_name => 'ImportanceIndicator', :as => :record, :dependent => :destroy, :conditions =>['active = ?', true]
|
7
|
+
has_many :concerned_users, :through => :active_importance_indicators, :source => :user
|
8
|
+
|
9
|
+
# Left joins importance indicators from a particular user
|
10
|
+
scope :with_user_importance, lambda{|user| joins("LEFT OUTER JOIN importance_indicators ON importance_indicators.record_id = #{quoted_table_name}.id AND importance_indicators.record_type = '#{name}' AND importance_indicators.user_id = #{user.id}")}
|
11
|
+
|
12
|
+
scope :important_to, lambda{|user| joins(:importance_indicators).where("importance_indicators.user_id = #{user.id} AND importance_indicators.active = true")}
|
13
|
+
scope :was_important_to, lambda{|user| joins(:importance_indicators).where("importance_indicators.user_id = #{user.id} AND importance_indicators.active = false")}
|
14
|
+
scope :not_important_to, lambda{|user| with_user_importance(user).where("importance_indicators.record_id IS NULL")}
|
15
|
+
scope :important_to_user_first, lambda{|user| with_user_importance(user).reorder('importance_indicators.record_id IS NOT NULL DESC')}
|
16
|
+
|
17
|
+
extend ActsAsImportant::ClassMethods
|
18
|
+
include ActsAsImportant::InstanceMethods
|
19
|
+
end
|
20
|
+
|
21
|
+
# Call this method from the user model
|
22
|
+
def concerned_with_importance
|
23
|
+
has_many :importance_indicators
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
module ClassMethods
|
28
|
+
# Find all the importance_indicators of the records by the user in a single SQL query and cache them in the records for use in the view.
|
29
|
+
def cache_importance_for(records, user)
|
30
|
+
importance_indicators = []
|
31
|
+
ImportanceIndicator.where(:record_type => name, :record_id => records.collect(&:id), :user_id => user.id).each do |importance_indicator|
|
32
|
+
importance_indicators[importance_indicator.record_id] = importance_indicator
|
33
|
+
end
|
34
|
+
|
35
|
+
for record in records
|
36
|
+
record.cached_importance = importance_indicators[record.id] || false
|
37
|
+
end
|
38
|
+
|
39
|
+
return importance_indicators
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
module InstanceMethods
|
44
|
+
attr_accessor :cached_importance
|
45
|
+
|
46
|
+
def acts_like_important?
|
47
|
+
true
|
48
|
+
end
|
49
|
+
|
50
|
+
def important_to!(user)
|
51
|
+
importance_indicators.create(:user_id => user.id) unless important_to?(user)
|
52
|
+
rescue ActiveRecord::RecordNotUnique # Database-level uniqueness constraint failed.
|
53
|
+
return true
|
54
|
+
end
|
55
|
+
|
56
|
+
def important_to?(user)
|
57
|
+
if indicator = importance_indicator_for(user)
|
58
|
+
indicator.active?
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def was_important_to?(user)
|
63
|
+
if indicator = importance_indicator_for(user)
|
64
|
+
!indicator.active?
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def importance_indicator_for(user)
|
69
|
+
case cached_importance
|
70
|
+
when nil
|
71
|
+
importance_indicators.loaded? ? importance_indicators.detect{|i| i.user_id == user.id} : importance_indicators.find_by_user_id(user.id)
|
72
|
+
when false
|
73
|
+
nil
|
74
|
+
else
|
75
|
+
cached_importance
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def importance_note_for(user)
|
80
|
+
importance_indicator_for(user).try(:note)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class ActsAsImportantMigrationGenerator < Rails::Generators::Base
|
2
|
+
def create_migration_file
|
3
|
+
create_file "db/migrations/initializer.rb", <<-EOV
|
4
|
+
class ActsAsImportantTables < ActiveRecord::Migration
|
5
|
+
def change
|
6
|
+
create_table :importance_indicators do |t|
|
7
|
+
t.belongs_to :user
|
8
|
+
t.belongs_to :record, :polymorphic => true
|
9
|
+
t.text :note
|
10
|
+
end
|
11
|
+
|
12
|
+
add_index :importance_indicators, [:record_id, :record_type], :name => 'index_importance_indicators', :unique => true
|
13
|
+
end
|
14
|
+
end
|
15
|
+
EOV
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: acts_as_important
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nicholas Jakobsen
|
8
|
+
- Ryan Wallace
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-01-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rails
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '3.1'
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '3.1'
|
28
|
+
description:
|
29
|
+
email: contact@culturecode.ca
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/acts_as_important.rb
|
35
|
+
- lib/acts_as_important/acts_as_important.rb
|
36
|
+
- lib/acts_as_important/importance_indicator.rb
|
37
|
+
- lib/generators/migration_generator.rb
|
38
|
+
homepage: http://github.com/culturecode/acts_as_important
|
39
|
+
licenses: []
|
40
|
+
metadata: {}
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '0'
|
50
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
requirements: []
|
56
|
+
rubyforge_project:
|
57
|
+
rubygems_version: 2.2.1
|
58
|
+
signing_key:
|
59
|
+
specification_version: 4
|
60
|
+
summary: Allows the you track what records are important to users and why.
|
61
|
+
test_files: []
|