ajaxful_rating 2.2.9.1 → 3.0.0.beta1
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/.gitignore +4 -0
- data/CHANGELOG +0 -18
- data/ChangeLog +33 -0
- data/Manifest +0 -1
- data/README.textile +2 -5
- data/Rakefile +17 -10
- data/ajaxful_rating.gemspec +60 -15
- data/lib/axr/helpers.rb +7 -7
- data/lib/axr/locale.rb +6 -8
- data/lib/axr/model.rb +33 -48
- data/lib/axr/stars_builder.rb +22 -28
- data/{generators → lib/generators}/ajaxful_rating/USAGE +1 -1
- data/lib/generators/ajaxful_rating/ajaxful_rating_generator.rb +38 -0
- data/{generators → lib/generators}/ajaxful_rating/templates/images/star.png +0 -0
- data/{generators → lib/generators}/ajaxful_rating/templates/images/star_small.png +0 -0
- data/{generators → lib/generators}/ajaxful_rating/templates/migration.rb +1 -1
- data/{generators → lib/generators}/ajaxful_rating/templates/model.rb +0 -0
- data/{generators → lib/generators}/ajaxful_rating/templates/style.css +0 -0
- data/test/fixtures/car.rb +3 -0
- data/test/fixtures/cars.yml +7 -0
- data/test/fixtures/rate.rb +6 -0
- data/test/fixtures/rates.yml +41 -0
- data/test/fixtures/schema.rb +22 -0
- data/test/fixtures/user.rb +3 -0
- data/test/fixtures/users.yml +7 -0
- data/test/lib/model_test.rb +58 -0
- data/test/test_helper.rb +25 -0
- metadata +46 -42
- data/generators/ajaxful_rating/ajaxful_rating_generator.rb +0 -30
- data/init.rb +0 -6
data/.gitignore
ADDED
data/CHANGELOG
CHANGED
@@ -1,21 +1,3 @@
|
|
1
|
-
== 2.2.8.1 Jul 02, 2010
|
2
|
-
* Call html_safe only when it's available.
|
3
|
-
|
4
|
-
== 2.2.8 Jun 14, 2010
|
5
|
-
* Fix html for <li> marking it as html_safe when using rails_xss plugin
|
6
|
-
|
7
|
-
== 2.2.7 Jun 12, 2010
|
8
|
-
* Fix generated html marking it as html_safe when using rails_xss plugin
|
9
|
-
|
10
|
-
== 2.2.6 May 27, 2010
|
11
|
-
* Fix wrapper_dom_id with false values for keys
|
12
|
-
|
13
|
-
== 2.2.5 May 21, 2010
|
14
|
-
* Fix wrapper_dom_id with empty values
|
15
|
-
|
16
|
-
== 2.2.4 April 15, 2010
|
17
|
-
* Fix wrapper_dom_id join options
|
18
|
-
|
19
1
|
== 2.2.3 March 10, 2010
|
20
2
|
* Fix validation of current_user to show linked stars
|
21
3
|
|
data/ChangeLog
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
== 2.2.3 March 10, 2010
|
2
|
+
* Fix validation of current_user to show linked stars
|
3
|
+
|
4
|
+
== 2.2.2 March 9, 2010
|
5
|
+
* Fix bug for jRuby
|
6
|
+
* Fixed user self relational model to be rater and rateable.
|
7
|
+
|
8
|
+
== 2.2.1 March 8, 2010
|
9
|
+
* Changed :force_dynamic for its opposite :force_static.
|
10
|
+
* Fixed I18n texts.
|
11
|
+
* Fixed missed quotes for Rate belongs_to association with User class
|
12
|
+
* Detailed wrapper DOM id with passed hash.
|
13
|
+
|
14
|
+
== 2.2.0 March 7, 2010
|
15
|
+
* Improved model methods and options.
|
16
|
+
* Works now with inherited models.
|
17
|
+
* Removed HTML and CSS options for helper for sake of simpleness.
|
18
|
+
* Renamed helper option :small_stars to :small.
|
19
|
+
* Changed whole helper approach. It should work the same as before.
|
20
|
+
(Except for the renamed and removed options)
|
21
|
+
* Removed :force_dynamic, you should exclude the helper from cache since it uses
|
22
|
+
authorization.
|
23
|
+
* Fixed opened bugs so far.
|
24
|
+
|
25
|
+
== 2.1.5 January 28, 2010
|
26
|
+
* Renamed options method name to avoid collapse.
|
27
|
+
* Removed CSS duplication.
|
28
|
+
|
29
|
+
== 2.1.4 January 25, 2010
|
30
|
+
* Added option for showing current_user's rate instead of global average
|
31
|
+
|
32
|
+
== 2.1.0 July 25, 2009
|
33
|
+
* AjaxfulRating is now available as a gem
|
data/Manifest
CHANGED
data/README.textile
CHANGED
@@ -64,7 +64,8 @@ class Car < ActiveRecord::Base
|
|
64
64
|
end
|
65
65
|
</pre>
|
66
66
|
|
67
|
-
Then you need to add a call @ajaxful_rater@ in the user model
|
67
|
+
Then you need to add a call @ajaxful_rater@ in the user model. This includes a simple line so
|
68
|
+
you can add it _by your own_ as well (@has_many :rates@).
|
68
69
|
|
69
70
|
<pre>
|
70
71
|
class User < ActiveRecord::Base
|
@@ -121,13 +122,9 @@ correct action in your controller:
|
|
121
122
|
<%= ratings_for @article, :remote_options => {:url => your_rate_path(@article)} %>
|
122
123
|
</pre>
|
123
124
|
|
124
|
-
h3. Important!
|
125
|
-
|
126
125
|
*To display the stars properly you need to add a call in the head of your layout, which will generate the
|
127
126
|
required CSS style for the list. Also don't forget to include the javascripts.*
|
128
127
|
|
129
|
-
It's also important to note that this call MUST be within your head tags in your layout, as for now it seems to doesn't work with the @content_for@ tag.
|
130
|
-
|
131
128
|
<pre>
|
132
129
|
#within the head tags of your layout...
|
133
130
|
<%= javascript_include_tag :defaults %>
|
data/Rakefile
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
-
require 'echoe'
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
|
7
|
+
Jeweler::Tasks.new do |spec|
|
8
|
+
spec.name = "ajaxful_rating"
|
9
|
+
spec.version = "3.0.0.beta1"
|
10
|
+
spec.summary = "Provides a simple way to add rating functionality to your application."
|
11
|
+
spec.description = "Provides a simple way to add rating functionality to your application."
|
12
|
+
spec.homepage = "http://github.com/edgarjs/ajaxful-rating"
|
13
|
+
spec.authors = ["Edgar J. Suarez", "Denis Odorcic"]
|
14
|
+
spec.email = ["edgar.js@gmail.com", "denis.odorcic@gmail.com"]
|
15
|
+
spec.has_rdoc = true
|
16
|
+
spec.files.exclude 'init.rb'
|
17
|
+
end
|
18
|
+
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler not available. Install it with: gem install jeweler"
|
12
21
|
end
|
13
|
-
|
14
|
-
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/ajaxful_rating.gemspec
CHANGED
@@ -1,29 +1,74 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
1
4
|
# -*- encoding: utf-8 -*-
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
5
|
-
s.version = "
|
7
|
+
s.name = %q{ajaxful_rating}
|
8
|
+
s.version = "3.0.0.beta1"
|
6
9
|
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
8
|
-
s.authors = ["Edgar J. Suarez"]
|
9
|
-
s.date =
|
10
|
-
s.description =
|
11
|
-
s.email = "edgar.js@gmail.com"
|
12
|
-
s.extra_rdoc_files = [
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Edgar J. Suarez", "Denis Odorcic"]
|
12
|
+
s.date = %q{2010-05-03}
|
13
|
+
s.description = %q{Provides a simple way to add rating functionality to your application.}
|
14
|
+
s.email = ["edgar.js@gmail.com", "denis.odorcic@gmail.com"]
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"ChangeLog",
|
17
|
+
"README.textile"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".gitignore",
|
21
|
+
"CHANGELOG",
|
22
|
+
"Manifest",
|
23
|
+
"README.textile",
|
24
|
+
"Rakefile",
|
25
|
+
"ajaxful_rating.gemspec",
|
26
|
+
"lib/ajaxful_rating.rb",
|
27
|
+
"lib/axr/css_builder.rb",
|
28
|
+
"lib/axr/errors.rb",
|
29
|
+
"lib/axr/helpers.rb",
|
30
|
+
"lib/axr/locale.rb",
|
31
|
+
"lib/axr/model.rb",
|
32
|
+
"lib/axr/stars_builder.rb",
|
33
|
+
"lib/generators/ajaxful_rating/USAGE",
|
34
|
+
"lib/generators/ajaxful_rating/ajaxful_rating_generator.rb",
|
35
|
+
"lib/generators/ajaxful_rating/templates/images/star.png",
|
36
|
+
"lib/generators/ajaxful_rating/templates/images/star_small.png",
|
37
|
+
"lib/generators/ajaxful_rating/templates/migration.rb",
|
38
|
+
"lib/generators/ajaxful_rating/templates/model.rb",
|
39
|
+
"lib/generators/ajaxful_rating/templates/style.css",
|
40
|
+
"test/fixtures/car.rb",
|
41
|
+
"test/fixtures/cars.yml",
|
42
|
+
"test/fixtures/rate.rb",
|
43
|
+
"test/fixtures/rates.yml",
|
44
|
+
"test/fixtures/schema.rb",
|
45
|
+
"test/fixtures/user.rb",
|
46
|
+
"test/fixtures/users.yml",
|
47
|
+
"test/lib/model_test.rb",
|
48
|
+
"test/test_helper.rb"
|
49
|
+
]
|
50
|
+
s.homepage = %q{http://github.com/edgarjs/ajaxful-rating}
|
51
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
16
52
|
s.require_paths = ["lib"]
|
17
|
-
s.
|
18
|
-
s.
|
19
|
-
s.
|
53
|
+
s.rubygems_version = %q{1.3.6}
|
54
|
+
s.summary = %q{Provides a simple way to add rating functionality to your application.}
|
55
|
+
s.test_files = [
|
56
|
+
"test/fixtures/car.rb",
|
57
|
+
"test/fixtures/rate.rb",
|
58
|
+
"test/fixtures/schema.rb",
|
59
|
+
"test/fixtures/user.rb",
|
60
|
+
"test/lib/model_test.rb",
|
61
|
+
"test/test_helper.rb"
|
62
|
+
]
|
20
63
|
|
21
64
|
if s.respond_to? :specification_version then
|
65
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
22
66
|
s.specification_version = 3
|
23
67
|
|
24
|
-
if Gem::Version.new(Gem::
|
68
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
25
69
|
else
|
26
70
|
end
|
27
71
|
else
|
28
72
|
end
|
29
73
|
end
|
74
|
+
|
data/lib/axr/helpers.rb
CHANGED
@@ -20,7 +20,6 @@ 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
|
24
23
|
#
|
25
24
|
# Example:
|
26
25
|
# <%= ratings_for @article, :wrap => false %> # => Will produce something like:
|
@@ -70,16 +69,17 @@ module AjaxfulRating # :nodoc:
|
|
70
69
|
#
|
71
70
|
# ajaxful_rating:
|
72
71
|
# helper:
|
73
|
-
# global_average: "Global rating average:
|
74
|
-
# user_rating: "Your rating:
|
75
|
-
# hover: "Rate
|
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)
|
76
75
|
def ratings_for(*args)
|
77
76
|
@axr_css ||= CSSBuilder.new
|
78
|
-
options = args.extract_options!.symbolize_keys.slice(:small, :remote_options,
|
79
|
-
:wrap, :show_user_rating, :dimension, :force_static, :current_user
|
77
|
+
options = args.extract_options!.to_hash.symbolize_keys.slice(:small, :remote_options,
|
78
|
+
:wrap, :show_user_rating, :dimension, :force_static, :current_user)
|
79
|
+
|
80
80
|
remote_options = options.delete(:remote_options) || {}
|
81
81
|
rateable = args.shift
|
82
|
-
user = args.shift || (respond_to?(:current_user) ? current_user : raise(NoUserSpecified))
|
82
|
+
user = args.shift || (respond_to?(:current_user) ? current_user : raise(Errors::NoUserSpecified))
|
83
83
|
StarsBuilder.new(rateable, user, self, @axr_css, options, remote_options).render
|
84
84
|
end
|
85
85
|
end
|
data/lib/axr/locale.rb
CHANGED
@@ -4,16 +4,15 @@ module AjaxfulRating # :nodoc:
|
|
4
4
|
#
|
5
5
|
# ajaxful_rating:
|
6
6
|
# helper:
|
7
|
-
# global_average: "Global rating average:
|
8
|
-
# user_rating: "Your rating:
|
9
|
-
# hover: "Rate
|
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:
|
14
|
-
:global_average => "Global rating average:
|
15
|
-
:hover => "Rate
|
16
|
-
:no_ratings => "Not yet rated"
|
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}}"
|
17
16
|
}
|
18
17
|
|
19
18
|
def i18n(key, value = nil)
|
@@ -22,7 +21,6 @@ module AjaxfulRating # :nodoc:
|
|
22
21
|
else
|
23
22
|
key.to_sym
|
24
23
|
end
|
25
|
-
key = :no_ratings if key == :user_rating && options[:show_user_rating] && ((value || show_value) == 0)
|
26
24
|
default = DEFAULTS[key]
|
27
25
|
key = "ajaxful_rating.helper.#{key}"
|
28
26
|
I18n.t(key, :value => (value || show_value),
|
data/lib/axr/model.rb
CHANGED
@@ -12,18 +12,16 @@ 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
|
17
15
|
#
|
18
16
|
# Example:
|
19
17
|
# class Article < ActiveRecord::Base
|
20
18
|
# ajaxful_rateable :stars => 10, :cache_column => :custom_column
|
21
19
|
# end
|
22
20
|
def ajaxful_rateable(options = {})
|
23
|
-
has_many :rates_without_dimension, :as => :rateable,
|
21
|
+
has_many :rates_without_dimension, :as => :rateable, :class_name => 'Rate',
|
24
22
|
:dependent => :destroy, :conditions => {:dimension => nil}
|
25
23
|
has_many :raters_without_dimension, :through => :rates_without_dimension, :source => :rater
|
26
|
-
|
24
|
+
|
27
25
|
options[:dimensions].each do |dimension|
|
28
26
|
has_many "#{dimension}_rates", :dependent => :destroy,
|
29
27
|
:conditions => {:dimension => dimension.to_s}, :class_name => 'Rate', :as => :rateable
|
@@ -38,12 +36,12 @@ module AjaxfulRating # :nodoc:
|
|
38
36
|
:cache_column => :rating_average
|
39
37
|
}
|
40
38
|
end
|
41
|
-
|
39
|
+
|
42
40
|
alias_method :ajaxful_rating_options, :axr_config
|
43
41
|
end
|
44
|
-
|
42
|
+
|
45
43
|
axr_config.update(options)
|
46
|
-
|
44
|
+
|
47
45
|
include AjaxfulRating::InstanceMethods
|
48
46
|
extend AjaxfulRating::SingletonMethods
|
49
47
|
end
|
@@ -56,7 +54,7 @@ module AjaxfulRating # :nodoc:
|
|
56
54
|
|
57
55
|
# Instance methods for the rateable object.
|
58
56
|
module InstanceMethods
|
59
|
-
|
57
|
+
|
60
58
|
# Proxy for axr_config singleton method.
|
61
59
|
def axr_config
|
62
60
|
self.class.axr_config
|
@@ -73,7 +71,7 @@ module AjaxfulRating # :nodoc:
|
|
73
71
|
# end
|
74
72
|
def rate(stars, user, dimension = nil)
|
75
73
|
return false if (stars.to_i > self.class.max_stars)
|
76
|
-
raise AlreadyRatedError if (!self.class.axr_config[:allow_update] && rated_by?(user, dimension))
|
74
|
+
raise Errors::AlreadyRatedError if (!self.class.axr_config[:allow_update] && rated_by?(user, dimension))
|
77
75
|
|
78
76
|
rate = if self.class.axr_config[:allow_update] && rated_by?(user, dimension)
|
79
77
|
rate_by(user, dimension)
|
@@ -86,19 +84,21 @@ module AjaxfulRating # :nodoc:
|
|
86
84
|
rate.save!
|
87
85
|
self.update_cached_average(dimension)
|
88
86
|
end
|
89
|
-
|
87
|
+
|
90
88
|
# Builds the DOM id attribute for the wrapper in view.
|
91
89
|
def wrapper_dom_id(options = {})
|
92
|
-
options = options.symbolize_keys.slice(:small, :dimension)
|
93
|
-
options = options.
|
90
|
+
options = options.to_hash.symbolize_keys.slice(:small, :dimension)
|
91
|
+
options = options.map do |k, v|
|
94
92
|
if k == :dimension
|
95
93
|
v.to_s
|
96
94
|
else
|
97
95
|
v.to_s == 'true' ? k.to_s : "no-#{k}"
|
98
96
|
end
|
99
97
|
end
|
100
|
-
options.
|
101
|
-
|
98
|
+
options = options.delete_if { |x| x.empty? }
|
99
|
+
prefix = "ajaxful_rating"
|
100
|
+
prefix << "_#{options.sort.join('_')}" unless options.empty?
|
101
|
+
ApplicationController.helpers.dom_id(self, prefix)
|
102
102
|
end
|
103
103
|
|
104
104
|
# Returns an array with the users that have rated this object for the
|
@@ -108,13 +108,13 @@ module AjaxfulRating # :nodoc:
|
|
108
108
|
def raters(dimension = nil)
|
109
109
|
sql = "SELECT DISTINCT u.* FROM #{self.class.user_class.table_name} u "\
|
110
110
|
"INNER JOIN rates r ON u.id = r.rater_id WHERE "
|
111
|
-
|
111
|
+
|
112
112
|
sql << self.class.send(:sanitize_sql_for_conditions, {
|
113
113
|
:rateable_id => id,
|
114
114
|
:rateable_type => self.class.base_class.name,
|
115
115
|
:dimension => (dimension.to_s if dimension)
|
116
116
|
}, 'r')
|
117
|
-
|
117
|
+
|
118
118
|
self.class.user_class.find_by_sql(sql)
|
119
119
|
end
|
120
120
|
|
@@ -127,7 +127,7 @@ module AjaxfulRating # :nodoc:
|
|
127
127
|
def rated_by?(user, dimension = nil)
|
128
128
|
!rate_by(user, dimension).nil?
|
129
129
|
end
|
130
|
-
|
130
|
+
|
131
131
|
# Returns whether or not the user can rate this object.
|
132
132
|
# Based on if the user has already rated the object or the
|
133
133
|
# :allow_update option is enabled.
|
@@ -148,20 +148,11 @@ module AjaxfulRating # :nodoc:
|
|
148
148
|
# Rating average for the object.
|
149
149
|
#
|
150
150
|
# Pass false as param to force the calculation if you are caching it.
|
151
|
-
def rate_average(cached = true, dimension = nil
|
152
|
-
avg = if cached && self.class.caching_average?(dimension
|
153
|
-
send(caching_column_name(dimension
|
151
|
+
def rate_average(cached = true, dimension = nil)
|
152
|
+
avg = if cached && self.class.caching_average?(dimension)
|
153
|
+
send(caching_column_name(dimension)).to_f
|
154
154
|
else
|
155
|
-
|
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
|
155
|
+
self.rates_sum(dimension).to_f / self.total_rates(dimension).to_f
|
165
156
|
end
|
166
157
|
avg.nan? ? 0.0 : avg
|
167
158
|
end
|
@@ -179,20 +170,20 @@ module AjaxfulRating # :nodoc:
|
|
179
170
|
end
|
180
171
|
|
181
172
|
# Returns the name of the cache column for the passed dimension.
|
182
|
-
def caching_column_name(dimension = nil
|
183
|
-
self.class.caching_column_name(dimension
|
173
|
+
def caching_column_name(dimension = nil)
|
174
|
+
self.class.caching_column_name(dimension)
|
184
175
|
end
|
185
176
|
|
186
177
|
# Updates the cached average column in the rateable model.
|
187
|
-
def update_cached_average(dimension = nil
|
188
|
-
if self.class.caching_average?(dimension
|
189
|
-
update_attribute caching_column_name(dimension
|
178
|
+
def update_cached_average(dimension = nil)
|
179
|
+
if self.class.caching_average?(dimension)
|
180
|
+
update_attribute caching_column_name(dimension), self.rate_average(false, dimension)
|
190
181
|
end
|
191
182
|
end
|
192
183
|
end
|
193
184
|
|
194
185
|
module SingletonMethods
|
195
|
-
|
186
|
+
|
196
187
|
# Maximum value accepted when rating the model. Default is 5.
|
197
188
|
#
|
198
189
|
# Change it by passing the :stars option to +ajaxful_rateable+
|
@@ -202,16 +193,11 @@ module AjaxfulRating # :nodoc:
|
|
202
193
|
axr_config[:stars]
|
203
194
|
end
|
204
195
|
|
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
|
-
|
210
196
|
# Name of the class for the user model.
|
211
197
|
def user_class_name
|
212
198
|
Rate.reflect_on_association(:rater).options[:class_name]
|
213
199
|
end
|
214
|
-
|
200
|
+
|
215
201
|
# Gets the user's class
|
216
202
|
def user_class
|
217
203
|
user_class_name.constantize
|
@@ -241,13 +227,13 @@ module AjaxfulRating # :nodoc:
|
|
241
227
|
def find_statement(attr_name, attr_value, dimension = nil)
|
242
228
|
sql = "SELECT DISTINCT r2.* FROM rates r1 INNER JOIN "\
|
243
229
|
"#{self.base_class.table_name} r2 ON r1.rateable_id = r2.id WHERE "
|
244
|
-
|
230
|
+
|
245
231
|
sql << sanitize_sql_for_conditions({
|
246
232
|
:rateable_type => self.base_class.name,
|
247
233
|
attr_name => attr_value,
|
248
234
|
:dimension => (dimension.to_s if dimension)
|
249
235
|
}, 'r1')
|
250
|
-
|
236
|
+
|
251
237
|
find_by_sql(sql)
|
252
238
|
end
|
253
239
|
|
@@ -262,15 +248,14 @@ module AjaxfulRating # :nodoc:
|
|
262
248
|
#
|
263
249
|
# ajaxful_rateable :cache_column => :my_custom_column
|
264
250
|
#
|
265
|
-
def caching_average?(dimension = nil
|
266
|
-
column_names.include?(caching_column_name(dimension
|
251
|
+
def caching_average?(dimension = nil)
|
252
|
+
column_names.include?(caching_column_name(dimension))
|
267
253
|
end
|
268
254
|
|
269
255
|
# Returns the name of the cache column for the passed dimension.
|
270
|
-
def caching_column_name(dimension = nil
|
256
|
+
def caching_column_name(dimension = nil)
|
271
257
|
name = axr_config[:cache_column].to_s
|
272
258
|
name += "_#{dimension.to_s.underscore}" unless dimension.blank?
|
273
|
-
name += "_#{to_nearest.to_s.gsub('.', '_').underscore}" unless to_nearest.blank?
|
274
259
|
name
|
275
260
|
end
|
276
261
|
end
|
data/lib/axr/stars_builder.rb
CHANGED
@@ -30,7 +30,6 @@ module AjaxfulRating # :nodoc:
|
|
30
30
|
:wrap => true,
|
31
31
|
:small => false,
|
32
32
|
:show_user_rating => false,
|
33
|
-
:disable_remote => false,
|
34
33
|
:force_static => false,
|
35
34
|
:current_user => (@template.current_user if @template.respond_to?(:current_user))
|
36
35
|
}.merge(options)
|
@@ -38,7 +37,7 @@ module AjaxfulRating # :nodoc:
|
|
38
37
|
@options[:small] = @options[:small].to_s == 'true'
|
39
38
|
@options[:show_user_rating] = @options[:show_user_rating].to_s == 'true'
|
40
39
|
@options[:wrap] = @options[:wrap].to_s == 'true'
|
41
|
-
|
40
|
+
|
42
41
|
@remote_options = {
|
43
42
|
:url => nil,
|
44
43
|
:method => :post
|
@@ -50,7 +49,7 @@ module AjaxfulRating # :nodoc:
|
|
50
49
|
if @template.respond_to?(url)
|
51
50
|
@remote_options[:url] = @template.send(url, rateable)
|
52
51
|
else
|
53
|
-
raise(MissingRateRoute)
|
52
|
+
raise(Errors::MissingRateRoute)
|
54
53
|
end
|
55
54
|
end
|
56
55
|
end
|
@@ -65,31 +64,29 @@ module AjaxfulRating # :nodoc:
|
|
65
64
|
|
66
65
|
stars << @template.content_tag(:li, i18n(:current), :class => "show-value",
|
67
66
|
:style => "width: #{width}%")
|
68
|
-
stars += (1..rateable.class.max_stars
|
69
|
-
star_tag(i
|
67
|
+
stars += (1..rateable.class.max_stars).map do |i|
|
68
|
+
star_tag(i)
|
70
69
|
end
|
71
|
-
|
72
|
-
stars = "".respond_to?(:html_safe) ? stars.join.html_safe : stars.join
|
73
|
-
@template.content_tag(:ul, stars, :class => "ajaxful-rating#{' small' if options[:small]}")
|
70
|
+
@template.content_tag(:ul, stars.join.html_safe, :class => "ajaxful-rating#{' small' if options[:small]}")
|
74
71
|
end
|
75
72
|
|
76
73
|
def star_tag(value)
|
77
74
|
already_rated = rateable.rated_by?(user, options[:dimension]) if user
|
78
|
-
css_class = "stars
|
75
|
+
css_class = "stars-#{value}"
|
79
76
|
@css_builder.rule(".ajaxful-rating .#{css_class}", {
|
80
77
|
:width => "#{(value / rateable.class.max_stars.to_f) * 100}%",
|
81
|
-
:zIndex =>
|
78
|
+
:zIndex => (rateable.class.max_stars + 2 - value).to_s
|
82
79
|
})
|
80
|
+
|
83
81
|
@template.content_tag(:li) do
|
84
|
-
if !options[:force_static] && (user && options[:current_user] == user &&
|
85
|
-
(!already_rated || rateable.axr_config[:allow_update]))
|
82
|
+
if !options[:force_static] && (user && options[:current_user] == user && (!already_rated || rateable.axr_config[:allow_update]))
|
86
83
|
link_star_tag(value, css_class)
|
87
84
|
else
|
88
85
|
@template.content_tag(:span, show_value, :class => css_class, :title => i18n(:current))
|
89
86
|
end
|
90
87
|
end
|
91
88
|
end
|
92
|
-
|
89
|
+
|
93
90
|
def link_star_tag(value, css_class)
|
94
91
|
query = {
|
95
92
|
:stars => value,
|
@@ -97,24 +94,21 @@ module AjaxfulRating # :nodoc:
|
|
97
94
|
:small => options[:small],
|
98
95
|
:show_user_rating => options[:show_user_rating]
|
99
96
|
}.to_query
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
:
|
106
|
-
:with => "'#{query}'"
|
97
|
+
|
98
|
+
options = {
|
99
|
+
:class => css_class,
|
100
|
+
:title => i18n(:hover, value),
|
101
|
+
:method => remote_options[:method] || :post,
|
102
|
+
:remote => true
|
107
103
|
}
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
@template.link_to_remote(value, remote_options.merge(config))
|
113
|
-
end
|
104
|
+
|
105
|
+
href = "#{remote_options[:url]}?#{query}"
|
106
|
+
|
107
|
+
@template.link_to(value, href, options)
|
114
108
|
end
|
115
|
-
|
109
|
+
|
116
110
|
def wrapper_tag
|
117
|
-
@template.content_tag(:div, ratings_tag, :class => "ajaxful-rating-wrapper
|
111
|
+
@template.content_tag(:div, ratings_tag, :class => "ajaxful-rating-wrapper",
|
118
112
|
:id => rateable.wrapper_dom_id(options))
|
119
113
|
end
|
120
114
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rails/generators/migration'
|
2
|
+
class AjaxfulRatingGenerator < Rails::Generators::NamedBase
|
3
|
+
include Rails::Generators::Migration
|
4
|
+
|
5
|
+
def self.source_root
|
6
|
+
@_axr_root ||= File.expand_path("../templates", __FILE__)
|
7
|
+
end
|
8
|
+
|
9
|
+
def create_model_files
|
10
|
+
model_file = File.join('app/models', "#{file_path}.rb")
|
11
|
+
raise "User model (#{model_file}) must exits." unless File.exists?(model_file)
|
12
|
+
class_collisions 'Rate'
|
13
|
+
template 'model.rb', File.join('app/models', class_path, "rate.rb")
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_migration
|
17
|
+
migration_template 'migration.rb', "db/migrate/create_rates.rb"
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_layout
|
21
|
+
copy_file 'images/star.png', 'public/images/ajaxful_rating/star.png'
|
22
|
+
copy_file 'images/star_small.png', 'public/images/ajaxful_rating/star_small.png'
|
23
|
+
copy_file 'style.css', 'public/stylesheets/ajaxful_rating.css'
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
# FIXME: Should be proxied to ActiveRecord::Generators::Base
|
29
|
+
# Implement the required interface for Rails::Generators::Migration.
|
30
|
+
def self.next_migration_number(dirname) #:nodoc:
|
31
|
+
if ActiveRecord::Base.timestamped_migrations
|
32
|
+
Time.now.utc.strftime("%Y%m%d%H%M%S")
|
33
|
+
else
|
34
|
+
"%.3d" % (current_migration_number(dirname) + 1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,41 @@
|
|
1
|
+
rate_audi_denis:
|
2
|
+
rater_id: 1 # Denis
|
3
|
+
rateable_id: 1 # Audi
|
4
|
+
rateable_type: Car
|
5
|
+
stars: 6
|
6
|
+
dimension:
|
7
|
+
|
8
|
+
rate_audi_denis_speed:
|
9
|
+
rater_id: 1 # Denis
|
10
|
+
rateable_id: 1 # Audi
|
11
|
+
rateable_type: Car
|
12
|
+
stars: 7
|
13
|
+
dimension: speed
|
14
|
+
|
15
|
+
rate_audi_denis_reliability:
|
16
|
+
rater_id: 1 # Denis
|
17
|
+
rateable_id: 1 # Audi
|
18
|
+
rateable_type: Car
|
19
|
+
stars: 5
|
20
|
+
dimension: reliability
|
21
|
+
|
22
|
+
rate_audi_john:
|
23
|
+
rater_id: 2 # John
|
24
|
+
rateable_id: 1 # Audi
|
25
|
+
rateable_type: Car
|
26
|
+
stars: 8
|
27
|
+
dimension:
|
28
|
+
|
29
|
+
rate_audi_john_speed:
|
30
|
+
rater_id: 2 # John
|
31
|
+
rateable_id: 1 # Audi
|
32
|
+
rateable_type: Car
|
33
|
+
stars: 8
|
34
|
+
dimension: speed
|
35
|
+
|
36
|
+
rate_audi_john_reliability:
|
37
|
+
rater_id: 2 # John
|
38
|
+
rateable_id: 2 # Audi
|
39
|
+
rateable_type: Car
|
40
|
+
stars: 5
|
41
|
+
dimension: reliability
|
@@ -0,0 +1,22 @@
|
|
1
|
+
ActiveRecord::Schema.define do
|
2
|
+
create_table "cars", :force => true do |t|
|
3
|
+
t.string "name"
|
4
|
+
t.datetime "created_at"
|
5
|
+
t.datetime "updated_at"
|
6
|
+
end
|
7
|
+
|
8
|
+
create_table "rates", :force => true do |t|
|
9
|
+
t.integer "rater_id"
|
10
|
+
t.integer "rateable_id"
|
11
|
+
t.string "rateable_type"
|
12
|
+
t.integer "stars", :null => false
|
13
|
+
t.string "dimension"
|
14
|
+
end
|
15
|
+
|
16
|
+
add_index "rates", ["rateable_id", "rateable_type"], :name => "index_rates_on_rateable_id_and_rateable_type"
|
17
|
+
add_index "rates", ["rater_id"], :name => "index_rates_on_rater_id"
|
18
|
+
|
19
|
+
create_table "users", :force => true do |t|
|
20
|
+
t.string "name"
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../test_helper"
|
2
|
+
|
3
|
+
class ModelTest < ActiveSupport::TestCase
|
4
|
+
include ActiveRecord::TestFixtures
|
5
|
+
|
6
|
+
def setup
|
7
|
+
@audi = Car.find_by_name("Audi")
|
8
|
+
@infinity = Car.find_by_name("Infinity")
|
9
|
+
|
10
|
+
@denis = User.find_by_name("Denis Odorcic")
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_find_statement
|
14
|
+
assert_equal Car.find_statement(:stars, 7).size, 0
|
15
|
+
assert_equal Car.find_statement(:stars, 8).size, 1
|
16
|
+
assert_equal Car.find_statement(:stars, 8, :speed).size, 1
|
17
|
+
assert_equal Car.find_statement(:stars, 5, :reliability).size, 2
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_rate_higher_than_max_stars
|
21
|
+
assert_equal Car.max_stars, 10
|
22
|
+
assert !@audi.rate(15, User.first)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_already_rated_error
|
26
|
+
Car.axr_config[:allow_update] = false
|
27
|
+
assert @audi.rated_by?(@denis)
|
28
|
+
assert_raise AjaxfulRating::Errors::AlreadyRatedError do
|
29
|
+
@audi.rate(4, @denis)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_already_rated_and_allowed_to_update
|
34
|
+
assert @audi.rated_by?(@denis)
|
35
|
+
stars = @audi.rate_by(@denis).stars
|
36
|
+
|
37
|
+
assert_no_difference 'Rate.count' do
|
38
|
+
@audi.rate(1, @denis)
|
39
|
+
end
|
40
|
+
assert_equal @audi.rate_by(@denis).stars, 1
|
41
|
+
assert_not_equal @audi.rate_by(@denis).stars, stars
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_new_rating
|
45
|
+
assert_difference 'Rate.count', 1 do
|
46
|
+
@audi.rate(5, @denis, :price)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_raters
|
51
|
+
assert_equal @audi.raters.size, 2
|
52
|
+
assert_difference 'Rate.count', 1 do
|
53
|
+
@audi.rate(3, User.create(:name => "Bob"))
|
54
|
+
end
|
55
|
+
assert_equal @audi.raters.size, 3
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
$:.unshift File.dirname(__FILE__) + '/../lib'
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'test/unit'
|
5
|
+
require 'active_record'
|
6
|
+
require 'active_record/fixtures'
|
7
|
+
require 'action_controller'
|
8
|
+
require 'ajaxful_rating'
|
9
|
+
|
10
|
+
AXR_FIXTURES_PATH = File.join(File.dirname(__FILE__), 'fixtures')
|
11
|
+
|
12
|
+
# For transactional fixtures to work in tests, configurations in AR::Base has to be set to something
|
13
|
+
ActiveRecord::Base.configurations = {:epic => 'fail'}
|
14
|
+
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
15
|
+
|
16
|
+
# Add fixtures to load path
|
17
|
+
dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies
|
18
|
+
dep.load_paths.unshift AXR_FIXTURES_PATH
|
19
|
+
|
20
|
+
ActiveRecord::Base.silence do
|
21
|
+
ActiveRecord::Migration.verbose = false
|
22
|
+
load File.join(AXR_FIXTURES_PATH, 'schema.rb')
|
23
|
+
end
|
24
|
+
|
25
|
+
Fixtures.create_fixtures(AXR_FIXTURES_PATH, ActiveRecord::Base.connection.tables)
|
metadata
CHANGED
@@ -1,54 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ajaxful_rating
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
4
|
+
prerelease: true
|
6
5
|
segments:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
-
|
11
|
-
version:
|
6
|
+
- 3
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- beta1
|
10
|
+
version: 3.0.0.beta1
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- Edgar J. Suarez
|
14
|
+
- Denis Odorcic
|
15
15
|
autorequire:
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date:
|
19
|
+
date: 2010-05-03 00:00:00 -05:00
|
20
|
+
default_executable:
|
20
21
|
dependencies: []
|
21
22
|
|
22
23
|
description: Provides a simple way to add rating functionality to your application.
|
23
|
-
email:
|
24
|
+
email:
|
25
|
+
- edgar.js@gmail.com
|
26
|
+
- denis.odorcic@gmail.com
|
24
27
|
executables: []
|
25
28
|
|
26
29
|
extensions: []
|
27
30
|
|
28
31
|
extra_rdoc_files:
|
29
|
-
-
|
32
|
+
- ChangeLog
|
30
33
|
- README.textile
|
31
|
-
- lib/ajaxful_rating.rb
|
32
|
-
- lib/axr/css_builder.rb
|
33
|
-
- lib/axr/errors.rb
|
34
|
-
- lib/axr/helpers.rb
|
35
|
-
- lib/axr/locale.rb
|
36
|
-
- lib/axr/model.rb
|
37
|
-
- lib/axr/stars_builder.rb
|
38
34
|
files:
|
35
|
+
- .gitignore
|
39
36
|
- CHANGELOG
|
40
37
|
- Manifest
|
41
38
|
- README.textile
|
42
39
|
- Rakefile
|
43
40
|
- ajaxful_rating.gemspec
|
44
|
-
- generators/ajaxful_rating/USAGE
|
45
|
-
- generators/ajaxful_rating/ajaxful_rating_generator.rb
|
46
|
-
- generators/ajaxful_rating/templates/images/star.png
|
47
|
-
- generators/ajaxful_rating/templates/images/star_small.png
|
48
|
-
- generators/ajaxful_rating/templates/migration.rb
|
49
|
-
- generators/ajaxful_rating/templates/model.rb
|
50
|
-
- generators/ajaxful_rating/templates/style.css
|
51
|
-
- init.rb
|
52
41
|
- lib/ajaxful_rating.rb
|
53
42
|
- lib/axr/css_builder.rb
|
54
43
|
- lib/axr/errors.rb
|
@@ -56,44 +45,59 @@ files:
|
|
56
45
|
- lib/axr/locale.rb
|
57
46
|
- lib/axr/model.rb
|
58
47
|
- lib/axr/stars_builder.rb
|
48
|
+
- lib/generators/ajaxful_rating/USAGE
|
49
|
+
- lib/generators/ajaxful_rating/ajaxful_rating_generator.rb
|
50
|
+
- lib/generators/ajaxful_rating/templates/images/star.png
|
51
|
+
- lib/generators/ajaxful_rating/templates/images/star_small.png
|
52
|
+
- lib/generators/ajaxful_rating/templates/migration.rb
|
53
|
+
- lib/generators/ajaxful_rating/templates/model.rb
|
54
|
+
- lib/generators/ajaxful_rating/templates/style.css
|
55
|
+
- test/fixtures/car.rb
|
56
|
+
- test/fixtures/cars.yml
|
57
|
+
- test/fixtures/rate.rb
|
58
|
+
- test/fixtures/rates.yml
|
59
|
+
- test/fixtures/schema.rb
|
60
|
+
- test/fixtures/user.rb
|
61
|
+
- test/fixtures/users.yml
|
62
|
+
- test/lib/model_test.rb
|
63
|
+
- test/test_helper.rb
|
64
|
+
- ChangeLog
|
65
|
+
has_rdoc: true
|
59
66
|
homepage: http://github.com/edgarjs/ajaxful-rating
|
60
67
|
licenses: []
|
61
68
|
|
62
69
|
post_install_message:
|
63
70
|
rdoc_options:
|
64
|
-
- --
|
65
|
-
- --inline-source
|
66
|
-
- --title
|
67
|
-
- Ajaxful_rating
|
68
|
-
- --main
|
69
|
-
- README.textile
|
71
|
+
- --charset=UTF-8
|
70
72
|
require_paths:
|
71
73
|
- lib
|
72
74
|
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
75
|
requirements:
|
75
76
|
- - ">="
|
76
77
|
- !ruby/object:Gem::Version
|
77
|
-
hash: 3
|
78
78
|
segments:
|
79
79
|
- 0
|
80
80
|
version: "0"
|
81
81
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
82
|
requirements:
|
84
|
-
- - "
|
83
|
+
- - ">"
|
85
84
|
- !ruby/object:Gem::Version
|
86
|
-
hash: 11
|
87
85
|
segments:
|
88
86
|
- 1
|
89
|
-
-
|
90
|
-
|
87
|
+
- 3
|
88
|
+
- 1
|
89
|
+
version: 1.3.1
|
91
90
|
requirements: []
|
92
91
|
|
93
|
-
rubyforge_project:
|
94
|
-
rubygems_version: 1.
|
92
|
+
rubyforge_project:
|
93
|
+
rubygems_version: 1.3.6
|
95
94
|
signing_key:
|
96
95
|
specification_version: 3
|
97
96
|
summary: Provides a simple way to add rating functionality to your application.
|
98
|
-
test_files:
|
99
|
-
|
97
|
+
test_files:
|
98
|
+
- test/fixtures/car.rb
|
99
|
+
- test/fixtures/rate.rb
|
100
|
+
- test/fixtures/schema.rb
|
101
|
+
- test/fixtures/user.rb
|
102
|
+
- test/lib/model_test.rb
|
103
|
+
- test/test_helper.rb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class AjaxfulRatingGenerator < Rails::Generator::NamedBase
|
2
|
-
def initialize(runtime_args, runtime_options = {})
|
3
|
-
super
|
4
|
-
|
5
|
-
# if there's no user model
|
6
|
-
model_file = File.join('app/models', "#{file_path}.rb")
|
7
|
-
raise "User model (#{model_file}) must exits." unless File.exists?(model_file)
|
8
|
-
end
|
9
|
-
|
10
|
-
def manifest
|
11
|
-
record do |m|
|
12
|
-
m.class_collisions 'Rate'
|
13
|
-
m.template 'model.rb', File.join('app/models', 'rate.rb')
|
14
|
-
m.migration_template 'migration.rb', 'db/migrate',
|
15
|
-
:migration_file_name => 'create_rates'
|
16
|
-
|
17
|
-
# style
|
18
|
-
m.directory 'public/images/ajaxful_rating'
|
19
|
-
m.file 'images/star.png', 'public/images/ajaxful_rating/star.png'
|
20
|
-
m.file 'images/star_small.png', 'public/images/ajaxful_rating/star_small.png'
|
21
|
-
m.file 'style.css', 'public/stylesheets/ajaxful_rating.css'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
protected
|
26
|
-
|
27
|
-
def banner
|
28
|
-
"Usage: #{$0} ajaxful_rating UserModelName"
|
29
|
-
end
|
30
|
-
end
|
data/init.rb
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
puts "------------------------------------------"
|
2
|
-
puts "IMPORTANT: AjaxfulRating has been updated to v2.2.x and some options changed."\
|
3
|
-
"Please read the changelog at http://github.com/edgarjs/ajaxful-rating/blob/master/CHANGELOG"
|
4
|
-
puts "------------------------------------------"
|
5
|
-
|
6
|
-
require 'ajaxful_rating'
|