hancock_cms_faq 1.0.2

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.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/.ruby-gemset +1 -0
  4. data/.ruby-version +1 -0
  5. data/.travis.yml +4 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +55 -0
  9. data/Rakefile +1 -0
  10. data/app/assets/javascripts/hancock/faq.coffee +6 -0
  11. data/app/assets/javascripts/hancock/faq/form.coffee +9 -0
  12. data/app/assets/javascripts/hancock/faq/init.coffee +2 -0
  13. data/app/assets/stylesheets/hancock/faq.sass +0 -0
  14. data/app/controllers/concerns/hancock/faq/decorators/categories.rb +17 -0
  15. data/app/controllers/concerns/hancock/faq/decorators/questions.rb +71 -0
  16. data/app/controllers/hancock/faq/categories_controller.rb +7 -0
  17. data/app/controllers/hancock/faq/questions_controller.rb +7 -0
  18. data/app/models/concerns/hancock/faq/decorators/category.rb +36 -0
  19. data/app/models/concerns/hancock/faq/decorators/question.rb +48 -0
  20. data/app/models/hancock/faq/category.rb +11 -0
  21. data/app/models/hancock/faq/question.rb +11 -0
  22. data/app/views/hancock/faq/categories/index.html.slim +10 -0
  23. data/app/views/hancock/faq/categories/show.html.slim +8 -0
  24. data/app/views/hancock/faq/questions/_fields.html.slim +11 -0
  25. data/app/views/hancock/faq/questions/_fields_with_settings.html.slim +20 -0
  26. data/app/views/hancock/faq/questions/_form.html.slim +66 -0
  27. data/app/views/hancock/faq/questions/_form_with_wrapper.html.slim +2 -0
  28. data/app/views/hancock/faq/questions/_question_block.html.slim +33 -0
  29. data/app/views/hancock/faq/questions/_simple_captcha.html.slim +16 -0
  30. data/app/views/hancock/faq/questions/_success.html.slim +3 -0
  31. data/app/views/hancock/faq/questions/create.html.slim +1 -0
  32. data/app/views/hancock/faq/questions/index.html.slim +11 -0
  33. data/app/views/hancock/faq/questions/new.html.slim +6 -0
  34. data/app/views/hancock/faq/questions/show.html.slim +8 -0
  35. data/app/views/hancock/faq/questions/update_captcha.html.slim +16 -0
  36. data/bin/console +14 -0
  37. data/bin/setup +7 -0
  38. data/config/locales/hancock.faq.ru.yml +64 -0
  39. data/hancock_cms_faq.gemspec +36 -0
  40. data/lib/generators/hancock/faq/config/config_generator.rb +13 -0
  41. data/lib/generators/hancock/faq/config/templates/hancock_faq.erb +23 -0
  42. data/lib/generators/hancock/faq/controllers/all_generator.rb +28 -0
  43. data/lib/generators/hancock/faq/controllers/category_generator.rb +43 -0
  44. data/lib/generators/hancock/faq/controllers/decorators_generator.rb +24 -0
  45. data/lib/generators/hancock/faq/controllers/question_generator.rb +43 -0
  46. data/lib/generators/hancock/faq/controllers/templates/categories_controller.erb +10 -0
  47. data/lib/generators/hancock/faq/controllers/templates/questions_controller.erb +10 -0
  48. data/lib/generators/hancock/faq/models/all_generator.rb +28 -0
  49. data/lib/generators/hancock/faq/models/category_generator.rb +43 -0
  50. data/lib/generators/hancock/faq/models/decorators_generator.rb +24 -0
  51. data/lib/generators/hancock/faq/models/question_generator.rb +34 -0
  52. data/lib/generators/hancock/faq/models/templates/category.erb +36 -0
  53. data/lib/generators/hancock/faq/models/templates/question.erb +37 -0
  54. data/lib/hancock/faq/admin.rb +6 -0
  55. data/lib/hancock/faq/admin/category.rb +128 -0
  56. data/lib/hancock/faq/admin/question.rb +104 -0
  57. data/lib/hancock/faq/configuration.rb +53 -0
  58. data/lib/hancock/faq/controllers/categories.rb +88 -0
  59. data/lib/hancock/faq/controllers/questions.rb +174 -0
  60. data/lib/hancock/faq/engine.rb +7 -0
  61. data/lib/hancock/faq/models/category.rb +50 -0
  62. data/lib/hancock/faq/models/mongoid/category.rb +33 -0
  63. data/lib/hancock/faq/models/mongoid/question.rb +72 -0
  64. data/lib/hancock/faq/models/question.rb +85 -0
  65. data/lib/hancock/faq/routes.rb +83 -0
  66. data/lib/hancock/faq/version.rb +5 -0
  67. data/lib/hancock_cms_faq.rb +31 -0
  68. data/release.sh +6 -0
  69. metadata +159 -0
@@ -0,0 +1,28 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class AllGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ argument :class_name, type: :string
7
+ argument :category_class_name_arg, type: :string, default: ""
8
+
9
+ desc 'Hancock::Faq Models generator'
10
+ def all
11
+ generate "hancock:faq:models:question #{camelcased_class_name}"
12
+ generate "hancock:faq:models:category #{category_class_name}"
13
+ end
14
+
15
+ private
16
+ def capitalized_class_name
17
+ class_name.capitalize
18
+ end
19
+ def camelcased_class_name
20
+ class_name.camelcase
21
+ end
22
+
23
+ def category_class_name
24
+ category_class_name_arg.blank? ? "#{camelcased_class_name}Category" : category_class_name_arg
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,43 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class CategoryGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ argument :class_name, type: :string
7
+ argument :question_class_name_arg, type: :string, default: ""
8
+
9
+ desc 'Hancock::Faq Category Model generator'
10
+ def category
11
+ template 'category.erb', "app/models/#{file_name}.rb"
12
+ end
13
+
14
+ private
15
+ def capitalized_class_name
16
+ class_name.capitalize
17
+ end
18
+
19
+ def camelcased_class_name
20
+ class_name.camelcase
21
+ end
22
+
23
+ def file_name
24
+ underscored_class_name
25
+ end
26
+
27
+ def underscored_class_name
28
+ camelcased_class_name.underscore
29
+ end
30
+
31
+ def underscored_pluralized_class_name
32
+ underscored_class_name.pluralize
33
+ end
34
+
35
+ def camelcased_question_class_name
36
+ question_class_name.camelcase
37
+ end
38
+
39
+ def question_class_name
40
+ question_class_name_arg.blank? ? camelcased_class_name.sub(/Category$/i, "") : question_class_name_arg
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,24 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class DecoratorsGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../../../../../../app/models/concerns/hancock/faq/decorators', __FILE__)
6
+ argument :models, type: :array, default: []
7
+
8
+ desc 'Hancock::Faq Models generator'
9
+ def decorators
10
+ copied = false
11
+ (models == ['all'] ? permitted_models : models & permitted_models).each do |m|
12
+ copied = true
13
+ copy_file "#{m}.rb", "app/models/concerns/hancock/faq/decorators/#{m}.rb"
14
+ end
15
+ puts "U need to set models`s name. One of this: #{permitted_models.join(", ")}." unless copied
16
+ end
17
+
18
+ private
19
+ def permitted_models
20
+ ['category', 'question']
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,34 @@
1
+ require 'rails/generators'
2
+
3
+ module Hancock::Faq::Models
4
+ class QuestionGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../templates', __FILE__)
6
+ argument :class_name, type: :string
7
+
8
+ desc 'Hancock::Faq Question Model generator'
9
+ def question
10
+ template 'question.erb', "app/models/#{file_name}.rb"
11
+ end
12
+
13
+ private
14
+ def capitalized_class_name
15
+ class_name.capitalize
16
+ end
17
+
18
+ def camelcased_class_name
19
+ class_name.camelcase
20
+ end
21
+
22
+ def file_name
23
+ underscored_class_name
24
+ end
25
+
26
+ def underscored_class_name
27
+ camelcased_class_name.underscore
28
+ end
29
+
30
+ def underscored_pluralized_class_name
31
+ underscored_class_name.pluralize
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,36 @@
1
+ class <%= camelcased_class_name %> < Hancock::Faq::Category
2
+
3
+ def self.question_class
4
+ <%= camelcased_question_class_name %>
5
+ end
6
+
7
+
8
+ ############# rails_admin ##############
9
+ def self.rails_admin_add_fields
10
+ [] #super
11
+ end
12
+
13
+ def self.rails_admin_add_config(config)
14
+ #super(config)
15
+ end
16
+
17
+ def self.admin_can_user_defined_actions
18
+ [].freeze
19
+ end
20
+ def self.admin_cannot_user_defined_actions
21
+ [].freeze
22
+ end
23
+ def self.manager_can_user_defined_actions
24
+ [].freeze
25
+ end
26
+ def self.manager_cannot_user_defined_actions
27
+ [].freeze
28
+ end
29
+ def self.rails_admin_user_defined_visible_actions
30
+ [].freeze
31
+ end
32
+
33
+ rails_admin(&Hancock::Faq::Admin::Category.config(rails_admin_add_fields) { |config|
34
+ rails_admin_add_config(config)
35
+ })
36
+ end
@@ -0,0 +1,37 @@
1
+ class <%= camelcased_class_name %> < Hancock::Faq::Question
2
+
3
+ has_and_belongs_to_many :categories, class_name: "<%= camelcased_class_name %>Category", inverse_of: nil
4
+ alias :<%= underscored_class_name %>_categories :categories
5
+
6
+ has_and_belongs_to_many :related_questions, :class_name => "<%= camelcased_class_name %>", :inverse_of => :related_questions
7
+ alias :related_<%= underscored_pluralized_class_name %> :related_questions
8
+
9
+ ############# rails_admin ##############
10
+ def self.rails_admin_add_fields
11
+ [] #super
12
+ end
13
+
14
+ def self.rails_admin_add_config(config)
15
+ #super(config)
16
+ end
17
+
18
+ def self.admin_can_user_defined_actions
19
+ [].freeze
20
+ end
21
+ def self.admin_cannot_user_defined_actions
22
+ [].freeze
23
+ end
24
+ def self.manager_can_user_defined_actions
25
+ [].freeze
26
+ end
27
+ def self.manager_cannot_user_defined_actions
28
+ [].freeze
29
+ end
30
+ def self.rails_admin_user_defined_visible_actions
31
+ [].freeze
32
+ end
33
+
34
+ rails_admin(&Hancock::Faq::Admin::Question.config(rails_admin_add_fields) { |config|
35
+ rails_admin_add_config(config)
36
+ })
37
+ end
@@ -0,0 +1,6 @@
1
+ module Hancock::Faq
2
+ module Admin
3
+ class << self
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,128 @@
1
+ module Hancock::Faq
2
+ module Admin
3
+ module Category
4
+ def self.config(nav_label = nil, fields = {})
5
+ if nav_label.is_a?(Hash)
6
+ nav_label, fields = nav_label[:nav_label], nav_label
7
+ elsif nav_label.is_a?(Array)
8
+ nav_label, fields = nil, nav_label
9
+ end
10
+
11
+ Proc.new {
12
+ navigation_label(!nav_label.blank? ? nav_label : "FAQ")
13
+
14
+ list do
15
+ scopes [:sorted, :enabled, nil]
16
+
17
+ field :enabled, :toggle
18
+ field :name do
19
+ searchable true
20
+ end
21
+ # field :image
22
+
23
+ field :questions do
24
+ read_only true
25
+
26
+ pretty_value do
27
+ bindings[:object].questions.to_a.map { |q|
28
+ route = bindings[:view] || bindings[:controller]
29
+ model_name = q.rails_admin_model
30
+ route.link_to(q.full_name, route.rails_admin.show_path(model_name: model_name, id: q.id), title: q.name)
31
+ }.join("<br>").html_safe
32
+ end
33
+ end
34
+
35
+ field :text_slug do
36
+ searchable true
37
+ end
38
+ group :content, &Hancock::Admin.content_block
39
+ end
40
+
41
+ edit do
42
+ field :enabled, :toggle
43
+ field :name
44
+ # field :sidebar_title, :string
45
+
46
+ group :URL, &Hancock::Admin.url_block
47
+ # group :URL do
48
+ # active false
49
+ # field :slugs, :hancock_slugs
50
+ # field :text_slug
51
+ # end
52
+ # field :image, :hancock_image
53
+
54
+ group :content, &Hancock::Admin.content_block
55
+ # group :content do
56
+ # active false
57
+ # field :excerpt, :hancock_html
58
+ # field :content, :hancock_html
59
+ # end
60
+
61
+ if Hancock::Faq.config.seo_support
62
+ group :seo_n_sitemap, &Hancock::Seo::Admin.seo_n_sitemap_block
63
+ # group :seo do
64
+ # active false
65
+ # field :seo
66
+ # end
67
+ # group :sitemap_data do
68
+ # active false
69
+ # field :sitemap_data
70
+ # end
71
+ end
72
+
73
+ Hancock::RailsAdminGroupPatch::hancock_cms_group(self, fields)
74
+
75
+
76
+ group :questions do
77
+ active false
78
+ field :questions do
79
+ read_only true
80
+ help 'Список вопросов'
81
+
82
+ pretty_value do
83
+ bindings[:object].questions.to_a.map { |q|
84
+ route = (bindings[:view] || bindings[:controller])
85
+ model_name = q.rails_admin_model
86
+ route.link_to(q.name, route.rails_admin.show_path(model_name: model_name, id: q.id), title: q.full_name)
87
+ }.join("<br>").html_safe
88
+ end
89
+ end
90
+ end
91
+ end
92
+
93
+ show do
94
+ field :name
95
+ # field :sidebar_title
96
+ field :slugs, :hancock_slugs
97
+ field :text_slug
98
+ field :enabled
99
+ # field :image
100
+ field :excerpt
101
+ field :content
102
+
103
+ Hancock::RailsAdminGroupPatch::hancock_cms_group(self, fields)
104
+
105
+ field :questions do
106
+ read_only true
107
+
108
+ pretty_value do
109
+ bindings[:object].questions.to_a.map { |q|
110
+ route = (bindings[:view] || bindings[:controller])
111
+ model_name = q.rails_admin_model
112
+ route.link_to(i.full_name, route.rails_admin.show_path(model_name: model_name, id: q.id), title: q.name)
113
+ }.join("<br>").html_safe
114
+ end
115
+ end
116
+ end
117
+
118
+ nested_set({max_depth: 2, scopes: []})
119
+
120
+ if block_given?
121
+ yield self
122
+ end
123
+
124
+ }
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,104 @@
1
+ module Hancock::Faq
2
+ module Admin
3
+ module Question
4
+ def self.config(nav_label = nil, fields = {})
5
+ if nav_label.is_a?(Hash)
6
+ nav_label, fields = nav_label[:nav_label], nav_label
7
+ elsif nav_label.is_a?(Array)
8
+ nav_label, fields = nil, nav_label
9
+ end
10
+
11
+ Proc.new {
12
+ navigation_label(!nav_label.blank? ? nav_label : "FAQ")
13
+
14
+ list do
15
+ scopes [:by_date, :by_answered_date, :answered, :not_answered, :enabled, nil]
16
+
17
+ field :enabled, :toggle
18
+ field :main_category
19
+ field :categories
20
+ field :full_name do
21
+ searchable true
22
+ end
23
+
24
+ field :question_text do
25
+ searchable true
26
+ end
27
+ field :question_text_after_editing do
28
+ searchable true
29
+ end
30
+ field :author_name do
31
+ searchable true
32
+ end
33
+ field :author_name_text_after_editing do
34
+ searchable true
35
+ end
36
+ field :author_email do
37
+ searchable true
38
+ end
39
+
40
+ field :answer_text do
41
+ searchable true
42
+ end
43
+ field :answer_author_name do
44
+ searchable true
45
+ end
46
+ end
47
+
48
+ edit do
49
+ group :categories, &Hancock::Admin.categories_block
50
+ # group :categories do
51
+ # active false
52
+ # field :main_category
53
+ # field :categories
54
+ # end
55
+ field :enabled, :toggle
56
+
57
+ group :URL, &Hancock::Admin.url_block
58
+ # group :URL do
59
+ # active false
60
+ # field :slugs, :hancock_slugs
61
+ # field :text_slug
62
+ # end
63
+
64
+ group 'Данные вопроса' do
65
+ active false
66
+ field :question_text, :text
67
+ field :question_text_after_editing, :hancock_html
68
+ field :author_name, :string
69
+ field :author_name_text_after_editing, :string
70
+ field :author_email, :string
71
+ end
72
+
73
+ group 'Данные ответа' do
74
+ active false
75
+ field :answered, :toggle
76
+ field :answer_text, :hancock_html
77
+ field :answered_time
78
+ field :answer_author_name, :string
79
+ end
80
+
81
+ if Hancock::Faq.config.seo_support
82
+ group :seo_n_sitemap, &Hancock::Seo::Admin.seo_n_sitemap_block
83
+ # group :seo do
84
+ # active false
85
+ # field :seo
86
+ # end
87
+ # group :sitemap_data do
88
+ # active false
89
+ # field :sitemap_data
90
+ # end
91
+ end
92
+
93
+ Hancock::RailsAdminGroupPatch::hancock_cms_group(self, fields)
94
+
95
+ end
96
+
97
+ if block_given?
98
+ yield self
99
+ end
100
+ }
101
+ end
102
+ end
103
+ end
104
+ end