spree-faq 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.
- checksums.yaml +7 -0
- data/.gitignore +13 -0
- data/.hound.yml +3 -0
- data/.rspec +1 -0
- data/.travis.yml +11 -0
- data/CONTRIBUTING.md +30 -0
- data/Gemfile +6 -0
- data/Guardfile +8 -0
- data/LICENSE.md +26 -0
- data/README.md +37 -0
- data/Rakefile +15 -0
- data/app/assets/javascripts/admin/spree_faq.js.coffee +23 -0
- data/app/assets/javascripts/store/spree_faq.js.coffee +10 -0
- data/app/assets/stylesheets/admin/spree_faq.css +3 -0
- data/app/assets/stylesheets/store/spree_faq.css.scss +18 -0
- data/app/controllers/spree/admin/question_categories_controller.rb +13 -0
- data/app/controllers/spree/faqs_controller.rb +13 -0
- data/app/models/spree/question.rb +7 -0
- data/app/models/spree/question_category.rb +9 -0
- data/app/overrides/add_faq_admin_tab.rb +5 -0
- data/app/views/spree/admin/question_categories/_question.html.erb +14 -0
- data/app/views/spree/admin/question_categories/edit.html.erb +38 -0
- data/app/views/spree/admin/question_categories/index.html.erb +48 -0
- data/app/views/spree/admin/question_categories/new.html.erb +19 -0
- data/app/views/spree/admin/question_categories/new.js.erb +2 -0
- data/app/views/spree/faqs/index.html.erb +29 -0
- data/config/locales/en.yml +22 -0
- data/config/locales/sv.yml +22 -0
- data/config/routes.rb +6 -0
- data/db/migrate/20090526213535_create_questions.rb +16 -0
- data/db/migrate/20090526213550_create_question_categories.rb +14 -0
- data/db/migrate/20140331032743_rename_questions_to_spree_questions.rb +5 -0
- data/db/migrate/20140331032751_rename_question_categories_to_spree_question_categories.rb +5 -0
- data/lib/generators/spree_faq/install/install_generator.rb +30 -0
- data/lib/spree_faq/engine.rb +21 -0
- data/lib/spree_faq/version.rb +16 -0
- data/lib/spree_faq.rb +4 -0
- data/script/rails +7 -0
- data/spec/controllers/admin/question_categories_controller_spec.rb +67 -0
- data/spec/controllers/faqs_controller_spec.rb +29 -0
- data/spec/factories/question_category_factory.rb +5 -0
- data/spec/factories/question_factory.rb +7 -0
- data/spec/features/admin/faq_spec.rb +67 -0
- data/spec/features/faq_spec.rb +30 -0
- data/spec/models/question_category_spec.rb +50 -0
- data/spec/models/question_spec.rb +70 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/support/capybara.rb +17 -0
- data/spec/support/database_cleaner.rb +18 -0
- data/spec/support/factory_girl.rb +7 -0
- data/spec/support/i18n.rb +13 -0
- data/spec/support/spree.rb +10 -0
- data/spec/translations/locale_spec.rb +15 -0
- data/spree_faq.gemspec +46 -0
- data/vendor/assets/javascripts/jquery.scrollTo-min.js +11 -0
- metadata +381 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 61e852d5ccf4cdef6e871e7641a0eb40f5785835
|
4
|
+
data.tar.gz: abd135909a2d1f7716502a66d49401c3e6967dfd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f72f9618e2f0b45df23481be3af9d60ff46598cdb2fd7ecdd1b2a917865d8f288a866771dd1c07bc43cfd24ec44c677d2e0bd54d251d603f358c8231fc3edecd
|
7
|
+
data.tar.gz: a4e062c254e9973d862418ec27a0842a0e5dded6365a91f1e2695e6a0e3ae1bad1e9b5015536f3569f853ead203fd854f0a546d80fa562d579f4787988fe8c18
|
data/.gitignore
ADDED
data/.hound.yml
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
In the spirit of [free software][1], **everyone** is encouraged to help improve this project.
|
4
|
+
|
5
|
+
Here are some ways *you* can contribute:
|
6
|
+
|
7
|
+
* by using prerelease versions
|
8
|
+
* by reporting [bugs][2]
|
9
|
+
* by suggesting new features
|
10
|
+
* by writing [translations][3]
|
11
|
+
* by writing or editing documentation
|
12
|
+
* by writing specifications
|
13
|
+
* by writing code (*no patch is too small*: fix typos, add comments, clean up inconsistent whitespace)
|
14
|
+
* by refactoring code
|
15
|
+
* by resolving [issues][2]
|
16
|
+
* by reviewing patches
|
17
|
+
|
18
|
+
Starting point:
|
19
|
+
|
20
|
+
* Fork the repo
|
21
|
+
* Clone your repo
|
22
|
+
* Run `bundle install`
|
23
|
+
* Run `bundle exec rake test_app` to create the test application in `spec/test_app`
|
24
|
+
* Make your changes
|
25
|
+
* Ensure specs pass by running `bundle exec rspec spec`
|
26
|
+
* Submit your pull request
|
27
|
+
|
28
|
+
[1]: http://www.fsf.org/licensing/essays/free-sw.html
|
29
|
+
[2]: https://github.com/futhr/spree-faq/issues
|
30
|
+
[3]: http://www.localeapp.com/projects/6629
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
guard 'rspec', cmd: 'bundle exec rspec', all_on_start: true do
|
2
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
3
|
+
watch('config/routes.rb') { 'spec/routing' }
|
4
|
+
watch(%r{^spec/(.+)_spec\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
5
|
+
watch(%r{^app/(.+)_decorator\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
6
|
+
watch(%r{^(app|lib)/(.+)(\.rb|\.erb)$}) { |m| "spec/#{m[2]}_spec.rb" }
|
7
|
+
watch(%r{^config/locales/(.+)\.yml$}) { 'spec/translations' }
|
8
|
+
end
|
data/LICENSE.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
Copyright (c) 2009-2014 Josh Nussbaum, Tobias Bohwalli, and other contributors.
|
2
|
+
All rights reserved.
|
3
|
+
|
4
|
+
Redistribution and use in source and binary forms, with or without modification,
|
5
|
+
are permitted provided that the following conditions are met:
|
6
|
+
|
7
|
+
* Redistributions of source code must retain the above copyright notice,
|
8
|
+
this list of conditions and the following disclaimer.
|
9
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
10
|
+
this list of conditions and the following disclaimer in the documentation
|
11
|
+
and/or other materials provided with the distribution.
|
12
|
+
* Neither the name Spree nor the names of its contributors may be used to
|
13
|
+
endorse or promote products derived from this software without specific
|
14
|
+
prior written permission.
|
15
|
+
|
16
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
17
|
+
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
18
|
+
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
19
|
+
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
20
|
+
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
21
|
+
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
22
|
+
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
23
|
+
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
24
|
+
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
25
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
26
|
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Spree Frequently Asked Question
|
2
|
+
|
3
|
+
[](https://travis-ci.org/futhr/spree-faq)
|
4
|
+
[](https://coveralls.io/r/futhr/spree-faq)
|
5
|
+
[](https://codeclimate.com/github/futhr/spree-faq)
|
6
|
+
[](http://badge.fury.io/rb/spree_postal_service)
|
7
|
+
|
8
|
+
An Spree Commerce extension for managing FAQs.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
In your `Gemfile`
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'spree_faq', '~> 2.0.0'
|
16
|
+
```
|
17
|
+
|
18
|
+
Then run from the command line:
|
19
|
+
|
20
|
+
bundle install
|
21
|
+
rails g spree_faq:install
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
## Contributing
|
26
|
+
|
27
|
+
See corresponding [guiedlines][1].
|
28
|
+
|
29
|
+
---
|
30
|
+
|
31
|
+
Copyright (c) 2009-2014 [Josh Nussbaum][2], [Tobias Bohwalli][3], and other [contributors][4], released under the [New BSD License][5]
|
32
|
+
|
33
|
+
[1]: https://github.com/futhr/spree-faq/blob/master/CONTRIBUTING.md
|
34
|
+
[2]: https://github.com/joshnuss
|
35
|
+
[3]: https://github.com/futhr
|
36
|
+
[4]: https://github.com/futhr/spree-faq/graphs/contributors
|
37
|
+
[5]: https://github.com/futhr/spree-faq/blob/master/LICENSE.md
|
data/Rakefile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'spree/testing_support/common_rake'
|
6
|
+
|
7
|
+
RSpec::Core::RakeTask.new
|
8
|
+
|
9
|
+
task default: :spec
|
10
|
+
|
11
|
+
desc 'Generates a dummy app for testing'
|
12
|
+
task :test_app do
|
13
|
+
ENV['LIB_NAME'] = 'spree_faq'
|
14
|
+
Rake::Task['common:test_app'].invoke
|
15
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
#= require admin/spree_backend
|
2
|
+
|
3
|
+
(($) ->
|
4
|
+
$('form').on 'click', '.add_fields', ->
|
5
|
+
time = new Date().getTime()
|
6
|
+
regexp = new RegExp($(this).data('id'), 'g')
|
7
|
+
$(this).before($(this).data('fields').replace(regexp, time))
|
8
|
+
event.preventDefault()
|
9
|
+
|
10
|
+
$('form').on 'click', '.remove', ->
|
11
|
+
$(this).parent('.question').children(':hidden[id$=delete]').val(1)
|
12
|
+
$(this).parent('.question').slideUp('slow')
|
13
|
+
event.preventDefault()
|
14
|
+
|
15
|
+
$('#new_question_link').on 'click', ->
|
16
|
+
$('#questions').append(new_question_html.replace(/NEW_RECORD/g, $('#questions .question').size()))
|
17
|
+
$('#questions .question:last .remove').on 'click', ->
|
18
|
+
$(this).parent('.question').remove()
|
19
|
+
|
20
|
+
$.scrollTo($('#questions .question:last'), 800)
|
21
|
+
$('.question:last input:first').focus()
|
22
|
+
|
23
|
+
) jQuery
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Spree
|
2
|
+
class FaqsController < StoreController
|
3
|
+
helper 'spree/products'
|
4
|
+
|
5
|
+
def index
|
6
|
+
@categories = QuestionCategory.all(include: :questions)
|
7
|
+
end
|
8
|
+
|
9
|
+
def default_title
|
10
|
+
Spree.t(:frequently_asked_questions, scope: :spree_faq)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class Spree::Question < ActiveRecord::Base
|
2
|
+
acts_as_list
|
3
|
+
|
4
|
+
belongs_to :question_category, class_name: 'Spree::QuestionCategory'
|
5
|
+
validates :question_category_id, :question, :answer, presence: true
|
6
|
+
attr_accessible :question, :answer, :question_category_id, :question_category
|
7
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class Spree::QuestionCategory < ActiveRecord::Base
|
2
|
+
acts_as_list
|
3
|
+
|
4
|
+
has_many :questions, class_name: 'Spree::Question'
|
5
|
+
validates :name, presence: true
|
6
|
+
validates :name, uniqueness: { case_sensitive: false }
|
7
|
+
accepts_nested_attributes_for :questions, allow_destroy: true
|
8
|
+
attr_accessible :name, :questions_attributes, :question, :answer
|
9
|
+
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
Deface::Override.new(virtual_path: "spree/admin/shared/_configuration_menu",
|
2
|
+
name: "add_faq_configuration_line",
|
3
|
+
insert_bottom: "[data-hook='admin_configurations_sidebar_menu']",
|
4
|
+
text: "<%= configurations_sidebar_menu_item Spree.t(:question_categories_admin, scope: :spree_faq), admin_question_categories_url %>",
|
5
|
+
disabled: false)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<div class="question" id="<%= dom_id f.object %>">
|
2
|
+
<fieldset class="no-border-bottom">
|
3
|
+
<div class="field">
|
4
|
+
<%= f.label :question, Spree::Question.model_name.human(count: 1) %> <span class="required">*</span><br />
|
5
|
+
<%= f.text_field :question, class: 'fullwidth title' %>
|
6
|
+
</div>
|
7
|
+
<div class="field">
|
8
|
+
<%= f.label :answer, Spree.t(:answer, scope: :spree_faq) %> <span class="required">*</span><br />
|
9
|
+
<%= f.text_area :answer, rows: 2, class: 'fullwidth' %>
|
10
|
+
</div>
|
11
|
+
<%= f.hidden_field :_destroy %>
|
12
|
+
<%= link_to_with_icon 'icon-trash', 'remove', '#', class: 'remove' %>
|
13
|
+
</fieldset>
|
14
|
+
</div>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<%= render 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:editing_category_questions, scope: :spree_faq) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li>
|
9
|
+
<%= button_link_to Spree.t(:add_question, scope: :spree_faq), '#', icon: 'icon-plus', id: 'new_question_link' %>
|
10
|
+
<%= button_link_to Spree.t(:back_to_categories, scope: :spree_faq), spree.admin_question_categories_path, icon: 'icon-arrow-left' %>
|
11
|
+
</li>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<%= render 'spree/shared/error_messages', target: @question_category %>
|
15
|
+
|
16
|
+
<%= form_for [:admin, @question_category] do |f| %>
|
17
|
+
<%= javascript_tag do %>
|
18
|
+
var new_question_html = '<%= generate_template(f, :questions) %>';
|
19
|
+
<% end %>
|
20
|
+
<div class="field">
|
21
|
+
<%= f.field_container :name do %>
|
22
|
+
<%= f.label :name, Spree.t(:category_name, scope: :spree_faq) %> <span class="required">*</span><br />
|
23
|
+
<%= f.text_field :name, class: 'fullwidth title' %>
|
24
|
+
<%= f.error_message_on :name %>
|
25
|
+
<% end %>
|
26
|
+
</div>
|
27
|
+
<div id="questions" style="margin-bottom: 20px">
|
28
|
+
<h3>Questions</h3>
|
29
|
+
<%= f.fields_for :questions do |question_form| %>
|
30
|
+
<%= render 'question', f: question_form %>
|
31
|
+
<% end %>
|
32
|
+
</div>
|
33
|
+
<div class="form-buttons filter-actions actions" data-hook="buttons">
|
34
|
+
<%= button Spree.t(:update), 'icon-refresh' %>
|
35
|
+
<span class="or"><%= Spree.t(:or) %></span>
|
36
|
+
<%= link_to_with_icon 'icon-remove', Spree.t(:cancel), admin_question_categories_url, class: 'button' %>
|
37
|
+
</div>
|
38
|
+
<% end %>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<%= render 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:question_categories, scope: :spree_faq) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<% content_for :page_actions do %>
|
8
|
+
<li id="new_question_category_link">
|
9
|
+
<%= button_link_to Spree.t(:new_question_category, scope: :spree_faq), new_admin_question_category_url,
|
10
|
+
{ remote: true, icon: 'icon-plus', 'data-update' => 'new_question_category', id: 'new_question_category_link' } %>
|
11
|
+
</li>
|
12
|
+
<% end %>
|
13
|
+
|
14
|
+
<div id="new_question_category"></div>
|
15
|
+
|
16
|
+
<% if @question_categories.any? %>
|
17
|
+
<table class="index" id="listing_faq">
|
18
|
+
<colgroup>
|
19
|
+
<col style="width: 40%">
|
20
|
+
<col style="width: 40%">
|
21
|
+
<col style="width: 20%">
|
22
|
+
</colgroup>
|
23
|
+
<thead>
|
24
|
+
<tr data-hook="admin_faq_category_index_headers">
|
25
|
+
<th><%= Spree::QuestionCategory.model_name.human(count: 2) %></td>
|
26
|
+
<th><%= Spree::Question.model_name.human(count: 2) %></td>
|
27
|
+
<th data-hook="admin_faq_category_index_header_actions" class="actions"></th>
|
28
|
+
</tr>
|
29
|
+
<thead>
|
30
|
+
<tbody>
|
31
|
+
<% @question_categories.each do |category| %>
|
32
|
+
<tr id="<%= spree_dom_id category %>" data-hook="admin_faq_category_index_rows" class="<%= cycle('odd', 'even') %>">
|
33
|
+
<td class="align-center"><%= h category.name %></td>
|
34
|
+
<td class="align-center"><%= category.questions.count %></td>
|
35
|
+
<td data-hook="admin_faq_category_index_row_actions" class="actions">
|
36
|
+
<%= link_to_edit category, no_text: true %>
|
37
|
+
<%= link_to_delete category, no_text: true %>
|
38
|
+
</td>
|
39
|
+
</tr>
|
40
|
+
<% end %>
|
41
|
+
</tbody>
|
42
|
+
</table>
|
43
|
+
<% else %>
|
44
|
+
<div class="alpha twelve columns no-objects-found">
|
45
|
+
<%= Spree.t(:no_resource_found, resource: Spree::QuestionCategory.model_name.human(count: 2)) %>,
|
46
|
+
<%= link_to Spree.t(:add_one), spree.new_admin_question_category_path %>!
|
47
|
+
</div>
|
48
|
+
<% end %>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= render 'spree/admin/shared/configuration_menu' %>
|
2
|
+
|
3
|
+
<% content_for :page_title do %>
|
4
|
+
<%= Spree.t(:new_question_category, scope: :spree_faq) %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= render 'spree/shared/error_messages', target: @question_category %>
|
8
|
+
<%= form_for [:admin, @question_category] do |f| %>
|
9
|
+
<fieldset class="no-border-top">
|
10
|
+
<%= f.field_container :name do %>
|
11
|
+
<%= f.label :name, Spree.t(:name) %> <span class="required">*</span><br />
|
12
|
+
<%= f.text_field :name, class: 'fullwidth title' %>
|
13
|
+
<%= f.error_message_on :name %>
|
14
|
+
<% end %>
|
15
|
+
<div data-hook="buttons" class="filter-actions actions">
|
16
|
+
<%= button Spree.t(:create), 'icon-ok' %>
|
17
|
+
</div>
|
18
|
+
</fieldset>
|
19
|
+
<% end %>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<h1><%= Spree.t(:frequently_asked_questions, scope: :spree_faq) %></h1>
|
2
|
+
|
3
|
+
<div id="faqs">
|
4
|
+
<% @categories.each do |category| %>
|
5
|
+
<div id="<%= dom_id category -%>" class="category">
|
6
|
+
<h2><%= h category.name %></h2>
|
7
|
+
<ul class="answers">
|
8
|
+
<% category.questions.each do |question| %>
|
9
|
+
<li>
|
10
|
+
<a class="question" id="<%= dom_id question -%>" href="#<%= "answer_#{question.id}" %>">
|
11
|
+
<%= raw(question.question) -%>
|
12
|
+
</a>
|
13
|
+
<div class="answer" id="<%= "answer_#{question.id}"-%>">
|
14
|
+
<%= raw(question.answer) %>
|
15
|
+
</div>
|
16
|
+
</li>
|
17
|
+
<% end %>
|
18
|
+
</ul>
|
19
|
+
</div>
|
20
|
+
<% end %>
|
21
|
+
</div>
|
22
|
+
|
23
|
+
<% content_for :sidebar do %>
|
24
|
+
<% if defined? @products && defined? @taxon %>
|
25
|
+
<%= render 'spree/shared/filters' %>
|
26
|
+
<% elsif defined? @taxonomies %>
|
27
|
+
<%= render 'spree/shared/taxonomies' %>
|
28
|
+
<% end %>
|
29
|
+
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
spree/question_category:
|
6
|
+
one: Question Category
|
7
|
+
other: Question Categories
|
8
|
+
spree/question:
|
9
|
+
one: Question
|
10
|
+
other: Questions
|
11
|
+
spree:
|
12
|
+
spree_faq:
|
13
|
+
add_question: Add Question
|
14
|
+
answer: Answer
|
15
|
+
back_to_categories: Back to Categories
|
16
|
+
category_name: Category Name
|
17
|
+
create_category: Create Category
|
18
|
+
editing_category_questions: Editing Category Questions
|
19
|
+
frequently_asked_questions: Frequently Asked Questions
|
20
|
+
new_question_category: New Category
|
21
|
+
question_categories: Frequently Asked Questions
|
22
|
+
question_categories_admin: FAQ
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
sv:
|
3
|
+
activerecord:
|
4
|
+
models:
|
5
|
+
spree/question_category:
|
6
|
+
one: Kategori
|
7
|
+
other: Kategorier
|
8
|
+
spree/question:
|
9
|
+
one: Fråga
|
10
|
+
other: Frågor
|
11
|
+
spree:
|
12
|
+
spree_faq:
|
13
|
+
add_question: Lägg till fråga
|
14
|
+
answer: Svar
|
15
|
+
back_to_categories: Tillbaka till kategorier
|
16
|
+
category_name: Kategorinamn
|
17
|
+
create_category: Skapa kategori
|
18
|
+
editing_category_questions: Ändra kategori frågor
|
19
|
+
frequently_asked_questions: Vanliga frågor och svar
|
20
|
+
new_question_category: Ny kategori
|
21
|
+
question_categories: Vanliga frågor och svar
|
22
|
+
question_categories_admin: FAQ
|
data/config/routes.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
class CreateQuestions < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :questions do |t|
|
4
|
+
t.integer :question_category_id
|
5
|
+
t.text :question
|
6
|
+
t.text :answer
|
7
|
+
t.integer :position
|
8
|
+
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.down
|
14
|
+
drop_table :questions
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module SpreeFaq
|
2
|
+
module Generators
|
3
|
+
class InstallGenerator < Rails::Generators::Base
|
4
|
+
class_option :auto_run_migrations, type: :boolean, default: false
|
5
|
+
|
6
|
+
def add_javascripts
|
7
|
+
append_file 'app/assets/javascripts/store/all.js', "//= require store/spree_faq\n"
|
8
|
+
append_file 'app/assets/javascripts/admin/all.js', "//= require admin/spree_faq\n"
|
9
|
+
end
|
10
|
+
|
11
|
+
def add_stylesheets
|
12
|
+
inject_into_file 'app/assets/stylesheets/store/all.css', " *= require store/spree_faq\n", before: /\*\//, verbose: true
|
13
|
+
inject_into_file 'app/assets/stylesheets/admin/all.css', " *= require admin/spree_faq\n", before: /\*\//, verbose: true
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_migrations
|
17
|
+
run 'bundle exec rake railties:install:migrations FROM=spree_faq'
|
18
|
+
end
|
19
|
+
|
20
|
+
def run_migrations
|
21
|
+
run_migrations = options[:auto_run_migrations] || ['', 'y', 'Y'].include?(ask 'Would you like to run the migrations now? [Y/n]')
|
22
|
+
if run_migrations
|
23
|
+
run 'bundle exec rake db:migrate'
|
24
|
+
else
|
25
|
+
puts 'Skipping rake db:migrate, don\'t forget to run it!'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module SpreeFaq
|
2
|
+
class Engine < Rails::Engine
|
3
|
+
require 'spree/core'
|
4
|
+
isolate_namespace Spree
|
5
|
+
engine_name 'spree_faq'
|
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.configuration.cache_classes ? require(c) : load(c)
|
12
|
+
end
|
13
|
+
|
14
|
+
Dir.glob(File.join(File.dirname(__FILE__), '../../app/overrides/*.rb')) do |c|
|
15
|
+
Rails.configuration.cache_classes ? require(c) : load(c)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
config.to_prepare &method(:activate).to_proc
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module SpreeFaq
|
2
|
+
|
3
|
+
# Returns the version of the currently loaded SpreeFaq as a <tt>Gem::Version</tt>
|
4
|
+
def self.version
|
5
|
+
Gem::Version.new VERSION::STRING
|
6
|
+
end
|
7
|
+
|
8
|
+
module VERSION
|
9
|
+
MAJOR = 2
|
10
|
+
MINOR = 0
|
11
|
+
TINY = 0
|
12
|
+
PRE = nil
|
13
|
+
|
14
|
+
STRING = [MAJOR, MINOR, TINY, PRE].compact.join('.')
|
15
|
+
end
|
16
|
+
end
|
data/lib/spree_faq.rb
ADDED