ajaxful_rating 2.2.8.2 → 2.2.9

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.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('ajaxful_rating', '2.2.8.2') do |p|
5
+ Echoe.new('ajaxful_rating', '2.2.9') do |p|
6
6
  p.description = "Provides a simple way to add rating functionality to your application."
7
7
  p.url = "http://github.com/edgarjs/ajaxful-rating"
8
8
  p.author = "Edgar J. Suarez"
@@ -2,24 +2,23 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{ajaxful_rating}
5
- s.version = "2.2.8.2"
5
+ s.version = "2.2.9"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Edgar J. Suarez"]
9
- s.date = %q{2010-08-27}
8
+ s.authors = [%q{Edgar J. Suarez}]
9
+ s.date = %q{2011-09-20}
10
10
  s.description = %q{Provides a simple way to add rating functionality to your application.}
11
11
  s.email = %q{edgar.js@gmail.com}
12
- s.extra_rdoc_files = ["CHANGELOG", "README.textile", "lib/ajaxful_rating.rb", "lib/axr/css_builder.rb", "lib/axr/errors.rb", "lib/axr/helpers.rb", "lib/axr/locale.rb", "lib/axr/model.rb", "lib/axr/stars_builder.rb"]
13
- s.files = ["CHANGELOG", "Manifest", "README.textile", "Rakefile", "ajaxful_rating.gemspec", "generators/ajaxful_rating/USAGE", "generators/ajaxful_rating/ajaxful_rating_generator.rb", "generators/ajaxful_rating/templates/images/star.png", "generators/ajaxful_rating/templates/images/star_small.png", "generators/ajaxful_rating/templates/migration.rb", "generators/ajaxful_rating/templates/model.rb", "generators/ajaxful_rating/templates/style.css", "init.rb", "lib/ajaxful_rating.rb", "lib/axr/css_builder.rb", "lib/axr/errors.rb", "lib/axr/helpers.rb", "lib/axr/locale.rb", "lib/axr/model.rb", "lib/axr/stars_builder.rb"]
12
+ s.extra_rdoc_files = [%q{CHANGELOG}, %q{README.textile}, %q{lib/ajaxful_rating.rb}, %q{lib/axr/css_builder.rb}, %q{lib/axr/errors.rb}, %q{lib/axr/helpers.rb}, %q{lib/axr/locale.rb}, %q{lib/axr/model.rb}, %q{lib/axr/stars_builder.rb}]
13
+ s.files = [%q{CHANGELOG}, %q{Manifest}, %q{README.textile}, %q{Rakefile}, %q{ajaxful_rating.gemspec}, %q{generators/ajaxful_rating/USAGE}, %q{generators/ajaxful_rating/ajaxful_rating_generator.rb}, %q{generators/ajaxful_rating/templates/images/star.png}, %q{generators/ajaxful_rating/templates/images/star_small.png}, %q{generators/ajaxful_rating/templates/migration.rb}, %q{generators/ajaxful_rating/templates/model.rb}, %q{generators/ajaxful_rating/templates/style.css}, %q{init.rb}, %q{lib/ajaxful_rating.rb}, %q{lib/axr/css_builder.rb}, %q{lib/axr/errors.rb}, %q{lib/axr/helpers.rb}, %q{lib/axr/locale.rb}, %q{lib/axr/model.rb}, %q{lib/axr/stars_builder.rb}]
14
14
  s.homepage = %q{http://github.com/edgarjs/ajaxful-rating}
15
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Ajaxful_rating", "--main", "README.textile"]
16
- s.require_paths = ["lib"]
15
+ s.rdoc_options = [%q{--line-numbers}, %q{--inline-source}, %q{--title}, %q{Ajaxful_rating}, %q{--main}, %q{README.textile}]
16
+ s.require_paths = [%q{lib}]
17
17
  s.rubyforge_project = %q{ajaxful_rating}
18
- s.rubygems_version = %q{1.3.7}
18
+ s.rubygems_version = %q{1.8.6}
19
19
  s.summary = %q{Provides a simple way to add rating functionality to your application.}
20
20
 
21
21
  if s.respond_to? :specification_version then
22
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
23
22
  s.specification_version = 3
24
23
 
25
24
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -3,7 +3,7 @@ class CreateRates < ActiveRecord::Migration
3
3
  create_table :rates do |t|
4
4
  t.belongs_to :rater
5
5
  t.belongs_to :rateable, :polymorphic => true
6
- t.integer :stars, :null => false
6
+ t.float :stars, :null => false
7
7
  t.string :dimension
8
8
  t.timestamps
9
9
  end
@@ -20,6 +20,7 @@ module AjaxfulRating # :nodoc:
20
20
  # * <tt>:show_user_rating</tt> Set to true if you want to display only the current user's rating, instead of the global average.
21
21
  # * <tt>:dimension</tt> The dimension to show the ratings for.
22
22
  # * <tt>:force_static</tt> Force static stars even when you're passing a user instance.
23
+ # * <tt>:to_nearest</tt> Allow stars to be set and averaged to nearest whatever. eg. 0.5 for the nearest half-star
23
24
  #
24
25
  # Example:
25
26
  # <%= ratings_for @article, :wrap => false %> # => Will produce something like:
@@ -69,13 +70,13 @@ module AjaxfulRating # :nodoc:
69
70
  #
70
71
  # ajaxful_rating:
71
72
  # helper:
72
- # global_average: "Global rating average: {{value}} out of {{max}}"
73
- # user_rating: "Your rating: {{value}} out of {{max}}"
74
- # hover: "Rate {{value}} out of {{max}}" def ratings_for(*args)
73
+ # global_average: "Global rating average: %{value} out of %{max}"
74
+ # user_rating: "Your rating: %{value} out of %{max}"
75
+ # hover: "Rate %{value} out of %{max}" def ratings_for(*args)
75
76
  def ratings_for(*args)
76
77
  @axr_css ||= CSSBuilder.new
77
78
  options = args.extract_options!.symbolize_keys.slice(:small, :remote_options,
78
- :wrap, :show_user_rating, :dimension, :force_static, :current_user)
79
+ :wrap, :show_user_rating, :dimension, :force_static, :current_user, :disable_remote, :to_nearest)
79
80
  remote_options = options.delete(:remote_options) || {}
80
81
  rateable = args.shift
81
82
  user = args.shift || (respond_to?(:current_user) ? current_user : raise(NoUserSpecified))
@@ -4,15 +4,15 @@ module AjaxfulRating # :nodoc:
4
4
  #
5
5
  # ajaxful_rating:
6
6
  # helper:
7
- # global_average: "Global rating average: {{value}} out of {{max}}"
8
- # user_rating: "Your rating: {{value}} out of {{max}}"
9
- # hover: "Rate {{value}} out of {{max}}"
7
+ # global_average: "Global rating average: %{value} out of %{max}"
8
+ # user_rating: "Your rating: %{value} out of %{max}"
9
+ # hover: "Rate %{value} out of %{max}"
10
10
  module Locale
11
11
 
12
12
  DEFAULTS = {
13
- :user_rating => "Your rating: {{value}} out of {{max}}",
14
- :global_average => "Global rating average: {{value}} out of {{max}}",
15
- :hover => "Rate {{value}} out of {{max}}",
13
+ :user_rating => "Your rating: %{value} out of %{max}",
14
+ :global_average => "Global rating average: %{value} out of %{max}",
15
+ :hover => "Rate %{value} out of %{max}",
16
16
  :no_ratings => "Not yet rated"
17
17
  }
18
18
 
@@ -12,6 +12,8 @@ module AjaxfulRating # :nodoc:
12
12
  # * <tt>:stars</tt> Max number of stars that can be submitted.
13
13
  # * <tt>:allow_update</tt> Set to true if you want users to be able to update their votes.
14
14
  # * <tt>:cache_column</tt> Name of the column for storing the cached rating average.
15
+ # * <tt>:cache_column</tt> Name of the column for storing the cached rating average.
16
+ # * <tt>:to_nearest</tt> Allow stars to be set and averaged to nearest whatever . eg. 0.5 for the nearest half-star. May be overridden in the ratings_for
15
17
  #
16
18
  # Example:
17
19
  # class Article < ActiveRecord::Base
@@ -146,11 +148,20 @@ module AjaxfulRating # :nodoc:
146
148
  # Rating average for the object.
147
149
  #
148
150
  # Pass false as param to force the calculation if you are caching it.
149
- def rate_average(cached = true, dimension = nil)
150
- avg = if cached && self.class.caching_average?(dimension)
151
- send(caching_column_name(dimension)).to_f
151
+ def rate_average(cached = true, dimension = nil, to_nearest = nil)
152
+ avg = if cached && self.class.caching_average?(dimension, to_nearest)
153
+ send(caching_column_name(dimension, to_nearest)).to_f
152
154
  else
153
- self.rates_sum(dimension).to_f / self.total_rates(dimension).to_f
155
+ avg = self.rates_sum(dimension).to_f / self.total_rates(dimension).to_f
156
+ avg.nan? ? 0.0 : avg
157
+ if avg > 0
158
+ to_nearest ||= axr_config[:to_nearest]
159
+ if to_nearest
160
+ notches = 1/to_nearest.to_f
161
+ avg = ((avg * notches).round)/notches
162
+ end
163
+ end
164
+ avg
154
165
  end
155
166
  avg.nan? ? 0.0 : avg
156
167
  end
@@ -168,14 +179,14 @@ module AjaxfulRating # :nodoc:
168
179
  end
169
180
 
170
181
  # Returns the name of the cache column for the passed dimension.
171
- def caching_column_name(dimension = nil)
172
- self.class.caching_column_name(dimension)
182
+ def caching_column_name(dimension = nil, to_nearest = nil)
183
+ self.class.caching_column_name(dimension, to_nearest)
173
184
  end
174
185
 
175
186
  # Updates the cached average column in the rateable model.
176
- def update_cached_average(dimension = nil)
177
- if self.class.caching_average?(dimension)
178
- update_attribute caching_column_name(dimension), self.rate_average(false, dimension)
187
+ def update_cached_average(dimension = nil, to_nearest = nil)
188
+ if self.class.caching_average?(dimension, to_nearest)
189
+ update_attribute caching_column_name(dimension, to_nearest), self.rate_average(false, dimension, to_nearest)
179
190
  end
180
191
  end
181
192
  end
@@ -191,6 +202,11 @@ module AjaxfulRating # :nodoc:
191
202
  axr_config[:stars]
192
203
  end
193
204
 
205
+ # Allow stars to be set and averaged to nearest whatever. eg. 0.5 for the nearest half-star
206
+ def to_nearest
207
+ axr_config[:to_nearest] || 1
208
+ end
209
+
194
210
  # Name of the class for the user model.
195
211
  def user_class_name
196
212
  Rate.reflect_on_association(:rater).options[:class_name]
@@ -246,14 +262,15 @@ module AjaxfulRating # :nodoc:
246
262
  #
247
263
  # ajaxful_rateable :cache_column => :my_custom_column
248
264
  #
249
- def caching_average?(dimension = nil)
250
- column_names.include?(caching_column_name(dimension))
265
+ def caching_average?(dimension = nil, to_nearest = nil)
266
+ column_names.include?(caching_column_name(dimension, to_nearest))
251
267
  end
252
268
 
253
269
  # Returns the name of the cache column for the passed dimension.
254
- def caching_column_name(dimension = nil)
270
+ def caching_column_name(dimension = nil, to_nearest = nil)
255
271
  name = axr_config[:cache_column].to_s
256
272
  name += "_#{dimension.to_s.underscore}" unless dimension.blank?
273
+ name += "_#{to_nearest.to_s.gsub('.', '_').underscore}" unless to_nearest.blank?
257
274
  name
258
275
  end
259
276
  end
@@ -30,6 +30,7 @@ module AjaxfulRating # :nodoc:
30
30
  :wrap => true,
31
31
  :small => false,
32
32
  :show_user_rating => false,
33
+ :disable_remote => false,
33
34
  :force_static => false,
34
35
  :current_user => (@template.current_user if @template.respond_to?(:current_user))
35
36
  }.merge(options)
@@ -37,7 +38,7 @@ module AjaxfulRating # :nodoc:
37
38
  @options[:small] = @options[:small].to_s == 'true'
38
39
  @options[:show_user_rating] = @options[:show_user_rating].to_s == 'true'
39
40
  @options[:wrap] = @options[:wrap].to_s == 'true'
40
-
41
+
41
42
  @remote_options = {
42
43
  :url => nil,
43
44
  :method => :post
@@ -64,8 +65,8 @@ module AjaxfulRating # :nodoc:
64
65
 
65
66
  stars << @template.content_tag(:li, i18n(:current), :class => "show-value",
66
67
  :style => "width: #{width}%")
67
- stars += (1..rateable.class.max_stars).map do |i|
68
- star_tag(i)
68
+ stars += (1..rateable.class.max_stars/rateable.class.to_nearest).map do |i|
69
+ star_tag(i*rateable.class.to_nearest)
69
70
  end
70
71
  # When using rails_xss plugin, it needs to render as HTML
71
72
  stars = "".respond_to?(:html_safe) ? stars.join.html_safe : stars.join
@@ -74,10 +75,10 @@ module AjaxfulRating # :nodoc:
74
75
 
75
76
  def star_tag(value)
76
77
  already_rated = rateable.rated_by?(user, options[:dimension]) if user
77
- css_class = "stars-#{value}"
78
+ css_class = "stars-%s" % [ value.to_s.gsub('.', '_') ]
78
79
  @css_builder.rule(".ajaxful-rating .#{css_class}", {
79
80
  :width => "#{(value / rateable.class.max_stars.to_f) * 100}%",
80
- :zIndex => (rateable.class.max_stars + 2 - value).to_s
81
+ :zIndex => "%.f" % ( (rateable.class.max_stars/rateable.class.to_nearest) + 2 - (value/rateable.class.to_nearest))
81
82
  })
82
83
  @template.content_tag(:li) do
83
84
  if !options[:force_static] && (user && options[:current_user] == user &&
@@ -104,11 +105,16 @@ module AjaxfulRating # :nodoc:
104
105
  :url => "#{remote_options[:url]}",
105
106
  :with => "'#{query}'"
106
107
  }
107
- @template.link_to_remote(value, remote_options.merge(config))
108
+ if options[:disable_remote]
109
+ config[:url] += "?" + query
110
+ @template.link_to(value, config[:url], config[:html])
111
+ else
112
+ @template.link_to_remote(value, remote_options.merge(config))
113
+ end
108
114
  end
109
115
 
110
116
  def wrapper_tag
111
- @template.content_tag(:div, ratings_tag, :class => "ajaxful-rating-wrapper",
117
+ @template.content_tag(:div, ratings_tag, :class => "ajaxful-rating-wrapper#{' show-user-rating' if @options[:show_user_rating]}",
112
118
  :id => rateable.wrapper_dom_id(options))
113
119
  end
114
120
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ajaxful_rating
3
3
  version: !ruby/object:Gem::Version
4
- hash: 91
5
- prerelease: false
4
+ hash: 21
5
+ prerelease:
6
6
  segments:
7
7
  - 2
8
8
  - 2
9
- - 8
10
- - 2
11
- version: 2.2.8.2
9
+ - 9
10
+ version: 2.2.9
12
11
  platform: ruby
13
12
  authors:
14
13
  - Edgar J. Suarez
@@ -16,8 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2010-08-27 00:00:00 -05:00
20
- default_executable:
18
+ date: 2011-09-20 00:00:00 Z
21
19
  dependencies: []
22
20
 
23
21
  description: Provides a simple way to add rating functionality to your application.
@@ -57,7 +55,6 @@ files:
57
55
  - lib/axr/locale.rb
58
56
  - lib/axr/model.rb
59
57
  - lib/axr/stars_builder.rb
60
- has_rdoc: true
61
58
  homepage: http://github.com/edgarjs/ajaxful-rating
62
59
  licenses: []
63
60
 
@@ -93,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
90
  requirements: []
94
91
 
95
92
  rubyforge_project: ajaxful_rating
96
- rubygems_version: 1.3.7
93
+ rubygems_version: 1.8.6
97
94
  signing_key:
98
95
  specification_version: 3
99
96
  summary: Provides a simple way to add rating functionality to your application.