seems_rateable 1.0.6 → 1.0.7
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 +8 -8
- data/{LICENSE.txt → MIT-LICENSE} +2 -4
- data/README.md +43 -54
- data/Rakefile +29 -4
- data/{lib/generators/seems_rateable/templates/images → app/assets/images/seems_rateable}/bg_jRatingInfos.png +0 -0
- data/{lib/generators/seems_rateable/templates/images → app/assets/images/seems_rateable}/small.png +0 -0
- data/{lib/generators/seems_rateable/templates/images → app/assets/images/seems_rateable}/stars.png +0 -0
- data/app/assets/javascripts/seems_rateable/application.js +15 -0
- data/{lib/generators/seems_rateable/templates/javascripts → app/assets/javascripts/seems_rateable}/jRating.jquery.js.erb +3 -3
- data/app/assets/stylesheets/seems_rateable/application.css +13 -0
- data/{lib/generators/seems_rateable/templates/stylesheets → app/assets/stylesheets/seems_rateable}/jRating.jquery.css +4 -4
- data/app/controllers/seems_rateable/application_controller.rb +4 -0
- data/app/controllers/seems_rateable/ratings_controller.rb +17 -0
- data/app/helpers/seems_rateable/application_helper.rb +4 -0
- data/app/helpers/seems_rateable/ratings_helper.rb +4 -0
- data/app/models/seems_rateable/cached_rating.rb +5 -0
- data/app/models/seems_rateable/rate.rb +6 -0
- data/app/views/layouts/seems_rateable/application.html.erb +14 -0
- data/config/routes.rb +3 -0
- data/lib/generators/seems_rateable/install/install_generator.rb +39 -0
- data/lib/generators/seems_rateable/{templates/cached_rating_migration.rb → install/templates/cached_ratings_migration.rb} +2 -2
- data/lib/generators/seems_rateable/install/templates/initializer.rb +4 -0
- data/lib/generators/seems_rateable/install/templates/jRating.js.erb +225 -0
- data/lib/generators/seems_rateable/install/templates/rateable.js.erb +25 -0
- data/lib/generators/seems_rateable/{templates/rate_migration.rb → install/templates/rates_migration.rb} +2 -5
- data/lib/seems_rateable/engine.rb +17 -0
- data/lib/seems_rateable/errors.rb +21 -0
- data/lib/seems_rateable/helpers.rb +27 -23
- data/lib/seems_rateable/model.rb +111 -0
- data/lib/seems_rateable/routes.rb +7 -0
- data/lib/seems_rateable/version.rb +1 -1
- data/lib/seems_rateable.rb +11 -3
- data/lib/tasks/seems_rateable_tasks.rake +4 -0
- metadata +83 -33
- data/.gitignore +0 -19
- data/Gemfile +0 -9
- data/lib/generators/seems_rateable/USAGE +0 -0
- data/lib/generators/seems_rateable/seems_rateable_generator.rb +0 -65
- data/lib/generators/seems_rateable/templates/cached_model.rb +0 -4
- data/lib/generators/seems_rateable/templates/controller.rb +0 -15
- data/lib/generators/seems_rateable/templates/javascripts/rateable.jquery.js.erb +0 -25
- data/lib/generators/seems_rateable/templates/model.rb +0 -7
- data/lib/generators/seems_rateable_destroy_generator.rb +0 -19
- data/lib/seems_rateable/record.rb +0 -117
- data/seems_rateable.gemspec +0 -25
@@ -1,117 +0,0 @@
|
|
1
|
-
require 'active_support/concern'
|
2
|
-
module SeemsRateable
|
3
|
-
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
|
6
|
-
def rate(stars, user_id, dimension = nil)
|
7
|
-
if update_permission && !permission(user_id, dimension)
|
8
|
-
allow_update_average stars, user_id, dimension
|
9
|
-
else
|
10
|
-
rate_cannot_update stars, user_id, dimension
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
def rate_cannot_update(stars, user_id, dimension = nil)
|
15
|
-
if permission user_id, dimension
|
16
|
-
rates(dimension).build do |r|
|
17
|
-
r.stars = stars
|
18
|
-
r.rater_id = user_id
|
19
|
-
r.save!
|
20
|
-
end
|
21
|
-
update_average(stars, dimension)
|
22
|
-
else
|
23
|
-
#raise "User has already voted."
|
24
|
-
return false
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
def update_average(stars, dimension=nil)
|
29
|
-
if average(dimension).nil?
|
30
|
-
CachedRating.create(:avg => stars, :dimension => dimension) do |r|
|
31
|
-
r.cacheable_id = self.id
|
32
|
-
r.cacheable_type = self.class.name
|
33
|
-
r.cnt = 1
|
34
|
-
end
|
35
|
-
else
|
36
|
-
r = average(dimension)
|
37
|
-
r.avg = (r.avg * r.cnt + stars) / (r.cnt+1)
|
38
|
-
r.cnt += 1
|
39
|
-
r.save!
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def allow_update_average(stars, user_id, dimension=nil)
|
44
|
-
obj = rates(dimension).where(:rater_id => user_id).first!
|
45
|
-
r = average(dimension)
|
46
|
-
r.avg = (r.avg*r.cnt - obj.stars + stars) / (r.cnt)
|
47
|
-
r.save!
|
48
|
-
obj.stars = stars
|
49
|
-
obj.save!
|
50
|
-
end
|
51
|
-
|
52
|
-
|
53
|
-
def average(dimension=nil)
|
54
|
-
if dimension.nil?
|
55
|
-
self.send "rate_average_without_dimension"
|
56
|
-
else
|
57
|
-
self.send "#{dimension}_average"
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def permission(user_id, dimension=nil)
|
62
|
-
#record = connection.select_one("SELECT id FROM rates WHERE rateable_id=#{self.id} and rateable_type='#{self.class.name}' and rater_id=#{user_id} and dimension#{dimension ? "='#{dimension.to_s}'" : " IS NULL"}")
|
63
|
-
record = Rate.where(:rateable_id => self.id, :rateable_type => self.class.name, :rater_id => user_id, :dimension => dimension)
|
64
|
-
record.empty? ? true : false
|
65
|
-
end
|
66
|
-
|
67
|
-
def rates(dimension=nil)
|
68
|
-
if dimension.nil?
|
69
|
-
self.send "rates_without_dimension"
|
70
|
-
else
|
71
|
-
self.send "#{dimension}_rates"
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
def update_permission
|
77
|
-
self.class.update_permission
|
78
|
-
end
|
79
|
-
|
80
|
-
module ClassMethods
|
81
|
-
def seems_rateable(opts={})
|
82
|
-
has_many :rates_without_dimension, :as => :rateable, :class_name => "Rate",
|
83
|
-
:dependent => :destroy, :conditions => {:dimension => nil}
|
84
|
-
|
85
|
-
has_many :raters_without_dimension, :through => :rates_without_dimension, :source => :rater
|
86
|
-
|
87
|
-
has_one :rate_average_without_dimension, :as => :cacheable, :class_name => "CachedRating",
|
88
|
-
:dependent => :destroy, :conditions => {:dimension => nil}
|
89
|
-
|
90
|
-
@allow = opts[:allow_update] ? true : false
|
91
|
-
|
92
|
-
def self.update_permission
|
93
|
-
@update_permission = @allow
|
94
|
-
end
|
95
|
-
|
96
|
-
if opts[:dimensions].is_a?(Array)
|
97
|
-
opts[:dimensions].each do |dimension|
|
98
|
-
has_many "#{dimension}_rates", :dependent => :destroy,
|
99
|
-
:conditions => {:dimension => dimension.to_s}, :class_name => "Rate", :as => :rateable
|
100
|
-
has_many "#{dimension}_raters", :through => "#{dimension}_rates", :source => :rater
|
101
|
-
has_one "#{dimension}_average", :as => :cacheable, :class_name => "CachedRating",
|
102
|
-
:dependent => :destroy, :conditions => {:dimension => dimension.to_s}
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
def seems_rateable_rater
|
108
|
-
has_many :ratings_given, :class_name => "Rate", :foreign_key => :rater_id
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
|
115
|
-
class ActiveRecord::Base
|
116
|
-
include SeemsRateable
|
117
|
-
end
|
data/seems_rateable.gemspec
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
lib = File.expand_path('../lib', __FILE__)
|
3
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'seems_rateable/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |gem|
|
7
|
-
gem.name = "seems_rateable"
|
8
|
-
gem.version = SeemsRateable::VERSION
|
9
|
-
gem.authors = ["Peter Toth"]
|
10
|
-
gem.email = ["proximin@gmail.com"]
|
11
|
-
gem.description = %q{Star rating gem for Rails application using jQuery plugin jRating}
|
12
|
-
gem.summary = %q{Star rating gem for Rails application using jQuery plugin jRating}
|
13
|
-
gem.homepage = ""
|
14
|
-
|
15
|
-
gem.files = `git ls-files`.split($/)
|
16
|
-
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
-
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
-
gem.require_paths = ["lib"]
|
19
|
-
|
20
|
-
gem.add_runtime_dependency 'rails'
|
21
|
-
|
22
|
-
gem.add_development_dependency 'rake'
|
23
|
-
gem.add_development_dependency "rspec", "~> 2.6"
|
24
|
-
|
25
|
-
end
|