seems_rateable 1.0.12 → 1.0.13
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 +4 -4
- data/Rakefile +1 -16
- data/lib/seems_rateable/model.rb +34 -55
- data/lib/seems_rateable/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5da25869fc6cb9fd1c221b6f6e4a91863e05b199
|
4
|
+
data.tar.gz: e6a95e44392d188f812290df55b638441b4b094e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a77a2cf678894a71dc0c5f0fa985be61d5f4d506d7fec15afec417a1409cf1fc1de4b31dce4e96ab161f84ef1d34a69b12e642af2fbbd907eca542af72ec5930
|
7
|
+
data.tar.gz: bd098828cb0a4900c887f9fbe5c6f79c4939501f87b3ce1ee35e3ec3af12ef57c32c136bb4a760749f7f05cc8678c2082f1bab0cdc2c14ce43304e5d2bf4239a
|
data/Rakefile
CHANGED
@@ -10,23 +10,8 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
10
10
|
rdoc.rdoc_dir = 'rdoc'
|
11
11
|
rdoc.title = 'SeemsRateable'
|
12
12
|
rdoc.options << '--line-numbers'
|
13
|
-
rdoc.rdoc_files.include('README.
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
14
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
15
|
end
|
16
16
|
|
17
|
-
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
18
|
-
load 'rails/tasks/engine.rake'
|
19
17
|
Bundler::GemHelper.install_tasks
|
20
|
-
|
21
|
-
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
22
|
-
load 'rails/tasks/engine.rake'
|
23
|
-
|
24
|
-
Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
|
25
|
-
require 'rspec/core'
|
26
|
-
require 'rspec/core/rake_task'
|
27
|
-
|
28
|
-
task :default => :spec
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
data/lib/seems_rateable/model.rb
CHANGED
@@ -3,7 +3,7 @@ require 'active_support/concern'
|
|
3
3
|
module SeemsRateable
|
4
4
|
module Model
|
5
5
|
extend ActiveSupport::Concern
|
6
|
-
|
6
|
+
|
7
7
|
def rate(stars, user_id, dimension=nil)
|
8
8
|
if !has_rated?(user_id, dimension)
|
9
9
|
self.rates.create do |r|
|
@@ -16,26 +16,25 @@ module SeemsRateable
|
|
16
16
|
update_users_rating(stars, user_id, dimension)
|
17
17
|
else
|
18
18
|
raise Errors::AlreadyRatedError
|
19
|
-
end
|
19
|
+
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def update_overall_average_rating(stars, dimension=nil)
|
23
|
-
|
24
|
-
|
23
|
+
r = average(dimension)
|
24
|
+
if r.nil?
|
25
|
+
self.rate_averages.create do |r|
|
25
26
|
r.avg = stars
|
26
27
|
r.dimension = dimension
|
27
|
-
r.cacheable_id = self.id
|
28
|
-
r.cacheable_type = self.class.name
|
29
28
|
r.cnt = 1
|
30
|
-
end
|
29
|
+
end
|
31
30
|
else
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
31
|
+
r.avg = (r.avg * r.cnt + stars) / (r.cnt+1)
|
32
|
+
r.cnt += 1
|
33
|
+
r.save!
|
34
|
+
r
|
36
35
|
end
|
37
36
|
end
|
38
|
-
|
37
|
+
|
39
38
|
def update_users_rating(stars, user_id, dimension=nil)
|
40
39
|
obj = rates(dimension).where(:rater_id => user_id).first
|
41
40
|
current_record = average(dimension)
|
@@ -44,69 +43,49 @@ module SeemsRateable
|
|
44
43
|
obj.stars = stars
|
45
44
|
obj.save!
|
46
45
|
end
|
47
|
-
|
48
|
-
|
46
|
+
|
47
|
+
|
49
48
|
def average(dimension=nil)
|
50
|
-
|
51
|
-
self.send "rate_average_without_dimension"
|
52
|
-
else
|
53
|
-
self.send "#{dimension}_average"
|
54
|
-
end
|
49
|
+
rate_averages.where(dimension: dimension).first
|
55
50
|
end
|
56
|
-
|
51
|
+
|
57
52
|
def rates(dimension=nil)
|
58
|
-
|
59
|
-
self.send "rates_without_dimension"
|
60
|
-
else
|
61
|
-
self.send "#{dimension}_rates"
|
62
|
-
end
|
53
|
+
rates_all.where(dimension: dimension)
|
63
54
|
end
|
64
|
-
|
55
|
+
|
65
56
|
def raters(dimension=nil)
|
66
|
-
|
67
|
-
self.send "raters_without_dimension"
|
68
|
-
else
|
69
|
-
self.send "#{dimension}_raters"
|
70
|
-
end
|
57
|
+
raters_all.where('seems_rateable_rates.dimension = ?', dimension)
|
71
58
|
end
|
72
|
-
|
59
|
+
|
73
60
|
def has_rated?(user_id, dimension=nil)
|
74
61
|
record = self.rates(dimension).where(:rater_id => user_id)
|
75
|
-
record.empty? ? false : true
|
76
|
-
end
|
77
|
-
|
62
|
+
record.empty? ? false : true
|
63
|
+
end
|
64
|
+
|
78
65
|
def can_update?
|
79
66
|
self.class.can_update?
|
80
67
|
end
|
81
68
|
|
82
69
|
module ClassMethods
|
83
70
|
def seems_rateable(opts={})
|
84
|
-
has_many :
|
85
|
-
has_many :
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
def self.can_update?
|
91
|
-
|
71
|
+
has_many :rates_all, :as => :rateable, :class_name => SeemsRateable::Rate, :dependent => :destroy
|
72
|
+
has_many :raters_all, :through => :rates_all, :class_name => SeemsRateable::Engine.config.owner_class, :source => :rater
|
73
|
+
has_many :rate_averages, :as => :cacheable, :class_name => SeemsRateable::CachedRating, :dependent => :destroy
|
74
|
+
|
75
|
+
self.class_variable_set(:@@permission, opts[:allow_update] ? true : false)
|
76
|
+
|
77
|
+
def self.can_update?
|
78
|
+
self.class_variable_get(:@@permission)
|
92
79
|
end
|
93
|
-
|
80
|
+
|
94
81
|
def self.rateable?
|
95
82
|
true
|
96
83
|
end
|
97
|
-
|
98
|
-
if opts[:dimensions].is_a?(Array)
|
99
|
-
opts[:dimensions].each do |dimension|
|
100
|
-
has_many :"#{dimension}_rates", -> { where(dimension: dimension.to_s) }, :dependent => :destroy, :class_name => SeemsRateable::Rate, :as => :rateable
|
101
|
-
has_many :"#{dimension}_raters", :through => :"#{dimension}_rates", :source => :rater
|
102
|
-
has_one :"#{dimension}_average", -> { where(dimension: dimension.to_s) }, :as => :cacheable, :class_name => SeemsRateable::CachedRating, :dependent => :destroy
|
103
|
-
end
|
104
|
-
end
|
105
84
|
end
|
106
|
-
|
85
|
+
|
107
86
|
def seems_rateable_rater
|
108
87
|
has_many :ratings_given, :class_name => SeemsRateable::Rate, :foreign_key => :rater_id
|
109
|
-
end
|
88
|
+
end
|
110
89
|
end
|
111
90
|
end
|
112
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: seems_rateable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Toth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -151,3 +151,4 @@ signing_key:
|
|
151
151
|
specification_version: 4
|
152
152
|
summary: Star Rating Engine
|
153
153
|
test_files: []
|
154
|
+
has_rdoc:
|