rocket_cms 0.1.13 → 0.2.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +22 -1
- data/app/assets/stylesheets/rocket_cms.css.sass +4 -0
- data/app/controllers/contacts_controller.rb +1 -27
- data/app/controllers/home_controller.rb +5 -0
- data/app/controllers/news_controller.rb +1 -20
- data/app/controllers/pages_controller.rb +2 -10
- data/app/controllers/search_controller.rb +1 -23
- data/app/models/ckeditor/picture.rb +1 -1
- data/app/views/blocks/_footer.html.haml +1 -0
- data/app/views/home/index.html.haml +1 -0
- data/app/views/layouts/application.html.haml +23 -0
- data/app/views/layouts/application.html.slim +24 -0
- data/app/views/shared/_obj.html.haml +5 -2
- data/config/locales/ru.rocket_admin.yml +2 -2
- data/lib/generators/rocket_cms/ability_generator.rb +15 -0
- data/lib/generators/rocket_cms/admin_generator.rb +3 -2
- data/lib/generators/rocket_cms/layout_generator.rb +15 -0
- data/lib/generators/rocket_cms/templates/admin.erb +2 -1
- data/lib/rocket_cms.rb +7 -0
- data/lib/rocket_cms/controllers/contacts.rb +42 -0
- data/lib/rocket_cms/controllers/news.rb +31 -0
- data/lib/rocket_cms/controllers/pages.rb +18 -0
- data/lib/rocket_cms/controllers/search.rb +30 -0
- data/lib/rocket_cms/models/contact_message.rb +1 -0
- data/lib/rocket_cms/tasks.rb +2 -3
- data/lib/rocket_cms/version.rb +1 -1
- data/rocket_cms.gemspec +4 -1
- data/template.rb +511 -0
- metadata +60 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95971eec71ab1ccd3dde678684018ba68aeb7a46
|
4
|
+
data.tar.gz: 057425d0d665bf2e6168e652de3e14be7671f09f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c33fef7e1df446f2f5d728c097187fc74cc963b024d3d2625dd6e15472f661f00bf083e81f3ca32862b4278c76a85ea510f625c993e573c758b65c2faffc59fc
|
7
|
+
data.tar.gz: d91076a1b71e42e2148c8028774097e9c2f1c51a7b274fe8e00ee4eecea1d2bc269eb5bcbea0f655938095eeef51e0f70a00a808f33c49cf3855e27a118f3737
|
data/README.md
CHANGED
@@ -25,7 +25,28 @@ Or install it yourself as:
|
|
25
25
|
|
26
26
|
## Usage
|
27
27
|
|
28
|
-
|
28
|
+
### Using app generator
|
29
|
+
|
30
|
+
Make sure you have rails 4.1 installed
|
31
|
+
|
32
|
+
rails -v
|
33
|
+
|
34
|
+
If not, uninstall rails and install again
|
35
|
+
|
36
|
+
gem uninstall rails
|
37
|
+
gem install rocket_cms
|
38
|
+
|
39
|
+
Then run:
|
40
|
+
|
41
|
+
rails new my_app -T -O -m https://raw.github.com/rs-pro/rocket_cms/master/template.rb
|
42
|
+
|
43
|
+
generator creates a new RVM gemset, so after cd'ing to app dir, you should run `bundle install` again if you use rvm.
|
44
|
+
|
45
|
+
### Documentation
|
46
|
+
|
47
|
+
It's basically Mongoid + Rails Admin + some of our common models and controllers, capistrano config, etc.
|
48
|
+
|
49
|
+
See their documentation for more info
|
29
50
|
|
30
51
|
## Contributing
|
31
52
|
|
@@ -1,29 +1,3 @@
|
|
1
1
|
class ContactsController < ApplicationController
|
2
|
-
|
3
|
-
@contact_message = ContactMessage.new
|
4
|
-
end
|
5
|
-
|
6
|
-
def create
|
7
|
-
@contact_message = ContactMessage.new(message_params)
|
8
|
-
if RocketCMS.configuration.contacts_captcha
|
9
|
-
meth = :save_with_captcha
|
10
|
-
else
|
11
|
-
meth = :save
|
12
|
-
end
|
13
|
-
|
14
|
-
if @contact_message.send(meth)
|
15
|
-
redirect_to :contacts_sent
|
16
|
-
else
|
17
|
-
flash.now[:alert] = @contact_message.errors.full_messages.join("\n")
|
18
|
-
render action: "new"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def sent
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
def message_params
|
27
|
-
params.require(:contact_message).permit(RocketCMS.configuration.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
|
28
|
-
end
|
2
|
+
include RocketCMS::Controllers::Contacts
|
29
3
|
end
|
@@ -1,22 +1,3 @@
|
|
1
1
|
class NewsController < ApplicationController
|
2
|
-
|
3
|
-
@news = News.enabled.after_now.by_date
|
4
|
-
|
5
|
-
unless RocketCMS.configuration.news_per_page.nil?
|
6
|
-
@news = @news.page(params[:page])
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def show
|
11
|
-
@news = News.after_now.find(params[:id])
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
def page_title
|
16
|
-
if @news.class.name == 'News'
|
17
|
-
@news.page_title
|
18
|
-
else
|
19
|
-
super
|
20
|
-
end
|
21
|
-
end
|
2
|
+
include RocketCMS::Controllers::News
|
22
3
|
end
|
@@ -1,12 +1,4 @@
|
|
1
1
|
class PagesController < ApplicationController
|
2
|
-
|
3
|
-
if @seo_page.nil? || !@seo_page.persisted?
|
4
|
-
unless params[:id].blank?
|
5
|
-
@seo_page = Page.enabled.find(params[:id])
|
6
|
-
end
|
7
|
-
end
|
8
|
-
if @seo_page.nil?
|
9
|
-
render_404
|
10
|
-
end
|
11
|
-
end
|
2
|
+
include RocketCMS::Controllers::Pages
|
12
3
|
end
|
4
|
+
|
@@ -1,25 +1,3 @@
|
|
1
1
|
class SearchController < ApplicationController
|
2
|
-
|
3
|
-
if params[:query].blank?
|
4
|
-
@results = []
|
5
|
-
else
|
6
|
-
@results = Mongoid::Elasticsearch.search({
|
7
|
-
body: {
|
8
|
-
query: {
|
9
|
-
query_string: {
|
10
|
-
query: Mongoid::Elasticsearch::Utils.clean(params[:query])
|
11
|
-
}
|
12
|
-
},
|
13
|
-
highlight: {
|
14
|
-
fields: {
|
15
|
-
name: {},
|
16
|
-
content: {}
|
17
|
-
}
|
18
|
-
}
|
19
|
-
}},
|
20
|
-
page: params[:page],
|
21
|
-
per_page: RocketCMS.configuration.search_per_page,
|
22
|
-
)
|
23
|
-
end
|
24
|
-
end
|
2
|
+
include RocketCMS::Controllers::Search
|
25
3
|
end
|
@@ -7,7 +7,7 @@ class Ckeditor::Picture < Ckeditor::Asset
|
|
7
7
|
validates_attachment_content_type :data, :content_type => ['image/gif', 'image/jpeg', 'image/jpg', 'image/png'], if: :data?
|
8
8
|
end
|
9
9
|
|
10
|
-
validates_attachment_size :data, :less_than =>
|
10
|
+
validates_attachment_size :data, :less_than => 10.megabytes
|
11
11
|
validates_attachment_presence :data
|
12
12
|
|
13
13
|
def url_content
|
@@ -0,0 +1 @@
|
|
1
|
+
(c) 2014 etc
|
@@ -0,0 +1 @@
|
|
1
|
+
RocketCMS test app
|
@@ -0,0 +1,23 @@
|
|
1
|
+
%html lang="ru"
|
2
|
+
%head
|
3
|
+
%meta charset="UTF-8"
|
4
|
+
%meta name="viewport" content="width=device-width, maximum-scale=1"
|
5
|
+
%title= page_title
|
6
|
+
= yield :meta
|
7
|
+
= csrf_meta_tags
|
8
|
+
= favicon_link_tag '/favicon.ico'
|
9
|
+
= stylesheet_link_tag "application", media: "all"
|
10
|
+
= javascript_include_tag "application"
|
11
|
+
/[if lt IE 9]
|
12
|
+
= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"
|
13
|
+
%body
|
14
|
+
#root
|
15
|
+
= render 'shared/messages'
|
16
|
+
#sidebar
|
17
|
+
= render_navigation &navigation(:main)
|
18
|
+
#content
|
19
|
+
= yield
|
20
|
+
#root_footer
|
21
|
+
#footer
|
22
|
+
= render 'blocks/footer'
|
23
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
doctype html
|
2
|
+
html lang="ru"
|
3
|
+
head
|
4
|
+
meta charset="UTF-8"
|
5
|
+
meta name="viewport" content="width=device-width, maximum-scale=1"
|
6
|
+
title= page_title
|
7
|
+
= yield :meta
|
8
|
+
= csrf_meta_tags
|
9
|
+
= favicon_link_tag '/favicon.ico'
|
10
|
+
= stylesheet_link_tag "application", media: "all"
|
11
|
+
= javascript_include_tag "application"
|
12
|
+
/[if lt IE 9]
|
13
|
+
= javascript_include_tag "//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.2/html5shiv.min.js"
|
14
|
+
body
|
15
|
+
#root
|
16
|
+
= render 'shared/messages'
|
17
|
+
#sidebar
|
18
|
+
= render_navigation &navigation(:main)
|
19
|
+
#content
|
20
|
+
= yield
|
21
|
+
#root_footer
|
22
|
+
#footer
|
23
|
+
= render 'blocks/footer'
|
24
|
+
|
@@ -3,12 +3,15 @@
|
|
3
3
|
- unless obj.h1.blank?
|
4
4
|
%h1= obj.h1
|
5
5
|
- if obj.content.blank?
|
6
|
-
|
7
|
-
|
6
|
+
- unless @seo_page.nil?
|
7
|
+
= raw @seo_page.page_content
|
8
|
+
= render 'shared/admin_link', obj: @seo_page
|
8
9
|
- else
|
9
10
|
= raw obj.content
|
11
|
+
- if !obj.nil? && (@seo_page.nil? || obj.id != @seo_page.id || obj.class.name != @seo_page.class.name)
|
10
12
|
= render 'shared/admin_link', obj: obj
|
11
13
|
|
12
14
|
- content_for :meta do
|
13
15
|
= render 'shared/meta', obj: obj
|
14
16
|
= render 'shared/og', title: obj.get_og_title, image: obj.og_image
|
17
|
+
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require File.expand_path('../utils', __FILE__)
|
3
|
+
|
4
|
+
module RocketCms
|
5
|
+
class AbilityGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
include Generators::Utils::InstanceMethods
|
8
|
+
|
9
|
+
desc 'RocketCMS CanCan Ability config generator'
|
10
|
+
def ability
|
11
|
+
template 'ability.erb', 'app/models/ability.rb'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
@@ -8,11 +8,12 @@ module RocketCms
|
|
8
8
|
source_root File.expand_path('../templates', __FILE__)
|
9
9
|
include Generators::Utils::InstanceMethods
|
10
10
|
|
11
|
-
argument :_namespace, type: :string, required: false, desc: 'RailsAdmin url namespace'
|
11
|
+
#argument :_namespace, type: :string, required: false, desc: 'RailsAdmin url namespace'
|
12
12
|
desc 'RocketCMS RailsAdmin config generator'
|
13
13
|
|
14
14
|
def install
|
15
|
-
namespace = ask_for('Where do you want to mount rails_admin?', 'admin', _namespace)
|
15
|
+
#namespace = ask_for('Where do you want to mount rails_admin?', 'admin', _namespace)
|
16
|
+
namespace = 'admin'
|
16
17
|
route("mount RailsAdmin::Engine => '/#{namespace}', as: 'rails_admin'")
|
17
18
|
template 'admin.erb', 'config/initializers/rails_admin.rb'
|
18
19
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require File.expand_path('../utils', __FILE__)
|
3
|
+
|
4
|
+
module RocketCms
|
5
|
+
class LayoutGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("../../../..", __FILE__)
|
7
|
+
include Generators::Utils::InstanceMethods
|
8
|
+
|
9
|
+
desc 'RocketCMS Layout generator'
|
10
|
+
def layout
|
11
|
+
template('app/views/layouts/application.html.slim', 'app/views/layouts/application.html.slim')
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
data/lib/rocket_cms.rb
CHANGED
@@ -54,4 +54,11 @@ module RocketCMS
|
|
54
54
|
autoload :News, 'rocket_cms/models/news'
|
55
55
|
autoload :ContactMessage, 'rocket_cms/models/contact_message'
|
56
56
|
end
|
57
|
+
|
58
|
+
module Controllers
|
59
|
+
autoload :Contacts, 'rocket_cms/controllers/contacts'
|
60
|
+
autoload :News, 'rocket_cms/controllers/news'
|
61
|
+
autoload :Pages, 'rocket_cms/controllers/pages'
|
62
|
+
autoload :Search, 'rocket_cms/controllers/search'
|
63
|
+
end
|
57
64
|
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module RocketCMS
|
2
|
+
module Controllers
|
3
|
+
module Contacts
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
def new
|
6
|
+
@contact_message = ContactMessage.new
|
7
|
+
after_initialize
|
8
|
+
end
|
9
|
+
|
10
|
+
def create
|
11
|
+
@contact_message = ContactMessage.new(message_params)
|
12
|
+
after_initialize
|
13
|
+
if RocketCMS.configuration.contacts_captcha
|
14
|
+
meth = :save_with_captcha
|
15
|
+
else
|
16
|
+
meth = :save
|
17
|
+
end
|
18
|
+
if @contact_message.send(meth)
|
19
|
+
after_create
|
20
|
+
redirect_to :contacts_sent
|
21
|
+
else
|
22
|
+
flash.now[:alert] = @contact_message.errors.full_messages.join("\n")
|
23
|
+
render action: "new"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def sent
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def after_initialize
|
32
|
+
# overrideable hook for updating message
|
33
|
+
end
|
34
|
+
def after_create
|
35
|
+
# overrideable hook for updating message
|
36
|
+
end
|
37
|
+
def message_params
|
38
|
+
params.require(:contact_message).permit(RocketCMS.configuration.contacts_fields.keys + [:name, :email, :phone, :content, :captcha, :captcha_key])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module RocketCMS
|
2
|
+
module Controllers
|
3
|
+
module News
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
def index
|
7
|
+
@news = model.enabled.after_now.by_date
|
8
|
+
|
9
|
+
unless RocketCMS.configuration.news_per_page.nil?
|
10
|
+
@news = @news.page(params[:page])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def show
|
15
|
+
@news = model.after_now.find(params[:id])
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def model
|
20
|
+
::News
|
21
|
+
end
|
22
|
+
def page_title
|
23
|
+
if @news.class.name == 'News'
|
24
|
+
@news.page_title
|
25
|
+
else
|
26
|
+
super
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module RocketCMS
|
2
|
+
module Controllers
|
3
|
+
module Pages
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
def show
|
6
|
+
if @seo_page.nil? || !@seo_page.persisted?
|
7
|
+
unless params[:id].blank?
|
8
|
+
@seo_page = Page.enabled.find(params[:id])
|
9
|
+
end
|
10
|
+
end
|
11
|
+
if @seo_page.nil?
|
12
|
+
render_404
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RocketCMS
|
2
|
+
module Controllers
|
3
|
+
module Search
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
def index
|
6
|
+
if params[:query].blank?
|
7
|
+
@results = []
|
8
|
+
else
|
9
|
+
@results = Mongoid::Elasticsearch.search({
|
10
|
+
body: {
|
11
|
+
query: {
|
12
|
+
query_string: {
|
13
|
+
query: Mongoid::Elasticsearch::Utils.clean(params[:query])
|
14
|
+
}
|
15
|
+
},
|
16
|
+
highlight: {
|
17
|
+
fields: {
|
18
|
+
name: {},
|
19
|
+
content: {}
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}},
|
23
|
+
page: params[:page],
|
24
|
+
per_page: RocketCMS.configuration.search_per_page,
|
25
|
+
)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/rocket_cms/tasks.rb
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
# require this file to load the tasks
|
2
2
|
require 'rake'
|
3
3
|
|
4
|
-
# Require
|
4
|
+
# Require generator at runtime. If we don't do this the ActionView helpers are included
|
5
5
|
# before the Rails environment can be loaded by other Rake tasks, which causes problems
|
6
6
|
# for those tasks when rendering using ActionView.
|
7
7
|
namespace :rs do
|
8
|
-
# Require
|
8
|
+
# Require generator only. When installed as a plugin the require will fail, so in
|
9
9
|
# that case, load the environment first.
|
10
10
|
task :require do
|
11
11
|
Rake::Task['environment'].invoke
|
12
12
|
end
|
13
|
-
|
14
13
|
end
|
data/lib/rocket_cms/version.rb
CHANGED
data/rocket_cms.gemspec
CHANGED
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.add_development_dependency 'bundler'
|
22
22
|
spec.add_development_dependency 'rake'
|
23
23
|
|
24
|
+
spec.add_dependency 'rails', '~> 4.1.4'
|
24
25
|
spec.add_dependency 'mongoid', '~> 4.0.0.beta1'
|
25
26
|
spec.add_dependency 'jquery-rails'
|
26
27
|
spec.add_dependency 'glebtv-mongoid_nested_set'
|
27
|
-
spec.add_dependency 'simple_form'
|
28
|
+
spec.add_dependency 'simple_form'
|
28
29
|
spec.add_dependency 'glebtv-simple_captcha'
|
29
30
|
spec.add_dependency 'htmlentities'
|
30
31
|
spec.add_dependency 'sanitize'
|
@@ -47,4 +48,6 @@ Gem::Specification.new do |spec|
|
|
47
48
|
spec.add_dependency 'sitemap_generator'
|
48
49
|
spec.add_dependency 'kaminari'
|
49
50
|
spec.add_dependency 'addressable'
|
51
|
+
spec.add_dependency 'thor'
|
52
|
+
spec.add_dependency 'uglifier'
|
50
53
|
end
|
data/template.rb
ADDED
@@ -0,0 +1,511 @@
|
|
1
|
+
rails_spec = (Gem.loaded_specs["railties"] || Gem.loaded_specs["rails"])
|
2
|
+
version = rails_spec.version.to_s
|
3
|
+
|
4
|
+
if Gem::Version.new(version) < Gem::Version.new('4.1.0')
|
5
|
+
puts "You are using an old version of Rails (#{version})"
|
6
|
+
puts "Please update"
|
7
|
+
puts "Stopping"
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
11
|
+
remove_file 'Gemfile'
|
12
|
+
create_file 'Gemfile' do <<-TEXT
|
13
|
+
source 'https://rubygems.org'
|
14
|
+
|
15
|
+
gem 'spring', group: 'development'
|
16
|
+
|
17
|
+
TEXT
|
18
|
+
end
|
19
|
+
|
20
|
+
remove_file '.gitignore'
|
21
|
+
create_file '.gitignore' do <<-TEXT
|
22
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
23
|
+
#
|
24
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
25
|
+
# or operating system, you probably want to add a global ignore instead:
|
26
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
27
|
+
|
28
|
+
/.bundle
|
29
|
+
/log/*.log
|
30
|
+
/tmp
|
31
|
+
/public/system
|
32
|
+
/public/ckeditor_assets
|
33
|
+
/public/assets
|
34
|
+
/config/mongoid.yml
|
35
|
+
/config/sectets.yml
|
36
|
+
TEXT
|
37
|
+
end
|
38
|
+
|
39
|
+
create_file 'extra/.gitkeep' do <<-TEXT
|
40
|
+
TEXT
|
41
|
+
end
|
42
|
+
|
43
|
+
remove_file 'config/initializers/cookies_serializer.rb'
|
44
|
+
create_file 'config/initializers/cookies_serializer.rb' do <<-TEXT
|
45
|
+
# Be sure to restart your server when you modify this file.
|
46
|
+
# json serializer breaks Devise + Mongoid. DO NOT ENABLE
|
47
|
+
# See https://github.com/plataformatec/devise/pull/2882
|
48
|
+
# Rails.application.config.action_dispatch.cookies_serializer = :json
|
49
|
+
Rails.application.config.action_dispatch.cookies_serializer = :marshal
|
50
|
+
TEXT
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
remove_file 'app/controllers/application_controller.rb'
|
56
|
+
create_file 'app/controllers/application_controller.rb' do <<-TEXT
|
57
|
+
class ApplicationController < ActionController::Base
|
58
|
+
include RocketCMS::Controller
|
59
|
+
end
|
60
|
+
TEXT
|
61
|
+
end
|
62
|
+
|
63
|
+
create_file 'config/navigation.rb' do <<-TEXT
|
64
|
+
# empty file to please simple_navigation, we are not using it
|
65
|
+
# See https://github.com/rs-pro/rocket_cms/blob/master/app/controllers/concerns/rs_menu.rb
|
66
|
+
TEXT
|
67
|
+
end
|
68
|
+
|
69
|
+
#gsub_file 'Gemfile', /^(.*)sass-rails(.*)$/, ''
|
70
|
+
|
71
|
+
gem 'rails', '4.1.4'
|
72
|
+
|
73
|
+
gem 'mongoid', '~> 4.0.0'
|
74
|
+
gem 'sass', '~> 3.3.9'
|
75
|
+
|
76
|
+
gem 'rocket_cms'
|
77
|
+
|
78
|
+
gem 'sass-rails', github: 'rails/sass-rails', ref: '3a9e47db7d769221157c82229fc1bade55b580f0'
|
79
|
+
gem 'compass-rails', '~> 2.0.0'
|
80
|
+
gem 'compass', '~> 1.0.0.alpha.20'
|
81
|
+
gem 'slim-rails'
|
82
|
+
gem 'rs_russian'
|
83
|
+
gem 'sentry-raven'
|
84
|
+
gem 'cancancan'
|
85
|
+
|
86
|
+
gem_group :development do
|
87
|
+
gem 'better_errors'
|
88
|
+
gem 'binding_of_caller'
|
89
|
+
gem 'pry-rails'
|
90
|
+
gem 'capistrano', '~> 3.2.0', require: false
|
91
|
+
gem 'rvm1-capistrano3', require: false
|
92
|
+
gem 'glebtv-capistrano-unicorn', require: false
|
93
|
+
gem 'capistrano-bundler', require: false
|
94
|
+
gem 'capistrano-rails', require: false
|
95
|
+
gem 'capistrano-rails-console'
|
96
|
+
gem 'hipchat'
|
97
|
+
gem 'coffee-rails-source-maps'
|
98
|
+
gem 'compass-rails-source-maps'
|
99
|
+
end
|
100
|
+
|
101
|
+
gem_group :test do
|
102
|
+
#gem 'capybara'
|
103
|
+
#gem 'poltergeist'
|
104
|
+
#gem 'simplecov', require: false
|
105
|
+
gem 'rspec-rails'
|
106
|
+
gem 'database_cleaner'
|
107
|
+
gem 'email_spec'
|
108
|
+
gem 'glebtv-mongoid-rspec'
|
109
|
+
#gem 'rspec-collection_matchers'
|
110
|
+
#gem 'timecop'
|
111
|
+
gem 'ffaker'
|
112
|
+
gem 'factory_girl_rails'
|
113
|
+
end
|
114
|
+
|
115
|
+
remove_file 'config/routes.rb'
|
116
|
+
create_file 'config/routes.rb' do <<-TEXT
|
117
|
+
Rails.application.routes.draw do
|
118
|
+
end
|
119
|
+
TEXT
|
120
|
+
end
|
121
|
+
|
122
|
+
application "config.i18n.enforce_available_locales = true"
|
123
|
+
application "config.i18n.available_locales = [:ru, :en]"
|
124
|
+
application "config.i18n.default_locale = :ru"
|
125
|
+
application "config.i18n.locale = :ru"
|
126
|
+
|
127
|
+
application 'config.autoload_paths += %W(#{config.root}/extra)'
|
128
|
+
application 'config.eager_load_paths += %W(#{config.root}/extra)'
|
129
|
+
|
130
|
+
application 'config.time_zone = "Europe/Moscow"'
|
131
|
+
application 'config.assets.paths << Rails.root.join("app", "assets", "fonts")'
|
132
|
+
|
133
|
+
create_file 'README.md', "## Project generated by RocketCMS\n\n"
|
134
|
+
|
135
|
+
create_file '.ruby-version', "#{RUBY_VERSION}\n"
|
136
|
+
create_file '.ruby-gemset', "#{app_name}\n"
|
137
|
+
|
138
|
+
run 'bundle install --without production'
|
139
|
+
# generate "mongoid:config"
|
140
|
+
|
141
|
+
create_file 'config/mongoid.yml' do <<-TEXT
|
142
|
+
development:
|
143
|
+
sessions:
|
144
|
+
default:
|
145
|
+
database: #{app_name.downcase}_development
|
146
|
+
hosts:
|
147
|
+
- localhost:27017
|
148
|
+
test:
|
149
|
+
sessions:
|
150
|
+
default:
|
151
|
+
database: #{app_name.downcase}_test
|
152
|
+
hosts:
|
153
|
+
- localhost:27017
|
154
|
+
TEXT
|
155
|
+
end
|
156
|
+
|
157
|
+
generate "devise:install"
|
158
|
+
generate "devise", "User"
|
159
|
+
gsub_file 'app/models/user.rb', '# :confirmable, :lockable, :timeoutable and :omniauthable', '# :confirmable, :registerable, :timeoutable and :omniauthable'
|
160
|
+
gsub_file 'app/models/user.rb', ':registerable,', ' :lockable,'
|
161
|
+
gsub_file 'app/models/user.rb', '# field :failed_attempts', 'field :failed_attempts'
|
162
|
+
gsub_file 'app/models/user.rb', '# field :unlock_token', 'field :unlock_token'
|
163
|
+
gsub_file 'app/models/user.rb', '# field :locked_at', 'field :locked_at'
|
164
|
+
|
165
|
+
route "mount Ckeditor::Engine => '/ckeditor'"
|
166
|
+
generate "rocket_cms:admin"
|
167
|
+
generate "rocket_cms:ability"
|
168
|
+
generate "rocket_cms:layout"
|
169
|
+
|
170
|
+
generate "rspec:install"
|
171
|
+
|
172
|
+
route "root 'home#index'"
|
173
|
+
route "get '*slug' => 'pages#show'"
|
174
|
+
route "resources :pages, only: [:show]"
|
175
|
+
|
176
|
+
route "get 'search' => 'search#index', as: :search"
|
177
|
+
|
178
|
+
route "get 'contacts/sent' => 'contacts#sent', as: :contacts_sent"
|
179
|
+
route "post 'contacts' => 'contacts#create', as: :create_contacts"
|
180
|
+
route "get 'contacts' => 'contacts#new', as: :contacts"
|
181
|
+
|
182
|
+
route "resources :news, only: [:index, :show]"
|
183
|
+
|
184
|
+
gsub_file 'config/application.rb', /^(.*)config.time_zone(.*)$/, "config.time_zone = 'Europe/Moscow'"
|
185
|
+
|
186
|
+
#capify!
|
187
|
+
|
188
|
+
remove_file 'db/seeds.rb'
|
189
|
+
admin_pw = (0...8).map { (65 + rand(26)).chr }.join
|
190
|
+
create_file 'db/seeds.rb' do <<-TEXT
|
191
|
+
admin_pw = "#{admin_pw}"
|
192
|
+
User.destroy_all
|
193
|
+
User.create!(email: 'admin@#{app_name.downcase}.ru', password: admin_pw, password_confirmation: admin_pw)
|
194
|
+
TEXT
|
195
|
+
end
|
196
|
+
|
197
|
+
remove_file 'Capfile'
|
198
|
+
create_file 'Capfile' do <<-TEXT
|
199
|
+
# Load DSL and Setup Up Stages
|
200
|
+
require 'capistrano/setup'
|
201
|
+
|
202
|
+
# Includes default deployment tasks
|
203
|
+
require 'capistrano/deploy'
|
204
|
+
|
205
|
+
require 'rvm1/capistrano3'
|
206
|
+
require 'capistrano/bundler'
|
207
|
+
require 'capistrano/rails/assets'
|
208
|
+
#require "whenever/capistrano"
|
209
|
+
|
210
|
+
require 'capistrano/unicorn'
|
211
|
+
|
212
|
+
require 'capistrano/rails/console'
|
213
|
+
|
214
|
+
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
|
215
|
+
Dir.glob('lib/capistrano/tasks/*.cap').each { |r| import r }
|
216
|
+
TEXT
|
217
|
+
end
|
218
|
+
|
219
|
+
remove_file 'public/robots.txt'
|
220
|
+
create_file 'public/robots.txt' do <<-TEXT
|
221
|
+
User-Agent: *
|
222
|
+
Disallow: /
|
223
|
+
TEXT
|
224
|
+
end
|
225
|
+
|
226
|
+
port = rand(100..999) * 10
|
227
|
+
|
228
|
+
create_file 'unicorn.conf' do <<-TEXT
|
229
|
+
listen #{port}
|
230
|
+
worker_processes 1
|
231
|
+
timeout 120
|
232
|
+
TEXT
|
233
|
+
end
|
234
|
+
|
235
|
+
create_file 'config/unicorn.rb' do <<-TEXT
|
236
|
+
rails_env = ENV['RAILS_ENV'] || 'production'
|
237
|
+
|
238
|
+
deploy_to = "/data/#{app_name.downcase}/app"
|
239
|
+
#{'rails_root = "#{deploy_to}/current"'}
|
240
|
+
|
241
|
+
#{'tmp_dir = "#{deploy_to}/shared/tmp"
|
242
|
+
pid_dir = "#{tmp_dir}/pids"
|
243
|
+
if File.directory?(tmp_dir) && !File.directory?(pid_dir)
|
244
|
+
puts "creating pid dir #{pid_dir}"
|
245
|
+
Dir.mkdir(pid_dir)
|
246
|
+
end
|
247
|
+
pid_file = "#{pid_dir}/unicorn.pid"'}
|
248
|
+
|
249
|
+
#{'log_file = "#{deploy_to}/shared/log/unicorn.log"'}
|
250
|
+
#{'err_log_file = "#{deploy_to}/shared/log/unicorn.error.log"'}
|
251
|
+
|
252
|
+
old_pid_file = pid_file + '.oldbin'
|
253
|
+
|
254
|
+
worker_processes 1
|
255
|
+
working_directory rails_root
|
256
|
+
|
257
|
+
timeout 120
|
258
|
+
|
259
|
+
# Specify path to socket unicorn listens to,
|
260
|
+
# we will use this in our nginx.conf later
|
261
|
+
|
262
|
+
listen "127.0.0.1:#{port}"
|
263
|
+
|
264
|
+
pid pid_file
|
265
|
+
|
266
|
+
# Set log file paths
|
267
|
+
stderr_path err_log_file
|
268
|
+
stdout_path log_file
|
269
|
+
|
270
|
+
# http://tech.tulentsev.com/2012/03/deploying-with-sinatra-capistrano-unicorn/
|
271
|
+
# NOTE: http://unicorn.bogomips.org/SIGNALS.html
|
272
|
+
preload_app true
|
273
|
+
|
274
|
+
# make sure that Bundler finds the Gemfile
|
275
|
+
before_exec do |server|
|
276
|
+
ENV['BUNDLE_GEMFILE'] = File.join( rails_root, 'Gemfile' )
|
277
|
+
end
|
278
|
+
|
279
|
+
before_fork do |server, worker|
|
280
|
+
# при использовании preload_app = true здесь должно быть закрытие всех открытых сокетов
|
281
|
+
|
282
|
+
# Mongoid сам заботится о переконнекте
|
283
|
+
# http://two.mongoid.org/docs/upgrading.html
|
284
|
+
|
285
|
+
# http://stackoverflow.com/a/9498372/2041969
|
286
|
+
# убиваем параллельный старый-процесс просле старта нового
|
287
|
+
if File.exists?( old_pid_file )
|
288
|
+
begin
|
289
|
+
Process.kill( "QUIT", File.read( old_pid_file ).to_i )
|
290
|
+
rescue Errno::ENOENT, Errno::ESRCH
|
291
|
+
puts "Old master alerady dead"
|
292
|
+
end
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
after_fork do |server, worker|
|
297
|
+
# pid-ы дочерних процессов
|
298
|
+
#{'child_pid_file = server.config[:pid].sub(".pid", ".#{worker.nr}.pid")'}
|
299
|
+
#{'system( "echo #{Process.pid} > #{child_pid_file}" )'}
|
300
|
+
end= ENV['RAILS_ENV'] || 'production'
|
301
|
+
TEXT
|
302
|
+
end
|
303
|
+
|
304
|
+
create_file 'config/deploy.rb' do <<-TEXT
|
305
|
+
set :user, "#{app_name.downcase}"
|
306
|
+
set :application, '#{app_name.downcase}'
|
307
|
+
set :scm, :git
|
308
|
+
set :repo_url, 'git@github.com:rs-pro/#{app_name.downcase}.git'
|
309
|
+
|
310
|
+
# ask :branch, proc { `git rev-parse --abbrev-ref HEAD`.chomp }
|
311
|
+
set :branch, ENV["REVISION"] || ENV["BRANCH_NAME"] || "master"
|
312
|
+
|
313
|
+
#{'set :deploy_to, "/data/#{fetch :application}/app"'}
|
314
|
+
|
315
|
+
# require 'hipchat/capistrano'
|
316
|
+
# set :hipchat_token, ""
|
317
|
+
# set :hipchat_room_name, "#{app_name}"
|
318
|
+
# set :hipchat_announce, false
|
319
|
+
|
320
|
+
set :rvm_type, :user
|
321
|
+
#{'set :rvm_ruby_version, "2.1.2@#{fetch :application}"'}
|
322
|
+
set :use_sudo, false
|
323
|
+
|
324
|
+
set :keep_releases, 20
|
325
|
+
|
326
|
+
set :linked_files, %w{config/mongoid.yml config/secrets.yml}
|
327
|
+
set :linked_dirs, %w{log tmp vendor/bundle public/assets public/system public/uploads public/ckeditor_assets public/sitemap}
|
328
|
+
|
329
|
+
namespace :db do
|
330
|
+
desc "Create the indexes defined on your mongoid models"
|
331
|
+
task :create_mongoid_indexes do
|
332
|
+
on roles(:app) do
|
333
|
+
execute :rake, "db:mongoid:create_indexes"
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
namespace :deploy do
|
339
|
+
task :restart do
|
340
|
+
end
|
341
|
+
#after :finishing, 'deploy:cleanup'
|
342
|
+
desc "Update the crontab"
|
343
|
+
task :update_crontab do
|
344
|
+
on roles(:app) do
|
345
|
+
#{'execute "cd #{release_path}; #{fetch(:tmp_dir)}/#{fetch :application}/rvm-auto.sh . bundle exec whenever --update-crontab #{fetch :user} --set \'environment=#{fetch :stage}¤t_path=#{release_path}\'; true"'}
|
346
|
+
end
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
after 'deploy:publishing', 'deploy:restart'
|
351
|
+
after 'deploy:restart', 'unicorn:duplicate'
|
352
|
+
# before "deploy:update_crontab", 'rvm1:hook'
|
353
|
+
# after "deploy:restart", "deploy:update_crontab"
|
354
|
+
TEXT
|
355
|
+
end
|
356
|
+
|
357
|
+
create_file 'config/deploy/production.rb' do <<-TEXT
|
358
|
+
set :stage, :production
|
359
|
+
|
360
|
+
server 'rscz.ru', user: '#{app_name.downcase}', roles: %w{web app db}
|
361
|
+
|
362
|
+
set :rails_env, 'production'
|
363
|
+
set :unicorn_env, 'production'
|
364
|
+
set :unicorn_rack_env, 'production'
|
365
|
+
TEXT
|
366
|
+
end
|
367
|
+
|
368
|
+
create_file 'lib/tasks/dl.thor' do <<-TEXT
|
369
|
+
class Dl < Thor
|
370
|
+
package_name "dl"
|
371
|
+
include Thor::Actions
|
372
|
+
|
373
|
+
no_commands do
|
374
|
+
def load_env
|
375
|
+
return if defined?(Rails)
|
376
|
+
require File.expand_path("../../../config/environment", __FILE__)
|
377
|
+
end
|
378
|
+
|
379
|
+
def env_from
|
380
|
+
'production'
|
381
|
+
end
|
382
|
+
def ssh_host
|
383
|
+
'#{app_name.downcase}.ru'
|
384
|
+
end
|
385
|
+
def ssh_user
|
386
|
+
'#{app_name.downcase}'
|
387
|
+
end
|
388
|
+
def ssh_opts
|
389
|
+
{}
|
390
|
+
end
|
391
|
+
|
392
|
+
def remote_dump_path
|
393
|
+
'/data/#{app_name.downcase}/tmp_dump'
|
394
|
+
end
|
395
|
+
def remote_app_path
|
396
|
+
"/data/#{app_name.downcase}/app/current"
|
397
|
+
end
|
398
|
+
|
399
|
+
def local_auth(conf)
|
400
|
+
if conf['password'].nil?
|
401
|
+
""
|
402
|
+
else
|
403
|
+
#{'"-u #{conf["username"]} -p #{conf["password"]}]"'}
|
404
|
+
end
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
desc "download", "clone files and DB from production"
|
409
|
+
def download
|
410
|
+
load_env
|
411
|
+
require 'net/ssh'
|
412
|
+
|
413
|
+
puts "backup remote DB via ssh"
|
414
|
+
r_conf = nil
|
415
|
+
Net::SSH.start(ssh_host, ssh_user, ssh_opts) do |ssh|
|
416
|
+
r_conf = YAML.load(ssh.exec!("cat #{'#{remote_app_path}'}/config/mongoid.yml"))[env_from]['sessions']['default']
|
417
|
+
puts ssh.exec!("rm -R #{'#{remote_dump_path}'}")
|
418
|
+
puts ssh.exec!("mkdir -p #{'#{remote_dump_path}'}")
|
419
|
+
dump = "mongodump -u #{'#{r_conf[\'username\']} -p #{r_conf[\'password\']} -d #{r_conf[\'database\']} --authenticationDatabase #{r_conf[\'database\']} -o #{remote_dump_path}"'}
|
420
|
+
puts dump
|
421
|
+
puts ssh.exec!(dump)
|
422
|
+
end
|
423
|
+
conf = YAML.load_file(Rails.root.join('config', 'mongoid.yml'))[Rails.env]['sessions']['default']
|
424
|
+
db_to = conf['database']
|
425
|
+
db_path = Rails.root.join("tmp", "dmp", "dump", db_to).to_s
|
426
|
+
#{'`mkdir -p #{db_path}`'}
|
427
|
+
#{'rsync = "rsync -e ssh --progress -lzuogthvr #{ssh_user}@#{ssh_host}:#{remote_dump_path}/#{r_conf[\'database\']}/ #{db_path}/"'}
|
428
|
+
puts rsync
|
429
|
+
pipe = IO.popen(rsync)
|
430
|
+
while (line = pipe.gets)
|
431
|
+
print line
|
432
|
+
end
|
433
|
+
|
434
|
+
puts "restoring DB"
|
435
|
+
if Rails.env.staging?
|
436
|
+
#{'restore = "mongorestore --drop -d #{db_to} -u #{remote_db_user} -p #{remote_db_pass} --authenticationDatabase admin #{db_path}"'}
|
437
|
+
else
|
438
|
+
#{'restore = "mongorestore --drop -d #{db_to} #{local_auth(conf)} #{db_path}"'}
|
439
|
+
end
|
440
|
+
puts restore
|
441
|
+
pipe = IO.popen(restore)
|
442
|
+
while (line = pipe.gets)
|
443
|
+
print line
|
444
|
+
end
|
445
|
+
|
446
|
+
#{'rsync = "rsync -e ssh --progress -lzuogthvr #{ssh_user}@#{ssh_host}:#{remote_app_path}/public/system/ #{Rails.root.join(\'public/system\')}/"'}
|
447
|
+
puts rsync
|
448
|
+
pipe = IO.popen(rsync)
|
449
|
+
while (line = pipe.gets)
|
450
|
+
print line
|
451
|
+
end
|
452
|
+
|
453
|
+
#{'rsync = "rsync -e ssh --progress -lzuogthvr #{ssh_user}@#{ssh_host}:#{remote_app_path}/public/ckeditor_assets/ #{Rails.root.join(\'public/ckeditor_assets\')}/"'}
|
454
|
+
puts rsync
|
455
|
+
pipe = IO.popen(rsync)
|
456
|
+
while (line = pipe.gets)
|
457
|
+
print line
|
458
|
+
end
|
459
|
+
puts "cloned files"
|
460
|
+
puts "done"
|
461
|
+
end
|
462
|
+
end
|
463
|
+
TEXT
|
464
|
+
end
|
465
|
+
remove_file 'app/views/layouts/application.html.erb'
|
466
|
+
|
467
|
+
application do <<-TEXT
|
468
|
+
config.generators do |g|
|
469
|
+
g.test_framework :rspec
|
470
|
+
g.view_specs false
|
471
|
+
g.helper_specs false
|
472
|
+
g.feature_specs false
|
473
|
+
g.template_engine :slim
|
474
|
+
g.stylesheets false
|
475
|
+
g.javascripts false
|
476
|
+
g.helper false
|
477
|
+
g.fixture_replacement :factory_girl, :dir => 'spec/factories'
|
478
|
+
end
|
479
|
+
TEXT
|
480
|
+
end
|
481
|
+
|
482
|
+
remove_file 'app/assets/stylesheets/application.css'
|
483
|
+
create_file 'app/assets/stylesheets/application.css.sass' do <<-TEXT
|
484
|
+
@import 'compass'
|
485
|
+
@import 'rocket_cms'
|
486
|
+
|
487
|
+
#wrapper
|
488
|
+
width: 960px
|
489
|
+
margin: 0 auto
|
490
|
+
#sidebar
|
491
|
+
float: left
|
492
|
+
width: 200px
|
493
|
+
#content
|
494
|
+
float: right
|
495
|
+
width: 750px
|
496
|
+
|
497
|
+
@import "compass/layout/sticky-footer"
|
498
|
+
+sticky-footer(50px)
|
499
|
+
TEXT
|
500
|
+
end
|
501
|
+
|
502
|
+
remove_file 'app/assets/javascripts/application.js'
|
503
|
+
create_file 'app/assets/javascripts/application.js.coffee' do <<-TEXT
|
504
|
+
#= require rocket_cms
|
505
|
+
TEXT
|
506
|
+
end
|
507
|
+
|
508
|
+
git :init
|
509
|
+
git add: "."
|
510
|
+
git commit: %Q{ -m 'Initial commit' }
|
511
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocket_cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- glebtv
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-07-
|
11
|
+
date: 2014-07-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 4.1.4
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.1.4
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: mongoid
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,16 +98,16 @@ dependencies:
|
|
84
98
|
name: simple_form
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - ">="
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
103
|
+
version: '0'
|
90
104
|
type: :runtime
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - ">="
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version: '
|
110
|
+
version: '0'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: glebtv-simple_captcha
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -402,6 +416,34 @@ dependencies:
|
|
402
416
|
- - ">="
|
403
417
|
- !ruby/object:Gem::Version
|
404
418
|
version: '0'
|
419
|
+
- !ruby/object:Gem::Dependency
|
420
|
+
name: thor
|
421
|
+
requirement: !ruby/object:Gem::Requirement
|
422
|
+
requirements:
|
423
|
+
- - ">="
|
424
|
+
- !ruby/object:Gem::Version
|
425
|
+
version: '0'
|
426
|
+
type: :runtime
|
427
|
+
prerelease: false
|
428
|
+
version_requirements: !ruby/object:Gem::Requirement
|
429
|
+
requirements:
|
430
|
+
- - ">="
|
431
|
+
- !ruby/object:Gem::Version
|
432
|
+
version: '0'
|
433
|
+
- !ruby/object:Gem::Dependency
|
434
|
+
name: uglifier
|
435
|
+
requirement: !ruby/object:Gem::Requirement
|
436
|
+
requirements:
|
437
|
+
- - ">="
|
438
|
+
- !ruby/object:Gem::Version
|
439
|
+
version: '0'
|
440
|
+
type: :runtime
|
441
|
+
prerelease: false
|
442
|
+
version_requirements: !ruby/object:Gem::Requirement
|
443
|
+
requirements:
|
444
|
+
- - ">="
|
445
|
+
- !ruby/object:Gem::Version
|
446
|
+
version: '0'
|
405
447
|
description: RocketCMS
|
406
448
|
email:
|
407
449
|
- glebtv@gmail.com
|
@@ -431,6 +473,7 @@ files:
|
|
431
473
|
- app/controllers/concerns/rs_menu.rb
|
432
474
|
- app/controllers/concerns/rs_pages.rb
|
433
475
|
- app/controllers/contacts_controller.rb
|
476
|
+
- app/controllers/home_controller.rb
|
434
477
|
- app/controllers/news_controller.rb
|
435
478
|
- app/controllers/pages_controller.rb
|
436
479
|
- app/controllers/search_controller.rb
|
@@ -451,6 +494,7 @@ files:
|
|
451
494
|
- app/models/menu.rb
|
452
495
|
- app/models/news.rb
|
453
496
|
- app/models/page.rb
|
497
|
+
- app/views/blocks/_footer.html.haml
|
454
498
|
- app/views/contact_mailer/new_message_email.html.haml
|
455
499
|
- app/views/contacts/new.html.haml
|
456
500
|
- app/views/contacts/sent.html.haml
|
@@ -458,6 +502,9 @@ files:
|
|
458
502
|
- app/views/errors/error_403.html.haml
|
459
503
|
- app/views/errors/error_404.html.haml
|
460
504
|
- app/views/errors/error_500.html.haml
|
505
|
+
- app/views/home/index.html.haml
|
506
|
+
- app/views/layouts/application.html.haml
|
507
|
+
- app/views/layouts/application.html.slim
|
461
508
|
- app/views/news/index.html.haml
|
462
509
|
- app/views/news/show.html.haml
|
463
510
|
- app/views/pages/show.html.haml
|
@@ -482,7 +529,9 @@ files:
|
|
482
529
|
- config/locales/ru.simple_captcha.yml
|
483
530
|
- config/locales/ru.simple_form.yml
|
484
531
|
- lib/filename_to_slug.rb
|
532
|
+
- lib/generators/rocket_cms/ability_generator.rb
|
485
533
|
- lib/generators/rocket_cms/admin_generator.rb
|
534
|
+
- lib/generators/rocket_cms/layout_generator.rb
|
486
535
|
- lib/generators/rocket_cms/templates/ability.erb
|
487
536
|
- lib/generators/rocket_cms/templates/admin.erb
|
488
537
|
- lib/generators/rocket_cms/utils.rb
|
@@ -492,6 +541,10 @@ files:
|
|
492
541
|
- lib/rocket_cms/admin.rb
|
493
542
|
- lib/rocket_cms/configuration.rb
|
494
543
|
- lib/rocket_cms/controller.rb
|
544
|
+
- lib/rocket_cms/controllers/contacts.rb
|
545
|
+
- lib/rocket_cms/controllers/news.rb
|
546
|
+
- lib/rocket_cms/controllers/pages.rb
|
547
|
+
- lib/rocket_cms/controllers/search.rb
|
495
548
|
- lib/rocket_cms/elastic_search.rb
|
496
549
|
- lib/rocket_cms/engine.rb
|
497
550
|
- lib/rocket_cms/model.rb
|
@@ -506,6 +559,7 @@ files:
|
|
506
559
|
- lib/rocket_cms/version.rb
|
507
560
|
- lib/smart_excerpt.rb
|
508
561
|
- rocket_cms.gemspec
|
562
|
+
- template.rb
|
509
563
|
homepage: https://github.com/rs-pro/rocket_cms
|
510
564
|
licenses:
|
511
565
|
- MIT
|