seems_rateable 1.0.13 → 2.0.0

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 (109) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/Gemfile +3 -0
  4. data/README.md +41 -61
  5. data/Rakefile +8 -2
  6. data/app/assets/javascripts/seems_rateable/index.js +1 -0
  7. data/{lib/generators/seems_rateable/install/templates → app/assets/javascripts/seems_rateable}/jRating.js.erb +225 -225
  8. data/app/assets/stylesheets/seems_rateable/{application.css → index.css.erb} +2 -2
  9. data/app/controllers/seems_rateable/application_controller.rb +1 -3
  10. data/app/controllers/seems_rateable/rates_controller.rb +31 -0
  11. data/app/models/seems_rateable/rate.rb +2 -2
  12. data/bin/rails +8 -0
  13. data/config/routes.rb +1 -1
  14. data/lib/generators/seems_rateable/install/install_generator.rb +34 -28
  15. data/lib/generators/seems_rateable/install/templates/initializer.rb +5 -2
  16. data/lib/generators/seems_rateable/install/templates/rateable.js.erb +12 -22
  17. data/lib/generators/seems_rateable/install/templates/rates_migration.rb +6 -9
  18. data/lib/generators/seems_rateable/manifest_finder.rb +25 -0
  19. data/lib/generators/seems_rateable/migration_helpers.rb +21 -0
  20. data/lib/generators/seems_rateable/uninstall/templates/drop_seems_rateable_rates_table.rb +9 -0
  21. data/lib/generators/seems_rateable/uninstall/uninstall_generator.rb +50 -0
  22. data/lib/generators/seems_rateable/uninstall_old/templates/drop_seems_rateable_cached_ratings_table.rb +9 -0
  23. data/lib/generators/seems_rateable/uninstall_old/templates/drop_seems_rateable_rates_table.rb +9 -0
  24. data/lib/generators/seems_rateable/uninstall_old/uninstall_old_generator.rb +48 -0
  25. data/lib/seems_rateable.rb +22 -7
  26. data/lib/seems_rateable/builder.rb +35 -0
  27. data/lib/seems_rateable/builder/html_options.rb +37 -0
  28. data/lib/seems_rateable/configuration.rb +23 -0
  29. data/lib/seems_rateable/engine.rb +12 -7
  30. data/lib/seems_rateable/errors.rb +3 -17
  31. data/lib/seems_rateable/helpers/action_view_extension.rb +18 -0
  32. data/lib/seems_rateable/helpers/current_rater.rb +15 -0
  33. data/lib/seems_rateable/models/active_record_extension.rb +23 -0
  34. data/lib/seems_rateable/models/active_record_extension/rateable.rb +26 -0
  35. data/lib/seems_rateable/models/active_record_extension/rater.rb +11 -0
  36. data/lib/seems_rateable/rating.rb +19 -0
  37. data/lib/seems_rateable/routes.rb +1 -1
  38. data/lib/seems_rateable/version.rb +1 -1
  39. data/seems_rateable.gemspec +32 -0
  40. data/spec/builder_spec.rb +53 -0
  41. data/spec/controllers/rates_controller_spec.rb +56 -0
  42. data/spec/dummy/README.rdoc +28 -0
  43. data/spec/dummy/Rakefile +6 -0
  44. data/{app/assets/javascripts/seems_rateable → spec/dummy/app/assets/javascripts}/application.js +4 -3
  45. data/spec/dummy/app/assets/javascripts/posts.js +2 -0
  46. data/spec/dummy/app/assets/javascripts/rateable/rateable.js.erb +15 -0
  47. data/spec/dummy/app/assets/stylesheets/application.css +19 -0
  48. data/spec/dummy/app/assets/stylesheets/scaffold.css +56 -0
  49. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  50. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  51. data/spec/dummy/app/controllers/posts_controller.rb +58 -0
  52. data/spec/dummy/app/models/.keep +0 -0
  53. data/spec/dummy/app/models/concerns/.keep +0 -0
  54. data/spec/dummy/app/models/post.rb +3 -0
  55. data/spec/dummy/app/models/user.rb +5 -0
  56. data/spec/dummy/app/views/layouts/application.html.erb +26 -0
  57. data/spec/dummy/app/views/posts/_form.html.erb +21 -0
  58. data/spec/dummy/app/views/posts/edit.html.erb +6 -0
  59. data/spec/dummy/app/views/posts/index.html.erb +28 -0
  60. data/spec/dummy/app/views/posts/new.html.erb +5 -0
  61. data/spec/dummy/app/views/posts/show.html.erb +9 -0
  62. data/spec/dummy/bin/bundle +3 -0
  63. data/spec/dummy/bin/rails +4 -0
  64. data/spec/dummy/bin/rake +4 -0
  65. data/spec/dummy/config.ru +4 -0
  66. data/spec/dummy/config/application.rb +42 -0
  67. data/spec/dummy/config/boot.rb +5 -0
  68. data/spec/dummy/config/database.yml +25 -0
  69. data/spec/dummy/config/environment.rb +5 -0
  70. data/spec/dummy/config/environments/development.rb +29 -0
  71. data/spec/dummy/config/environments/production.rb +80 -0
  72. data/spec/dummy/config/environments/test.rb +36 -0
  73. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  74. data/spec/dummy/config/initializers/devise.rb +254 -0
  75. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  76. data/spec/dummy/config/initializers/inflections.rb +16 -0
  77. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  78. data/spec/dummy/config/initializers/secret_token.rb +12 -0
  79. data/spec/dummy/config/initializers/seems_rateable.rb +4 -0
  80. data/spec/dummy/config/initializers/session_store.rb +3 -0
  81. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  82. data/spec/dummy/config/locales/devise.en.yml +59 -0
  83. data/spec/dummy/config/locales/en.yml +23 -0
  84. data/spec/dummy/config/routes.rb +8 -0
  85. data/spec/dummy/db/migrate/20140506144141_create_posts.rb +9 -0
  86. data/spec/dummy/db/migrate/20140506144841_devise_create_users.rb +42 -0
  87. data/spec/dummy/db/migrate/20140520170316_create_seems_rateable_rates.rb +15 -0
  88. data/spec/dummy/db/schema.rb +54 -0
  89. data/spec/dummy/lib/assets/.keep +0 -0
  90. data/spec/dummy/public/404.html +58 -0
  91. data/spec/dummy/public/422.html +58 -0
  92. data/spec/dummy/public/500.html +57 -0
  93. data/spec/dummy/public/favicon.ico +0 -0
  94. data/spec/factories/posts.rb +5 -0
  95. data/spec/factories/rate.rb +7 -0
  96. data/spec/factories/users.rb +7 -0
  97. data/spec/features/rating_spec.rb +63 -0
  98. data/spec/helpers/action_view_extension_spec.rb +59 -0
  99. data/spec/models/active_record_extension_spec.rb +105 -0
  100. data/spec/models/rate_spec.rb +6 -0
  101. data/spec/rating_spec.rb +70 -0
  102. data/spec/spec_helper.rb +45 -0
  103. data/spec/support/dummies.rb +19 -0
  104. metadata +263 -25
  105. data/app/controllers/seems_rateable/ratings_controller.rb +0 -13
  106. data/app/models/seems_rateable/cached_rating.rb +0 -5
  107. data/lib/generators/seems_rateable/install/templates/cached_ratings_migration.rb +0 -17
  108. data/lib/seems_rateable/helpers.rb +0 -27
  109. data/lib/seems_rateable/model.rb +0 -91
@@ -1,13 +0,0 @@
1
- require_dependency "seems_rateable/application_controller"
2
-
3
- module SeemsRateable
4
- class RatingsController < ApplicationController
5
- def create
6
- raise NoCurrentUserInstanceError unless current_user
7
- obj = params[:kls].classify.constantize.find(params[:idBox])
8
- obj.rate(params[:rate].to_i, current_user.id, params[:dimension])
9
-
10
- render :json => true
11
- end
12
- end
13
- end
@@ -1,5 +0,0 @@
1
- module SeemsRateable
2
- class CachedRating < ActiveRecord::Base
3
- belongs_to :cacheable, :polymorphic => true
4
- end
5
- end
@@ -1,17 +0,0 @@
1
- class CreateSeemsRateableCachedRatings < ActiveRecord::Migration
2
- def self.up
3
- create_table :seems_rateable_cached_ratings do |t|
4
- t.belongs_to :cacheable, :polymorphic => true
5
- t.float :avg, :null => false
6
- t.integer :cnt, :null => false
7
- t.string :dimension
8
- t.integer :cacheable_id, :limit => 8
9
- t.string :cacheable_type
10
- t.timestamps
11
- end
12
- end
13
-
14
- def self.down
15
- drop_table :cached_ratings
16
- end
17
- end
@@ -1,27 +0,0 @@
1
- module SeemsRateable
2
- module Helpers
3
- def rating_for(obj, opts={})
4
- raise Errors::InvalidRateableObjectError unless obj.class.respond_to?(:rateable?)
5
-
6
- options = {
7
- :dimension => nil,
8
- :static => false,
9
- :class => 'rateable',
10
- :id => nil
11
- }.update(opts)
12
-
13
- content_tag :div, "", "data-average" => obj.average(options[:dimension]) ? obj.average(options[:dimension]).avg : 0, :id => options[:id],
14
- :class => "#{options[:class]}#{jdisabled?(options[:static])}",
15
- "data-id" => obj.id, "data-kls" => obj.class.name, "data-dimension" => options[:dimension]
16
- end
17
-
18
- def seems_rateable_stylesheet
19
- stylesheet_link_tag "seems_rateable/application", media: "all", "data-turbolinks-track" => true
20
- end
21
-
22
- private
23
- def jdisabled?(option)
24
- " jDisabled" if option || !current_user
25
- end
26
- end
27
- end
@@ -1,91 +0,0 @@
1
- require 'active_support/concern'
2
-
3
- module SeemsRateable
4
- module Model
5
- extend ActiveSupport::Concern
6
-
7
- def rate(stars, user_id, dimension=nil)
8
- if !has_rated?(user_id, dimension)
9
- self.rates.create do |r|
10
- r.stars = stars
11
- r.rater_id = user_id
12
- r.dimension = dimension
13
- end
14
- update_overall_average_rating(stars, dimension)
15
- elsif has_rated?(user_id, dimension) && can_update?
16
- update_users_rating(stars, user_id, dimension)
17
- else
18
- raise Errors::AlreadyRatedError
19
- end
20
- end
21
-
22
- def update_overall_average_rating(stars, dimension=nil)
23
- r = average(dimension)
24
- if r.nil?
25
- self.rate_averages.create do |r|
26
- r.avg = stars
27
- r.dimension = dimension
28
- r.cnt = 1
29
- end
30
- else
31
- r.avg = (r.avg * r.cnt + stars) / (r.cnt+1)
32
- r.cnt += 1
33
- r.save!
34
- r
35
- end
36
- end
37
-
38
- def update_users_rating(stars, user_id, dimension=nil)
39
- obj = rates(dimension).where(:rater_id => user_id).first
40
- current_record = average(dimension)
41
- current_record.avg = (current_record.avg*current_record.cnt - obj.stars + stars) / (current_record.cnt)
42
- current_record.save!
43
- obj.stars = stars
44
- obj.save!
45
- end
46
-
47
-
48
- def average(dimension=nil)
49
- rate_averages.where(dimension: dimension).first
50
- end
51
-
52
- def rates(dimension=nil)
53
- rates_all.where(dimension: dimension)
54
- end
55
-
56
- def raters(dimension=nil)
57
- raters_all.where('seems_rateable_rates.dimension = ?', dimension)
58
- end
59
-
60
- def has_rated?(user_id, dimension=nil)
61
- record = self.rates(dimension).where(:rater_id => user_id)
62
- record.empty? ? false : true
63
- end
64
-
65
- def can_update?
66
- self.class.can_update?
67
- end
68
-
69
- module ClassMethods
70
- def seems_rateable(opts={})
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)
79
- end
80
-
81
- def self.rateable?
82
- true
83
- end
84
- end
85
-
86
- def seems_rateable_rater
87
- has_many :ratings_given, :class_name => SeemsRateable::Rate, :foreign_key => :rater_id
88
- end
89
- end
90
- end
91
- end