caboose-cms 0.2.86 → 0.2.87
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/app/models/caboose/page_bar_generator.rb +1 -0
- data/app/models/caboose/pager.rb +1 -165
- data/app/models/caboose/permission.rb +3 -1
- data/app/models/caboose/role.rb +10 -3
- data/app/models/caboose/role_membership.rb +9 -0
- data/app/models/caboose/role_permission.rb +9 -0
- data/app/models/caboose/user.rb +4 -2
- data/lib/caboose/version.rb +1 -1
- data/lib/tasks/caboose.rake +7 -236
- data/lib/tasks/caboose_db.rake +228 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NjE0MjY3MzEwMzRmMmQ3NTc5ZjYxMTE1ODkzN2VmZjU4OWIwNmFiZQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZjU0YjRiNzNiOTMxODFlOWJmMjE1YzUyYjMyMjFkYmU2ODgyMjcyYg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGI0NzdjODUwZWNkMjhlNWM2MmFhMzM5ZmI4YzI1Y2RlM2M3MGE3OGY5ZjY3
|
10
|
+
N2VlZmIwYmRhMWQwNzQ1NmFjZGQ4ZjI3ZmQxOTk2NjhlNzVhZGNmZDY3ZGEz
|
11
|
+
ZjNmZjc5Y2I5MDc1MTQ4NDBlMzdlOGM5MTBlMWEyYzIyZWJhODY=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MjVlNDdlN2E2MmY0MDA5ZDcwZWNjMTA0M2E4YWM1ZGYwZWZiOGFmNjViMWVm
|
14
|
+
OGI5MWY4YWFkNzhiMDBmMDA0MWIyMzdiZWIzYzYwOTViM2I2ZDVmMWE1N2M5
|
15
|
+
ZmUwNWFlNjY4MDMwY2ZkYWNhNDk1ZWNhMmI5M2QzZTZiNDUyNWM=
|
data/app/models/caboose/pager.rb
CHANGED
@@ -1,166 +1,2 @@
|
|
1
|
-
module Caboose
|
2
|
-
class Pager
|
3
|
-
#
|
4
|
-
# Parameters:
|
5
|
-
# params: array of key/value pairs that must include the following:
|
6
|
-
# base_url: url without querystring onto which the parameters are added.
|
7
|
-
# itemCount: Total number of items.
|
8
|
-
#
|
9
|
-
# In addition, the following parameters are not required but may be
|
10
|
-
# included in the array:
|
11
|
-
# itemsPerPage: Number of items you want to show per page. Defaults to 10 if not present.
|
12
|
-
# page: Current page number. Defaults to 0 if not present.
|
13
|
-
#
|
14
|
-
attr_accessor :params, :options
|
15
|
-
|
16
|
-
def initialize(post_get, params = nil, options = nil)
|
17
|
-
|
18
|
-
params = {} if params.nil?
|
19
|
-
options = {} if options.nil?
|
20
|
-
|
21
|
-
# Note: a few keys are required:
|
22
|
-
# base_url, page, itemCount, itemsPerPage
|
23
|
-
@params = {}
|
24
|
-
@options = {
|
25
|
-
'model' => '',
|
26
|
-
'sort' => '',
|
27
|
-
'desc' => false,
|
28
|
-
'base_url' => '',
|
29
|
-
'page' => 1,
|
30
|
-
'item_count' => 0,
|
31
|
-
'items_per_page' => 10
|
32
|
-
}
|
33
|
-
params.each { |key, val| @params[key] = val }
|
34
|
-
options.each { |key, val| @options[key] = val }
|
35
|
-
@params.each { |key, val| @params[key] = post_get[key].nil? ? val : post_get[key] }
|
36
|
-
@options.each { |key, val| @options[key] = post_get[key].nil? ? val : post_get[key] }
|
37
|
-
@options['item_count'] = @options['model'].constantize.where(where).count
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
def ok(val)
|
42
|
-
return false if val.nil?
|
43
|
-
return true if val.is_a? Array
|
44
|
-
return true if val.is_a? Hash
|
45
|
-
return true if val.is_a? Integer
|
46
|
-
return true if val.is_a? Fixnum
|
47
|
-
return true if val.is_a? Float
|
48
|
-
return true if val.is_a? Bignum
|
49
|
-
return true if val.is_a? TrueClass
|
50
|
-
return true if val.is_a? FalseClass
|
51
|
-
return false if val == ""
|
52
|
-
return true
|
53
|
-
end
|
54
|
-
|
55
|
-
def items
|
56
|
-
return @options['model'].constantize.where(where).limit(limit).offset(offset).reorder(reorder).all
|
57
|
-
end
|
58
|
-
|
59
|
-
def generate
|
60
|
-
|
61
|
-
# Check for necessary parameter values
|
62
|
-
return false if !ok(@options['base_url']) # Error: base_url is required for the page bar generator to work.
|
63
|
-
return false if !ok(@options['item_count']) # Error: itemCount is required for the page bar generator to work.
|
64
|
-
|
65
|
-
# Set default parameter values if not present
|
66
|
-
@options['items_per_page'] = 10 if @options["items_per_page"].nil?
|
67
|
-
@options['page'] = 1 if @options["page"].nil?
|
68
|
-
|
69
|
-
# Variables to make the search form work
|
70
|
-
vars = get_vars()
|
71
|
-
page = @options["page"].to_i
|
72
|
-
|
73
|
-
#Caboose.log(@options)
|
74
|
-
|
75
|
-
# Max links to show (must be odd)
|
76
|
-
total_links = 5
|
77
|
-
prev_page = page - 1
|
78
|
-
next_page = page + 1
|
79
|
-
total_pages = (@options['item_count'].to_f / @options['items_per_page'].to_f).ceil
|
80
|
-
|
81
|
-
if (total_pages < total_links)
|
82
|
-
start = 1
|
83
|
-
stop = total_pages
|
84
|
-
else
|
85
|
-
start = page - (total_links/2).floor
|
86
|
-
start = 1 if start < 1
|
87
|
-
stop = start + total_links - 1
|
88
|
-
|
89
|
-
if (stop > total_pages)
|
90
|
-
stop = total_pages
|
91
|
-
start = stop - total_links
|
92
|
-
start = 1 if start < 1
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
base_url = @params['base_url']
|
97
|
-
str = ''
|
98
|
-
str << "<p>Results: showing page #{page} of #{total_pages}</p>\n"
|
99
|
-
|
100
|
-
if (total_pages > 1)
|
101
|
-
str << "<div class='page_links'>\n"
|
102
|
-
if (page > 1)
|
103
|
-
str << "<a href='#{base_url}?#{vars}&page=#{prev_page}'>Previous</a>"
|
104
|
-
end
|
105
|
-
for i in start..stop
|
106
|
-
if (page != i)
|
107
|
-
str << "<a href='#{base_url}?#{vars}&page=#{i}'>#{i}</a>"
|
108
|
-
else
|
109
|
-
str << "<span class='current_page'>#{i}</span>"
|
110
|
-
end
|
111
|
-
end
|
112
|
-
if (page < total_pages)
|
113
|
-
str << "<a href='#{base_url}?#{vars}&page=#{next_page}'>Next</a>"
|
114
|
-
end
|
115
|
-
str << "</div>\n"
|
116
|
-
end
|
117
|
-
|
118
|
-
return str
|
119
|
-
end
|
120
|
-
|
121
|
-
def get_vars()
|
122
|
-
vars = []
|
123
|
-
@params.each do |k,v|
|
124
|
-
vars.push("#{k}=#{v}") if !v.nil? && v.length > 0
|
125
|
-
end
|
126
|
-
return URI.escape(vars.join('&'))
|
127
|
-
end
|
128
|
-
|
129
|
-
def sortable_table_headings(cols)
|
130
|
-
vars = get_vars()
|
131
|
-
str = ''
|
132
|
-
|
133
|
-
# key = sort field, value = text to display
|
134
|
-
cols.each do |sort, text|
|
135
|
-
desc = @options['desc'] ? @options['desc'].to_i : 0
|
136
|
-
arrow = @options['sort'] == sort ? (desc ? ' ↑' : ' ↓') : ''
|
137
|
-
link = @options['base_url'] + "?#{vars}&sort=#{sort}&desc=" + (desc ? "0" : "1")
|
138
|
-
str += "<th><a href='#{link}'>#{text}#{arrow}</a></th>\n"
|
139
|
-
end
|
140
|
-
return str
|
141
|
-
end
|
142
|
-
|
143
|
-
def where
|
144
|
-
vars = {}
|
145
|
-
@params.each do |k,v|
|
146
|
-
vars[k] = v if !v.nil? && v.length > 0
|
147
|
-
end
|
148
|
-
return vars
|
149
|
-
end
|
150
|
-
|
151
|
-
def limit
|
152
|
-
return @options['items_per_page'].to_i
|
153
|
-
end
|
154
|
-
|
155
|
-
def offset
|
156
|
-
return (@options['page'].to_i - 1) * @options['items_per_page'].to_i
|
157
|
-
end
|
158
|
-
|
159
|
-
def reorder
|
160
|
-
if (!@options['sort'].nil? && @options['sort'].length > 0)
|
161
|
-
return @options['sort']
|
162
|
-
end
|
163
|
-
return "id"
|
164
|
-
end
|
165
|
-
end
|
1
|
+
module Caboose::Pager << Caboose::PageBarGenerator
|
166
2
|
end
|
@@ -1,7 +1,9 @@
|
|
1
1
|
|
2
2
|
class Caboose::Permission < ActiveRecord::Base
|
3
3
|
self.table_name = "permissions"
|
4
|
-
has_and_belongs_to_many :roles
|
4
|
+
#has_and_belongs_to_many :roles
|
5
|
+
has_many :role_permissions
|
6
|
+
has_many :roles, :through => :role_permissions
|
5
7
|
attr_accessible :action, :resource
|
6
8
|
|
7
9
|
def self.allow(role_id, resource, action)
|
data/app/models/caboose/role.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
|
2
2
|
class Caboose::Role < ActiveRecord::Base
|
3
3
|
self.table_name = "roles"
|
4
|
-
belongs_to :parent, :class_name => "Caboose::Role"
|
5
|
-
|
6
|
-
has_and_belongs_to_many :
|
4
|
+
belongs_to :parent, :class_name => "Caboose::Role"
|
5
|
+
|
6
|
+
#has_and_belongs_to_many :users
|
7
|
+
has_many :role_memberships
|
8
|
+
has_many :users, :through => :role_memberships
|
9
|
+
|
10
|
+
#has_and_belongs_to_many :permissions
|
11
|
+
has_many :role_permissions
|
12
|
+
has_many :permissions, :through => :role_permissions
|
13
|
+
|
7
14
|
has_many :page_permissions
|
8
15
|
|
9
16
|
attr_accessible :name, :description, :parent_id
|
data/app/models/caboose/user.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
class Caboose::User < ActiveRecord::Base
|
2
|
-
self.table_name = "users"
|
3
|
-
has_and_belongs_to_many :roles
|
2
|
+
self.table_name = "users"
|
3
|
+
#has_and_belongs_to_many :roles
|
4
|
+
has_many :role_memberships
|
5
|
+
has_many :roles, :through => :role_memberships
|
4
6
|
attr_accessible :email, :first_name, :last_name, :username, :token, :password
|
5
7
|
|
6
8
|
def self.logged_out_user
|
data/lib/caboose/version.rb
CHANGED
data/lib/tasks/caboose.rake
CHANGED
@@ -3,37 +3,15 @@ require "caboose/migrations"
|
|
3
3
|
|
4
4
|
namespace :caboose do
|
5
5
|
|
6
|
-
desc "Initializes the database for a caboose installation"
|
7
|
-
task :db => :environment do
|
8
|
-
drop_tables
|
9
|
-
create_tables
|
10
|
-
load_data
|
11
|
-
end
|
12
|
-
|
13
|
-
desc "Drops all caboose tables"
|
14
|
-
task :drop_tables => :environment do drop_tables end
|
15
|
-
|
16
|
-
desc "Creates all caboose tables"
|
17
|
-
task :create_tables => :environment do create_tables end
|
18
|
-
|
19
|
-
desc "Loads data into caboose tables"
|
20
|
-
task :load_data => :environment do load_data end
|
21
|
-
|
22
6
|
desc "Resets the admin password to 'caboose'"
|
23
|
-
task :reset_admin_pass => :environment do
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
7
|
+
task :reset_admin_pass => :environment do
|
8
|
+
|
9
|
+
admin_user = Caboose::User.where(username: 'admin').first
|
10
|
+
admin_user.password = Digest::SHA1.hexdigest(Caboose::salt + 'caboose')
|
11
|
+
admin_user.save
|
12
|
+
|
29
13
|
end
|
30
|
-
|
31
|
-
desc "Performs caboose migrations to transition from the current version to the given version"
|
32
|
-
task :migrate_to, [:to_version] => :migrate_between
|
33
|
-
|
34
|
-
desc "Performs caboose migrations to transition from the current version to the latest installed version"
|
35
|
-
task :migrate => :migrate_between
|
36
|
-
|
14
|
+
|
37
15
|
desc "Sync production db to development"
|
38
16
|
task :sync_dev_db do
|
39
17
|
|
@@ -55,212 +33,5 @@ namespace :caboose do
|
|
55
33
|
`pg_restore --verbose --clean --no-acl --no-owner -h #{ddb['host']} -U #{ddb['username']} -d #{ddb['database']} #{dump_file}`
|
56
34
|
|
57
35
|
end
|
58
|
-
|
59
|
-
#=============================================================================
|
60
36
|
|
61
|
-
def drop_tables
|
62
|
-
puts "Dropping any existing caboose tables..."
|
63
|
-
c = ActiveRecord::Base.connection
|
64
|
-
c.drop_table :users if c.table_exists?('users')
|
65
|
-
c.drop_table :roles if c.table_exists?('roles')
|
66
|
-
c.drop_table :permissions if c.table_exists?('permissions')
|
67
|
-
c.drop_table :roles_users if c.table_exists?('roles_users')
|
68
|
-
c.drop_table :permissions_roles if c.table_exists?('permissions_roles')
|
69
|
-
c.drop_table :assets if c.table_exists?('assets')
|
70
|
-
c.drop_table :pages if c.table_exists?('pages')
|
71
|
-
c.drop_table :posts if c.table_exists?('posts')
|
72
|
-
c.drop_table :page_permissions if c.table_exists?('page_permissions')
|
73
|
-
c.drop_table :sessions if c.table_exists?('sessions')
|
74
|
-
c.drop_table :settings if c.table_exists?('settings')
|
75
|
-
end
|
76
|
-
|
77
|
-
def create_tables
|
78
|
-
puts "Creating required caboose tables..."
|
79
|
-
|
80
|
-
c = ActiveRecord::Base.connection
|
81
|
-
|
82
|
-
# User/Role/Permissions
|
83
|
-
c.create_table :users do |t|
|
84
|
-
t.string :first_name
|
85
|
-
t.string :last_name
|
86
|
-
t.string :username
|
87
|
-
t.string :email
|
88
|
-
t.string :phone
|
89
|
-
t.string :password
|
90
|
-
t.string :password_reset_id
|
91
|
-
t.datetime :password_reset_sent
|
92
|
-
t.string :token
|
93
|
-
t.datetime :date_created
|
94
|
-
end
|
95
|
-
c.create_table :roles do |t|
|
96
|
-
t.integer :parent_id
|
97
|
-
t.string :name
|
98
|
-
t.string :description
|
99
|
-
end
|
100
|
-
c.create_table :permissions do |t|
|
101
|
-
t.string :resource
|
102
|
-
t.string :action
|
103
|
-
end
|
104
|
-
|
105
|
-
# Role membership
|
106
|
-
c.create_table :roles_users do |t|
|
107
|
-
t.references :role
|
108
|
-
t.references :user
|
109
|
-
end
|
110
|
-
c.add_index :roles_users, :role_id
|
111
|
-
c.add_index :roles_users, :user_id
|
112
|
-
|
113
|
-
# Role permissions
|
114
|
-
c.create_table :permissions_roles do |t|
|
115
|
-
t.references :role
|
116
|
-
t.references :permission
|
117
|
-
end
|
118
|
-
c.add_index :permissions_roles, :role_id
|
119
|
-
c.add_index :permissions_roles, :permission_id
|
120
|
-
|
121
|
-
# Pages and Assets
|
122
|
-
c.create_table :assets do |t|
|
123
|
-
t.references :page
|
124
|
-
t.references :user
|
125
|
-
t.datetime :date_uploaded
|
126
|
-
t.string :name
|
127
|
-
t.string :filename
|
128
|
-
t.string :description
|
129
|
-
t.string :extension
|
130
|
-
end
|
131
|
-
c.create_table :pages do |t|
|
132
|
-
t.integer :parent_id
|
133
|
-
t.string :title
|
134
|
-
t.string :menu_title
|
135
|
-
t.text :content
|
136
|
-
t.string :slug
|
137
|
-
t.string :alias
|
138
|
-
t.string :uri
|
139
|
-
t.string :redirect_url
|
140
|
-
t.boolean :hide, :default => false
|
141
|
-
t.integer :content_format, :default => Caboose::Page::CONTENT_FORMAT_HTML
|
142
|
-
t.text :custom_css
|
143
|
-
t.text :custom_js
|
144
|
-
t.text :linked_resources
|
145
|
-
t.string :layout
|
146
|
-
t.integer :sort_order, :default => 0
|
147
|
-
t.boolean :custom_sort_children, :default => false
|
148
|
-
t.string :seo_title, :limit => 70
|
149
|
-
t.string :meta_description, :limit => 156
|
150
|
-
t.string :meta_robots, :default => 'index, follow' # Multi-select options: none, noindex, nofollow, nosnippet, noodp, noarchive
|
151
|
-
t.string :canonical_url
|
152
|
-
t.string :fb_description, :limit => 156
|
153
|
-
t.string :gp_description, :limit => 156
|
154
|
-
end
|
155
|
-
c.create_table :posts do |t|
|
156
|
-
t.text :title
|
157
|
-
t.text :body
|
158
|
-
t.boolean :hide
|
159
|
-
t.text :image_url
|
160
|
-
t.timestamps
|
161
|
-
end
|
162
|
-
c.create_table :page_permissions do |t|
|
163
|
-
t.references :role
|
164
|
-
t.references :page
|
165
|
-
t.string :action
|
166
|
-
end
|
167
|
-
c.create_table :sessions do |t|
|
168
|
-
t.string :session_id, :null => false
|
169
|
-
t.text :data
|
170
|
-
t.timestamps
|
171
|
-
end
|
172
|
-
c.add_index :sessions, :session_id
|
173
|
-
c.add_index :sessions, :updated_at
|
174
|
-
c.change_column :sessions, :created_at, :datetime, :null => true
|
175
|
-
c.change_column :sessions, :updated_at, :datetime, :null => true
|
176
|
-
c.create_table :settings do |t|
|
177
|
-
t.string :name
|
178
|
-
t.text :value
|
179
|
-
end
|
180
|
-
|
181
|
-
end
|
182
|
-
|
183
|
-
def load_data
|
184
|
-
puts "Loading data into caboose tables..."
|
185
|
-
|
186
|
-
admin_user = Caboose::User.create(first_name: 'Admin', last_name: 'User', username: 'admin', email: 'william@nine.is')
|
187
|
-
admin_user.password = Digest::SHA1.hexdigest(Caboose::salt + 'caboose')
|
188
|
-
admin_user.save
|
189
|
-
|
190
|
-
admin_role = Caboose::Role.create(parent_id: -1, name: 'Admin')
|
191
|
-
elo_role = Caboose::Role.create(parent_id: -1, name: 'Everyone Logged Out')
|
192
|
-
eli_role = Caboose::Role.create(parent_id: elo_role.id, name: 'Everyone Logged In')
|
193
|
-
|
194
|
-
elo_user = Caboose::User.create(first_name: 'John', last_name: 'Doe', username: 'elo', email: 'william@nine.is')
|
195
|
-
|
196
|
-
admin_perm = Caboose::Permission.create(resource: 'all', action: 'all')
|
197
|
-
Caboose::Permission.create(resource: 'users' , action: 'view')
|
198
|
-
Caboose::Permission.create(resource: 'users' , action: 'edit')
|
199
|
-
Caboose::Permission.create(resource: 'users' , action: 'delete')
|
200
|
-
Caboose::Permission.create(resource: 'users' , action: 'add')
|
201
|
-
Caboose::Permission.create(resource: 'roles' , action: 'view')
|
202
|
-
Caboose::Permission.create(resource: 'roles' , action: 'edit')
|
203
|
-
Caboose::Permission.create(resource: 'roles' , action: 'delete')
|
204
|
-
Caboose::Permission.create(resource: 'roles' , action: 'add')
|
205
|
-
Caboose::Permission.create(resource: 'permissions' , action: 'view')
|
206
|
-
Caboose::Permission.create(resource: 'permissions' , action: 'edit')
|
207
|
-
Caboose::Permission.create(resource: 'permissions' , action: 'delete')
|
208
|
-
Caboose::Permission.create(resource: 'permissions' , action: 'add')
|
209
|
-
|
210
|
-
# Add the admin user to the admin role
|
211
|
-
admin_user.roles.push(admin_role)
|
212
|
-
admin_user.save
|
213
|
-
|
214
|
-
# Add the elo to the elo role
|
215
|
-
elo_user.roles.push(elo_role)
|
216
|
-
elo_user.save
|
217
|
-
|
218
|
-
# Add the all/all permission to the admin role
|
219
|
-
admin_role.permissions.push(admin_perm)
|
220
|
-
admin_role.save
|
221
|
-
|
222
|
-
# Create the home page
|
223
|
-
home_page = Caboose::Page.create(title: 'Home' , parent_id: -1, hide: 0, layout: 'home' , uri: '')
|
224
|
-
admin_page = Caboose::Page.create(title: 'Admin' , parent_id: home_page.id, hide: 0, layout: 'admin', alias: 'admin', slug: 'admin', uri: 'admin')
|
225
|
-
login_page = Caboose::Page.create(title: 'Login' , parent_id: home_page.id, hide: 0, layout: 'login', alias: 'login', slug: 'login', uri: 'login')
|
226
|
-
Caboose::PagePermission.create(role_id: elo_role.id, page_id: home_page.id, action: 'view')
|
227
|
-
Caboose::PagePermission.create(role_id: elo_role.id, page_id: login_page.id, action: 'view')
|
228
|
-
|
229
|
-
# Create the required settings
|
230
|
-
Caboose::Setting.create(name: 'version' , value: Caboose::VERSION)
|
231
|
-
Caboose::Setting.create(name: 'site_name' , value: 'New Caboose Site')
|
232
|
-
Caboose::Setting.create(name: 'site_url' , value: 'www.mycaboosesite.com')
|
233
|
-
Caboose::Setting.create(name: 'admin_email' , value: 'william@nine.is')
|
234
|
-
|
235
|
-
end
|
236
|
-
|
237
|
-
def reset_admin_pass
|
238
|
-
admin_user = Caboose::User.where(username: 'admin').first
|
239
|
-
admin_user.password = Digest::SHA1.hexdigest(Caboose::salt + 'caboose')
|
240
|
-
admin_user.save
|
241
|
-
end
|
242
|
-
|
243
|
-
def migrate_tables(from_version, to_version)
|
244
|
-
version_setting = Caboose::Setting.where(name: 'version').first
|
245
|
-
versions = Caboose::VERSIONS
|
246
|
-
|
247
|
-
from_version = version_setting.value if from_version.nil?
|
248
|
-
to_version = Caboose::VERSION if to_version.nil?
|
249
|
-
version_regex = /[0-9]+(\.[0-9]+)*/
|
250
|
-
|
251
|
-
raise "from_version '#{from_version}' was invalid" if not version_regex.match(from_version)
|
252
|
-
raise "to_version '#{to_version}' was invalid" if not version_regex.match(to_version)
|
253
|
-
|
254
|
-
c = ActiveRecord::Base.connection
|
255
|
-
from_to_compare = Caboose::Version.compare_version_strings(from_version, to_version)
|
256
|
-
|
257
|
-
if from_to_compare < 0
|
258
|
-
versions.select{ |v| v > from_version && v <= to_version }.each{ |v| v.up(c) }
|
259
|
-
elsif from_to_compare > 0
|
260
|
-
versions.select{ |v| v > to_version && v <= from_version }.reverse_each{ |v| v.down(c) }
|
261
|
-
end
|
262
|
-
|
263
|
-
version_setting.value = to_version
|
264
|
-
version_setting.save
|
265
|
-
end
|
266
37
|
end
|
@@ -0,0 +1,228 @@
|
|
1
|
+
require "caboose/version"
|
2
|
+
require "caboose/migrations"
|
3
|
+
|
4
|
+
namespace :caboose do
|
5
|
+
|
6
|
+
desc "Creates/verifies that all database tables and fields are correctly added."
|
7
|
+
task :db => :environment do
|
8
|
+
create_tables
|
9
|
+
load_data
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Drops all caboose tables"
|
13
|
+
task :drop_tables => :environment do drop_tables end
|
14
|
+
|
15
|
+
desc "Creates all caboose tables"
|
16
|
+
task :create_tables => :environment do create_tables end
|
17
|
+
|
18
|
+
desc "Loads data into caboose tables"
|
19
|
+
task :load_data => :environment do load_data end
|
20
|
+
|
21
|
+
#=============================================================================
|
22
|
+
|
23
|
+
def drop_tables
|
24
|
+
puts "Dropping any existing caboose tables..."
|
25
|
+
c = ActiveRecord::Base.connection
|
26
|
+
c.drop_table :users if c.table_exists?('users')
|
27
|
+
c.drop_table :roles if c.table_exists?('roles')
|
28
|
+
c.drop_table :permissions if c.table_exists?('permissions')
|
29
|
+
c.drop_table :roles_users if c.table_exists?('roles_users')
|
30
|
+
c.drop_table :permissions_roles if c.table_exists?('permissions_roles')
|
31
|
+
c.drop_table :assets if c.table_exists?('assets')
|
32
|
+
c.drop_table :pages if c.table_exists?('pages')
|
33
|
+
c.drop_table :posts if c.table_exists?('posts')
|
34
|
+
c.drop_table :page_permissions if c.table_exists?('page_permissions')
|
35
|
+
c.drop_table :sessions if c.table_exists?('sessions')
|
36
|
+
c.drop_table :settings if c.table_exists?('settings')
|
37
|
+
end
|
38
|
+
|
39
|
+
def create_tables
|
40
|
+
puts "Creating required caboose tables..."
|
41
|
+
|
42
|
+
c = ActiveRecord::Base.connection
|
43
|
+
|
44
|
+
# Users
|
45
|
+
c.create_table :users if !c.table_exists?(:users)
|
46
|
+
c.add_column :users, :first_name , :string if !c.column_exists?(:users, :first_name )
|
47
|
+
c.add_column :users, :last_name , :string if !c.column_exists?(:users, :last_name )
|
48
|
+
c.add_column :users, :username , :string if !c.column_exists?(:users, :username )
|
49
|
+
c.add_column :users, :email , :string if !c.column_exists?(:users, :email )
|
50
|
+
c.add_column :users, :phone , :string if !c.column_exists?(:users, :phone )
|
51
|
+
c.add_column :users, :password , :string if !c.column_exists?(:users, :password )
|
52
|
+
c.add_column :users, :password_reset_id , :string if !c.column_exists?(:users, :password_reset_id )
|
53
|
+
c.add_column :users, :password_reset_sent , :datetime if !c.column_exists?(:users, :password_reset_sent )
|
54
|
+
c.add_column :users, :token , :string if !c.column_exists?(:users, :token )
|
55
|
+
c.add_column :users, :date_created , :datetime if !c.column_exists?(:users, :date_created )
|
56
|
+
|
57
|
+
# Roles
|
58
|
+
c.create_table :roles if !c.table_exists?(:roles)
|
59
|
+
c.add_column :roles, :parent_id , :integer if !c.column_exists?(:roles, :parent_id )
|
60
|
+
c.add_column :roles, :name , :string if !c.column_exists?(:roles, :name )
|
61
|
+
c.add_column :roles, :description , :string if !c.column_exists?(:roles, :description )
|
62
|
+
|
63
|
+
# Permissions
|
64
|
+
c.create_table :permissions if !c.table_exists?(:permissions)
|
65
|
+
c.add_column :permissions, :resource , :string if !c.column_exists?(:permissions, :resource )
|
66
|
+
c.add_column :permissions, :action , :string if !c.column_exists?(:permissions, :action )
|
67
|
+
|
68
|
+
# Role membership
|
69
|
+
c.rename_table :roles_users, :role_memberships if c.table_exists?(:roles_users)
|
70
|
+
c.create_table :role_memberships if !c.table_exists?(:role_memberships)
|
71
|
+
c.add_column :role_memberships, :role_id, :integer if !c.column_exists?(:role_memberships, :role_id)
|
72
|
+
c.add_column :role_memberships, :user_id, :integer if !c.column_exists?(:role_memberships, :user_id)
|
73
|
+
c.add_index :role_memberships, :role_id if !c.index_exists?( :role_memberships, :role_id)
|
74
|
+
c.add_index :role_memberships, :user_id if !c.index_exists?( :role_memberships, :user_id)
|
75
|
+
|
76
|
+
# Role permissions
|
77
|
+
c.rename_table :permissions_roles, :role_permissions if c.table_exists?(:permissions_roles)
|
78
|
+
c.create_table :role_permissions if !c.table_exists?(:role_permissions)
|
79
|
+
c.add_column :role_permissions, :role_id , :integer if !c.column_exists?(:role_permissions, :role_id )
|
80
|
+
c.add_column :role_permissions, :permission_id , :integer if !c.column_exists?(:role_permissions, :permission_id )
|
81
|
+
c.add_index :role_permissions, :role_id if !c.index_exists?( :role_permissions, :role_id )
|
82
|
+
c.add_index :role_permissions, :permission_id if !c.index_exists?( :role_permissions, :permission_id )
|
83
|
+
|
84
|
+
# Assets
|
85
|
+
c.create_table :assets if !c.table_exists?(:assets)
|
86
|
+
c.add_column :assets, :page_id , :integer if !c.column_exists?(:assets, :page_id )
|
87
|
+
c.add_column :assets, :user_id , :integer if !c.column_exists?(:assets, :user_id )
|
88
|
+
c.add_column :assets, :date_uploaded , :datetime if !c.column_exists?(:assets, :date_uploaded )
|
89
|
+
c.add_column :assets, :name , :string if !c.column_exists?(:assets, :name )
|
90
|
+
c.add_column :assets, :filename , :string if !c.column_exists?(:assets, :filename )
|
91
|
+
c.add_column :assets, :description , :string if !c.column_exists?(:assets, :description )
|
92
|
+
c.add_column :assets, :extension , :string if !c.column_exists?(:assets, :extension )
|
93
|
+
|
94
|
+
# Pages
|
95
|
+
c.create_table :pages if !c.table_exists?(:pages)
|
96
|
+
c.add_column :pages, :parent_id , :integer if !c.column_exists?(:pages, :parent_id )
|
97
|
+
c.add_column :pages, :title , :string if !c.column_exists?(:pages, :title )
|
98
|
+
c.add_column :pages, :menu_title , :string if !c.column_exists?(:pages, :menu_title )
|
99
|
+
c.add_column :pages, :content , :text if !c.column_exists?(:pages, :content )
|
100
|
+
c.add_column :pages, :slug , :string if !c.column_exists?(:pages, :slug )
|
101
|
+
c.add_column :pages, :alias , :string if !c.column_exists?(:pages, :alias )
|
102
|
+
c.add_column :pages, :uri , :string if !c.column_exists?(:pages, :uri )
|
103
|
+
c.add_column :pages, :redirect_url , :string if !c.column_exists?(:pages, :redirect_url )
|
104
|
+
c.add_column :pages, :hide , :boolean , :default => false if !c.column_exists?(:pages, :hide )
|
105
|
+
c.add_column :pages, :content_format , :integer , :default => Caboose::Page::CONTENT_FORMAT_HTML if !c.column_exists?(:pages, :content_format )
|
106
|
+
c.add_column :pages, :custom_css , :text if !c.column_exists?(:pages, :custom_css )
|
107
|
+
c.add_column :pages, :custom_js , :text if !c.column_exists?(:pages, :custom_js )
|
108
|
+
c.add_column :pages, :linked_resources , :text if !c.column_exists?(:pages, :linked_resources )
|
109
|
+
c.add_column :pages, :layout , :string if !c.column_exists?(:pages, :layout )
|
110
|
+
c.add_column :pages, :sort_order , :integer , :default => 0 if !c.column_exists?(:pages, :sort_order )
|
111
|
+
c.add_column :pages, :custom_sort_children , :boolean , :default => false if !c.column_exists?(:pages, :custom_sort_children )
|
112
|
+
c.add_column :pages, :seo_title , :string , :limit => 70 if !c.column_exists?(:pages, :seo_title )
|
113
|
+
c.add_column :pages, :meta_description , :string , :limit => 156 if !c.column_exists?(:pages, :meta_description )
|
114
|
+
c.add_column :pages, :meta_robots , :string , :default => 'index, follow' if !c.column_exists?(:pages, :meta_robots )
|
115
|
+
c.add_column :pages, :canonical_url , :string if !c.column_exists?(:pages, :canonical_url )
|
116
|
+
c.add_column :pages, :fb_description , :string , :limit => 156 if !c.column_exists?(:pages, :fb_description )
|
117
|
+
c.add_column :pages, :gp_description , :string , :limit => 156 if !c.column_exists?(:pages, :gp_description )
|
118
|
+
|
119
|
+
# Posts
|
120
|
+
c.create_table :posts if !c.table_exists?(:posts)
|
121
|
+
c.add_column :posts, :title , :text if !c.column_exists?(:posts, :title )
|
122
|
+
c.add_column :posts, :body , :text if !c.column_exists?(:posts, :body )
|
123
|
+
c.add_column :posts, :hide , :boolean if !c.column_exists?(:posts, :hide )
|
124
|
+
c.add_column :posts, :image_url , :text if !c.column_exists?(:posts, :image_url )
|
125
|
+
c.add_column :posts, :created_at , :datetime if !c.column_exists?(:posts, :created_at )
|
126
|
+
c.add_column :posts, :updated_at , :datetime if !c.column_exists?(:posts, :updated_at )
|
127
|
+
|
128
|
+
# Post categories
|
129
|
+
c.create_table :post_categories if !c.table_exists?(:post_categories)
|
130
|
+
c.add_column :posts, :name , :string if !c.column_exists?(:post_categories, :name)
|
131
|
+
|
132
|
+
# Post category membership
|
133
|
+
c.create_table :post_category_memberships if !c.table_exists?(:post_category_memberships)
|
134
|
+
c.add_column :post_category_memberships, :post_id , :integer if !c.column_exists?(:post_category_memberships, :post_id )
|
135
|
+
c.add_column :post_category_memberships, :post_category_id , :integer if !c.column_exists?(:post_category_memberships, :post_category_id )
|
136
|
+
c.add_index :post_category_memberships, :post_id if !c.index_exists?( :post_category_memberships, :post_id )
|
137
|
+
c.add_index :post_category_memberships, :post_category_id if !c.index_exists?( :post_category_memberships, :post_category_id )
|
138
|
+
|
139
|
+
# Page permissions
|
140
|
+
c.create_table :page_permissions if !c.table_exists?(:page_permissions)
|
141
|
+
c.add_column :page_permissions, :role_id , :integer if !c.column_exists?(:page_permissions, :role_id )
|
142
|
+
c.add_column :page_permissions, :page_id , :integer if !c.column_exists?(:page_permissions, :page_id )
|
143
|
+
c.add_column :page_permissions, :action , :string if !c.column_exists?(:page_permissions, :action )
|
144
|
+
|
145
|
+
# Sessions
|
146
|
+
c.create_table :sessions if !c.table_exists?(:sessions)
|
147
|
+
c.add_column :sessions, :session_id , :string , :null => false if !c.column_exists?(:sessions, :session_id )
|
148
|
+
c.add_column :sessions, :data , :text if !c.column_exists?(:sessions, :data )
|
149
|
+
c.add_column :sessions, :created_at , :datetime , :null => true if !c.column_exists?(:sessions, :created_at )
|
150
|
+
c.add_column :sessions, :updated_at , :datetime , :null => true if !c.column_exists?(:sessions, :updated_at )
|
151
|
+
c.add_index :sessions, :session_id if !c.index_exists?( :sessions, :session_id )
|
152
|
+
c.add_index :sessions, :updated_at if !c.index_exists?( :sessions, :updated_at )
|
153
|
+
|
154
|
+
# Settings
|
155
|
+
c.create_table :settings if !c.table_exists?(:settings)
|
156
|
+
c.add_column :settings, :name , :string if !c.column_exists?(:settings, :name )
|
157
|
+
c.add_column :settings, :value , :text if !c.column_exists?(:settings, :value )
|
158
|
+
|
159
|
+
end
|
160
|
+
|
161
|
+
def load_data
|
162
|
+
puts "Loading data into caboose tables..."
|
163
|
+
|
164
|
+
admin_user = nil
|
165
|
+
if !Caboose::User.exists?(:username => 'admin')
|
166
|
+
admin_user = Caboose::User.create(:first_name => 'Admin', :last_name => 'User', :username => 'admin', :email => 'william@nine.is')
|
167
|
+
admin_user.password = Digest::SHA1.hexdigest(Caboose::salt + 'caboose')
|
168
|
+
admin_user.save
|
169
|
+
end
|
170
|
+
admin_user = Caboose::User.where(:username => 'admin').first if admin_user.nil?
|
171
|
+
|
172
|
+
Caboose::Role.create(:parent_id => -1 , :name => 'Admin' ) if !Caboose::Role.exists?(:name => 'Admin' )
|
173
|
+
Caboose::Role.create(:parent_id => -1 , :name => 'Everyone Logged Out' ) if !Caboose::Role.exists?(:name => 'Everyone Logged Out' )
|
174
|
+
Caboose::Role.create(:parent_id => elo_role.id , :name => 'Everyone Logged In' ) if !Caboose::Role.exists?(:name => 'Everyone Logged In' )
|
175
|
+
|
176
|
+
admin_role = Caboose::Role.where(:name => 'Admin' ).first
|
177
|
+
elo_role = Caboose::Role.where(:name => 'Everyone Logged Out' ).first
|
178
|
+
eli_role = Caboose::Role.where(:name => 'Everyone Logged In' ).first
|
179
|
+
|
180
|
+
Caboose::User.create(:first_name => 'John', :last_name => 'Doe', :username => 'elo', :email => 'william@nine.is') if !Caboose::User.exists?(:username => 'elo')
|
181
|
+
elo_user = Caboose::User.where(:username => 'elo').first
|
182
|
+
|
183
|
+
Caboose::Permission.create(:resource => 'all' , :action => 'all' ) if !Caboose::Permission.exists?(:resource => 'all' , :action => 'all' )
|
184
|
+
Caboose::Permission.create(:resource => 'users' , :action => 'view' ) if !Caboose::Permission.exists?(:resource => 'users' , :action => 'view' )
|
185
|
+
Caboose::Permission.create(:resource => 'users' , :action => 'edit' ) if !Caboose::Permission.exists?(:resource => 'users' , :action => 'edit' )
|
186
|
+
Caboose::Permission.create(:resource => 'users' , :action => 'delete' ) if !Caboose::Permission.exists?(:resource => 'users' , :action => 'delete' )
|
187
|
+
Caboose::Permission.create(:resource => 'users' , :action => 'add' ) if !Caboose::Permission.exists?(:resource => 'users' , :action => 'add' )
|
188
|
+
Caboose::Permission.create(:resource => 'roles' , :action => 'view' ) if !Caboose::Permission.exists?(:resource => 'roles' , :action => 'view' )
|
189
|
+
Caboose::Permission.create(:resource => 'roles' , :action => 'edit' ) if !Caboose::Permission.exists?(:resource => 'roles' , :action => 'edit' )
|
190
|
+
Caboose::Permission.create(:resource => 'roles' , :action => 'delete' ) if !Caboose::Permission.exists?(:resource => 'roles' , :action => 'delete' )
|
191
|
+
Caboose::Permission.create(:resource => 'roles' , :action => 'add' ) if !Caboose::Permission.exists?(:resource => 'roles' , :action => 'add' )
|
192
|
+
Caboose::Permission.create(:resource => 'permissions' , :action => 'view' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'view' )
|
193
|
+
Caboose::Permission.create(:resource => 'permissions' , :action => 'edit' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'edit' )
|
194
|
+
Caboose::Permission.create(:resource => 'permissions' , :action => 'delete' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'delete' )
|
195
|
+
Caboose::Permission.create(:resource => 'permissions' , :action => 'add' ) if !Caboose::Permission.exists?(:resource => 'permissions' , :action => 'add' )
|
196
|
+
|
197
|
+
# Add the admin user to the admin role
|
198
|
+
Caboose::RoleMembership.create(:user_id => admin_user.id, :role_id => admin_role.id) if !Caboose::RoleMembership.exists?(:user_id => admin_user.id, :role_id => admin_role.id)
|
199
|
+
|
200
|
+
# Add the elo to the elo role
|
201
|
+
Caboose::RoleMembership.create(:user_id => elo_user.id, :role_id => elo_role.id) if !Caboose::RoleMembership.exists?(:user_id => elo_user.id, :role_id => elo_role.id)
|
202
|
+
|
203
|
+
# Add the all/all permission to the admin role
|
204
|
+
admin_perm = Caboose::Permission.where(:resource => 'all', :action => 'all').first
|
205
|
+
Caboose::RolePermission.create(:role_id => admin_role.id, :permission_id => admin_perm.id) if !Caboose::RolePermission.exists?(:role_id => admin_role.id, :permission_id => admin_perm.id)
|
206
|
+
|
207
|
+
# Create the necessary pages
|
208
|
+
Caboose::Page.create(:title => 'Home' , :parent_id => -1, :hide => 0, :layout => 'home', :uri => '') if !Caboose::Page.exists?(:title => 'Home')
|
209
|
+
home_page = Caboose::Page.where(:title => 'Home', :parent_id => -1).first
|
210
|
+
Caboose::Page.create(:title => 'Admin' , :parent_id => home_page.id, :hide => 0, :layout => 'admin', :alias => 'admin', :slug => 'admin', :uri => 'admin') if !Caboose::Page.exists?(:alias => 'admin')
|
211
|
+
admin_page = Caboose::Page.where(:alias => 'admin').first
|
212
|
+
Caboose::Page.create(:title => 'Login' , :parent_id => home_page.id, :hide => 0, :layout => 'login', :alias => 'login', :slug => 'login', :uri => 'login') if !Caboose::Page.exists?(:alias => 'login')
|
213
|
+
login_page = Caboose::Page.where(:alias => 'login').first
|
214
|
+
|
215
|
+
Caboose::PagePermission.create(:role_id => elo_role.id, :page_id => home_page.id , :action => 'view') if !Caboose::PagePermission.exists?(:role_id => elo_role.id, :page_id => home_page.id , :action => 'view')
|
216
|
+
Caboose::PagePermission.create(:role_id => elo_role.id, :page_id => login_page.id , :action => 'view') if !Caboose::PagePermission.exists?(:role_id => elo_role.id, :page_id => login_page.id , :action => 'view')
|
217
|
+
|
218
|
+
# Create a default post category
|
219
|
+
Caboose::PostCategory.create(:name => 'General News') if !Caboose::PostCategory.exists?(:name => 'General News')
|
220
|
+
|
221
|
+
# Create the required settings
|
222
|
+
Caboose::Setting.create(:name => 'version' , :value => Caboose::VERSION ) if !Caboose::Setting.exists?(:name => 'version' , :value => Caboose::VERSION )
|
223
|
+
Caboose::Setting.create(:name => 'site_name' , :value => 'New Caboose Site' ) if !Caboose::Setting.exists?(:name => 'site_name' , :value => 'New Caboose Site' )
|
224
|
+
Caboose::Setting.create(:name => 'site_url' , :value => 'www.mycaboosesite.com' ) if !Caboose::Setting.exists?(:name => 'site_url' , :value => 'www.mycaboosesite.com' )
|
225
|
+
Caboose::Setting.create(:name => 'admin_email' , :value => 'william@nine.is' ) if !Caboose::Setting.exists?(:name => 'admin_email' , :value => 'william@nine.is' )
|
226
|
+
|
227
|
+
end
|
228
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: caboose-cms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.87
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- William Barry
|
@@ -192,6 +192,8 @@ files:
|
|
192
192
|
- app/models/caboose/post_category.rb
|
193
193
|
- app/models/caboose/post_category_membership.rb
|
194
194
|
- app/models/caboose/role.rb
|
195
|
+
- app/models/caboose/role_membership.rb
|
196
|
+
- app/models/caboose/role_permission.rb
|
195
197
|
- app/models/caboose/setting.rb
|
196
198
|
- app/models/caboose/std_class.rb
|
197
199
|
- app/models/caboose/user.rb
|
@@ -264,6 +266,7 @@ files:
|
|
264
266
|
- lib/sample_files/login.css
|
265
267
|
- lib/sample_files/tinymce.yml
|
266
268
|
- lib/tasks/caboose.rake
|
269
|
+
- lib/tasks/caboose_db.rake
|
267
270
|
- MIT-LICENSE
|
268
271
|
- Rakefile
|
269
272
|
- README.md
|