spree_reviews 0.30.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +43 -0
- data/Rakefile +120 -0
- data/TODO +8 -0
- data/app/controllers/admin/feedback_reviews_controller.rb +16 -0
- data/app/controllers/admin/review_settings_controller.rb +13 -0
- data/app/controllers/admin/reviews_controller.rb +36 -0
- data/app/controllers/feedback_reviews_controller.rb +17 -0
- data/app/controllers/reviews_controller.rb +30 -0
- data/app/helpers/admin/feedback_reviews_helper.rb +2 -0
- data/app/helpers/feedback_reviews_helper.rb +2 -0
- data/app/helpers/reviews_helper.rb +17 -0
- data/app/models/feedback_review.rb +10 -0
- data/app/models/product_decorator.rb +14 -0
- data/app/models/rating.rb +20 -0
- data/app/models/review.rb +20 -0
- data/app/models/reviews_configuration.rb +7 -0
- data/app/views/admin/feedback_reviews/index.html.erb +21 -0
- data/app/views/admin/review_settings/edit.html.erb +18 -0
- data/app/views/admin/review_settings/show.html.erb +18 -0
- data/app/views/admin/reviews/_form.html.erb +10 -0
- data/app/views/admin/reviews/edit.html.erb +17 -0
- data/app/views/admin/reviews/index.html.erb +45 -0
- data/app/views/feedback_reviews/_form.html.erb +14 -0
- data/app/views/feedback_reviews/_summary.html.erb +6 -0
- data/app/views/feedback_reviews/create.js.erb +7 -0
- data/app/views/reviews/_fine_print.html.erb +7 -0
- data/app/views/reviews/_stars.html.erb +21 -0
- data/app/views/reviews/_stars0.html.erb +1 -0
- data/app/views/reviews/_stars1.html.erb +1 -0
- data/app/views/reviews/_stars2.html.erb +1 -0
- data/app/views/reviews/_stars3.html.erb +1 -0
- data/app/views/reviews/_stars4.html.erb +1 -0
- data/app/views/reviews/_stars5.html.erb +1 -0
- data/app/views/reviews/index.html.erb +2 -0
- data/app/views/reviews/new.html.erb +47 -0
- data/app/views/reviews/submissionguidelines.html.erb +6 -0
- data/app/views/reviews/terms.html.erb +6 -0
- data/app/views/shared/_rating.html.erb +16 -0
- data/app/views/shared/_review.html.erb +14 -0
- data/app/views/shared/_review_summary.html.erb +13 -0
- data/app/views/shared/_reviews.html.erb +9 -0
- data/app/views/shared/_shortrating.html.erb +11 -0
- data/config/locales/de.yml +40 -0
- data/config/locales/en-GB.yml +23 -0
- data/config/locales/en.yml +53 -0
- data/config/locales/fr-FR.yml +19 -0
- data/config/locales/ru.yml +47 -0
- data/config/routes.rb +22 -0
- data/db/migrate/20081020220700_create_ratings.rb +14 -0
- data/db/migrate/20081020220724_create_reviews.rb +18 -0
- data/db/migrate/20101222083309_create_feedback_reviews.rb +17 -0
- data/db/sample/ratings.yml +16 -0
- data/db/sample/reviews.yml +59 -0
- data/lib/spree/reviews/config.rb +11 -0
- data/lib/spree_reviews.rb +17 -0
- data/lib/spree_reviews_hook.rb +17 -0
- data/lib/tasks/reviews_extension_tasks.rake +25 -0
- data/public/images/delete.gif +0 -0
- data/public/images/star.gif +0 -0
- data/public/javascripts/jquery.rating.js +11 -0
- data/public/stylesheets/reviews.css +44 -0
- data/spec/controllers/reviews_controller_spec.rb +15 -0
- data/spec/helpers/reviews_helper_spec.rb +11 -0
- data/spec/models/ratings_spec.rb +11 -0
- data/spec/models/reviews_spec.rb +11 -0
- data/spec/spec.opts +6 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/views/reviews/submit_view_spec.rb +12 -0
- data/spree_reviews.gemspec +22 -0
- metadata +145 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
fr-FR:
|
2
|
+
write_your_own_review: "Ecrivez un commentaire"
|
3
|
+
review_management: "Gestion des commentaires"
|
4
|
+
review_management_description: "Gestion des commentaires envoyés par les utilisateurs"
|
5
|
+
back_reviews: "Revenir aux commentaires"
|
6
|
+
are_you_sure_review: "Êtes-vous sûr de vouloir supprimer ce commentaire ?"
|
7
|
+
info_approve_review: "Commentaire approuvé"
|
8
|
+
error_approve_review: "Erreur lors de la validation du commentaire"
|
9
|
+
approve: "Approuvé"
|
10
|
+
leave_us_a_review: "Donnez votre avis sur "
|
11
|
+
review_successfully_sumbitted: "Avis soumis à modération"
|
12
|
+
rating: "Note"
|
13
|
+
submit_your_review: "Valider votre commentaire"
|
14
|
+
reviews:
|
15
|
+
review_settings: Review Settings
|
16
|
+
manage_review_settings: Control the display of reviews
|
17
|
+
preview_size: Size of the review snippets
|
18
|
+
include_unapproved: Include unapproved reviews in listings
|
19
|
+
|
@@ -0,0 +1,47 @@
|
|
1
|
+
ru:
|
2
|
+
write_your_own_review: Оставьте свой отзыв
|
3
|
+
review_management: Управление отзывами
|
4
|
+
review_management_description: Управляйте отзывами покупателей
|
5
|
+
back_reviews: Назад к отзывам
|
6
|
+
are_you_sure_review: Вы уверены, что хотите удалить отзыв?
|
7
|
+
info_approve_review: Отзыв одобрен
|
8
|
+
error_approve_review: Ошибка при одобрении отзыва
|
9
|
+
approve: Одобрить
|
10
|
+
leave_us_a_review_for: Пожалуйста, оставьте отзыв и оценку для
|
11
|
+
review_successfully_submitted: Ваш отзыв был успешно отправлен
|
12
|
+
rating: Оценка
|
13
|
+
submit_your_review: Оставить отзыв
|
14
|
+
review_content: Содержание
|
15
|
+
review_title: Заголовок
|
16
|
+
reviews:
|
17
|
+
review_settings: Настройки отзывов покупателей
|
18
|
+
manage_review_settings: Control the display of reviews
|
19
|
+
preview_size: Size of the review snippets
|
20
|
+
include_unapproved: Включать неодобренные пока отзывы в список
|
21
|
+
your_name: Ваше имя
|
22
|
+
your_location: Город
|
23
|
+
average_customer_rating: Average rating
|
24
|
+
the_fine_print: The fine print
|
25
|
+
terms_text: All opinions must comply with our terms and conditions
|
26
|
+
approved_text: Unlocked comments will be published within 1-2 business days.
|
27
|
+
guideline_text: We reserve the right not to post opinions unrelated to your product
|
28
|
+
"terms and conditions": Terms & Conditions
|
29
|
+
"review guidelines": Review Guidelines
|
30
|
+
date_: Date
|
31
|
+
for: for
|
32
|
+
Unapproved_reviews: Unapproved
|
33
|
+
Approved_reviews: Approved
|
34
|
+
from: from
|
35
|
+
by: by
|
36
|
+
submitted_on: Submitted on
|
37
|
+
based_upon: "на основе"
|
38
|
+
review:
|
39
|
+
zero: "0 озывов"
|
40
|
+
one: "1 отзыв"
|
41
|
+
few: "%{count} отзыва"
|
42
|
+
other: "%{count} отзывов"
|
43
|
+
|
44
|
+
feedback: Feedback
|
45
|
+
stars: Stars
|
46
|
+
feedback_review_for: "Review: '%{review}'"
|
47
|
+
|
data/config/routes.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Rails.application.routes.draw do
|
2
|
+
namespace :admin do
|
3
|
+
resources :feedback_reviews
|
4
|
+
resources :reviews do
|
5
|
+
member do
|
6
|
+
get :approve
|
7
|
+
end
|
8
|
+
resources :feedback_reviews
|
9
|
+
end
|
10
|
+
resource :review_settings
|
11
|
+
end
|
12
|
+
|
13
|
+
resources :products do
|
14
|
+
resources :reviews do
|
15
|
+
collection do
|
16
|
+
get :terms
|
17
|
+
get "submissionguidelines"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
match "/reviews/:review_id/feedback(.:format)" => "feedback_reviews#create", :via => :post, :as => "feedback_review"
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class CreateReviews < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :reviews do |t|
|
4
|
+
t.integer :product_id
|
5
|
+
t.string :name
|
6
|
+
t.string :location
|
7
|
+
t.integer :rating
|
8
|
+
t.text :title
|
9
|
+
t.text :review
|
10
|
+
t.boolean :approved, :default => false
|
11
|
+
t.timestamps
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.down
|
16
|
+
drop_table :reviews
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class CreateFeedbackReviews < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :feedback_reviews do |t|
|
4
|
+
t.integer :user_id
|
5
|
+
t.integer :review_id, :null => false
|
6
|
+
t.integer :rating, :default => 0
|
7
|
+
t.text :comment
|
8
|
+
t.timestamps
|
9
|
+
end
|
10
|
+
add_index :feedback_reviews, :review_id
|
11
|
+
add_index :feedback_reviews, :user_id
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
drop_table :feedback_reviews
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<%
|
2
|
+
require 'faker'
|
3
|
+
%>
|
4
|
+
r1:
|
5
|
+
product: ror_tote
|
6
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
7
|
+
location: here
|
8
|
+
rating: 4
|
9
|
+
title: "more uses for this item"
|
10
|
+
review: <%= Faker::Lorem.paragraph %>
|
11
|
+
approved: true
|
12
|
+
r2:
|
13
|
+
product: ror_tote
|
14
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
15
|
+
location: here
|
16
|
+
rating: 3
|
17
|
+
title: "further comments"
|
18
|
+
review: <%= Faker::Lorem.paragraph %>
|
19
|
+
approved: false
|
20
|
+
r3:
|
21
|
+
product: ror_ringer
|
22
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
23
|
+
location: here
|
24
|
+
rating: 4
|
25
|
+
title: "essential wear"
|
26
|
+
review: <%= Faker::Lorem.paragraph %>
|
27
|
+
approved: false
|
28
|
+
r4:
|
29
|
+
product: apache_baseball_jersey
|
30
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
31
|
+
location: here
|
32
|
+
rating: 2
|
33
|
+
title: "not impressed"
|
34
|
+
review: <%= Faker::Lorem.paragraph %>
|
35
|
+
approved: true
|
36
|
+
r5:
|
37
|
+
product: ror_ringer
|
38
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
39
|
+
location: an office
|
40
|
+
rating: 5
|
41
|
+
title: "I have one for every day of the week"
|
42
|
+
review: <%= Faker::Lorem.paragraph %>
|
43
|
+
approved: true
|
44
|
+
r6:
|
45
|
+
product: ror_ringer
|
46
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
47
|
+
location: here
|
48
|
+
rating: 4
|
49
|
+
title: "cooler than my toga"
|
50
|
+
review: <%= Faker::Lorem.paragraph %>
|
51
|
+
approved: true
|
52
|
+
r7:
|
53
|
+
product: ror_ringer
|
54
|
+
name: <%= Faker::Name.first_name %> <%= Faker::Name.last_name %>
|
55
|
+
location: emerald city
|
56
|
+
rating: 2
|
57
|
+
title: "my other half didn't like it"
|
58
|
+
review: <%= Faker::Lorem.paragraph %>
|
59
|
+
approved: false
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Spree::Reviews
|
2
|
+
class Config < Spree::Config
|
3
|
+
class << self
|
4
|
+
def instance
|
5
|
+
return nil unless ActiveRecord::Base.connection.tables.include?('configurations')
|
6
|
+
ReviewsConfiguration.find_or_create_by_name("Reviews configuration")
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spree_core'
|
2
|
+
require 'spree_reviews_hook'
|
3
|
+
|
4
|
+
module SpreeReviews
|
5
|
+
class Engine < Rails::Engine
|
6
|
+
|
7
|
+
config.autoload_paths += %W(#{config.root}/lib)
|
8
|
+
|
9
|
+
def self.activate
|
10
|
+
Dir.glob(File.join(File.dirname(__FILE__), "../app/**/*_decorator*.rb")) do |c|
|
11
|
+
Rails.env.production? ? require(c) : load(c)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
config.to_prepare &method(:activate).to_proc
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
class SpreeReviewsHooks < Spree::ThemeSupport::HookListener
|
2
|
+
insert_after :product_properties, 'shared/reviews'
|
3
|
+
insert_after :inside_head do
|
4
|
+
%(<%= stylesheet_link_tag('reviews.css') %>)
|
5
|
+
end
|
6
|
+
|
7
|
+
insert_after :admin_product_sub_tabs do
|
8
|
+
%(
|
9
|
+
<%= tab(:reviews, :label => 'review_management') %>
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
insert_after :admin_configurations_menu do
|
14
|
+
%(<%= configurations_menu_item(t('reviews.review_settings'), admin_review_settings_path, t('reviews.manage_review_settings')) %>)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
namespace :spree_reviews do
|
2
|
+
desc "Copies all migrations and assets (NOTE: This will be obsolete with Rails 3.1)"
|
3
|
+
task :install do
|
4
|
+
Rake::Task['spree_reviews:install:migrations'].invoke
|
5
|
+
Rake::Task['spree_reviews:install:assets'].invoke
|
6
|
+
end
|
7
|
+
|
8
|
+
namespace :install do
|
9
|
+
desc "Copies all migrations (NOTE: This will be obsolete with Rails 3.1)"
|
10
|
+
task :migrations do
|
11
|
+
source = File.join(File.dirname(__FILE__), '..', '..', 'db')
|
12
|
+
destination = File.join(Rails.root, 'db')
|
13
|
+
puts "INFO: Mirroring assets from #{source} to #{destination}"
|
14
|
+
Spree::FileUtilz.mirror_files(source, destination)
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "Copies all assets (NOTE: This will be obsolete with Rails 3.1)"
|
18
|
+
task :assets do
|
19
|
+
source = File.join(File.dirname(__FILE__), '..', '..', 'public')
|
20
|
+
destination = File.join(Rails.root, 'public')
|
21
|
+
puts "INFO: Mirroring assets from #{source} to #{destination}"
|
22
|
+
Spree::FileUtilz.mirror_files(source, destination)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
Binary file
|
Binary file
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/*
|
2
|
+
### jQuery Star Rating Plugin v3.12 - 2009-04-16 ###
|
3
|
+
* Home: http://www.fyneworks.com/jquery/star-rating/
|
4
|
+
* Code: http://code.google.com/p/jquery-star-rating-plugin/
|
5
|
+
*
|
6
|
+
* Dual licensed under the MIT and GPL licenses:
|
7
|
+
* http://www.opensource.org/licenses/mit-license.php
|
8
|
+
* http://www.gnu.org/licenses/gpl.html
|
9
|
+
###
|
10
|
+
*/
|
11
|
+
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}(';5(1O.1t)(7($){5($.29.1x)1I{1m.23("1u",P,z)}1F(e){}$.p.4=7(j){5(3.K==0)l 3;5(E J[0]==\'1j\'){5(3.K>1){8 k=J;l 3.W(7(){$.p.4.H($(3),k)})};$.p.4[J[0]].H(3,$.1T(J).21(1)||[]);l 3};8 j=$.10({},$.p.4.18,j||{});3.1v(\'.9-4-1l\').n(\'9-4-1l\').W(7(){8 a=(3.1J||\'1K-4\').1L(/\\[|\\]+/g,"1S");8 b=$(3.1U||1m.1X);8 c=$(3);8 d=b.6(\'4\')||{y:0};8 e=d[a];8 f;5(e)f=e.6(\'4\');5(e&&f){f.y++}B{f=$.10({},j||{},($.1k?c.1k():($.1H?c.6():s))||{},{y:0,C:[],u:[]});f.t=d.y++;e=$(\'<1M 12="9-4-1Q"/>\');c.1R(e);e.n(\'4-T-13-S\');5(c.R(\'Q\'))f.m=z;e.1a(f.A=$(\'<O 12="4-A"><a 14="\'+f.A+\'">\'+f.15+\'</a></O>\').1d(7(){$(3).4(\'N\');$(3).n(\'9-4-M\')}).1b(7(){$(3).4(\'v\');$(3).D(\'9-4-M\')}).1h(7(){$(3).4(\'w\')}).6(\'4\',f))};8 g=$(\'<O 12="9-4 q-\'+f.t+\'"><a 14="\'+(3.14||3.1p)+\'">\'+3.1p+\'</a></O>\');e.1a(g);5(3.U)g.R(\'U\',3.U);5(3.17)g.n(3.17);5(f.1V)f.x=2;5(E f.x==\'19\'&&f.x>0){8 h=($.p.11?g.11():0)||f.1c;8 i=(f.y%f.x),V=1y.1z(h/f.x);g.11(V).1A(\'a\').1B({\'1C-1D\':\'-\'+(i*V)+\'1E\'})};5(f.m)g.n(\'9-4-1e\');B g.n(\'9-4-1G\').1d(7(){$(3).4(\'1f\');$(3).4(\'G\')}).1b(7(){$(3).4(\'v\');$(3).4(\'F\')}).1h(7(){$(3).4(\'w\')});5(3.L)f.o=g;c.1i();c.1N(7(){$(3).4(\'w\')});g.6(\'4.r\',c.6(\'4.9\',g));f.C[f.C.K]=g[0];f.u[f.u.K]=c[0];f.q=d[a]=e;f.1P=b;c.6(\'4\',f);e.6(\'4\',f);g.6(\'4\',f);b.6(\'4\',d)});$(\'.4-T-13-S\').4(\'v\').D(\'4-T-13-S\');l 3};$.10($.p.4,{G:7(){8 a=3.6(\'4\');5(!a)l 3;5(!a.G)l 3;8 b=$(3).6(\'4.r\')||$(3.Z==\'X\'?3:s);5(a.G)a.G.H(b[0],[b.I(),$(\'a\',b.6(\'4.9\'))[0]])},F:7(){8 a=3.6(\'4\');5(!a)l 3;5(!a.F)l 3;8 b=$(3).6(\'4.r\')||$(3.Z==\'X\'?3:s);5(a.F)a.F.H(b[0],[b.I(),$(\'a\',b.6(\'4.9\'))[0]])},1f:7(){8 a=3.6(\'4\');5(!a)l 3;5(a.m)l;3.4(\'N\');3.1n().1o().Y(\'.q-\'+a.t).n(\'9-4-M\')},N:7(){8 a=3.6(\'4\');5(!a)l 3;5(a.m)l;a.q.1W().Y(\'.q-\'+a.t).D(\'9-4-1q\').D(\'9-4-M\')},v:7(){8 a=3.6(\'4\');5(!a)l 3;3.4(\'N\');5(a.o){a.o.6(\'4.r\').R(\'L\',\'L\');a.o.1n().1o().Y(\'.q-\'+a.t).n(\'9-4-1q\')}B $(a.u).1r(\'L\');a.A[a.m||a.1Y?\'1i\':\'1Z\']();3.20()[a.m?\'n\':\'D\'](\'9-4-1e\')},w:7(a){8 b=3.6(\'4\');5(!b)l 3;5(b.m)l;b.o=s;5(E a!=\'1s\'){5(E a==\'19\')l $(b.C[a]).4(\'w\');5(E a==\'1j\')$.W(b.C,7(){5($(3).6(\'4.r\').I()==a)$(3).4(\'w\')})}B b.o=3[0].Z==\'X\'?3.6(\'4.9\'):(3.22(\'.q-\'+b.t)?3:s);3.6(\'4\',b);3.4(\'v\');8 c=$(b.o?b.o.6(\'4.r\'):s);5(b.1g)b.1g.H(c[0],[c.I(),$(\'a\',b.o)[0]])},m:7(a,b){8 c=3.6(\'4\');5(!c)l 3;c.m=a||a==1s?z:P;5(b)$(c.u).R("Q","Q");B $(c.u).1r("Q");3.6(\'4\',c);3.4(\'v\')},24:7(){3.4(\'m\',z,z)},25:7(){3.4(\'m\',P,P)}});$.p.4.18={A:\'26 27\',15:\'\',x:0,1c:16};$(7(){$(\'r[28=1w].9\').4()})})(1t);',62,134,'|||this|rating|if|data|function|var|star||||||||||||return|readOnly|addClass|current|fn|rater|input|null|serial|inputs|draw|select|split|count|true|cancel|else|stars|removeClass|typeof|blur|focus|apply|val|arguments|length|checked|hover|drain|div|false|disabled|attr|drawn|to|id|spw|each|INPUT|filter|tagName|extend|width|class|be|title|cancelValue||className|options|number|append|mouseout|starWidth|mouseover|readonly|fill|callback|click|hide|string|metadata|applied|document|prevAll|andSelf|value|on|removeAttr|undefined|jQuery|BackgroundImageCache|not|radio|msie|Math|floor|find|css|margin|left|px|catch|live|meta|try|name|unnamed|replace|span|change|window|context|control|before|_|makeArray|form|half|children|body|required|show|siblings|slice|is|execCommand|disable|enable|Cancel|Rating|type|browser'.split('|'),0,{}))
|
@@ -0,0 +1,44 @@
|
|
1
|
+
#reviews div.header {
|
2
|
+
font-size: 12pt;
|
3
|
+
font-weight: bold;
|
4
|
+
border-bottom: 1px #2222aa dashed;
|
5
|
+
margin-top: 10px;
|
6
|
+
margin-bottom: 10px;
|
7
|
+
}
|
8
|
+
#reviews div.review {
|
9
|
+
border-bottom: 1px #2222aa dashed;
|
10
|
+
margin-bottom: 10px;
|
11
|
+
}
|
12
|
+
#reviews div.review span.title {
|
13
|
+
font-size: 11pt;
|
14
|
+
font-weight: bold;
|
15
|
+
}
|
16
|
+
#reviews div.review span.attribution {
|
17
|
+
font-size: 8pt;
|
18
|
+
}
|
19
|
+
|
20
|
+
.lit {
|
21
|
+
background-color: #aaaaaa;
|
22
|
+
color: #0000bb;
|
23
|
+
margin-right: 1px;
|
24
|
+
padding-left: 1px;
|
25
|
+
}
|
26
|
+
.unlit {
|
27
|
+
background-color: #aaaaaa;
|
28
|
+
color: #000000;
|
29
|
+
margin-right: 1px;
|
30
|
+
padding-left: 1px;
|
31
|
+
}
|
32
|
+
|
33
|
+
/* jQuery.Rating Plugin CSS - http://www.fyneworks.com/jquery/star-rating/ */
|
34
|
+
div.rating-cancel,div.star-rating{float:left;width:17px;height:15px;text-indent:-999em;cursor:pointer;display:block;background:transparent;overflow:hidden}
|
35
|
+
div.rating-cancel,div.rating-cancel a{background: transparent url('/images/delete.gif') no-repeat scroll 0 -16px;}
|
36
|
+
div.star-rating,div.star-rating a{background:url('/images/star.gif') no-repeat 0 0px}
|
37
|
+
div.rating-cancel a,div.star-rating a{display:block;width:16px;height:100%;background-position:0 0px;border:0}
|
38
|
+
div.star-rating-on a{background-position:0 -16px!important}
|
39
|
+
div.star-rating-hover a{background-position:0 -32px}
|
40
|
+
/* Read Only CSS */
|
41
|
+
div.star-rating-readonly a{cursor:default !important}
|
42
|
+
/* Partial Star CSS */
|
43
|
+
div.star-rating{background:transparent!important;overflow:hidden!important}
|
44
|
+
/* END jQuery.Rating Plugin CSS */
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe ReviewsController do
|
4
|
+
|
5
|
+
#Delete these examples and add some real ones
|
6
|
+
it "should use ReviewsController" do
|
7
|
+
controller.should be_an_instance_of(ReviewsController)
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
it "GET 'submit' should be successful" do
|
12
|
+
get 'submit'
|
13
|
+
response.should be_success
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe ReviewsHelper do
|
4
|
+
|
5
|
+
#Delete this example and add some real ones or delete this file
|
6
|
+
it "should include the ReviewsHelper" do
|
7
|
+
included_modules = self.metaclass.send :included_modules
|
8
|
+
included_modules.should include(ReviewsHelper)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
unless defined? SPREE_ROOT
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
case
|
4
|
+
when ENV["SPREE_ENV_FILE"]
|
5
|
+
require ENV["SPREE_ENV_FILE"]
|
6
|
+
when File.dirname(__FILE__) =~ %r{vendor/SPREE/vendor/extensions}
|
7
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../../../")}/config/environment"
|
8
|
+
else
|
9
|
+
require "#{File.expand_path(File.dirname(__FILE__) + "/../../../../")}/config/environment"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
require "#{SPREE_ROOT}/spec/spec_helper"
|
13
|
+
|
14
|
+
if File.directory?(File.dirname(__FILE__) + "/scenarios")
|
15
|
+
Scenario.load_paths.unshift File.dirname(__FILE__) + "/scenarios"
|
16
|
+
end
|
17
|
+
if File.directory?(File.dirname(__FILE__) + "/matchers")
|
18
|
+
Dir[File.dirname(__FILE__) + "/matchers/*.rb"].each {|file| require file }
|
19
|
+
end
|
20
|
+
|
21
|
+
Spec::Runner.configure do |config|
|
22
|
+
# config.use_transactional_fixtures = true
|
23
|
+
# config.use_instantiated_fixtures = false
|
24
|
+
# config.fixture_path = RAILS_ROOT + '/spec/fixtures'
|
25
|
+
|
26
|
+
# You can declare fixtures for each behaviour like this:
|
27
|
+
# describe "...." do
|
28
|
+
# fixtures :table_a, :table_b
|
29
|
+
#
|
30
|
+
# Alternatively, if you prefer to declare them only once, you can
|
31
|
+
# do so here, like so ...
|
32
|
+
#
|
33
|
+
# config.global_fixtures = :table_a, :table_b
|
34
|
+
#
|
35
|
+
# If you declare global fixtures, be aware that they will be declared
|
36
|
+
# for all of your examples, even those that don't use them.
|
37
|
+
end
|