caboose-cms 0.2.86 → 0.2.87
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 +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
|