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