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.
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