zen 0.2.4.1 → 0.2.5
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.
- data/MANIFEST +42 -33
- data/README.md +14 -27
- data/ROADMAP.md +20 -2
- data/{Thorfile → Rakefile} +2 -3
- data/bin/zen +27 -5
- data/lib/zen.rb +70 -52
- data/lib/zen/asset.rb +258 -0
- data/lib/zen/bin/app.rb +42 -0
- data/lib/zen/controller/admin_controller.rb +53 -36
- data/lib/zen/controller/base_controller.rb +13 -8
- data/lib/zen/controller/frontend_controller.rb +4 -3
- data/lib/zen/controller/main_controller.rb +17 -33
- data/lib/zen/error/validation_error.rb +10 -0
- data/lib/zen/ext/string.rb +185 -0
- data/lib/zen/helper/acl.rb +120 -92
- data/lib/zen/helper/common.rb +1 -3
- data/lib/zen/helper/theme.rb +73 -0
- data/lib/zen/language.rb +66 -57
- data/lib/zen/layout/admin.xhtml +5 -48
- data/lib/zen/layout/login.xhtml +4 -44
- data/lib/zen/model/methods.rb +1 -1
- data/lib/zen/model/settings.rb +0 -3
- data/lib/zen/package.rb +101 -83
- data/lib/zen/package/base.rb +62 -0
- data/lib/zen/package/categories/lib/categories.rb +29 -10
- data/lib/zen/package/categories/lib/categories/controller/categories.rb +4 -5
- data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +4 -5
- data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +4 -3
- data/lib/zen/package/categories/lib/categories/model/category.rb +2 -2
- data/lib/zen/package/categories/lib/categories/model/category_group.rb +3 -3
- data/lib/zen/package/categories/lib/categories/plugin/categories.rb +130 -0
- data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +1 -1
- data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +2 -2
- data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +11 -6
- data/lib/zen/package/comments/lib/comments.rb +23 -13
- data/lib/zen/package/comments/lib/comments/controller/comments.rb +4 -5
- data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +7 -8
- data/lib/zen/package/comments/lib/comments/model/comment.rb +4 -4
- data/lib/zen/package/comments/lib/comments/plugin/comments.rb +111 -0
- data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +2 -2
- data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields.rb +18 -11
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +4 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +4 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +2 -2
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +3 -3
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +9 -5
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +1 -1
- data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +3 -3
- data/lib/zen/package/menus/lib/menus.rb +25 -43
- data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +5 -6
- data/lib/zen/package/menus/lib/menus/controller/menus.rb +9 -5
- data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +4 -4
- data/lib/zen/package/menus/lib/menus/model/menu.rb +2 -2
- data/lib/zen/package/menus/lib/menus/model/menu_item.rb +4 -1
- data/lib/zen/package/menus/lib/menus/plugin/menus.rb +152 -0
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +1 -1
- data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +3 -3
- data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +7 -7
- data/lib/zen/package/sections/lib/sections.rb +32 -16
- data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +9 -18
- data/lib/zen/package/sections/lib/sections/controller/sections.rb +8 -9
- data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +1 -1
- data/lib/zen/package/sections/lib/sections/model/section.rb +4 -4
- data/lib/zen/package/sections/lib/sections/model/section_entry.rb +9 -10
- data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +224 -0
- data/lib/zen/package/sections/lib/sections/plugin/sections.rb +85 -0
- data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +1 -1
- data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +9 -5
- data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +2 -2
- data/lib/zen/package/settings/lib/settings.rb +145 -10
- data/lib/zen/package/settings/lib/settings/controller/settings.rb +28 -24
- data/lib/zen/package/settings/lib/settings/language/en/settings.yml +10 -0
- data/lib/zen/package/settings/lib/settings/model/setting.rb +3 -64
- data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +40 -0
- data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +76 -0
- data/lib/zen/package/settings/lib/settings/plugin/settings.rb +236 -0
- data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +20 -49
- data/lib/zen/package/settings/migrations/1295597111_create_schema.rb +0 -12
- data/lib/zen/package/settings/migrations/1303196915_settings_plugin.rb +31 -0
- data/lib/zen/package/users/lib/users.rb +18 -15
- data/lib/zen/package/users/lib/users/controller/access_rules.rb +44 -8
- data/lib/zen/package/users/lib/users/controller/user_groups.rb +4 -5
- data/lib/zen/package/users/lib/users/controller/users.rb +5 -6
- data/lib/zen/package/users/lib/users/language/en/access_rules.yml +11 -9
- data/lib/zen/package/users/lib/users/model/access_rule.rb +7 -6
- data/lib/zen/package/users/lib/users/model/user.rb +4 -4
- data/lib/zen/package/users/lib/users/model/user_group.rb +3 -3
- data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +50 -0
- data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +32 -29
- data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +8 -6
- data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +3 -3
- data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +2 -2
- data/lib/zen/package/users/migrations/1303510943_class_rules.rb +13 -0
- data/lib/zen/plugin.rb +110 -104
- data/lib/zen/plugin/base.rb +46 -0
- data/lib/zen/{liquid/controller_behavior.rb → plugin/controller.rb} +9 -7
- data/lib/zen/plugin/helper.rb +47 -0
- data/lib/zen/plugin/markup/lib/markup.rb +14 -0
- data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +6 -0
- data/lib/zen/plugin/markup/lib/markup/markup.rb +154 -0
- data/lib/zen/public/admin/css/forms.css +4 -0
- data/lib/zen/public/admin/css/general.css +15 -15
- data/lib/zen/public/admin/css/layout.css +10 -10
- data/lib/zen/public/admin/css/reset.css +123 -0
- data/lib/zen/public/admin/images/icons/accept.png +0 -0
- data/lib/zen/public/admin/images/icons/add.png +0 -0
- data/lib/zen/public/admin/images/icons/back.png +0 -0
- data/lib/zen/public/admin/images/icons/bold.png +0 -0
- data/lib/zen/public/admin/images/icons/close.png +0 -0
- data/lib/zen/public/admin/images/icons/delete.png +0 -0
- data/lib/zen/public/admin/images/icons/edit.png +0 -0
- data/lib/zen/public/admin/images/icons/error.png +0 -0
- data/lib/zen/public/admin/images/icons/help.png +0 -0
- data/lib/zen/public/admin/images/icons/info.png +0 -0
- data/lib/zen/public/admin/images/icons/italic.png +0 -0
- data/lib/zen/public/admin/images/icons/large/error.png +0 -0
- data/lib/zen/public/admin/images/icons/large/notice.png +0 -0
- data/lib/zen/public/admin/images/icons/large/success.png +0 -0
- data/lib/zen/public/admin/images/icons/link.png +0 -0
- data/lib/zen/public/admin/images/icons/logout.png +0 -0
- data/lib/zen/public/admin/images/icons/ol.png +0 -0
- data/lib/zen/public/admin/images/icons/pdf.png +0 -0
- data/lib/zen/public/admin/images/icons/ul.png +0 -0
- data/lib/zen/public/admin/images/icons/user.png +0 -0
- data/lib/zen/public/admin/images/icons/view.png +0 -0
- data/lib/zen/public/admin/js/mootools/core.js +384 -333
- data/lib/zen/public/admin/js/mootools/more.js +256 -231
- data/lib/zen/public/admin/js/vendor/{datepicker/Picker.Date.js → datepicker.js} +447 -0
- data/lib/zen/public/admin/js/vendor/yepnope.js +1 -0
- data/lib/zen/public/admin/js/zen/editor/base.js +8 -1
- data/lib/zen/public/admin/js/zen/init.js +89 -26
- data/lib/zen/public/favicon.ico +0 -0
- data/lib/zen/task.rb +7 -0
- data/lib/zen/task/build.rake +60 -0
- data/lib/zen/task/clean.rake +27 -0
- data/lib/zen/task/db.rake +111 -0
- data/lib/zen/task/package.rake +67 -0
- data/lib/zen/task/plugin.rake +24 -0
- data/lib/zen/task/proto.rake +95 -0
- data/lib/zen/task/theme.rake +68 -0
- data/lib/zen/theme.rb +28 -55
- data/lib/zen/theme/base.rb +64 -0
- data/lib/zen/validation.rb +149 -0
- data/lib/zen/version.rb +1 -1
- data/lib/zen/view/bottom.xhtml +6 -0
- data/lib/zen/view/main.xhtml +32 -0
- data/proto/app/Rakefile +12 -0
- data/proto/app/app.rb +6 -6
- data/proto/app/config/config.rb +7 -14
- data/proto/app/config/database.rb +0 -20
- data/proto/app/start.rb +0 -1
- data/proto/app/{vendor/themes → task}/.gitkeep +0 -0
- data/proto/app/vendor/theme/.gitkeep +0 -0
- data/proto/package/lib/package.rb +8 -17
- data/proto/package/lib/package/controller/controllers.rb +4 -4
- data/proto/package/lib/package/language/en/languages.yml +3 -3
- data/proto/package/lib/package/model/model.rb +1 -1
- metadata +73 -73
- data/lib/zen/bin/base.rb +0 -109
- data/lib/zen/helper/asset.rb +0 -106
- data/lib/zen/liquid/general.rb +0 -94
- data/lib/zen/liquid/redirect.rb +0 -70
- data/lib/zen/liquid/strip.rb +0 -60
- data/lib/zen/package/categories/lib/categories/liquid/categories.rb +0 -16
- data/lib/zen/package/comments/lib/comments/liquid/comment_form.rb +0 -127
- data/lib/zen/package/comments/lib/comments/liquid/comments.rb +0 -115
- data/lib/zen/package/menus/lib/menus/liquid/menus.rb +0 -152
- data/lib/zen/package/sections/lib/sections/liquid/section_entries.rb +0 -228
- data/lib/zen/package/sections/lib/sections/liquid/sections.rb +0 -77
- data/lib/zen/package/settings/lib/settings/liquid/setting.rb +0 -58
- data/lib/zen/package/users/lib/users/liquid/user.rb +0 -77
- data/lib/zen/package/users/lib/users/liquid/users.rb +0 -82
- data/lib/zen/plugin/markup.rb +0 -30
- data/lib/zen/public/admin/css/boilerplate.css +0 -176
- data/lib/zen/public/admin/images/general/noise.jpg +0 -0
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +0 -137
- data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +0 -291
- data/lib/zen/public/admin/js/vendor/datepicker/README.md +0 -325
- data/lib/zen/public/admin/js/vendor/datepicker/locale.js +0 -16
- data/lib/zen/strict_struct.rb +0 -36
- data/lib/zen/task/build.rb +0 -123
- data/lib/zen/task/clean.rb +0 -46
- data/lib/zen/task/db.rb +0 -130
- data/lib/zen/task/package.rb +0 -87
- data/lib/zen/task/proto.rb +0 -116
- data/lib/zen/task/theme.rb +0 -88
- data/proto/app/Thorfile +0 -4
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
---
|
|
3
|
-
name: Locale.en-US.DatePicker
|
|
4
|
-
description: English Language File for DatePicker
|
|
5
|
-
authors: Arian Stolwijk
|
|
6
|
-
requires: [More/Locale]
|
|
7
|
-
provides: Locale.en-US.DatePicker
|
|
8
|
-
...
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
Locale.define('en-US', 'DatePicker', {
|
|
13
|
-
select_a_time: 'Select a time',
|
|
14
|
-
use_mouse_wheel: 'Use the mouse wheel to quickly change value',
|
|
15
|
-
time_confirm_button: 'OK'
|
|
16
|
-
});
|
data/lib/zen/strict_struct.rb
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
#:nodoc:
|
|
2
|
-
module Zen
|
|
3
|
-
##
|
|
4
|
-
# StrictStruct is a simple extension of the Struct class, it provides a method that
|
|
5
|
-
# checks if all getters/setters have a value and if one doesn't it will call the
|
|
6
|
-
# appropriate block.
|
|
7
|
-
#
|
|
8
|
-
# @author Yorick Peterse
|
|
9
|
-
# @since 0.2.4
|
|
10
|
-
#
|
|
11
|
-
class StrictStruct < Struct
|
|
12
|
-
|
|
13
|
-
##
|
|
14
|
-
# Validates all getter/setters in the current class to see if all values are set.
|
|
15
|
-
#
|
|
16
|
-
# @example
|
|
17
|
-
# struct = Zen::StrictStruct.new(:name, :age).new
|
|
18
|
-
# struct.validate([:name, :age]) do |k|
|
|
19
|
-
# puts "The key #{k} is required!"
|
|
20
|
-
# end
|
|
21
|
-
#
|
|
22
|
-
# @author Yorick Peterse
|
|
23
|
-
# @since 0.2.4
|
|
24
|
-
# @param [Array] required Array of getters that should return a value.
|
|
25
|
-
# @param [Block] block The block to call whenever an item doesn't have a value.
|
|
26
|
-
#
|
|
27
|
-
def validate(required, &block)
|
|
28
|
-
required.each do |k|
|
|
29
|
-
if !self.respond_to?(k) or self.send(k).nil?
|
|
30
|
-
block.call(k)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
36
|
-
end
|
data/lib/zen/task/build.rb
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
require 'find'
|
|
3
|
-
|
|
4
|
-
module Zen
|
|
5
|
-
module Task
|
|
6
|
-
##
|
|
7
|
-
# The Build class/task can be used to create the documentation, manifest, etc.
|
|
8
|
-
#
|
|
9
|
-
# @author Yorick Peterse
|
|
10
|
-
# @since 0.2
|
|
11
|
-
#
|
|
12
|
-
class Build < Thor
|
|
13
|
-
include Thor::Actions
|
|
14
|
-
|
|
15
|
-
namespace :build
|
|
16
|
-
|
|
17
|
-
desc 'gem', 'Builds a new RubyGem'
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
# Builds a new version of the RubyGem and places it in ./pkg
|
|
21
|
-
#
|
|
22
|
-
# @author Yorick Peterse
|
|
23
|
-
# @since 0.2
|
|
24
|
-
#
|
|
25
|
-
def gem
|
|
26
|
-
zen_path = File.expand_path('../../../../', __FILE__)
|
|
27
|
-
|
|
28
|
-
# Build and install the gem
|
|
29
|
-
run("gem build #{zen_path}/zen.gemspec")
|
|
30
|
-
run("mv #{zen_path}/zen-#{Zen::Version}.gem #{zen_path}/pkg")
|
|
31
|
-
run("gem install #{zen_path}/pkg/zen-#{Zen::Version}.gem")
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
desc 'gem_clean', 'Builds a new RubyGem and uninstalls any current versions of Zen'
|
|
35
|
-
|
|
36
|
-
##
|
|
37
|
-
# Builds a new version of the RubyGem and uninstalls any current versions of Zen.
|
|
38
|
-
#
|
|
39
|
-
# @author Yorick Peterse
|
|
40
|
-
# @since 0.2
|
|
41
|
-
#
|
|
42
|
-
def gem_clean
|
|
43
|
-
zen_path = File.expand_path('../../../../', __FILE__)
|
|
44
|
-
|
|
45
|
-
begin
|
|
46
|
-
run('gem uninstall zen')
|
|
47
|
-
rescue
|
|
48
|
-
puts "Failed to uninstall the gem, most likely it wasn't installed in the first place."
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
# Remove all logs files
|
|
52
|
-
log_dirs = Dir.glob(zen_path + '/spec/zen/log/**/*')
|
|
53
|
-
|
|
54
|
-
if !log_dirs.empty?
|
|
55
|
-
log_dirs.each do |dir|
|
|
56
|
-
# Ignore non-directory files
|
|
57
|
-
if File.directory?(dir)
|
|
58
|
-
FileUtils.rm_rf(dir)
|
|
59
|
-
end
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
self.gem
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
desc 'manifest', 'Builds the MANIFEST file'
|
|
67
|
-
|
|
68
|
-
##
|
|
69
|
-
# Builds the MANIFEST file and places it in ./
|
|
70
|
-
#
|
|
71
|
-
# @author Yorick Peterse
|
|
72
|
-
# @since 0.2
|
|
73
|
-
#
|
|
74
|
-
def manifest
|
|
75
|
-
zen_path = File.expand_path('../../../../', __FILE__)
|
|
76
|
-
|
|
77
|
-
ignore_exts = ['.gem', '.gemspec']
|
|
78
|
-
ignore_files = ['.DS_Store', '.gitignore']
|
|
79
|
-
ignore_dirs = ['.git', '.yardoc', 'spec', 'pkg', 'doc']
|
|
80
|
-
files = ''
|
|
81
|
-
|
|
82
|
-
Find.find(zen_path) do |f|
|
|
83
|
-
f[zen_path] = ''
|
|
84
|
-
f.gsub!(/^\//, '')
|
|
85
|
-
|
|
86
|
-
# Ignore directories
|
|
87
|
-
if !File.directory?(f) and !ignore_exts.include?(File.extname(f)) and !ignore_files.include?(File.basename(f))
|
|
88
|
-
files += "#{f}\n"
|
|
89
|
-
else
|
|
90
|
-
Find.prune if ignore_dirs.include?(f)
|
|
91
|
-
end
|
|
92
|
-
end
|
|
93
|
-
|
|
94
|
-
# Time to write the MANIFEST file
|
|
95
|
-
begin
|
|
96
|
-
handle = File.open 'MANIFEST', 'w'
|
|
97
|
-
handle.write files.strip
|
|
98
|
-
abort "The MANIFEST file has been updated."
|
|
99
|
-
rescue
|
|
100
|
-
abort "The MANIFEST file could not be written."
|
|
101
|
-
end
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
desc 'doc', 'Builds the documentation using YARD'
|
|
105
|
-
|
|
106
|
-
##
|
|
107
|
-
# Builds the documentation using YARD.
|
|
108
|
-
#
|
|
109
|
-
# @author Yorick Peterse
|
|
110
|
-
# @since 0.2
|
|
111
|
-
#
|
|
112
|
-
def doc
|
|
113
|
-
zen_path = File.expand_path('../../../../', __FILE__)
|
|
114
|
-
command = "yard doc #{zen_path}/lib -m markdown -M rdiscount -o #{zen_path}/doc "
|
|
115
|
-
command += "-r #{zen_path}/README.md --private --protected "
|
|
116
|
-
command += "--files #{zen_path}/license.txt,#{zen_path}/CHANGELOG.md,"
|
|
117
|
-
command += "#{zen_path}/ROADMAP.md"
|
|
118
|
-
|
|
119
|
-
run(command)
|
|
120
|
-
end
|
|
121
|
-
end
|
|
122
|
-
end
|
|
123
|
-
end
|
data/lib/zen/task/clean.rb
DELETED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
|
|
3
|
-
module Zen
|
|
4
|
-
module Task
|
|
5
|
-
##
|
|
6
|
-
# The Clean task can be used to remove various files from the repository.
|
|
7
|
-
#
|
|
8
|
-
# @author Yorick Peterse
|
|
9
|
-
# @since 0.2
|
|
10
|
-
#
|
|
11
|
-
class Clean < Thor
|
|
12
|
-
include Thor::Actions
|
|
13
|
-
|
|
14
|
-
namespace :clean
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
# Removes all log files from the spec directory.
|
|
18
|
-
#
|
|
19
|
-
# @author Yorick Peterse
|
|
20
|
-
# @since 0.2
|
|
21
|
-
#
|
|
22
|
-
desc 'log', 'Removes all log files from the spec directory'
|
|
23
|
-
def log
|
|
24
|
-
zen_path = File.expand_path('../../../../', __FILE__)
|
|
25
|
-
|
|
26
|
-
log_files = Dir.glob("#{zen_path}/spec/log/**/*.log")
|
|
27
|
-
log_files.each { |file| File.unlink(file) }
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
##
|
|
31
|
-
# Removes all files generated by YARD.
|
|
32
|
-
#
|
|
33
|
-
# @author Yorick Peterse
|
|
34
|
-
# @since 0.2
|
|
35
|
-
#
|
|
36
|
-
desc 'yard', 'Removes all files generated by YARD'
|
|
37
|
-
def yard
|
|
38
|
-
zen_path = File.expand_path('../../../../', __FILE__)
|
|
39
|
-
|
|
40
|
-
FileUtils.rm_rf("#{zen_path}/doc")
|
|
41
|
-
FileUtils.rm_rf("#{zen_path}/.yardoc")
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
data/lib/zen/task/db.rb
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
Sequel.extension(:migration)
|
|
2
|
-
|
|
3
|
-
module Zen
|
|
4
|
-
module Task
|
|
5
|
-
##
|
|
6
|
-
# Task that can be used for various database related operations such as creating
|
|
7
|
-
# a default user and migrating the entire database.
|
|
8
|
-
#
|
|
9
|
-
# @author Yorick Peterse
|
|
10
|
-
# @since 0.2
|
|
11
|
-
#
|
|
12
|
-
class DB < Thor
|
|
13
|
-
namespace :db
|
|
14
|
-
|
|
15
|
-
desc('migrate', 'Migrates the entire database to the latest version')
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
# Migrates the entire database to the latest version.
|
|
19
|
-
#
|
|
20
|
-
# @author Yorick Peterse
|
|
21
|
-
# @param [Boolean] show_output When set to false no output will be shown.
|
|
22
|
-
# @since 0.2
|
|
23
|
-
#
|
|
24
|
-
def migrate(show_output = true)
|
|
25
|
-
exts = Zen::Package.packages
|
|
26
|
-
|
|
27
|
-
puts "Migrating..." if show_output === true
|
|
28
|
-
|
|
29
|
-
exts.each do |ident, ext|
|
|
30
|
-
if ext.respond_to?(:migration_dir) and !ext.migration_dir.nil?
|
|
31
|
-
dir = ext.migration_dir
|
|
32
|
-
else
|
|
33
|
-
dir = ext.directory + '/../../migrations'
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
table = ext.identifier.gsub('.', '_').to_sym
|
|
37
|
-
|
|
38
|
-
if File.directory?(dir)
|
|
39
|
-
Zen::Database.handle.transaction do
|
|
40
|
-
Sequel::Migrator.run(Zen::Database.handle, dir, :table => table)
|
|
41
|
-
|
|
42
|
-
puts "Successfully migrated \"#{ext.name}\"" if show_output === true
|
|
43
|
-
end
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
desc('delete', 'Deletes all database tables')
|
|
49
|
-
|
|
50
|
-
##
|
|
51
|
-
# Deletes all database tables.
|
|
52
|
-
#
|
|
53
|
-
# @author Yorick Peterse
|
|
54
|
-
# @since 0.2
|
|
55
|
-
#
|
|
56
|
-
def delete
|
|
57
|
-
exts = Zen::Package.packages.map { |ident, ext| [ident, ext] }
|
|
58
|
-
|
|
59
|
-
exts.reverse.each do |ident, ext|
|
|
60
|
-
if ext.respond_to?(:migration_dir) and !ext.migration_dir.nil?
|
|
61
|
-
dir = ext.migration_dir
|
|
62
|
-
else
|
|
63
|
-
dir = ext.directory + '/../../migrations'
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
table = ext.identifier.gsub('.', '_').to_sym
|
|
67
|
-
|
|
68
|
-
if File.directory?(dir)
|
|
69
|
-
Zen::Database.handle.transaction do
|
|
70
|
-
puts "Uninstalling \"#{ext.name}\""
|
|
71
|
-
|
|
72
|
-
Sequel::Migrator.run(Zen::Database.handle, dir, :table => table, :target => 0)
|
|
73
|
-
|
|
74
|
-
# Remove the migrations table
|
|
75
|
-
Zen::Database.handle.drop_table table
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
desc('user', 'Creates a default administrator account')
|
|
82
|
-
|
|
83
|
-
##
|
|
84
|
-
# Creates a default administrator account.
|
|
85
|
-
#
|
|
86
|
-
# @author Yorick Peterse
|
|
87
|
-
# @since 0.2
|
|
88
|
-
#
|
|
89
|
-
def user
|
|
90
|
-
password = (0..12).map do
|
|
91
|
-
letter = ('a'..'z').to_a[rand(26)]
|
|
92
|
-
number = (0..9).to_a[rand(26)]
|
|
93
|
-
|
|
94
|
-
letter + number.to_s
|
|
95
|
-
end.join
|
|
96
|
-
|
|
97
|
-
# Only insert the user if it isn't there yet.
|
|
98
|
-
user = Users::Models::User[:email => 'admin@website.tld']
|
|
99
|
-
group = Users::Models::UserGroup[:slug => 'administrators']
|
|
100
|
-
|
|
101
|
-
if group.nil?
|
|
102
|
-
group = Users::Models::UserGroup.new(
|
|
103
|
-
:name => 'Administrators',
|
|
104
|
-
:slug => 'administrators', :super_group => true
|
|
105
|
-
).save
|
|
106
|
-
end
|
|
107
|
-
|
|
108
|
-
if !user.nil?
|
|
109
|
-
abort "The default user has already been inserted."
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
user = Users::Models::User.new(
|
|
113
|
-
:email => 'admin@website.tld', :name => 'Administrator',
|
|
114
|
-
:password => password, :status => 'open'
|
|
115
|
-
).save
|
|
116
|
-
|
|
117
|
-
user.user_group_pks = [group.id]
|
|
118
|
-
|
|
119
|
-
puts "Default administrator account has been created.
|
|
120
|
-
|
|
121
|
-
Email: admin@website.tld
|
|
122
|
-
Passowrd: #{password}
|
|
123
|
-
|
|
124
|
-
You can login by going to http://domain.tld/admin/users/login/
|
|
125
|
-
"
|
|
126
|
-
|
|
127
|
-
end
|
|
128
|
-
end
|
|
129
|
-
end
|
|
130
|
-
end
|
data/lib/zen/task/package.rb
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
Sequel.extension(:migration)
|
|
2
|
-
|
|
3
|
-
module Zen
|
|
4
|
-
module Task
|
|
5
|
-
##
|
|
6
|
-
# The Package task is used to install, delete and manage Zen packages.
|
|
7
|
-
#
|
|
8
|
-
# @author Yorick Peterse
|
|
9
|
-
# @since 0.2
|
|
10
|
-
#
|
|
11
|
-
class Package < Thor
|
|
12
|
-
namespace :package
|
|
13
|
-
|
|
14
|
-
desc('list', 'Lists all installed packages')
|
|
15
|
-
|
|
16
|
-
##
|
|
17
|
-
# Lists all installed packages
|
|
18
|
-
#
|
|
19
|
-
# @author Yorick Peterse
|
|
20
|
-
# @since 0.2
|
|
21
|
-
#
|
|
22
|
-
def list
|
|
23
|
-
table = []
|
|
24
|
-
table.push(['Name', 'Author', 'Identifier', 'Directory'])
|
|
25
|
-
table.push(['------', '------', '------', '------'])
|
|
26
|
-
|
|
27
|
-
Zen::Package.packages.each do |ident, ext|
|
|
28
|
-
table.push([ext.name, ext.author, ext.identifier, ext.directory])
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
print_table(table)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
desc('migrate', 'Migrates a package to the given version')
|
|
35
|
-
|
|
36
|
-
method_option(:version , :type => :numeric, :default => nil)
|
|
37
|
-
method_option(:identifier, :type => :string , :default => nil, :required => true)
|
|
38
|
-
|
|
39
|
-
##
|
|
40
|
-
# Migrates a package to the given version.
|
|
41
|
-
#
|
|
42
|
-
# @author Yorick Peterse
|
|
43
|
-
# @since 0.2
|
|
44
|
-
#
|
|
45
|
-
def migrate
|
|
46
|
-
version = options[:version]
|
|
47
|
-
ident = options[:identifier]
|
|
48
|
-
|
|
49
|
-
if Zen::Package.packages.nil? or Zen::Package.extensions.empty?
|
|
50
|
-
abort "No packages have been loaded. Be sure to add them to config/requires.rb."
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
if version.nil?
|
|
54
|
-
puts "No version specified with --version, choosing the most recent version..."
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
install_ext = Zen::Package[ident]
|
|
58
|
-
|
|
59
|
-
if ident.nil? or ident.empty?
|
|
60
|
-
abort "You specified an invalid identifier."
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# Get the directory from the migration_dir getter, generate it if it isn't there.
|
|
64
|
-
if install_ext.respond_to?(:migration_dir) and !install_ext.migration_dir.nil?
|
|
65
|
-
dir = install_ext.migration_dir
|
|
66
|
-
else
|
|
67
|
-
dir = install_ext.directory + '/../../migrations'
|
|
68
|
-
end
|
|
69
|
-
|
|
70
|
-
table = install_ext.identifier.gsub('.', '_').to_sym
|
|
71
|
-
|
|
72
|
-
puts "Migrating package..."
|
|
73
|
-
if File.directory?(dir)
|
|
74
|
-
Zen::Database.handle.transaction do
|
|
75
|
-
Sequel::Migrator.run(Zen::Database.handle, dir, :table => table, :target => version)
|
|
76
|
-
|
|
77
|
-
if version == 0
|
|
78
|
-
# Remove the migrations table
|
|
79
|
-
Zen::Database.handle.drop_table table
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
end
|
|
86
|
-
end
|
|
87
|
-
end
|
data/lib/zen/task/proto.rb
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
require 'ruby-extensions'
|
|
3
|
-
|
|
4
|
-
module Zen
|
|
5
|
-
module Task
|
|
6
|
-
##
|
|
7
|
-
# The Proto task can be used to create migrations, packages and full blown applications.
|
|
8
|
-
#
|
|
9
|
-
# @author Yorick Peterse
|
|
10
|
-
# @since 0.2
|
|
11
|
-
#
|
|
12
|
-
class Proto < Thor
|
|
13
|
-
namespace :proto
|
|
14
|
-
|
|
15
|
-
desc 'migration', 'Creates a new migration'
|
|
16
|
-
method_option :directory, :type => :string, :required => true
|
|
17
|
-
|
|
18
|
-
##
|
|
19
|
-
# Creates a new (blank) migration.
|
|
20
|
-
#
|
|
21
|
-
# @author Yorick Peterse
|
|
22
|
-
# @since 0.2
|
|
23
|
-
#
|
|
24
|
-
def migration
|
|
25
|
-
dir = options[:directory]
|
|
26
|
-
proto_path = File.expand_path('../../../../proto/migration.rb', __FILE__)
|
|
27
|
-
|
|
28
|
-
# Get the name
|
|
29
|
-
name = ask("Migration name:")
|
|
30
|
-
|
|
31
|
-
# If no directory is specified we'll store the migrations under ./migrations
|
|
32
|
-
if dir.nil? or dir == ''
|
|
33
|
-
if !File.directory?('./migrations')
|
|
34
|
-
abort "No directory specified and ./migrations doesn't exist"
|
|
35
|
-
else
|
|
36
|
-
dir = './migrations'
|
|
37
|
-
puts "Using ./migrations"
|
|
38
|
-
end
|
|
39
|
-
else
|
|
40
|
-
puts "Using #{dir}"
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Generate the prototype
|
|
44
|
-
puts "Generating..."
|
|
45
|
-
|
|
46
|
-
proto = File.open(proto_path, 'r').read
|
|
47
|
-
path = "#{dir}/#{Time.new.to_i}_#{name}.rb"
|
|
48
|
-
|
|
49
|
-
begin
|
|
50
|
-
File.open(path, 'w').write(proto)
|
|
51
|
-
puts "Done!"
|
|
52
|
-
rescue => e
|
|
53
|
-
puts "Failed to generate the migration: #{e}"
|
|
54
|
-
end
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
desc 'package', 'Creates a new package'
|
|
58
|
-
method_option :directory, :type => :string, :required => true
|
|
59
|
-
|
|
60
|
-
##
|
|
61
|
-
# Creates a new package.
|
|
62
|
-
#
|
|
63
|
-
# @author Yorick Peterse
|
|
64
|
-
# @since 0.2
|
|
65
|
-
#
|
|
66
|
-
def package
|
|
67
|
-
name = ask("Package name:").strip.downcase.gsub(' ', '_')
|
|
68
|
-
proto = File.expand_path('../../../../proto/package', __FILE__)
|
|
69
|
-
klass = name.camel_case
|
|
70
|
-
extension_path = options[:directory] + '/' + name
|
|
71
|
-
|
|
72
|
-
FileUtils.rm_rf(extension_path)
|
|
73
|
-
|
|
74
|
-
# Rename all files and folders
|
|
75
|
-
begin
|
|
76
|
-
FileUtils.cp_r(proto, extension_path)
|
|
77
|
-
|
|
78
|
-
lib_path = "#{extension_path}/lib/#{name}"
|
|
79
|
-
|
|
80
|
-
# Rename the base file and directory
|
|
81
|
-
FileUtils.mv("#{extension_path}/lib/package" , lib_path)
|
|
82
|
-
FileUtils.mv("#{extension_path}/lib/package.rb", "#{extension_path}/lib/#{name}.rb")
|
|
83
|
-
|
|
84
|
-
# ------------------------------------------------
|
|
85
|
-
|
|
86
|
-
controller_filename = klass.snake_case.pluralize
|
|
87
|
-
model_filename = klass.snake_case.singularize
|
|
88
|
-
|
|
89
|
-
# Generate the controller
|
|
90
|
-
controller = File.open("#{lib_path}/controller/controllers.rb", 'r').read
|
|
91
|
-
controller.gsub!('CONTROLLER', klass.pluralize)
|
|
92
|
-
controller.gsub!('EXTENSION' , klass.pluralize)
|
|
93
|
-
|
|
94
|
-
FileUtils.mv("#{lib_path}/controller/controllers.rb", "#{lib_path}/controller/#{controller_filename}.rb")
|
|
95
|
-
File.open("#{lib_path}/controller/#{controller_filename}.rb", 'w').write(controller)
|
|
96
|
-
|
|
97
|
-
# Move the view directory
|
|
98
|
-
FileUtils.mv("#{lib_path}/view/admin/package", "#{lib_path}/view/admin/#{controller_filename}")
|
|
99
|
-
|
|
100
|
-
# Generate the model
|
|
101
|
-
model = File.open("#{lib_path}/model/model.rb", 'r').read
|
|
102
|
-
model.gsub!('MODEL' , klass.singularize)
|
|
103
|
-
model.gsub!('EXTENSION' , klass.pluralize)
|
|
104
|
-
|
|
105
|
-
FileUtils.mv("#{lib_path}/model/model.rb", "#{lib_path}/model/#{model_filename}.rb")
|
|
106
|
-
File.open("#{lib_path}/model/#{model_filename}.rb", 'w').write(model)
|
|
107
|
-
|
|
108
|
-
puts "Done! Don't forget to rename the controllers/models/etc"
|
|
109
|
-
rescue => e
|
|
110
|
-
abort "Failed to generate the extesion: #{e}"
|
|
111
|
-
end
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
end
|