mongoid-letsrate 1.0.9 → 1.0.10

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e3164c5447bfe42189414dd97891c3b98f577891
4
- data.tar.gz: ca25dd5075b2ba8f5bd3a744ac5efbe7a0080c21
3
+ metadata.gz: 2b1076405c5d69f606e636b0dd7c6f1ce2626d5e
4
+ data.tar.gz: 5b4df317255c7239227bd9c099d4afe03b3f3f04
5
5
  SHA512:
6
- metadata.gz: c906be4921d5d101813607d7aab642403fd4f90b462ff72accaad7fd716333846465962c50fd2891a24d39cc17fdc83736201f1395ed6fd58774087546ebbef4
7
- data.tar.gz: 40122580836e47c985ea7150b63fff1fa2e92ef337527f826b9bfbdd60d061a6e56221f17f581f30d84156d679238a5dbb201302b7260f3bec27f9cc84c62b0c
6
+ metadata.gz: cfbd6c745062b113b8955512648a87a9555c59496a89dea85256ccf9137ed3dff620bdcbbc3b5cdad62248a49881ce22c1a9b78bd43698839139912a2b6a507e
7
+ data.tar.gz: f0a05ec10dbe82b4c1203726c5d5ea30083e40bd714ee72dd970577fbc0e5b69a25dfff7ca4f4f57a43624528db96f56f3e35c2a9fa29dceff713593f7582b1b
data/.travis.yml CHANGED
@@ -1,11 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - "1.9.2"
4
3
  - "1.9.3"
5
4
  - "2.0.0"
6
- - jruby-18mode
5
+ - "2.1.0"
7
6
  - jruby-19mode
8
- - rbx-18mode
9
- - rbx-19mode
10
7
  # uncomment this line if your project needs to run something other than `rake`:
11
8
  # script: bundle exec rspec spec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mongoid-letsrate (1.0.9)
4
+ mongoid-letsrate (1.0.10)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
data/README.md CHANGED
@@ -6,7 +6,7 @@ Provides the best way to add rating capabilites to your Rails application with j
6
6
 
7
7
  [![Build Status](https://secure.travis-ci.org/malagant/mongoid-letsrate.png)](http://travis-ci.org/malagant/mongoid-letsrate)
8
8
  [![Dependency Status](https://gemnasium.com/malagant/mongoid-letsrate.png)](https://gemnasium.com/malagant/mongoid-letsrate)
9
- [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/malagant/mongoid-letsrate)
9
+ [![Code Climate](https://codeclimate.com/github/malagant/mongoid-letsrate.png)](https://codeclimate.com/github/malagant/mongoid-letsrate)
10
10
 
11
11
  Find it at [github.com/malagant/mongoid-letsrate](https://github.com/malagant/mongoid-letsrate)
12
12
 
@@ -50,19 +50,24 @@ I suppose you have a car model
50
50
  rails g model car name:string
51
51
  ```
52
52
 
53
- You should add the mongoid-letsrate_rateable function with its dimensions option. You can add multiple dimensions.
53
+ You should add the letsrate_rateable function.
54
54
 
55
55
  ```ruby
56
- class Car < ActiveRecord::Base
57
- mongoid-letsrate_rateable "speed", "engine", "price"
56
+ class Car
57
+ include Mongoid::Document
58
+ include Mongoid::Timestamps
59
+
60
+ letsrate_rateable
58
61
  end
59
62
  ```
60
63
 
61
- Then you need to add a call mongoid-letsrate_rater in the user model.
64
+ Then you need to add a call letsrate_rater in the user model.
62
65
 
63
66
  ```ruby
64
- class User < ActiveRecord::Base
65
- mongoid-letsrate_rater
67
+ class User
68
+ include Mongoid::Document
69
+
70
+ letsrate_rater
66
71
  end
67
72
  ```
68
73
 
@@ -74,23 +79,19 @@ new rating value from authenticated user.
74
79
  ```erb
75
80
  <%# show.html.erb -> /cars/1 %>
76
81
 
77
- Speed : <%= rating_for @car, "speed" %>
78
- Engine : <%= rating_for @car, "engine" %>
79
- Price : <%= rating_for @car, "price" %>
82
+ Rating : <%= rating_for @car %>
80
83
  ```
81
84
 
82
85
  If you need to change the star number, you should use star option like below.
83
86
 
84
87
  ```erb
85
- Speed : <%= rating_for @car, "speed", :star => 10 %>
86
- Speed : <%= rating_for @car, "engine", :star => 7 %>
87
- Speed : <%= rating_for @car, "price" %>
88
+ Rating : <%= rating_for @car, :star => 10 %>
88
89
  ```
89
90
 
90
91
  You can use the rating_for_user helper method to show the star rating for the user.
91
92
 
92
93
  ```erb
93
- Speed : <%= rating_for_user @car, current_user, "speed", :star => 10 %>
94
+ Rating : <%= rating_for_user @car, current_user, :star => 10 %>
94
95
  ```
95
96
 
96
97
 
File without changes
@@ -1,4 +1,5 @@
1
- class MongoidLetsrateGenerator < Rails::Generators::Base
1
+ # -*- encoding : utf-8 -*-
2
+ class MongoidLetsrateGenerator < Rails::Generators::NamedBase
2
3
  source_root File.expand_path('../templates', __FILE__)
3
4
 
4
5
  desc 'copying jquery.raty files to assets directory ...'
@@ -1,10 +1,10 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class RatingCache
2
3
  include Mongoid::Document
3
4
  include Mongoid::Timestamps
4
5
 
5
- field :avg, type: Float, null: false
6
- field :qty, type: Integer, null: false
7
- field :dimension, type: String
6
+ field :avg, type: Float
7
+ field :qty, type: Integer
8
8
 
9
9
  belongs_to :cacheable, :polymorphic => true
10
- end
10
+ end
@@ -17,7 +17,6 @@ $(function(){
17
17
  $.post('<%= Rails.application.class.routes.url_helpers.rate_path %>',
18
18
  {
19
19
  score: score,
20
- dimension: $(this).attr('data-dimension'),
21
20
  id: $(this).attr('data-id'),
22
21
  klass: $(this).attr('data-classname')
23
22
  },
@@ -1,10 +1,10 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class Rate
2
3
  include Mongoid::Document
3
4
  include Mongoid::Timestamps
4
5
 
5
- field :stars, type: Float, null: false
6
- field :dimension, type: String
6
+ field :stars, type: Float
7
7
 
8
8
  belongs_to :rater, :class_name => '<%= file_name.classify %>'
9
9
  belongs_to :rateable, :polymorphic => true
10
- end
10
+ end
@@ -1,8 +1,9 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  class RaterController < ApplicationController
2
3
  def create
3
4
  if user_signed_in?
4
5
  obj = params[:klass].classify.constantize.find(params[:id])
5
- obj.rate params[:score].to_i, current_user, params[:dimension]
6
+ obj.rate params[:score].to_i, current_user
6
7
 
7
8
  render :json => true
8
9
  else
@@ -1,7 +1,8 @@
1
+ # -*- encoding : utf-8 -*-
1
2
  module Helpers
2
- def rating_for(rateable_obj, dimension=nil, options={})
3
+ def rating_for(rateable_obj, options={})
3
4
 
4
- cached_average = rateable_obj.average dimension
5
+ cached_average = rateable_obj.average
5
6
 
6
7
  avg = cached_average ? cached_average.avg : 0
7
8
 
@@ -9,35 +10,34 @@ module Helpers
9
10
 
10
11
  disable_after_rate = options[:disable_after_rate] || true
11
12
 
12
- readonly = !(current_user && rateable_obj.can_rate?(current_user, dimension))
13
+ readonly = !(current_user && rateable_obj.can_rate?(current_user))
13
14
 
14
- content_tag :div, '', "data-dimension" => dimension, :class => "star", "data-rating" => avg,
15
+ content_tag :div, '', :class => "star", "data-rating" => avg,
15
16
  "data-id" => rateable_obj.id, "data-classname" => rateable_obj.class.name,
16
17
  "data-disable-after-rate" => disable_after_rate,
17
18
  "data-readonly" => readonly,
18
19
  "data-star-count" => star
19
20
  end
20
21
 
21
- def rating_for_user(rateable_obj, rating_user, dimension = nil, options = {})
22
+ def rating_for_user(rateable_obj, rating_user, options = {})
22
23
  @object = rateable_obj
23
24
  @user = rating_user
24
- @rating = Rate.find_by_rater_id_and_rateable_id_and_dimension(@user.id, @object.id, dimension)
25
- stars = @rating ? @rating.stars : 0
25
+ @rating = Rate.find_by_rater_id_and_rateable_id(@user.id, @object.id)
26
+ stars = @rating ? @rating.stars : 0
26
27
 
27
28
  disable_after_rate = options[:disable_after_rate] || false
28
29
 
29
30
  readonly=false
30
31
  if disable_after_rate
31
- readonly = current_user.present? ? !rateable_obj.can_rate?(current_user.id, dimension) : true
32
+ readonly = current_user.present? ? !rateable_obj.can_rate?(current_user.id) : true
32
33
  end
33
34
 
34
- content_tag :div, '', "data-dimension" => dimension, :class => "star", "data-rating" => stars,
35
+ content_tag :div, '', :class => "star", "data-rating" => stars,
35
36
  "data-id" => rateable_obj.id, "data-classname" => rateable_obj.class.name,
36
37
  "data-disable-after-rate" => disable_after_rate,
37
38
  "data-readonly" => readonly,
38
39
  "data-star-count" => stars
39
40
  end
40
-
41
41
  end
42
42
 
43
43
  class ActionView::Base
@@ -0,0 +1,85 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'active_support/concern'
3
+
4
+ module Mongoid
5
+ module Letsrate
6
+ extend ActiveSupport::Concern
7
+
8
+ def rate(stars, user, dirichlet_method=false)
9
+ if can_rate? user
10
+ rates.create! do |r|
11
+ r.stars = stars
12
+ r.rater = user
13
+ end
14
+ if dirichlet_method
15
+ update_rate_average_dirichlet(stars)
16
+ else
17
+ update_rate_average(stars)
18
+ end
19
+ else
20
+ raise 'User has already rated.'
21
+ end
22
+ end
23
+
24
+ def update_rate_average_dirichlet(stars)
25
+ ## assumes 5 possible vote categories
26
+ dp = {1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1}
27
+ stars_group = Hash[rates.group(:stars).count.map { |k, v| [k.to_i, v] }]
28
+ posterior = dp.merge(stars_group) { |key, a, b| a + b }
29
+ sum = posterior.map { |i, v| v }.inject { |a, b| a + b }
30
+ davg = posterior.map { |i, v| i * v }.inject { |a, b| a + b }.to_f / sum
31
+
32
+ if average.nil?
33
+ RatingCache.create! do |avg|
34
+ avg.cacheable_id = self.id
35
+ avg.cacheable_type = self.class.name
36
+ avg.qty = 1
37
+ avg.avg = davg
38
+ end
39
+ else
40
+ a = average
41
+ a.qty = rates.count
42
+ a.avg = davg
43
+ a.save!(validate: false)
44
+ end
45
+ end
46
+
47
+ def update_rate_average(stars)
48
+ if average.nil?
49
+ RatingCache.create! do |avg|
50
+ avg.cacheable_id = self.id
51
+ avg.cacheable_type = self.class.name
52
+ avg.avg = stars
53
+ avg.qty = 1
54
+ end
55
+ else
56
+ a = average
57
+ a.qty = rates.count
58
+ a.avg = rates.average(:stars)
59
+ a.save!(validate: false)
60
+ end
61
+ end
62
+
63
+ def can_rate?(user)
64
+ user.ratings_given.where(rateable_id: id, rateable_type: self.class.name).size.zero?
65
+ end
66
+
67
+ module ClassMethods
68
+
69
+ def letsrate_rater
70
+ has_many :ratings_given, :class_name => 'Rate'
71
+ belongs_to :rater
72
+ end
73
+
74
+ def letsrate_rateable
75
+ has_many :rates, :as => :rateable, :class_name => 'Rate', :dependent => :destroy
76
+ has_many :raters
77
+
78
+ has_one :average, :as => :cacheable,
79
+ :class_name => 'RatingCache', :dependent => :destroy
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ ActiveSupport.run_load_hooks(:mongoid_letsrate, Mongoid::Letsrate)
@@ -0,0 +1,6 @@
1
+ # -*- encoding : utf-8 -*-
2
+ module Mongoid
3
+ module Letsrate
4
+ VERSION = '1.0.10'
5
+ end
6
+ end
@@ -0,0 +1,4 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'mongoid/letsrate/version'
3
+ require 'mongoid/letsrate/model'
4
+ require 'mongoid/letsrate/helpers'
@@ -1,10 +1,12 @@
1
1
  # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path('../lib', __FILE__)
3
- require 'mongoid_letsrate/version'
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'mongoid/letsrate/version'
4
6
 
5
7
  Gem::Specification.new do |s|
6
8
  s.name = 'mongoid-letsrate'
7
- s.version = MongoidLetsrate::VERSION
9
+ s.version = Mongoid::Letsrate::VERSION
8
10
  s.authors = ['Michael Johann','Murat GUZEL']
9
11
  s.email = ['mjohann@rails-experts.com']
10
12
  s.homepage = 'http://github.com/malagant/mongoid-letsrate'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-letsrate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.9
4
+ version: 1.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Johann
@@ -24,21 +24,20 @@ files:
24
24
  - Gemfile.lock
25
25
  - README.md
26
26
  - Rakefile
27
- - lib/generators/letsrate/USAGE
28
- - lib/generators/letsrate/mongoid_letsrate_generator.rb
29
- - lib/generators/letsrate/templates/cache_model.rb
30
- - lib/generators/letsrate/templates/jquery.raty.js
31
- - lib/generators/letsrate/templates/letsrate.js.erb
32
- - lib/generators/letsrate/templates/migration.rb
33
- - lib/generators/letsrate/templates/model.rb
34
- - lib/generators/letsrate/templates/rater_controller.rb
35
- - lib/generators/letsrate/templates/star-half.png
36
- - lib/generators/letsrate/templates/star-off.png
37
- - lib/generators/letsrate/templates/star-on.png
38
- - lib/mongoid_letsrate.rb
39
- - lib/mongoid_letsrate/helpers.rb
40
- - lib/mongoid_letsrate/model.rb
41
- - lib/mongoid_letsrate/version.rb
27
+ - lib/generators/mongoid_letsrate/USAGE
28
+ - lib/generators/mongoid_letsrate/mongoid_letsrate_generator.rb
29
+ - lib/generators/mongoid_letsrate/templates/cache_model.rb
30
+ - lib/generators/mongoid_letsrate/templates/jquery.raty.js
31
+ - lib/generators/mongoid_letsrate/templates/letsrate.js.erb
32
+ - lib/generators/mongoid_letsrate/templates/model.rb
33
+ - lib/generators/mongoid_letsrate/templates/rater_controller.rb
34
+ - lib/generators/mongoid_letsrate/templates/star-half.png
35
+ - lib/generators/mongoid_letsrate/templates/star-off.png
36
+ - lib/generators/mongoid_letsrate/templates/star-on.png
37
+ - lib/mongoid-letsrate.rb
38
+ - lib/mongoid/letsrate/helpers.rb
39
+ - lib/mongoid/letsrate/model.rb
40
+ - lib/mongoid/letsrate/version.rb
42
41
  - mongoid-letsrate.gemspec
43
42
  homepage: http://github.com/malagant/mongoid-letsrate
44
43
  licenses: []
@@ -1,20 +0,0 @@
1
- class CreateRates < ActiveRecord::Migration
2
-
3
- def self.up
4
- create_table :rates do |t|
5
- t.belongs_to :rater
6
- t.belongs_to :rateable, :polymorphic => true
7
- t.float :stars, :null => false
8
- t.string :dimension
9
- t.timestamps
10
- end
11
-
12
- add_index :rates, :rater_id
13
- add_index :rates, [:rateable_id, :rateable_type]
14
- end
15
-
16
- def self.down
17
- drop_table :rates
18
- end
19
-
20
- end
@@ -1,109 +0,0 @@
1
- require 'active_support/concern'
2
- module MongoidLetsrate
3
- extend ActiveSupport::Concern
4
-
5
- def rate(stars, user, dimension=nil, dirichlet_method=false)
6
- dimension = nil if dimension.blank?
7
-
8
- if can_rate? user, dimension
9
- rates(dimension).create! do |r|
10
- r.stars = stars
11
- r.rater = user
12
- end
13
- if dirichlet_method
14
- update_rate_average_dirichlet(stars, dimension)
15
- else
16
- update_rate_average(stars, dimension)
17
- end
18
- else
19
- raise 'User has already rated.'
20
- end
21
- end
22
-
23
- def update_rate_average_dirichlet(stars, dimension=nil)
24
- ## assumes 5 possible vote categories
25
- dp = {1 => 1, 2 => 1, 3 => 1, 4 => 1, 5 => 1}
26
- stars_group = Hash[rates(dimension).group(:stars).count.map{|k,v| [k.to_i,v] }]
27
- posterior = dp.merge(stars_group){|key, a, b| a + b}
28
- sum = posterior.map{ |i, v| v }.inject { |a, b| a + b }
29
- davg = posterior.map{ |i, v| i * v }.inject { |a, b| a + b }.to_f / sum
30
-
31
- if average(dimension).nil?
32
- RatingCache.create! do |avg|
33
- avg.cacheable_id = self.id
34
- avg.cacheable_type = self.class.name
35
- avg.qty = 1
36
- avg.avg = davg
37
- avg.dimension = dimension
38
- end
39
- else
40
- a = average(dimension)
41
- a.qty = rates(dimension).count
42
- a.avg = davg
43
- a.save!(validate: false)
44
- end
45
- end
46
-
47
- def update_rate_average(stars, dimension=nil)
48
- if average(dimension).nil?
49
- RatingCache.create! do |avg|
50
- avg.cacheable_id = self.id
51
- avg.cacheable_type = self.class.name
52
- avg.avg = stars
53
- avg.qty = 1
54
- avg.dimension = dimension
55
- end
56
- else
57
- a = average(dimension)
58
- a.qty = rates(dimension).count
59
- a.avg = rates(dimension).average(:stars)
60
- a.save!(validate: false)
61
- end
62
- end
63
-
64
- def average(dimension=nil)
65
- dimension ? self.send("#{dimension}_average") : rate_average_without_dimension
66
- end
67
-
68
- def can_rate?(user, dimension=nil)
69
- user.ratings_given.where(dimension: dimension, rateable_id: id, rateable_type: self.class.name).size.zero?
70
- end
71
-
72
- def rates(dimension=nil)
73
- dimension ? self.send("#{dimension}_rates") : rates_without_dimension
74
- end
75
-
76
- def raters(dimension=nil)
77
- dimension ? self.send("#{dimension}_raters") : raters_without_dimension
78
- end
79
-
80
- module ClassMethods
81
-
82
- def letsrate_rater
83
- has_many :ratings_given, :class_name => "Rate", :foreign_key => :rater_id
84
- end
85
-
86
- def letsrate_rateable(*dimensions)
87
- has_many :rates_without_dimension, -> { where dimension: nil}, :as => :rateable, :class_name => "Rate", :dependent => :destroy
88
- has_many :raters_without_dimension, :through => :rates_without_dimension, :source => :rater
89
-
90
- has_one :rate_average_without_dimension, -> { where dimension: nil}, :as => :cacheable,
91
- :class_name => "RatingCache", :dependent => :destroy
92
-
93
-
94
- dimensions.each do |dimension|
95
- has_many "#{dimension}_rates".to_sym, -> {where dimension: dimension.to_s},
96
- :dependent => :destroy,
97
- :class_name => "Rate",
98
- :as => :rateable
99
-
100
- has_many "#{dimension}_raters".to_sym, :through => "#{dimension}_rates", :source => :rater
101
-
102
- has_one "#{dimension}_average".to_sym, -> { where dimension: dimension.to_s },
103
- :as => :cacheable, :class_name => "RatingCache",
104
- :dependent => :destroy
105
- end
106
- end
107
- end
108
-
109
- end
@@ -1,3 +0,0 @@
1
- module MongoidLetsrate
2
- VERSION = '1.0.9'
3
- end
@@ -1,7 +0,0 @@
1
- require 'mongoid_letsrate/version'
2
- require 'mongoid_letsrate/model'
3
- require 'mongoid_letsrate/helpers'
4
-
5
- module MongoidLetsrate
6
-
7
- end