blacksand 2.2.2.1
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/MIT-LICENSE +20 -0
- data/Rakefile +27 -0
- data/app/assets/javascripts/blacksand/dashboard/navigations.form.js.erb +34 -0
- data/app/assets/javascripts/blacksand/dashboard/navigations.index.js +18 -0
- data/app/assets/javascripts/blacksand/dashboard/pages.form.js.erb +69 -0
- data/app/assets/javascripts/blacksand/dashboard/pages.index.js +17 -0
- data/app/assets/javascripts/blacksand/dashboard.js +14 -0
- data/app/assets/javascripts/blacksand/ie.js +2 -0
- data/app/assets/javascripts/bootstrap-datepicker.zh-CN.js +20 -0
- data/app/assets/stylesheets/blacksand/dashboard.scss +26 -0
- data/app/controllers/blacksand/dashboard/base_controller.rb +35 -0
- data/app/controllers/blacksand/dashboard/navigations_controller.rb +88 -0
- data/app/controllers/blacksand/dashboard/pages_controller.rb +176 -0
- data/app/controllers/blacksand/dashboard/prototypes_controller.rb +12 -0
- data/app/controllers/blacksand/dashboard/templates_controller.rb +8 -0
- data/app/controllers/blacksand/dashboard/users_controller.rb +78 -0
- data/app/controllers/blacksand_front/pages_controller.rb +17 -0
- data/app/helpers/blacksand/application_helper.rb +42 -0
- data/app/helpers/blacksand/page_helper.rb +11 -0
- data/app/helpers/blacksand_front/pages_helper.rb +20 -0
- data/app/models/blacksand/field.rb +35 -0
- data/app/models/blacksand/navigation.rb +24 -0
- data/app/models/blacksand/page.rb +194 -0
- data/app/models/blacksand/picture.rb +7 -0
- data/app/models/blacksand/property/as_array.rb +5 -0
- data/app/models/blacksand/property/file.rb +5 -0
- data/app/models/blacksand/property/gallery.rb +7 -0
- data/app/models/blacksand/property/slide.rb +5 -0
- data/app/models/blacksand/property.rb +76 -0
- data/app/models/blacksand/prototype.rb +11 -0
- data/app/models/blacksand/template.rb +9 -0
- data/app/models/kindeditor/asset.rb +14 -0
- data/app/models/kindeditor/file.rb +3 -0
- data/app/models/kindeditor/flash.rb +3 -0
- data/app/models/kindeditor/image.rb +3 -0
- data/app/models/kindeditor/media.rb +3 -0
- data/app/uploaders/blacksand/base_uploader.rb +16 -0
- data/app/uploaders/blacksand/file_uploader.rb +4 -0
- data/app/uploaders/blacksand/image_uploader.rb +78 -0
- data/app/uploaders/blacksand/slide_image_uploader.rb +66 -0
- data/app/views/blacksand/dashboard/navigations/_form.html.erb +23 -0
- data/app/views/blacksand/dashboard/navigations/edit.html.erb +3 -0
- data/app/views/blacksand/dashboard/navigations/index.html.erb +40 -0
- data/app/views/blacksand/dashboard/navigations/index.json.jbuilder +4 -0
- data/app/views/blacksand/dashboard/navigations/new.html.erb +3 -0
- data/app/views/blacksand/dashboard/navigations/reorder.js.erb +1 -0
- data/app/views/blacksand/dashboard/navigations/show.html.erb +4 -0
- data/app/views/blacksand/dashboard/navigations/show.json.jbuilder +1 -0
- data/app/views/blacksand/dashboard/pages/_fields.html.erb +89 -0
- data/app/views/blacksand/dashboard/pages/_form.html.erb +26 -0
- data/app/views/blacksand/dashboard/pages/_manage_list.html.erb +123 -0
- data/app/views/blacksand/dashboard/pages/_picture_fields.html.erb +18 -0
- data/app/views/blacksand/dashboard/pages/children_partial.js.erb +14 -0
- data/app/views/blacksand/dashboard/pages/edit.html.erb +20 -0
- data/app/views/blacksand/dashboard/pages/index.html.erb +27 -0
- data/app/views/blacksand/dashboard/pages/new.html.erb +20 -0
- data/app/views/blacksand/dashboard/pages/onchange_render.js.erb +14 -0
- data/app/views/blacksand/dashboard/pages/search.json.jbuilder +7 -0
- data/app/views/blacksand/dashboard/pages/show.html.erb +34 -0
- data/app/views/blacksand/dashboard/prototypes/index.html.erb +15 -0
- data/app/views/blacksand/dashboard/prototypes/show.html.erb +31 -0
- data/app/views/blacksand/dashboard/templates/index.html.erb +17 -0
- data/app/views/blacksand/dashboard/users/_form.html.erb +40 -0
- data/app/views/blacksand/dashboard/users/edit.html.erb +47 -0
- data/app/views/blacksand/dashboard/users/index.html.erb +37 -0
- data/app/views/blacksand/dashboard/users/index.json.jbuilder +4 -0
- data/app/views/blacksand/dashboard/users/new.html.erb +4 -0
- data/app/views/blacksand/dashboard/users/show.html.erb +2 -0
- data/app/views/blacksand/dashboard/users/show.json.jbuilder +1 -0
- data/app/views/layouts/blacksand/_navbar.html.erb +42 -0
- data/app/views/layouts/blacksand/dashboard.html.erb +33 -0
- data/config/locales/kaminari.zh-CN.yml +17 -0
- data/config/locales/nestable.zh-CN.yml +14 -0
- data/config/locales/zh-CN.yml +69 -0
- data/config/routes.rb +31 -0
- data/db/migrate/20151112055035_create_templates.rb +10 -0
- data/db/migrate/20151112055425_create_prototypes.rb +9 -0
- data/db/migrate/20151112055438_create_fields.rb +14 -0
- data/db/migrate/20151112055821_create_pages.rb +15 -0
- data/db/migrate/20151112060015_create_properties.rb +15 -0
- data/db/migrate/20151112060605_create_navigations.rb +13 -0
- data/db/migrate/20151209022305_create_kindeditor_assets.rb +17 -0
- data/db/migrate/20160513080702_create_pictures.rb +12 -0
- data/db/migrate/20170104014706_add_values_to_properties.rb +5 -0
- data/db/migrate/20170310092041_add_owner_type_to_kindeditor_asset.rb +5 -0
- data/db/migrate/20170322021913_add_options_to_template_and_prototype.rb +6 -0
- data/lib/blacksand/caching_pages.rb +16 -0
- data/lib/blacksand/cancancan.rb +19 -0
- data/lib/blacksand/controller_helper.rb +21 -0
- data/lib/blacksand/engine.rb +69 -0
- data/lib/blacksand/expire_pages.rb +21 -0
- data/lib/blacksand/my_json_type.rb +61 -0
- data/lib/blacksand/routing.rb +11 -0
- data/lib/blacksand/version.rb +3 -0
- data/lib/blacksand.rb +53 -0
- data/lib/generators/blacksand/install_generator.rb +30 -0
- data/lib/generators/blacksand/new_site_generator.rb +28 -0
- data/lib/tasks/blacksand_tasks.rake +72 -0
- data/lib/tasks/carrierwave_storage_migrate_to_qiniu.rake +25 -0
- metadata +541 -0
data/lib/blacksand.rb
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
require "blacksand/engine"
|
|
2
|
+
require "blacksand/cancancan"
|
|
3
|
+
|
|
4
|
+
require 'blacksand/my_json_type' if defined? ActiveRecord
|
|
5
|
+
|
|
6
|
+
module Blacksand
|
|
7
|
+
# inspired by rails-admin https://github.com/sferik/rails_admin/blob/master/lib/rails_admin/config.rb#L104
|
|
8
|
+
DEFAULT_AUTHENTICATION = proc {}
|
|
9
|
+
DEFAULT_AUTHORIZE = proc {}
|
|
10
|
+
DEFAULT_CURRENT_METHOD = proc {}
|
|
11
|
+
|
|
12
|
+
def self.table_name_prefix
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
mattr_accessor :site_id
|
|
16
|
+
mattr_accessor :site_name
|
|
17
|
+
mattr_accessor :root_path
|
|
18
|
+
|
|
19
|
+
mattr_accessor :carrierwave_storage
|
|
20
|
+
mattr_accessor :carrierwave_store_dir_prefix
|
|
21
|
+
|
|
22
|
+
mattr_accessor :page_caching
|
|
23
|
+
|
|
24
|
+
self.carrierwave_storage = :file
|
|
25
|
+
self.carrierwave_store_dir_prefix = 'uploads'
|
|
26
|
+
self.page_caching = false
|
|
27
|
+
|
|
28
|
+
def self.authenticate_with(&block)
|
|
29
|
+
@authenticate = block if block
|
|
30
|
+
@authenticate || DEFAULT_AUTHENTICATION
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def self.current_user_method(&block)
|
|
34
|
+
@current_user = block if block
|
|
35
|
+
@current_user || DEFAULT_CURRENT_METHOD
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.authorize_with(*args)
|
|
39
|
+
extension = args.shift
|
|
40
|
+
# 目前只支持 cancancan
|
|
41
|
+
if extension.present? && extension == :cancancan
|
|
42
|
+
@authorize = proc do
|
|
43
|
+
@authorization_adapter = Blacksand::Cancancan.new(self)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
elsif extension.present? && extension != :cancancan
|
|
47
|
+
puts "Error: Authorization only supports cancancan"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
@authorize || DEFAULT_AUTHORIZE
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
|
|
3
|
+
module Blacksand
|
|
4
|
+
module Generators
|
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
|
6
|
+
|
|
7
|
+
def install
|
|
8
|
+
create_file("config/initializers/blacksand.rb", <<-RUBY)
|
|
9
|
+
Blacksand.site_id = 'site id'
|
|
10
|
+
Blacksand.site_name = 'site name'
|
|
11
|
+
Blacksand.root_path = 'root path'
|
|
12
|
+
|
|
13
|
+
# Setup authentication to be run as a before filter
|
|
14
|
+
# @example Devise admin
|
|
15
|
+
# Blacksand.authenticate_with do
|
|
16
|
+
# authenticate_admin!
|
|
17
|
+
# end
|
|
18
|
+
|
|
19
|
+
# Blacksand.carrierwave_storage = :file
|
|
20
|
+
# Blacksand.carrierwave_store_dir_prefix = 'uploads' # NOTICE: Kindeditor need config by their api
|
|
21
|
+
|
|
22
|
+
# Page caching
|
|
23
|
+
# Blacksand.page_caching = false
|
|
24
|
+
RUBY
|
|
25
|
+
|
|
26
|
+
rake 'railties:install:migrations'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
require 'rails/generators'
|
|
2
|
+
|
|
3
|
+
module Blacksand
|
|
4
|
+
module Generators
|
|
5
|
+
class NewSiteGenerator < Rails::Generators::NamedBase
|
|
6
|
+
|
|
7
|
+
def new_site
|
|
8
|
+
puts "Create Site: #{name}"
|
|
9
|
+
# site yaml
|
|
10
|
+
create_file("db/sites/#{name}.yml", <<-YAML)
|
|
11
|
+
# 模板
|
|
12
|
+
templates:
|
|
13
|
+
# - your template
|
|
14
|
+
|
|
15
|
+
# 原型
|
|
16
|
+
prototypes:
|
|
17
|
+
# - your prototype
|
|
18
|
+
YAML
|
|
19
|
+
|
|
20
|
+
# site theme
|
|
21
|
+
if yes?("Install theme #{name} ?(Y/n)")
|
|
22
|
+
generate 'themes_on_rails:theme', name
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# desc "Explaining what the task does"
|
|
2
|
+
# task :blacksand do
|
|
3
|
+
# # Task goes here
|
|
4
|
+
# end
|
|
5
|
+
|
|
6
|
+
namespace :blacksand do
|
|
7
|
+
desc "Clean unsued kindeditor assets"
|
|
8
|
+
task :clean_kindeditor_assets => :environment do ||
|
|
9
|
+
puts "Delete unsued kindeditor assets 1 day ago"
|
|
10
|
+
assets = Kindeditor::Asset.where(owner_id: 0).where("created_at <= ?", 1.day.ago)
|
|
11
|
+
puts "Assets: #{assets.count}"
|
|
12
|
+
assets.destroy_all
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "Seed templates and prototypes and clean unused of them"
|
|
16
|
+
task :seed, [:site_id] => :environment do |t, args|
|
|
17
|
+
site_id = args.site_id
|
|
18
|
+
|
|
19
|
+
data = YAML.load_file(Rails.root.join("db/sites/#{site_id}.yml")).deep_symbolize_keys
|
|
20
|
+
|
|
21
|
+
data[:templates].each do |template|
|
|
22
|
+
t = Blacksand::Template.where(name: template[:name]).first_or_initialize(path: template[:path], options: template[:options])
|
|
23
|
+
if t.new_record?
|
|
24
|
+
puts "Create Template #{t.name}"
|
|
25
|
+
t.save!
|
|
26
|
+
else
|
|
27
|
+
t.update_attributes!(path: template[:path], options: template[:options])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# 删除遗留的模板
|
|
32
|
+
Blacksand::Template.where('name not in (?)', data[:templates].map { |t| t[:name] }).each do |t|
|
|
33
|
+
puts "Delete template: #{t.name}"
|
|
34
|
+
t.destroy!
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
data[:prototypes].each do |prototype|
|
|
38
|
+
params = ActionController::Parameters.new(prototype: prototype)
|
|
39
|
+
prototype_params = params.require(:prototype).permit! #(:name, fields_attributes: [:name, :field_type, :description, :required, :options => []])
|
|
40
|
+
|
|
41
|
+
p = Blacksand::Prototype.where(name: prototype[:name]).first_or_initialize(prototype_params)
|
|
42
|
+
if p.new_record?
|
|
43
|
+
puts "Create Prototype #{p.name}"
|
|
44
|
+
p.save!
|
|
45
|
+
else
|
|
46
|
+
p.update!(options: prototype_params[:options])
|
|
47
|
+
# seed 一次换一次 fields, 但是之前关联 field 的地方都需要变
|
|
48
|
+
prototype[:fields_attributes].each do |field|
|
|
49
|
+
field_attributes = field.slice(:field_type, :description, :required, :options)
|
|
50
|
+
f = p.fields.where(name: field[:name]).first_or_initialize(field_attributes)
|
|
51
|
+
if f.new_record?
|
|
52
|
+
puts "Create Field #{p.name} / #{f.name}"
|
|
53
|
+
f.save!
|
|
54
|
+
else
|
|
55
|
+
f.update_attributes!(field_attributes)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# 删除多余的 field
|
|
60
|
+
to_deleted_fields = p.fields.map(&:name) - prototype[:fields_attributes].map { |f| f[:name] }
|
|
61
|
+
puts "Delete Fields #{p.name} / #{to_deleted_fields}" if to_deleted_fields.any?
|
|
62
|
+
p.fields.where(name: to_deleted_fields).destroy_all
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# 删除遗留的原型
|
|
67
|
+
Blacksand::Prototype.where('name not in (?)', data[:prototypes].map { |p| p[:name] }).each do |p|
|
|
68
|
+
puts "Delete prototype: #{p.name}"
|
|
69
|
+
p.destroy!
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
namespace :carrierwave do
|
|
2
|
+
desc "Migrate to new storage from file"
|
|
3
|
+
task :from_file_to_qiniu, [:model_class, :attribute] => :environment do |t, args|
|
|
4
|
+
model_class, attribute = args.model_class, args.attribute
|
|
5
|
+
model_class.constantize.all.each do |model|
|
|
6
|
+
puts "migrate: #{model_class} #{model.id}"
|
|
7
|
+
if model.try(attribute).present?
|
|
8
|
+
attr = model.try(attribute)
|
|
9
|
+
filename = File.basename(attr.path)
|
|
10
|
+
# 使用原有的 store_dir 找到本地文件,如果 store_dir 逻辑没有改的话。
|
|
11
|
+
file = Rails.root.join('public', attr.store_dir, filename)
|
|
12
|
+
puts "Upload #{file}"
|
|
13
|
+
File.open(file) do |f|
|
|
14
|
+
model.public_send("#{attribute}=", f)
|
|
15
|
+
end
|
|
16
|
+
model.save!
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# TODO: 独立出 public/uploads 目录, 和 store_dir 策略
|
|
22
|
+
# def store_dir(model, attribute)
|
|
23
|
+
# "uploads/#{model.class.to_s.underscore}/#{attribute}/#{model.id}"
|
|
24
|
+
# end
|
|
25
|
+
end
|