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.
Files changed (45) hide show
  1. checksums.yaml +8 -8
  2. data/{LICENSE.txt → MIT-LICENSE} +2 -4
  3. data/README.md +43 -54
  4. data/Rakefile +29 -4
  5. data/{lib/generators/seems_rateable/templates/images → app/assets/images/seems_rateable}/bg_jRatingInfos.png +0 -0
  6. data/{lib/generators/seems_rateable/templates/images → app/assets/images/seems_rateable}/small.png +0 -0
  7. data/{lib/generators/seems_rateable/templates/images → app/assets/images/seems_rateable}/stars.png +0 -0
  8. data/app/assets/javascripts/seems_rateable/application.js +15 -0
  9. data/{lib/generators/seems_rateable/templates/javascripts → app/assets/javascripts/seems_rateable}/jRating.jquery.js.erb +3 -3
  10. data/app/assets/stylesheets/seems_rateable/application.css +13 -0
  11. data/{lib/generators/seems_rateable/templates/stylesheets → app/assets/stylesheets/seems_rateable}/jRating.jquery.css +4 -4
  12. data/app/controllers/seems_rateable/application_controller.rb +4 -0
  13. data/app/controllers/seems_rateable/ratings_controller.rb +17 -0
  14. data/app/helpers/seems_rateable/application_helper.rb +4 -0
  15. data/app/helpers/seems_rateable/ratings_helper.rb +4 -0
  16. data/app/models/seems_rateable/cached_rating.rb +5 -0
  17. data/app/models/seems_rateable/rate.rb +6 -0
  18. data/app/views/layouts/seems_rateable/application.html.erb +14 -0
  19. data/config/routes.rb +3 -0
  20. data/lib/generators/seems_rateable/install/install_generator.rb +39 -0
  21. data/lib/generators/seems_rateable/{templates/cached_rating_migration.rb → install/templates/cached_ratings_migration.rb} +2 -2
  22. data/lib/generators/seems_rateable/install/templates/initializer.rb +4 -0
  23. data/lib/generators/seems_rateable/install/templates/jRating.js.erb +225 -0
  24. data/lib/generators/seems_rateable/install/templates/rateable.js.erb +25 -0
  25. data/lib/generators/seems_rateable/{templates/rate_migration.rb → install/templates/rates_migration.rb} +2 -5
  26. data/lib/seems_rateable/engine.rb +17 -0
  27. data/lib/seems_rateable/errors.rb +21 -0
  28. data/lib/seems_rateable/helpers.rb +27 -23
  29. data/lib/seems_rateable/model.rb +111 -0
  30. data/lib/seems_rateable/routes.rb +7 -0
  31. data/lib/seems_rateable/version.rb +1 -1
  32. data/lib/seems_rateable.rb +11 -3
  33. data/lib/tasks/seems_rateable_tasks.rake +4 -0
  34. metadata +83 -33
  35. data/.gitignore +0 -19
  36. data/Gemfile +0 -9
  37. data/lib/generators/seems_rateable/USAGE +0 -0
  38. data/lib/generators/seems_rateable/seems_rateable_generator.rb +0 -65
  39. data/lib/generators/seems_rateable/templates/cached_model.rb +0 -4
  40. data/lib/generators/seems_rateable/templates/controller.rb +0 -15
  41. data/lib/generators/seems_rateable/templates/javascripts/rateable.jquery.js.erb +0 -25
  42. data/lib/generators/seems_rateable/templates/model.rb +0 -7
  43. data/lib/generators/seems_rateable_destroy_generator.rb +0 -19
  44. data/lib/seems_rateable/record.rb +0 -117
  45. 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
@@ -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