simplec 0.1.1 → 0.1.2
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 +4 -4
- data/MIT-LICENSE +20 -0
- data/README.md +308 -0
- data/Rakefile +36 -0
- data/app/assets/config/simplec_manifest.js +2 -0
- data/app/assets/fonts/simplec/summernote.eot +0 -0
- data/app/assets/fonts/simplec/summernote.ttf +0 -0
- data/app/assets/fonts/simplec/summernote.woff +0 -0
- data/app/assets/javascripts/simplec/application.js +13 -0
- data/app/assets/javascripts/simplec/summernote-config.js +82 -0
- data/app/assets/javascripts/simplec/summernote.js +7046 -0
- data/app/assets/stylesheets/simplec/application.css +15 -0
- data/app/assets/stylesheets/simplec/summernote.scss +691 -0
- data/app/constraints/simplec/subdomains.rb +23 -0
- data/app/controllers/simplec/application_controller.rb +9 -0
- data/app/controllers/simplec/pages_controller.rb +19 -0
- data/app/helpers/simplec/application_helper.rb +4 -0
- data/app/jobs/simplec/application_job.rb +4 -0
- data/app/mailers/simplec/application_mailer.rb +6 -0
- data/app/models/simplec/application_record.rb +5 -0
- data/app/models/simplec/embedded_image.rb +15 -0
- data/app/models/simplec/page.rb +203 -0
- data/app/models/simplec/subdomain.rb +30 -0
- data/app/views/simplec/fields/_editor.html.erb +5 -0
- data/app/views/simplec/fields/_file.html.erb +16 -0
- data/app/views/simplec/fields/_image.html.erb +16 -0
- data/app/views/simplec/fields/_string.html.erb +4 -0
- data/app/views/simplec/fields/_text.html.erb +4 -0
- data/app/views/simplec/pages/show.html.erb +2 -0
- data/config/routes.rb +8 -0
- data/db/migrate/20170809204353_create_simplec_pages.rb +30 -0
- data/db/migrate/20170809204511_create_simplec_subdomains.rb +12 -0
- data/db/migrate/20170809210304_create_simplec_embedded_images.rb +15 -0
- data/lib/simplec/action_controller/extensions.rb +56 -0
- data/lib/simplec/action_view/helper.rb +118 -0
- data/lib/simplec/embedded_image_actions.rb +37 -0
- data/lib/simplec/engine.rb +18 -0
- data/lib/simplec/version.rb +3 -0
- data/lib/simplec.rb +5 -0
- data/lib/tasks/simplec_tasks.rake +4 -0
- metadata +41 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f95b9fb5eef66eaf27ab18d642ee76f5ea67a547
|
4
|
+
data.tar.gz: 05505f307bf86ffd6afd16545f5b6a5396a708da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4cadd40978e45f0f20c8759226bef7ba6d6c2564de022ba589bfd36cf6af9a0520c40979b90c8aa9c764eb68113eaa7353e6da576a4f01bb70d7f291895325e
|
7
|
+
data.tar.gz: 88d5a6034a54698c229887b0ab8165b5c6a0ef9fe309440a63895089cd53726cad136f8015173d597217154fab58d243a9f2b88dea95d35d62e9919dbe113156
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2017 Matt Smith
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,308 @@
|
|
1
|
+
# Simplec
|
2
|
+
|
3
|
+
### A CMS for developers, built by developers.
|
4
|
+
|
5
|
+
This gem handles all of the rote parts of a CMS, but gets out of the way for
|
6
|
+
everything else. In Rails it is easy to build things from scratch, but it is
|
7
|
+
a waste of resources to build again and again. This library is an attempt to
|
8
|
+
get all of the good parts of a CMS without the baggage of a CMS that takes
|
9
|
+
over the entire ecosystem.
|
10
|
+
|
11
|
+
## Dependencies
|
12
|
+
- rails >= 5.0.5
|
13
|
+
|
14
|
+
- pg >= 0.21.0; postgres >= 9.5
|
15
|
+
|
16
|
+
We hate dependencies, but postgres is just too good. We use it for search
|
17
|
+
and JSONB.
|
18
|
+
|
19
|
+
- imagemagick
|
20
|
+
|
21
|
+
For image processing.
|
22
|
+
|
23
|
+
- dragonfly
|
24
|
+
|
25
|
+
We still hate dependencies, but this is a necessity and the best option.
|
26
|
+
|
27
|
+
## Recommended Dependencies
|
28
|
+
|
29
|
+
- summernote
|
30
|
+
|
31
|
+
Used for editor fields. Source is included.
|
32
|
+
|
33
|
+
- bootstrap-sass >= 3.0.0
|
34
|
+
|
35
|
+
Required if you want to use editor fields (which utilize summernote).
|
36
|
+
|
37
|
+
- jquery-rails
|
38
|
+
|
39
|
+
Hope to be able to remove this, but required for summernote/bootstrap for now.
|
40
|
+
|
41
|
+
**The recommended dependencies are only required for the admin portions of your
|
42
|
+
application.**
|
43
|
+
|
44
|
+
_Optionally, you can create a separate set of assets for only the admin via
|
45
|
+
standard Rails methods. Or you could not include them and deal with the
|
46
|
+
fallout. ;-)_
|
47
|
+
|
48
|
+
|
49
|
+
## Features
|
50
|
+
- Pages with Templates
|
51
|
+
|
52
|
+
- Subdomain support
|
53
|
+
|
54
|
+
- Use application models or assets in CMS pages
|
55
|
+
|
56
|
+
- Search (coming soon)
|
57
|
+
|
58
|
+
## Anti-Features
|
59
|
+
- User management
|
60
|
+
|
61
|
+
- Permissions
|
62
|
+
|
63
|
+
## Proposed auxilary gems
|
64
|
+
|
65
|
+
- simplec-vlad: The easiest way to deploy and manage an installation.
|
66
|
+
Database and file syncs between enviroments.
|
67
|
+
|
68
|
+
- simplec-blog: Don't always need or want a blog bundled in. (You might have
|
69
|
+
your own.)
|
70
|
+
|
71
|
+
- simplec-admin: Opinionated, prebuilt way of managing pages. Take it or leave
|
72
|
+
it. Or don't mount it and generate scaffold controllers and views for basic
|
73
|
+
functions.
|
74
|
+
|
75
|
+
- simplec-events
|
76
|
+
|
77
|
+
## Usage
|
78
|
+
|
79
|
+
1. Add to gemfile
|
80
|
+
2. Mount engine
|
81
|
+
3. Create pages and corresponding templates
|
82
|
+
4. Build, generator, or use an auxilary gem for page admin.
|
83
|
+
5. Let users loose.
|
84
|
+
|
85
|
+
'www' is considered the default subdomain.
|
86
|
+
|
87
|
+
'admin' subdomain is reserved for administration functions if you wish.
|
88
|
+
|
89
|
+
If you want to modify all pages you should edit ::Page < Simplec::Page, this
|
90
|
+
will be generated in an installer later.
|
91
|
+
|
92
|
+
If you want to test a subclass of ::Page, make sure test has ::Page defined.
|
93
|
+
|
94
|
+
Create a public layout. The public layout is the default. This will be
|
95
|
+
generated in an installer later.
|
96
|
+
|
97
|
+
Put page model definitions in `app/models/page/`.
|
98
|
+
|
99
|
+
Put model templates in `app/views/pages/`. AND prefix with an underscore (_),
|
100
|
+
i.e. `_home.html.erb`.
|
101
|
+
|
102
|
+
TODO override field types howto
|
103
|
+
|
104
|
+
TODO explain using uuids for keys + pgcrypto
|
105
|
+
|
106
|
+
### Steps
|
107
|
+
|
108
|
+
1. Install simplec in your Rails application.
|
109
|
+
|
110
|
+
See installation section.
|
111
|
+
|
112
|
+
2. Build and admin interface with the rest of your application.
|
113
|
+
|
114
|
+
Simplec doesn't tell you how to do this. Currently, you should look at the
|
115
|
+
test/dummy application for inspiration.
|
116
|
+
|
117
|
+
3. Then define a model:
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
# app/models/page/home.rb
|
121
|
+
class Page::Home < ::Page
|
122
|
+
field :tagline
|
123
|
+
end
|
124
|
+
```
|
125
|
+
|
126
|
+
4. And the corresponding template:
|
127
|
+
|
128
|
+
```erb
|
129
|
+
<!-- app/views/pages/_home.html.erb -->
|
130
|
+
<h1>My Application</h1>
|
131
|
+
<h2><%= @page.tagline %></h2>
|
132
|
+
```
|
133
|
+
|
134
|
+
Note: You need to call `#html_safe` on fields with `type: :editor`.
|
135
|
+
|
136
|
+
5. And create a page in your admin.
|
137
|
+
|
138
|
+
6. Done.
|
139
|
+
|
140
|
+
|
141
|
+
## Installation
|
142
|
+
|
143
|
+
1. Add this line to your application's Gemfile:
|
144
|
+
|
145
|
+
```ruby
|
146
|
+
gem 'pg'
|
147
|
+
gem 'simplec'
|
148
|
+
# plus optional gems
|
149
|
+
```
|
150
|
+
|
151
|
+
At this point it is assumed you are integrating Simplec into an existing
|
152
|
+
application, logically then you have your database already configured.
|
153
|
+
However, Simplec requires some postgres configuration. Please read the
|
154
|
+
section below on Postgres.
|
155
|
+
|
156
|
+
2. Install and run the migrations
|
157
|
+
|
158
|
+
```shell
|
159
|
+
rake simplec:install:migrations
|
160
|
+
rake db:migrate
|
161
|
+
```
|
162
|
+
|
163
|
+
3. Mount the engine
|
164
|
+
|
165
|
+
```ruby
|
166
|
+
Rails.application.routes.draw do
|
167
|
+
mount Simplec::Engine => "/"
|
168
|
+
end
|
169
|
+
```
|
170
|
+
|
171
|
+
4. Install and configure `dragonfly`
|
172
|
+
|
173
|
+
```shell
|
174
|
+
rails generate dragonfly
|
175
|
+
```
|
176
|
+
|
177
|
+
Then configure `config/initializers/dragonfly.rb`.
|
178
|
+
|
179
|
+
It is recommended to use `rack/cache` or some other HTTP caching solution.
|
180
|
+
|
181
|
+
5. Optional - Install bootstap-sass.
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
gem 'bootstrap-sass', "~> 3.3.7'
|
185
|
+
```
|
186
|
+
|
187
|
+
Currenty, we have worked out integration with Bootstrap > 3 and are waiting
|
188
|
+
for the dust to settle on V4. See directions here:
|
189
|
+
https://github.com/twbs/bootstrap-sass
|
190
|
+
|
191
|
+
6. Optional - If you want to use the bundled summernote:
|
192
|
+
|
193
|
+
Load the JS in your application's manifest.
|
194
|
+
|
195
|
+
```javascript
|
196
|
+
//= require simplec/summernote
|
197
|
+
//= require simplec/summernote-config
|
198
|
+
```
|
199
|
+
|
200
|
+
Please note that this needs to be loaded after jquery and bootstrap.
|
201
|
+
|
202
|
+
```css
|
203
|
+
@import "simplec/summernote";
|
204
|
+
```
|
205
|
+
|
206
|
+
Please note that this needs to be loaded after bootstrap. And to use
|
207
|
+
`@import` statements, you must use `.scss` files.
|
208
|
+
|
209
|
+
## Postgres
|
210
|
+
|
211
|
+
Note you will need to do this in your production environment as well.
|
212
|
+
|
213
|
+
On some operating systems, `pgcrypto` is in a separate `postgres` package,
|
214
|
+
be sure to install that as well.
|
215
|
+
|
216
|
+
The `pgcrypto` extension is required for the `gen_random_uuid()` function
|
217
|
+
used to generate uuid primary keys.
|
218
|
+
|
219
|
+
1. Create your application postgres user (matching database.yml)
|
220
|
+
|
221
|
+
```shell
|
222
|
+
# -s for superuser in development
|
223
|
+
createuser -s myapp
|
224
|
+
```
|
225
|
+
|
226
|
+
2. Create databases and add pgcrypto
|
227
|
+
|
228
|
+
```shell
|
229
|
+
# create development/test databases
|
230
|
+
rake db:create
|
231
|
+
|
232
|
+
# required for gen_random_uuid() function
|
233
|
+
# used for ids in Simplec models
|
234
|
+
#
|
235
|
+
psql myapp_development -c "CREATE EXTENSION pgcrypto;"
|
236
|
+
psql myapp_test -c "CREATE EXTENSION pgcrypto;"
|
237
|
+
```
|
238
|
+
|
239
|
+
## imagemagick
|
240
|
+
|
241
|
+
Installation varies per operating system. Image magic is used by dragonfly
|
242
|
+
for on the fly (then cached) image manipulation.
|
243
|
+
|
244
|
+
See this page for a good cheat sheet: http://markevans.github.io/dragonfly/imagemagick
|
245
|
+
|
246
|
+
## Roadmap
|
247
|
+
|
248
|
+
1. Finish example admin.
|
249
|
+
|
250
|
+
1. Installer `rails generater simplec:install`
|
251
|
+
|
252
|
+
1. Upgrade summernote from 0.8.2 to 0.8.6
|
253
|
+
|
254
|
+
1. Search
|
255
|
+
|
256
|
+
1. Caching
|
257
|
+
|
258
|
+
1. Optional Gems
|
259
|
+
|
260
|
+
1. Remove as many dependencies as possible.
|
261
|
+
|
262
|
+
## Contributing
|
263
|
+
1. Use it and file create issues. Somethings are core, other things will be
|
264
|
+
relegated to 3rd party extensions.
|
265
|
+
2. Pull requests are welcome. See rule #1.
|
266
|
+
|
267
|
+
## TODO
|
268
|
+
|
269
|
+
- Document `lib/simplec/controller_extensions.rb`
|
270
|
+
|
271
|
+
- Document why _subdomain in subdomain form in admin.
|
272
|
+
|
273
|
+
- rails generate simplec:install
|
274
|
+
Install app/models/page.rb, app/models/page/
|
275
|
+
initializer if needed, with options documented
|
276
|
+
|
277
|
+
- simplec_path/simplec_url caching
|
278
|
+
|
279
|
+
## Running dummy application
|
280
|
+
|
281
|
+
1. Create simplec postgres user
|
282
|
+
|
283
|
+
# -s for superuser in development
|
284
|
+
createuser -s simplec
|
285
|
+
|
286
|
+
2. Create databases and add pgcrypto
|
287
|
+
|
288
|
+
rake db:create
|
289
|
+
|
290
|
+
# required for gen_random_uuid() function
|
291
|
+
# used for ids in Simplec models
|
292
|
+
#
|
293
|
+
psql simplec_development -c "CREATE EXTENSION pgcrypto;"
|
294
|
+
|
295
|
+
3. Migrate database
|
296
|
+
|
297
|
+
rake db:migrate
|
298
|
+
|
299
|
+
|
300
|
+
## Contributors
|
301
|
+
|
302
|
+
- Matt Smith, Near Apogee Consulting (www.nearapogee.com)
|
303
|
+
|
304
|
+
- @lithxe, @jessedo81 for ongoing feedback, use cases, development support,
|
305
|
+
and the initial project to test the concept.
|
306
|
+
|
307
|
+
## License
|
308
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Simplec'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
require 'bundler/gem_tasks'
|
26
|
+
|
27
|
+
require 'rake/testtask'
|
28
|
+
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
30
|
+
t.libs << 'test'
|
31
|
+
t.pattern = 'test/**/*_test.rb'
|
32
|
+
t.verbose = false
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
task default: :test
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require_tree .
|
@@ -0,0 +1,82 @@
|
|
1
|
+
// Summernote
|
2
|
+
//
|
3
|
+
//
|
4
|
+
$.summernote.options.callbacks.onImageUpload = function(files) {
|
5
|
+
// Dumb but a default or instance callback required to get the
|
6
|
+
// event handler to fire.
|
7
|
+
console.log('image upload:', files);
|
8
|
+
};
|
9
|
+
$.summernote.options.toolbar = [
|
10
|
+
['style', ['style']],
|
11
|
+
['font', ['bold', 'italic', 'underline', 'clear']],
|
12
|
+
// ['font', ['bold', 'italic', 'underline', 'strikethrough', 'superscript', 'subscript', 'clear']],
|
13
|
+
// ['fontname', ['fontname']],
|
14
|
+
// ['fontsize', ['fontsize']],
|
15
|
+
//['color', ['color']],
|
16
|
+
['para', ['ul', 'ol', 'paragraph']],
|
17
|
+
//['height', ['height']],
|
18
|
+
//['table', ['table']],
|
19
|
+
//['insert', ['link', 'picture', 'hr']],
|
20
|
+
['insert', ['link', 'picture', 'hr']],
|
21
|
+
['view', ['fullscreen', 'codeview']],
|
22
|
+
['help', ['help']]
|
23
|
+
];
|
24
|
+
|
25
|
+
if (!window.simplec) window.simplec = {};
|
26
|
+
|
27
|
+
window.simplec.initSummernote = function() {
|
28
|
+
window.simplec.summernoteInitialized = true;
|
29
|
+
|
30
|
+
$('.editor-field').on('summernote.init', function(event) {
|
31
|
+
|
32
|
+
// Material Kit Hack
|
33
|
+
//$('.note-toolbar .btn-default').
|
34
|
+
// removeClass('btn-default').addClass('btn-simple');
|
35
|
+
|
36
|
+
//$('.note-popover').css({'display': 'none'}); // BS4 HACK
|
37
|
+
var $editor = $(event.target),
|
38
|
+
$input = $($editor.data('input'));
|
39
|
+
if ($input.val().length > 0) $editor.summernote('code', $input.val());
|
40
|
+
}).on('summernote.change', function(event, contents, $editable) {
|
41
|
+
var $editor = $(event.target),
|
42
|
+
$input = $($editor.data('input'));
|
43
|
+
$input.val(contents);
|
44
|
+
}.bind(window)).on('summernote.image.upload', function(event, files) {
|
45
|
+
console.log('upload event');
|
46
|
+
for (var i = 0; i < files.length; i++) {
|
47
|
+
var file = files[i],
|
48
|
+
reader = new FileReader();
|
49
|
+
reader.onloadend = function() {
|
50
|
+
$.ajax({
|
51
|
+
method: 'POST',
|
52
|
+
url: '/embedded-images',
|
53
|
+
dataType: 'json',
|
54
|
+
contentType: 'application/json',
|
55
|
+
data: JSON.stringify({
|
56
|
+
asset_url: reader.result,
|
57
|
+
asset_name: file.name
|
58
|
+
})
|
59
|
+
}).fail(function(data, textStatus, jqXHR){
|
60
|
+
console.log('IMAGE UPLOAD FAIL', textStatus);
|
61
|
+
}).done(function(data, textStatus, jqXHR){
|
62
|
+
$(event.target).summernote(
|
63
|
+
'insertImage',
|
64
|
+
jqXHR.responseJSON.asset_url, jqXHR.responseJSON.asset_name
|
65
|
+
);
|
66
|
+
});
|
67
|
+
};
|
68
|
+
reader.readAsDataURL(file);
|
69
|
+
}
|
70
|
+
});
|
71
|
+
|
72
|
+
$('.editor-field').summernote({
|
73
|
+
height: 500,
|
74
|
+
minHeight: 100,
|
75
|
+
maxHeight: 1200
|
76
|
+
});
|
77
|
+
|
78
|
+
};
|
79
|
+
|
80
|
+
$(document).on('ready turbolinks:load', function() {
|
81
|
+
if (!window.simplec.summernoteInitialized) window.simplec.initSummernote();
|
82
|
+
});
|