tomify 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +19 -0
- data/Rakefile +6 -0
- data/app/assets/images/tomify/gifs/basketball.gif +0 -0
- data/app/assets/images/tomify/gifs/laughing.gif +0 -0
- data/app/assets/images/tomify/gifs/sneer.gif +0 -0
- data/app/assets/images/tomify/gifs/wind.gif +0 -0
- data/app/assets/images/tomify/gifs/woods.gif +0 -0
- data/app/assets/javascripts/tomify/default/array.coffee +4 -0
- data/app/assets/javascripts/tomify/default/jquery.patch.coffee +9 -0
- data/app/assets/javascripts/tomify/default/object.coffee +4 -0
- data/app/assets/javascripts/tomify/default/string.coffee +40 -0
- data/app/assets/javascripts/tomify/dynamic/classes/component.coffee +7 -0
- data/app/assets/javascripts/tomify/dynamic/classes/field.coffee +24 -0
- data/app/assets/javascripts/tomify/dynamic/classes/form.coffee +72 -0
- data/app/assets/javascripts/tomify/dynamic/classes/model.coffee +41 -0
- data/app/assets/javascripts/tomify/dynamic/classes/namespace.coffee +24 -0
- data/app/assets/javascripts/tomify/dynamic/classes/observer.coffee +22 -0
- data/app/assets/javascripts/tomify/dynamic/classes/request.coffee +26 -0
- data/app/assets/javascripts/tomify/dynamic/classes/store.coffee +37 -0
- data/app/assets/javascripts/tomify/dynamic/global.coffee +16 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/admin/pages.coffee.erb +30 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/admin/settings.coffee +27 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/admin/sidebars.coffee +16 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/admin/uploads.coffee +13 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/admin/users.coffee +18 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/edit.coffee +51 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/fields/checkbox.coffee +8 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/fields/default.coffee +3 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/fields/file.coffee +3 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/fields/markdown.coffee +9 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/fields/select.coffee +8 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/fields/textarea.coffee +3 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/index.coffee +87 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/admin_navbar.coffee +29 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/analytics.coffee +34 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/footer.coffee +11 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/header.coffee +28 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/messages.coffee +18 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/navbar.coffee +6 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/layout/public_navbar.coffee +56 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/new.coffee +48 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/pagination.coffee +29 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/public/passwords/new.coffee +38 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/public/sessions/new.coffee +40 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/public/sessions/show.coffee +35 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/public/users/edit.coffee +42 -0
- data/app/assets/javascripts/tomify/dynamic/react/components/public/users/new.coffee +35 -0
- data/app/assets/javascripts/tomify/dynamic/react/mixins/follow.coffee +51 -0
- data/app/assets/javascripts/tomify/dynamic/react/mixins/will-initialize.coffee +7 -0
- data/app/assets/javascripts/tomify/dynamic/react/mount.coffee +9 -0
- data/app/assets/javascripts/tomify/turbolinks/compatibility.coffee +29 -0
- data/app/assets/javascripts/tomify/turbolinks/react.coffee +5 -0
- data/app/assets/javascripts/tomify-dynamic.js +8 -0
- data/app/assets/javascripts/tomify.js +1 -0
- data/app/assets/stylesheets/_tomify.scss +1 -0
- data/app/assets/stylesheets/tomify/_default.scss +26 -0
- data/app/assets/stylesheets/tomify/_footer.scss +1 -0
- data/app/assets/stylesheets/tomify/_navbar.scss +43 -0
- data/app/assets/stylesheets/tomify/_page.scss +31 -0
- data/app/assets/stylesheets/tomify/_pagination.scss +5 -0
- data/app/assets/stylesheets/tomify/_variables.scss +10 -0
- data/app/controllers/tomify/admin/controller.rb +7 -0
- data/app/controllers/tomify/admin/pages_controller.rb +2 -0
- data/app/controllers/tomify/admin/settings_controller.rb +2 -0
- data/app/controllers/tomify/admin/sidebars_controller.rb +2 -0
- data/app/controllers/tomify/admin/uploads_controller.rb +2 -0
- data/app/controllers/tomify/admin/users_controller.rb +2 -0
- data/app/controllers/tomify/api/admin/controller.rb +3 -0
- data/app/controllers/tomify/api/admin/pages_controller.rb +2 -0
- data/app/controllers/tomify/api/admin/settings_controller.rb +2 -0
- data/app/controllers/tomify/api/admin/sidebars_controller.rb +2 -0
- data/app/controllers/tomify/api/admin/uploads_controller.rb +2 -0
- data/app/controllers/tomify/api/admin/users_controller.rb +7 -0
- data/app/controllers/tomify/api/public/controller.rb +3 -0
- data/app/controllers/tomify/api/public/passwords_controller.rb +10 -0
- data/app/controllers/tomify/api/public/sessions_controller.rb +19 -0
- data/app/controllers/tomify/api/public/users_controller.rb +25 -0
- data/app/controllers/tomify/concerns/api/admin.rb +9 -0
- data/app/controllers/tomify/concerns/api/helpers.rb +57 -0
- data/app/controllers/tomify/concerns/api/json.rb +46 -0
- data/app/controllers/tomify/concerns/api/public.rb +9 -0
- data/app/controllers/tomify/concerns/default/auth_helper.rb +22 -0
- data/app/controllers/tomify/concerns/default/env_helper.rb +34 -0
- data/app/controllers/tomify/concerns/default/helper.rb +13 -0
- data/app/controllers/tomify/concerns/default/react_helper.rb +7 -0
- data/app/controllers/tomify/concerns/default.rb +17 -0
- data/app/controllers/tomify/public/controller.rb +2 -0
- data/app/controllers/tomify/public/pages_controller.rb +22 -0
- data/app/controllers/tomify/public/sessions_controller.rb +5 -0
- data/app/controllers/tomify/public/users_controller.rb +7 -0
- data/app/controllers/tomify_controller.rb +3 -0
- data/app/helpers/tomify/carrierwave_helper.rb +17 -0
- data/app/helpers/tomify/email_helper.rb +19 -0
- data/app/helpers/tomify/render_helper.rb +13 -0
- data/app/helpers/tomify/timezone_helper.rb +5 -0
- data/app/mailers/tomify/user_mailer.rb +13 -0
- data/app/mailers/tomify_mailer.rb +14 -0
- data/app/models/tomify/concerns/page.rb +74 -0
- data/app/models/tomify/concerns/sidebar.rb +18 -0
- data/app/models/tomify/concerns/token.rb +18 -0
- data/app/models/tomify/concerns/upload.rb +36 -0
- data/app/models/tomify/concerns/user.rb +52 -0
- data/app/models/tomify/page.rb +3 -0
- data/app/models/tomify/setting/boolean.rb +11 -0
- data/app/models/tomify/setting/json.rb +11 -0
- data/app/models/tomify/setting/text.rb +3 -0
- data/app/models/tomify/setting/uploader.rb +6 -0
- data/app/models/tomify/setting.rb +48 -0
- data/app/models/tomify/sidebar.rb +3 -0
- data/app/models/tomify/token.rb +3 -0
- data/app/models/tomify/upload.rb +3 -0
- data/app/models/tomify/user.rb +3 -0
- data/app/models/tomify_record.rb +33 -0
- data/app/uploaders/tomify/file_uploader.rb +5 -0
- data/app/uploaders/tomify/setting_uploader.rb +7 -0
- data/app/uploaders/tomify_uploader.rb +20 -0
- data/app/views/templates/contact.haml +24 -0
- data/app/views/templates/default.haml +4 -0
- data/app/views/tomify/defaults/_body.haml +8 -0
- data/app/views/tomify/defaults/_container.haml +3 -0
- data/app/views/tomify/defaults/_env.haml +2 -0
- data/app/views/tomify/defaults/_head.haml +14 -0
- data/app/views/tomify/defaults/_meta.haml +17 -0
- data/app/views/tomify/defaults/_sharing.haml +23 -0
- data/app/views/tomify/layouts/application.haml +4 -0
- data/app/views/tomify/layouts/mailer.haml +7 -0
- data/app/views/tomify/mailers/user_mailer/invite.haml +13 -0
- data/app/views/tomify/mailers/user_mailer/reset_password.haml +17 -0
- data/config/initializers/assets.rb +7 -0
- data/config/initializers/database.rb +3 -0
- data/config/initializers/flash_patch.rb +15 -0
- data/config/initializers/mailer.rb +4 -0
- data/config/initializers/renderers.rb +4 -0
- data/config/initializers/settings.rb +5 -0
- data/config/routes.rb +38 -0
- data/db/migrate/19900000000000_create_users.rb +13 -0
- data/db/migrate/19900000000001_create_tokens.rb +10 -0
- data/db/migrate/19900000000002_create_settings.rb +13 -0
- data/db/migrate/19900000000003_create_uploads.rb +13 -0
- data/db/migrate/19900000000004_create_pages.rb +22 -0
- data/db/migrate/19900000000005_create_sidebars.rb +12 -0
- data/db/seeds.rb +43 -0
- data/lib/generators/tomify/bundle/bundle_generator.rb +12 -0
- data/lib/generators/tomify/bundle/templates/default.js +2 -0
- data/lib/generators/tomify/bundle/templates/react.js +3 -0
- data/lib/previews/tomify/user_preview.rb +9 -0
- data/lib/previews/tomify_preview.rb +6 -0
- data/lib/tasks/package.rake +40 -0
- data/lib/tomify/constantly.rb +12 -0
- data/lib/tomify/engine.rb +11 -0
- data/lib/tomify/version.rb +3 -0
- data/lib/tomify.rb +40 -0
- data/vendor/tomify/development/react.js +20494 -0
- data/vendor/tomify/production/react.js +20352 -0
- metadata +219 -0
@@ -0,0 +1,8 @@
|
|
1
|
+
//= require tomify
|
2
|
+
//= require tomify/dynamic/classes/namespace
|
3
|
+
//= require tomify/dynamic/classes/observer
|
4
|
+
//= require react
|
5
|
+
//= require_tree ./tomify/dynamic/react/mixins
|
6
|
+
//= require_tree ./tomify/dynamic/classes
|
7
|
+
//= require tomify/dynamic/global
|
8
|
+
//= require_tree ./tomify/dynamic
|
@@ -0,0 +1 @@
|
|
1
|
+
//= require_tree ./tomify/default
|
@@ -0,0 +1 @@
|
|
1
|
+
@import "tomify/*";
|
@@ -0,0 +1,26 @@
|
|
1
|
+
@import "bootstrap";
|
2
|
+
@import "variables";
|
3
|
+
@import "font-awesome";
|
4
|
+
@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,700|Dosis:400,700);
|
5
|
+
|
6
|
+
html, body {
|
7
|
+
margin: 0;
|
8
|
+
padding: 0;
|
9
|
+
height: 100%;
|
10
|
+
}
|
11
|
+
body {
|
12
|
+
color: $black;
|
13
|
+
font-family: "Raleway", sans-serif;
|
14
|
+
}
|
15
|
+
a {
|
16
|
+
color: $brand;
|
17
|
+
&:active, &:focus, &:hover { color: $blue; }
|
18
|
+
}
|
19
|
+
em { font-size: 24px; }
|
20
|
+
|
21
|
+
.panel-heading {
|
22
|
+
h4 {
|
23
|
+
display: inline-block;
|
24
|
+
a { margin-left: 10px; }
|
25
|
+
}
|
26
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
footer { padding-top: 40px; }
|
@@ -0,0 +1,43 @@
|
|
1
|
+
.admin-navbar {
|
2
|
+
margin-bottom: 0;
|
3
|
+
border-radius: 0;
|
4
|
+
border-color: $brand;
|
5
|
+
background-color: $brand;
|
6
|
+
.navbar-brand, .navbar-nav > li > a { color: $white; }
|
7
|
+
.navbar-toggle .icon-bar { background-color: $white; }
|
8
|
+
}
|
9
|
+
|
10
|
+
.navbar.center {
|
11
|
+
text-align: center;
|
12
|
+
|
13
|
+
.navbar-brand img { height: 100%; }
|
14
|
+
}
|
15
|
+
|
16
|
+
.navbar, .alert {
|
17
|
+
margin-bottom: 0;
|
18
|
+
|
19
|
+
.container-fluid {
|
20
|
+
margin-top: 0;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
.brand-navbar {
|
25
|
+
margin-bottom: 0;
|
26
|
+
border-radius: 0;
|
27
|
+
border-color: $brand;
|
28
|
+
background-color: $brand;
|
29
|
+
.navbar-brand, .navbar-nav > li > a { color: $white; }
|
30
|
+
.navbar-toggle .icon-bar { background-color: $white; }
|
31
|
+
}
|
32
|
+
|
33
|
+
.container-fluid {
|
34
|
+
margin-top: 20px;
|
35
|
+
}
|
36
|
+
|
37
|
+
@media screen and (min-width: $screen-sm) {
|
38
|
+
.navbar.center .nav {
|
39
|
+
display: inline-block;
|
40
|
+
float: none;
|
41
|
+
vertical-align: top;
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
.page {
|
2
|
+
h1 { color: $brand; }
|
3
|
+
h2, h3 { font-style: italic; }
|
4
|
+
h2 { font-size: 1.5em; }
|
5
|
+
h3 { font-size: 1.25em; }
|
6
|
+
h2, h3, table, p, li { text-align: left; }
|
7
|
+
table { width: 100%; }
|
8
|
+
> ul > li {
|
9
|
+
margin-top: 10px;
|
10
|
+
font-size: 24px;
|
11
|
+
&:before { top: -1px; }
|
12
|
+
:not(p) { font-size: 14px; }
|
13
|
+
}
|
14
|
+
ul {
|
15
|
+
list-style-type: none;
|
16
|
+
padding-left: 0;
|
17
|
+
}
|
18
|
+
li {
|
19
|
+
position: relative;
|
20
|
+
padding-left: 25px;
|
21
|
+
&:before {
|
22
|
+
position: absolute;
|
23
|
+
top: 0;
|
24
|
+
left: 0;
|
25
|
+
font-family: "FontAwesome";
|
26
|
+
content: "\f058";
|
27
|
+
color: $brand;
|
28
|
+
}
|
29
|
+
ul li:before { content: "\f055"; }
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class Tomify::Api::Admin::UsersController < Tomify.controllers.admin_api
|
2
|
+
def destroy
|
3
|
+
@record = model.find(params[:id])
|
4
|
+
return super unless @record.email == "tom@tomify.me" || @record.id == current_user.id
|
5
|
+
render json: { type: :danger, message: "You shall not pass" }
|
6
|
+
end
|
7
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Tomify::Api::Public::PasswordsController < Tomify.controllers.public_api
|
2
|
+
def create
|
3
|
+
if user = Tomify.models.user.find_by(email: params[:password][:email])
|
4
|
+
Tomify.mailers.user.reset_password(user).deliver_now
|
5
|
+
render json: { type: :success, message: "Email Sent" }
|
6
|
+
else
|
7
|
+
render json: { type: :warning, message: "Email could not be found" }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class Tomify::Api::Public::SessionsController < Tomify.controllers.public_api
|
2
|
+
def create
|
3
|
+
email = params[:session][:email].strip.downcase
|
4
|
+
user = Tomify.models.user.find_by(email: email)
|
5
|
+
if user && user.password_digest && user.authenticate(params[:session][:password])
|
6
|
+
session[:current_user_id] = user.id
|
7
|
+
flash[:success] = "Welcome #{current_user.name}!"
|
8
|
+
render json: { type: :success }
|
9
|
+
else
|
10
|
+
render json: { type: :warning, message: "Invalid Credentials" }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroy
|
15
|
+
flash[:success] = "Goodbye #{current_user.name}" if current_user
|
16
|
+
session[:current_user_id] = nil
|
17
|
+
render json: { type: :success }
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Tomify::Api::Public::UsersController < Tomify.controllers.public_api
|
2
|
+
before_action :require_user!, only: [:show, :update]
|
3
|
+
before_action :set_record, only: [:show, :update]
|
4
|
+
before_action :not_found, only: :create, unless: "setting(:allow_signup)"
|
5
|
+
|
6
|
+
def create
|
7
|
+
session[:current_user_id] = Tomify.models.user.create!(record_params).id
|
8
|
+
flash[:success] = "Welcome #{current_user.name}!"
|
9
|
+
render json: { type: :success, message: "Welcome #{current_user.name}!" }
|
10
|
+
rescue ActiveRecord::RecordInvalid => e
|
11
|
+
render json: { type: :warning, message: e.record.errors.full_messages.join(", ") }
|
12
|
+
end
|
13
|
+
|
14
|
+
def update
|
15
|
+
current_user.update!(record_params)
|
16
|
+
render json: { type: :success, message: "Profile Updated" }
|
17
|
+
rescue ActiveRecord::RecordInvalid => e
|
18
|
+
render json: { type: :warning, message: e.record.errors.full_messages.join(", ") }
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
def set_record
|
23
|
+
@record = current_user
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Tomify::Concerns::Api::Helpers
|
2
|
+
def find_records
|
3
|
+
@records ||= model.where(search_params)
|
4
|
+
end
|
5
|
+
|
6
|
+
def find_record
|
7
|
+
@record ||= model.find(params[:id])
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_record
|
11
|
+
@record ||= model.create!(record_params)
|
12
|
+
end
|
13
|
+
|
14
|
+
def update_record
|
15
|
+
@record.update!(record_params)
|
16
|
+
end
|
17
|
+
|
18
|
+
def destroy_record
|
19
|
+
@record.destroy!
|
20
|
+
end
|
21
|
+
|
22
|
+
def record_params
|
23
|
+
params.require(model_param).permit(model.default_params)
|
24
|
+
end
|
25
|
+
|
26
|
+
def search_params
|
27
|
+
@search_params = {}
|
28
|
+
@search_params[:created_at] = date_range(params[:created_at]) if params[:created_at]
|
29
|
+
@search_params[:updated_at] = date_range(params[:updated_at]) if params[:updated_at]
|
30
|
+
@search_params
|
31
|
+
end
|
32
|
+
|
33
|
+
def model
|
34
|
+
@model ||= controller_name.chomp("s").titleize.constantize
|
35
|
+
end
|
36
|
+
|
37
|
+
def model
|
38
|
+
return @model if @model
|
39
|
+
@model = model_name.constantize if Object.const_defined? model_name
|
40
|
+
@model ||= "Tomify::#{model_name}".constantize
|
41
|
+
end
|
42
|
+
|
43
|
+
def model_name
|
44
|
+
@model_name ||= controller_name.chomp("s").titleize
|
45
|
+
end
|
46
|
+
|
47
|
+
def model_param
|
48
|
+
@model_param ||= controller_name.chomp("s")
|
49
|
+
end
|
50
|
+
|
51
|
+
def date_range(start_date, end_date = nil)
|
52
|
+
start_date = DateTime.strptime(start_date, "%D")
|
53
|
+
end_date = end_date ? DateTime.strptime(end_date, "%D") : DateTime.now
|
54
|
+
|
55
|
+
(start_date.beginning_of_day)..(end_date.end_of_day)
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Tomify::Concerns::Api::JSON
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
include Tomify::Concerns::Api::Helpers
|
5
|
+
|
6
|
+
included do
|
7
|
+
rescue_from "ActiveRecord::RecordInvalid" do |e|
|
8
|
+
render json: {
|
9
|
+
type: :warning,
|
10
|
+
data: e.record,
|
11
|
+
message: e.record.errors.full_messages.join(", ")
|
12
|
+
}
|
13
|
+
end
|
14
|
+
|
15
|
+
rescue_from "ActiveRecord::RecordNotDestroyed" do |e|
|
16
|
+
render json: { type: :warning, message: "#{model_name} could not be deleted" }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def index
|
21
|
+
find_records
|
22
|
+
render json: { type: :success, data: @records }
|
23
|
+
end
|
24
|
+
|
25
|
+
def show
|
26
|
+
find_record
|
27
|
+
render json: { type: :success, data: @record }
|
28
|
+
end
|
29
|
+
|
30
|
+
def create
|
31
|
+
create_record
|
32
|
+
render json: { type: :success, data: @record, message: "#{model_name} Created" }
|
33
|
+
end
|
34
|
+
|
35
|
+
def update
|
36
|
+
find_record
|
37
|
+
update_record
|
38
|
+
render json: { type: :success, data: @record, message: "#{model_name} Updated" }
|
39
|
+
end
|
40
|
+
|
41
|
+
def destroy
|
42
|
+
find_record
|
43
|
+
destroy_record
|
44
|
+
render json: { type: :danger, message: "#{model_name} Deleted" }
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Tomify::Concerns::Default::AuthHelper
|
2
|
+
def not_found
|
3
|
+
raise ActionController::RoutingError.new("Not Found")
|
4
|
+
end
|
5
|
+
|
6
|
+
def current_user
|
7
|
+
@current_user ||= Tomify.models.user.find_by(id: session[:current_user_id])
|
8
|
+
end
|
9
|
+
|
10
|
+
def require_user!
|
11
|
+
not_found unless current_user
|
12
|
+
end
|
13
|
+
|
14
|
+
def require_admin!
|
15
|
+
redirect_to root_path unless current_user.admin
|
16
|
+
end
|
17
|
+
|
18
|
+
def check_token
|
19
|
+
return unless params[:token] && user = Tomify.models.user.joins(:tokens).find_by(tokens: { uuid: params[:token] })
|
20
|
+
session[:current_user_id] = user.id
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Tomify::Concerns::Default::EnvHelper
|
2
|
+
def js_env
|
3
|
+
{
|
4
|
+
messages: flash.collect { |key, value| { type: key, text: value }},
|
5
|
+
navbar: {
|
6
|
+
admin: admin_pages,
|
7
|
+
public: public_pages
|
8
|
+
},
|
9
|
+
settings: public_settings,
|
10
|
+
user: current_user
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def admin_pages
|
15
|
+
[
|
16
|
+
{ name: "App", path: "admin/settings" },
|
17
|
+
{ name: "Pages", path: "admin/pages" },
|
18
|
+
{ name: "Sidebars", path: "admin/sidebars" },
|
19
|
+
{ name: "Uploads", path: "admin/uploads" },
|
20
|
+
{ name: "Users", path: "admin/users" }
|
21
|
+
]
|
22
|
+
end
|
23
|
+
|
24
|
+
def public_pages
|
25
|
+
Tomify.models.page.where(parent_id: nil).as_json(
|
26
|
+
only: [:active, :name, :path, :root],
|
27
|
+
include: [children: { only: [:active, :name, :path] }]
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def public_settings
|
32
|
+
Tomify.models.setting.public.as_json(only: [:name, :value])
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tomify::Concerns::Default
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
include Tomify::Concerns::Default::Helper
|
5
|
+
include Tomify::Concerns::Default::AuthHelper
|
6
|
+
include Tomify::Concerns::Default::EnvHelper
|
7
|
+
include Tomify::Concerns::Default::ReactHelper
|
8
|
+
|
9
|
+
included do
|
10
|
+
protect_from_forgery with: :exception
|
11
|
+
add_flash_types :success, :info, :warning, :danger
|
12
|
+
layout "tomify/layouts/application"
|
13
|
+
helper_method :js_env, :page, :root_page, :setting
|
14
|
+
helper_method :current_user, :react_component
|
15
|
+
before_action :check_token
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class Tomify::Public::PagesController < Tomify.controllers.public
|
2
|
+
def show
|
3
|
+
@page = Tomify.models.page.find_by(path: params[:path]) || not_found
|
4
|
+
|
5
|
+
render_template
|
6
|
+
end
|
7
|
+
|
8
|
+
def root
|
9
|
+
@page = root_page
|
10
|
+
|
11
|
+
render_template
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def render_template
|
16
|
+
case template = @page.template
|
17
|
+
when "default"
|
18
|
+
end
|
19
|
+
|
20
|
+
render "templates/#{template}", layout: true
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Tomify::CarrierwaveHelper
|
2
|
+
def self.load_config
|
3
|
+
return unless defined? Carrierwave
|
4
|
+
return unless settings = Tomify.setting(:aws)
|
5
|
+
|
6
|
+
CarrierWave.configure do |config|
|
7
|
+
config.fog_provider = "fog/aws"
|
8
|
+
config.storage = :fog
|
9
|
+
config.fog_credentials = {
|
10
|
+
provider: "AWS",
|
11
|
+
aws_access_key_id: settings["access_key"],
|
12
|
+
aws_secret_access_key: settings["secret_key"]
|
13
|
+
}
|
14
|
+
config.fog_directory = settings["bucket"]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Tomify::EmailHelper
|
2
|
+
def self.load_config
|
3
|
+
return unless settings = Tomify.setting(:email)
|
4
|
+
|
5
|
+
config = {
|
6
|
+
authentication: "plain",
|
7
|
+
enable_starttls_auto: true,
|
8
|
+
user_name: settings["username"],
|
9
|
+
password: settings["password"]
|
10
|
+
}
|
11
|
+
config[:address] = settings["address"] || "email-smtp.us-east-1.amazonaws.com"
|
12
|
+
config[:domain] = settings["domain"] || "tomify.me"
|
13
|
+
config[:port] = settings["port"] || "587"
|
14
|
+
|
15
|
+
Rails.application.config.action_mailer.asset_host = settings["base_url"]
|
16
|
+
Rails.application.config.action_mailer.default_url_options = { host: settings["base_url"].split("//").last }
|
17
|
+
Rails.application.config.action_mailer.smtp_settings = config
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Tomify::RenderHelper
|
2
|
+
def tomify_render_for(name, context = nil)
|
3
|
+
override = "#{name}_partial".to_sym
|
4
|
+
partial = content_for?(override) ? content_for(override) : name
|
5
|
+
if lookup_context.exists?(partial, [], true)
|
6
|
+
render partial: partial
|
7
|
+
elsif lookup_context.exists?(partial, ["tomify/defaults"], true)
|
8
|
+
render partial: "tomify/defaults/#{partial}"
|
9
|
+
else
|
10
|
+
react_component [context, name].compact.collect { |x| x.to_s.camelize }.join(".")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class TomifyMailer < ActionMailer::Base
|
2
|
+
include Tomify::Concerns::Default::Helper
|
3
|
+
|
4
|
+
prepend_view_path Tomify.root.join("app", "views", "tomify", "mailers")
|
5
|
+
prepend_view_path Rails.root.join("app", "views", "mailers")
|
6
|
+
|
7
|
+
default from: "Tomify <notify@tomify.me>"
|
8
|
+
layout "tomify/layouts/mailer"
|
9
|
+
helper_method :setting
|
10
|
+
|
11
|
+
def self.mailer_name
|
12
|
+
super.split("/").last
|
13
|
+
end
|
14
|
+
end
|