rubber_ring 0.1.2 → 1.0.0
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/README.md +61 -32
- data/app/assets/stylesheets/libs/{bootstrap.scss.erb → bootstrap.scss} +2 -2
- data/app/assets/stylesheets/rubber_ring/cms.scss +10 -0
- data/app/concerns/rubber_ring/build.rb +13 -25
- data/app/controllers/rubber_ring/attachments_controller.rb +2 -2
- data/app/controllers/rubber_ring/cms_controller.rb +4 -5
- data/app/controllers/rubber_ring/rubber_ring_controller.rb +24 -28
- data/app/controllers/rubber_ring/sessions_controller.rb +1 -1
- data/app/views/layouts/rubber_ring/sessions.html.erb +13 -0
- data/app/views/rubber_ring/_application.html.erb +5 -6
- data/app/views/rubber_ring/rubber_ring/build.html.erb +11 -0
- data/app/views/rubber_ring/rubber_ring/publish.html.erb +13 -0
- data/app/views/rubber_ring/sessions/new.html.erb +11 -6
- data/config/routes.rb +3 -0
- data/lib/generators/rubber_ring/install/USAGE +3 -0
- data/lib/generators/rubber_ring/install/install_generator.rb +4 -4
- data/lib/generators/rubber_ring/install/templates/layout.html.erb +1 -1
- data/lib/generators/rubber_ring/install/templates/publish_template.yml +3 -2
- data/lib/generators/rubber_ring/install/templates/puma_template.rb +1 -0
- data/lib/generators/rubber_ring/page/templates/controller.rb +0 -1
- data/lib/rubber_ring/engine.rb +0 -1
- data/lib/rubber_ring/version.rb +1 -1
- data/spec/controllers/attachments_controller_spec.rb +1 -0
- data/spec/controllers/cms_controller_spec.rb +1 -0
- data/spec/controllers/sessions_controller_spec.rb +9 -2
- data/spec/spec_helper.rb +0 -1
- data/test/dummy/app/controllers/example_controller.rb +0 -1
- data/test/dummy/config/application.rb +0 -1
- data/test/dummy/config/environments/development.rb +2 -2
- data/test/dummy/config/publish.yml +2 -2
- data/test/dummy/config/puma.rb +1 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/production.sqlite3 +0 -0
- data/test/dummy/log/development.log +9146 -0
- data/test/dummy/log/production.log +2122 -0
- data/test/dummy/log/test.log +2917 -0
- data/test/dummy/public/{build/assets/application.css → assets/application-494197b919313adf1938508a6b18b757.css} +4 -3
- data/test/dummy/public/assets/application-494197b919313adf1938508a6b18b757.css.gz +0 -0
- data/test/dummy/public/assets/application-ee0f5bbb7e41117c464a29501bf88843.js +1 -0
- data/test/dummy/public/assets/application-ee0f5bbb7e41117c464a29501bf88843.js.gz +0 -0
- data/test/dummy/public/{build/assets/baws.jpg → assets/baws-c0784ed6e352b84613bc9c1f9d3d3bcd.jpg} +0 -0
- data/test/dummy/public/assets/glyphicons-halflings-4e5b89324f1ac987ddf6835ef51f5fe9.png +0 -0
- data/test/dummy/public/assets/glyphicons-halflings-white-2fa53df59ca25ee50f59f971c0c9175d.png +0 -0
- data/test/dummy/public/assets/manifest-349aafb4cc8354998749d187b4db125b.json +1 -0
- data/test/dummy/public/assets/rubber_ring/application-818c8187d7c86fc8de22b84d44855e7f.js +11 -0
- data/test/dummy/public/assets/rubber_ring/application-818c8187d7c86fc8de22b84d44855e7f.js.gz +0 -0
- data/test/dummy/public/assets/rubber_ring/application-a67e95d5aea6d4e860eb3858036b1224.css +4425 -0
- data/test/dummy/public/assets/rubber_ring/application-a67e95d5aea6d4e860eb3858036b1224.css.gz +0 -0
- data/test/dummy/public/build/assets/application-494197b919313adf1938508a6b18b757.css +23 -0
- data/test/dummy/public/build/assets/application-ee0f5bbb7e41117c464a29501bf88843.js +1 -0
- data/test/dummy/public/build/assets/baws-c0784ed6e352b84613bc9c1f9d3d3bcd.jpg +0 -0
- data/test/dummy/public/build/index.html +29 -0
- data/test/dummy/public/build/page2.html +6 -4
- data/test/dummy/public/upload/en/example/page2/images/app_icon.png +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1c0ae3747b6397b853de99649a26cf73d192aa8a/bootstrap.scss.erbc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/1c0ae3747b6397b853de99649a26cf73d192aa8a/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/6afeb0468679937dd837e6204d8c50da187b1b86/cms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sass/8185f37c4f7dd19815b19559200f49fbf25b143a/cms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/010d581659b8601fd73829b82e814d1a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/033778b0e837400b5ad09915147a6865 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/03d17cbcdf5da1d77daae00a93e1d8eb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/04f0e1ef18acfc4a7a2f0ea28d78b709 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/05dcb866051327677d2e3adee496181e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/060f70ff2d45a09a52f739439933c7c8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/11120370c68bb1e8baef5761e806b5d5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/12500514d60c3ccadeada02813852775 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/15a9fef508d1e8ee609faec34e0c766c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/1f634c9d68d6c31855bf84ecb8e9d3a1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2558b6957b25b93991193f924fc75bf8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/28ca5f6904ddabaace878089c3e874ed +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/29b822bb5d8335c3c7baebfd3a77185c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2ad7a946cdec002e0a3369606299b443 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2b5fa0b549eea4ea0fb8f50425990b2a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2eb67a7041c777c64ffabc725ac0135a +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/2f4860a169c5717c3c968d430795078c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/33e002f0b7946cd298562302f71fdd77 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3699e3a1c1e5ad798ad43a8f54dde72f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/36d1be33b3de1408b97ae6246ef47c46 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3746dd2fd087e8f3b1ab89b8522a8111 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3beaa45c69e3414a2f8cdd63b39787a2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3c268db1ad3cbbf864c4f3534c74ca4e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/3c94454b9932850a6da9ac91e7ce4c5b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4aa2102553fbe0e3cb0b53f6dcc47746 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/4d48e10441bb94b809c9f46253f25c2e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5118223687b3927074be21a3a38e77f2 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/531dee1f88580a73c72d41e95b6d93df +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/53ba99192c5668743a46c5d52532ab35 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5656d8ef9d043e7b3f8406799450a4f8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/5fd1f3692d30d62bdf60d62818da720c +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/615a9332eef337f4100ac7065bdae0c0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/61dbd19df4d217bd1a726ba0cee28fcc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/68e88a76cf0ae3b9def99df2da275d32 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/75be242df281340f13e0c1c850db31a4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7647442e68634bf506ceb6529c964ff8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7736698f9e23d715ba80ec4b2f3563f7 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/79276d42bed57005564312cf1d1cc576 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7bc09e522e5e89e66d9d8f25553fedf5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/7f6c5d885262d109a007651dbcdce362 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/80b4422222d4f878c7a0588c83f26cd1 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/827aa5463182686828d9664a20b2d4ac +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8394c16a4541076a7958bd0949b389ec +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/85f78df9521e3901d33abade69e49b2e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/86c5db77a82b91bbc060a99a2bf8b1d8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/8d530d6a4af9bd245c69c92c36870220 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/90cc23105bddc4b07acd507ae837c55f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/922440cce05a7d84da91e20bdf546abb +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/98b8ede709efdb319234dad74075cb05 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9993c347361adbac8056462899c084e5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/9e0522ce72f83a2d14b9040602ad671e +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a2719663651c4c47fea4601da97f674b +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a30c5479ead2031a2e521cbfa989dca8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a3343c01eda98748ee37e780c9128576 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a54698289dfb98cb1c3314d66baf5f91 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/a9fead645c2c02e002382413d89e2459 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/aea514acc26588ae761f1fce96832ef5 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b064391743404352c0d06d1dae692bbc +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b4430b4104e8d9248c4dc9cf1e221a35 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/b4da7dedc3efa1b2420734a75da1402f +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bb5424445d77cb384674cef7984e4b80 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bce5098f7cdd8f471f7a8edbcd97a9d0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/bf1f8c24547868c27b950882afb48ea6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c0625d8a0a68787afb029146355062df +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c10a1994812cf191cd2ee4ef1f979bf0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c21a74093c819c60456adf9e620dd96d +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c243939bf2b921b050b5b195ebd4f091 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/c887c975279c3c47685cf7124ed6a1bd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/cb3562c12ef47f329f362aa94351a7c0 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d601969c1e6766cd86ed348b1780fad8 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/d98380ca46f4fb596bcf06df538f7922 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/dc3d91ae1d7f973c1354a745e97076dd +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e03d2d83c3e0a1d070d202d608dc0ce3 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e0e949e3a882294df1ac6efb53555963 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e20d27f6974a7234201280836e0ce7f4 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/e5b45b06592237583f5384133ebdd5de +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/ee3a7629e0039a00e2ea790202f2a566 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f1234d01ba2c61bb079c44314e6751b9 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f270587a206c85bb7163b16529b5ff69 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f5c12cebbf6610d2ee32e2d1550bc718 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/f8ed5681d7ebd78fe08e61a98ce54772 +0 -0
- data/test/dummy/tmp/cache/assets/development/sprockets/fd6b4f4ad158f51359c1217abd08824e +0 -0
- data/test/dummy/tmp/cache/assets/production/sass/1c0ae3747b6397b853de99649a26cf73d192aa8a/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/assets/production/sass/8185f37c4f7dd19815b19559200f49fbf25b143a/cms.scssc +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/010d581659b8601fd73829b82e814d1a +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/03d17cbcdf5da1d77daae00a93e1d8eb +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/05dcb866051327677d2e3adee496181e +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/11120370c68bb1e8baef5761e806b5d5 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/1f634c9d68d6c31855bf84ecb8e9d3a1 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/2b5fa0b549eea4ea0fb8f50425990b2a +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/2f4860a169c5717c3c968d430795078c +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/33e002f0b7946cd298562302f71fdd77 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/36d1be33b3de1408b97ae6246ef47c46 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/3beaa45c69e3414a2f8cdd63b39787a2 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/3c268db1ad3cbbf864c4f3534c74ca4e +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/3c94454b9932850a6da9ac91e7ce4c5b +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/4aa2102553fbe0e3cb0b53f6dcc47746 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/4d48e10441bb94b809c9f46253f25c2e +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/531dee1f88580a73c72d41e95b6d93df +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/53ba99192c5668743a46c5d52532ab35 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/5656d8ef9d043e7b3f8406799450a4f8 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/68e88a76cf0ae3b9def99df2da275d32 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/75be242df281340f13e0c1c850db31a4 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/7647442e68634bf506ceb6529c964ff8 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/827aa5463182686828d9664a20b2d4ac +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/8d530d6a4af9bd245c69c92c36870220 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/90cc23105bddc4b07acd507ae837c55f +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/922440cce05a7d84da91e20bdf546abb +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/98b8ede709efdb319234dad74075cb05 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/a30c5479ead2031a2e521cbfa989dca8 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/aea514acc26588ae761f1fce96832ef5 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/b064391743404352c0d06d1dae692bbc +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/b4430b4104e8d9248c4dc9cf1e221a35 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/b4da7dedc3efa1b2420734a75da1402f +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/bb5424445d77cb384674cef7984e4b80 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/c0625d8a0a68787afb029146355062df +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/c10a1994812cf191cd2ee4ef1f979bf0 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/c243939bf2b921b050b5b195ebd4f091 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/cb3562c12ef47f329f362aa94351a7c0 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/d601969c1e6766cd86ed348b1780fad8 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/d98380ca46f4fb596bcf06df538f7922 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/dc3d91ae1d7f973c1354a745e97076dd +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/e03d2d83c3e0a1d070d202d608dc0ce3 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/e0e949e3a882294df1ac6efb53555963 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/e5b45b06592237583f5384133ebdd5de +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/f1234d01ba2c61bb079c44314e6751b9 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/f8ed5681d7ebd78fe08e61a98ce54772 +0 -0
- data/test/dummy/tmp/cache/assets/production/sprockets/fd6b4f4ad158f51359c1217abd08824e +0 -0
- metadata +323 -83
- data/test/dummy/public/build/assets/application.js +0 -6
- data/test/dummy/public/build/page2.html.gz +0 -0
- data/test/dummy/public/build/upload/en/example/page2/images/app_icon.png +0 -0
- data/test/dummy/public/build/upload/en/example/page2/images/lombard-mb.jpg +0 -0
- data/test/dummy/script/rails +0 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e375d094f6ea3db88ea287d9a9fd3ee07298910c
|
|
4
|
+
data.tar.gz: 0250e2d3135d8c55e885054a9db5147120f7854d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 528f3abcbd1fe5b1244a9edd7b33f529b3bd28e5e3409a9df603709769f0e4313d7e05c95ed36512b28ec30b9c8f9658eb066a6cbd92f26a65630fb99be8ceef
|
|
7
|
+
data.tar.gz: ae5ce9b1a95e00cf407aa4549ac4cd9c1edcb39557fed50045c697d4844fca135d741bd61764f50ce4149358158a6e0388c8ab2c9fd062a04725e43b59c660b8
|
data/README.md
CHANGED
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
## About
|
|
5
5
|
|
|
6
|
-
This CMS helps you build editable pages fast. You define which content
|
|
7
|
-
(`text`, `image`, `attachment`, ...) should be editable for your users.
|
|
8
|
-
Limitation, that only developer sets what page parts are editable is good for
|
|
6
|
+
This CMS helps you build editable pages fast. You define which content
|
|
7
|
+
(`text`, `image`, `attachment`, ...) should be editable for your users.
|
|
8
|
+
Limitation, that only developer sets what page parts are editable is good for
|
|
9
9
|
keeping the design intact. It is basically backend for saving `contenteditable` content.
|
|
10
|
-
When done editing, only static assets will be published to production server
|
|
10
|
+
When done editing, only static assets will be published to production server
|
|
11
11
|
where you only need a web server like Apache or Nginx.
|
|
12
12
|
|
|
13
13
|
Named by The Smiths [song](http://www.youtube.com/watch?v=Cpf6gJU3520).
|
|
@@ -19,14 +19,24 @@ Named by The Smiths [song](http://www.youtube.com/watch?v=Cpf6gJU3520).
|
|
|
19
19
|
- customer doesn't need application server and/or database. Only plain web server for static HTML serving will do
|
|
20
20
|
|
|
21
21
|
### This CMS is not good for
|
|
22
|
-
sites, where **editor** wants to create new pages and control each part of every page,
|
|
22
|
+
sites, where **editor** wants to create new pages and control each part of every page,
|
|
23
23
|
change fonts and text style
|
|
24
24
|
|
|
25
25
|
## Software prerequisites
|
|
26
26
|
|
|
27
27
|
* Ruby 2
|
|
28
28
|
* Rails 4
|
|
29
|
+
* ruby web server running at least 2 processes (puma, unicorn, thin) - I only tested with puma for now
|
|
29
30
|
* imagemagick
|
|
31
|
+
* wget
|
|
32
|
+
|
|
33
|
+
## Versions
|
|
34
|
+
|
|
35
|
+
Use `gem 'rubber_ring', '~> 0.1.2'` if you don't want to run multiple processes. Instead you will need to publish each
|
|
36
|
+
change of any page separately.
|
|
37
|
+
|
|
38
|
+
Use `gem 'rubber_ring', '~> 1.0.0'` if you can have two or more processes of web server. In this version whole site
|
|
39
|
+
will be built in one step.
|
|
30
40
|
|
|
31
41
|
### Browser support
|
|
32
42
|
|
|
@@ -36,7 +46,7 @@ Firefox, Chrome and Safari.
|
|
|
36
46
|
|
|
37
47
|
### Dependencies
|
|
38
48
|
To install `imagemagick` and `sqlite3` on `Ubuntu`
|
|
39
|
-
|
|
49
|
+
|
|
40
50
|
sudo apt-get install imagemagick
|
|
41
51
|
sudo apt-get install libsqlite3-dev
|
|
42
52
|
|
|
@@ -51,9 +61,11 @@ Create and migrate database
|
|
|
51
61
|
rake rubber_ring:install:migrations
|
|
52
62
|
rake db:create db:migrate
|
|
53
63
|
|
|
54
|
-
Update `development.rb` to enable
|
|
64
|
+
Update `development.rb` to enable build for development mode. This will disable rails to add `body=1` to every asset link.
|
|
55
65
|
|
|
56
|
-
|
|
66
|
+
```ruby
|
|
67
|
+
config.assets.debug = false
|
|
68
|
+
```
|
|
57
69
|
|
|
58
70
|
### Generate config files
|
|
59
71
|
|
|
@@ -66,25 +78,37 @@ This will generate
|
|
|
66
78
|
3. app/views/layouts/rubber_ring/layout.html.erb
|
|
67
79
|
4. app/assets/javascripts/application.js
|
|
68
80
|
5. public/.htaccess
|
|
81
|
+
6. app/puma.rb
|
|
69
82
|
|
|
70
|
-
1. Set your production server name and path. You will need SSH access and your public key
|
|
83
|
+
1. Set your production server name and path. You will need SSH access and your public key
|
|
71
84
|
on server. If you tend to use Rubber Ring as part of web application, or you don't want/need to publish only static HTML files, you can ignore this file.
|
|
72
85
|
2. Set admin password and application type in `app/config/initializers/rubber_ring.rb`.
|
|
73
|
-
3. `app/views/layouts/rubber_ring/layout.html.erb` is here for you to override it,
|
|
86
|
+
3. `app/views/layouts/rubber_ring/layout.html.erb` is here for you to override it,
|
|
74
87
|
so you have complete control over your markup.
|
|
75
|
-
4. This is copied because default Rails `application.js` includes `jquery` which is
|
|
88
|
+
4. This is copied because default Rails `application.js` includes `jquery` which is
|
|
76
89
|
already included for you by Rubber Ring (avoiding clashes).
|
|
77
|
-
5. Apaches access config. Including rules so you can access all published pages. It will
|
|
78
|
-
look for `.html` files first and enter sub directories later. Example: we have page with
|
|
79
|
-
route `/en` and `/en/example`. When published, `en.html` and `en/example.html` will be
|
|
90
|
+
5. Apaches access config. Including rules so you can access all published pages. It will
|
|
91
|
+
look for `.html` files first and enter sub directories later. Example: we have page with
|
|
92
|
+
route `/en` and `/en/example`. When published, `en.html` and `en/example.html` will be
|
|
80
93
|
generated and synced with production server. To serve them both we need this `.htaccess` file.
|
|
94
|
+
6. We need to run `Rubber Ring` as `Rails Application` with at least two workers. This is
|
|
95
|
+
because when doing a request to `/rubber_ring/build` there will also run a `wget` program
|
|
96
|
+
which will download all `html` files and save them into `public/build` directory. Without
|
|
97
|
+
more workers we need to must use threads, but with threads we can not accurately tell
|
|
98
|
+
user when `wget` program finishes its job.
|
|
99
|
+
|
|
100
|
+
### Run
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
puma -p 3000 -C config/puma.rb
|
|
104
|
+
```
|
|
81
105
|
|
|
82
106
|
### Static pages or Rails application?
|
|
83
107
|
|
|
84
108
|
If you only want to use Rubber Ring to generate static pages, leave
|
|
85
109
|
`RubberRing.static_only = true` inside `app/config/initializers/rubber_ring.rb` intact.
|
|
86
|
-
This will leave you with options to `preview` and `publish` html pages and other
|
|
87
|
-
assets to production server. Otherwise set
|
|
110
|
+
This will leave you with options to `preview` and `publish` html pages and other
|
|
111
|
+
assets to production server. Otherwise set
|
|
88
112
|
this option to false.
|
|
89
113
|
|
|
90
114
|
# Usage
|
|
@@ -93,17 +117,22 @@ this option to false.
|
|
|
93
117
|
|
|
94
118
|
Login at URL `/rubber_ring` with password which was set by developer in the install stage.
|
|
95
119
|
|
|
96
|
-
Just edit content inside green boxes.
|
|
120
|
+
Just edit content inside green boxes.
|
|
97
121
|
Developer sets what content is editable/repeatable/link/multi line...
|
|
98
122
|
|
|
99
|
-
For changing images click on `Image manager` in the upper menu.
|
|
100
|
-
Drag and drop the image(s) you need to drop zone. After uploading the
|
|
101
|
-
image(s) you can drag and drop them on the image you wanted to change.
|
|
123
|
+
For changing images click on `Image manager` in the upper menu.
|
|
124
|
+
Drag and drop the image(s) you need to drop zone. After uploading the
|
|
125
|
+
image(s) you can drag and drop them on the image you wanted to change.
|
|
102
126
|
Image will be automatically re-sized to the size that was set by developer/designer.
|
|
103
127
|
|
|
128
|
+
### Preview
|
|
129
|
+
|
|
130
|
+
The easiest way to preview your current work is to log out or even better, open it in
|
|
131
|
+
a new browser where you are not logged in.
|
|
132
|
+
|
|
104
133
|
### Build and publish your pages
|
|
105
134
|
|
|
106
|
-
`
|
|
135
|
+
`Build & Publish` option in the menu will first output entire page to `public/build` directory. `Publish` will upload/copy whole site to your production server, set in `publish.yml` file.
|
|
107
136
|
|
|
108
137
|
## As a developer I want to quickly setup editable pages
|
|
109
138
|
|
|
@@ -131,7 +160,7 @@ Examples
|
|
|
131
160
|
<% end %>
|
|
132
161
|
|
|
133
162
|
<%= editable_field(:div, {key: 'first_content', class: 'multi-line'}, @page) do %>
|
|
134
|
-
I'm editable content in
|
|
163
|
+
I'm editable content in
|
|
135
164
|
multi lines...
|
|
136
165
|
<% end %>
|
|
137
166
|
|
|
@@ -155,7 +184,7 @@ Allows you to set up repeating and sortable templates. Example
|
|
|
155
184
|
%>
|
|
156
185
|
```
|
|
157
186
|
|
|
158
|
-
This means, that you need to create new view for each template in
|
|
187
|
+
This means, that you need to create new view for each template in
|
|
159
188
|
`app/views/templates/`. Example
|
|
160
189
|
|
|
161
190
|
app/views/templates/_article.html.erb
|
|
@@ -170,8 +199,8 @@ means that you need a view, saved in a file
|
|
|
170
199
|
|
|
171
200
|
app/views/templates/_article.html.erb
|
|
172
201
|
|
|
173
|
-
**Inside templates** you can use all other helpers. **BUT**, you need to
|
|
174
|
-
assemble your key correctly or otherwise you will be overwriting your own content.
|
|
202
|
+
**Inside templates** you can use all other helpers. **BUT**, you need to
|
|
203
|
+
assemble your key correctly or otherwise you will be overwriting your own content.
|
|
175
204
|
You can use `key_prefix`, which is assembled the way which will help you to prevent key overwites. Example:
|
|
176
205
|
|
|
177
206
|
```erb
|
|
@@ -182,8 +211,8 @@ You can use `key_prefix`, which is assembled the way which will help you to prev
|
|
|
182
211
|
|
|
183
212
|
### Helper options
|
|
184
213
|
|
|
185
|
-
Each helper needs to specify unique `key`. These are holding values in the database.
|
|
186
|
-
Also each helper needs to include `@page` object as their last parameter.
|
|
214
|
+
Each helper needs to specify unique `key`. These are holding values in the database.
|
|
215
|
+
Also each helper needs to include `@page` object as their last parameter.
|
|
187
216
|
This object holds all the editable content of the page in a hash data structure.
|
|
188
217
|
|
|
189
218
|
#### reserved key(s) - don't use them
|
|
@@ -210,11 +239,11 @@ This object holds all the editable content of the page in a hash data structure.
|
|
|
210
239
|
|
|
211
240
|
### Assets (stylesheets and javascripts)
|
|
212
241
|
|
|
213
|
-
You can use, like in any other Rails application,
|
|
214
|
-
[sprockets directives](https://github.com/sstephenson/sprockets#the-directive-processor)
|
|
215
|
-
to include assets to your app.
|
|
216
|
-
Please don't use `//= require jquery` and `//= require jquery-ui`
|
|
217
|
-
in your `application.js` file, because rubber ring is already including `jquery`
|
|
242
|
+
You can use, like in any other Rails application,
|
|
243
|
+
[sprockets directives](https://github.com/sstephenson/sprockets#the-directive-processor)
|
|
244
|
+
to include assets to your app.
|
|
245
|
+
Please don't use `//= require jquery` and `//= require jquery-ui`
|
|
246
|
+
in your `application.js` file, because rubber ring is already including `jquery`
|
|
218
247
|
which you can reuse in your pages as well.
|
|
219
248
|
|
|
220
249
|
## Philosophy
|
|
@@ -2285,7 +2285,7 @@ table th[class*="span"],
|
|
|
2285
2285
|
*margin-right: .3em;
|
|
2286
2286
|
line-height: 14px;
|
|
2287
2287
|
vertical-align: text-top;
|
|
2288
|
-
background-image: url(
|
|
2288
|
+
background-image: image-url('glyphicons-halflings.png');
|
|
2289
2289
|
background-position: 14px 14px;
|
|
2290
2290
|
background-repeat: no-repeat;
|
|
2291
2291
|
}
|
|
@@ -2309,7 +2309,7 @@ table th[class*="span"],
|
|
|
2309
2309
|
.dropdown-submenu:focus > a > [class^="icon-"],
|
|
2310
2310
|
.dropdown-submenu:hover > a > [class*=" icon-"],
|
|
2311
2311
|
.dropdown-submenu:focus > a > [class*=" icon-"] {
|
|
2312
|
-
background-image: url(
|
|
2312
|
+
background-image: image-url('glyphicons-halflings-white.png');
|
|
2313
2313
|
}
|
|
2314
2314
|
|
|
2315
2315
|
.icon-glass {
|
|
@@ -1,33 +1,21 @@
|
|
|
1
1
|
module RubberRing
|
|
2
2
|
module Build
|
|
3
3
|
|
|
4
|
-
def Build.
|
|
5
|
-
#
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
FileUtils.mkdir_p(build_assets_dir)
|
|
11
|
-
end
|
|
4
|
+
def Build.run!(request)
|
|
5
|
+
# wget -m -p -E -k -np http://localhost:3000 -P build -nH
|
|
6
|
+
# -nH: no host directories
|
|
7
|
+
# -p: prefix with directory
|
|
8
|
+
# -E: adjust extension, save as .html
|
|
9
|
+
# -k: convert links suitable for local viewing
|
|
12
10
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if Rails.env.production? and File.directory?(prod_assets_dir)
|
|
16
|
-
FileUtils.cp_r("#{prod_assets_dir}/.", build_assets_dir)
|
|
17
|
-
else
|
|
18
|
-
%w(images javascripts stylesheets fonts).each do |asset_dir|
|
|
19
|
-
dir = "#{Rails.root.to_s}/app/assets/#{asset_dir}"
|
|
20
|
-
if File.directory?(dir)
|
|
21
|
-
FileUtils.cp_r("#{dir}/.", build_assets_dir)
|
|
22
|
-
end
|
|
23
|
-
end
|
|
24
|
-
end
|
|
11
|
+
root_url = request.protocol + request.host_with_port
|
|
12
|
+
build_dir = "#{Rails.root.to_s}/public/build"
|
|
25
13
|
|
|
26
|
-
#
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
14
|
+
# clear previous build
|
|
15
|
+
FileUtils.rm_rf(build_dir)
|
|
16
|
+
|
|
17
|
+
cmd = "wget -m -p -E -k -np #{root_url} -P #{build_dir} -nH"
|
|
18
|
+
system(cmd)
|
|
31
19
|
end
|
|
32
20
|
|
|
33
21
|
end
|
|
@@ -12,7 +12,7 @@ module RubberRing
|
|
|
12
12
|
convert_image(path, width, height) if File.exist?(path)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
respond(page)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
def convert_image(path, width, height)
|
|
@@ -22,7 +22,7 @@ module RubberRing
|
|
|
22
22
|
|
|
23
23
|
def save_attachment
|
|
24
24
|
page = Util.save_page_content(params)
|
|
25
|
-
|
|
25
|
+
respond(page)
|
|
26
26
|
end
|
|
27
27
|
|
|
28
28
|
def add
|
|
@@ -9,17 +9,17 @@ module RubberRing
|
|
|
9
9
|
|
|
10
10
|
def save
|
|
11
11
|
page = Util.save_page_content(params)
|
|
12
|
-
|
|
12
|
+
respond(page)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
15
|
def remove
|
|
16
16
|
page = Page.remove(@options, params[:key])
|
|
17
|
-
|
|
17
|
+
respond(page)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def save_template
|
|
21
21
|
page = Page.save_or_update_templates(@options)
|
|
22
|
-
|
|
22
|
+
respond(page)
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def add_template
|
|
@@ -38,13 +38,12 @@ module RubberRing
|
|
|
38
38
|
|
|
39
39
|
response = view_context.content_tag(new_pt.element, view_context.raw(template), content_tag_options)
|
|
40
40
|
|
|
41
|
-
expire_page(params[:page_path])
|
|
42
41
|
render :json => {new_template: response}
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
def remove_template
|
|
46
45
|
page = Page.remove_template(@options)
|
|
47
|
-
|
|
46
|
+
respond(page)
|
|
48
47
|
end
|
|
49
48
|
|
|
50
49
|
private
|
|
@@ -3,7 +3,7 @@ module RubberRing
|
|
|
3
3
|
layout 'rubber_ring/layout'
|
|
4
4
|
|
|
5
5
|
before_action :load_page_content, :set_locale
|
|
6
|
-
before_filter :admin
|
|
6
|
+
before_filter :admin?
|
|
7
7
|
|
|
8
8
|
def load_page_content
|
|
9
9
|
page = Page.where(
|
|
@@ -17,13 +17,34 @@ module RubberRing
|
|
|
17
17
|
@images, @attachments = Util.load_attachments_page(params)
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
def build
|
|
21
|
+
# when running with puma and multiple workers this is the best option
|
|
22
|
+
Build.run!(request)
|
|
23
|
+
|
|
24
|
+
# when running with single process server, new thread needs to be spawn
|
|
25
|
+
# downside of this option is, that we can not know when build is completed
|
|
26
|
+
|
|
27
|
+
#Thread::new{
|
|
28
|
+
# Build.run!(request)
|
|
29
|
+
#}
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def publish
|
|
33
|
+
begin
|
|
34
|
+
Publish.assets!
|
|
35
|
+
rescue Errno::EACCES
|
|
36
|
+
flash.now[:error] =
|
|
37
|
+
'Rubber Ring is trying to copy files on to path which is not writable.
|
|
38
|
+
Please tell developers to check publish.yml file.'
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
20
42
|
def set_locale
|
|
21
43
|
I18n.locale = params[:locale] || I18n.default_locale
|
|
22
44
|
@locale = I18n.locale.to_s
|
|
23
45
|
end
|
|
24
46
|
|
|
25
|
-
def
|
|
26
|
-
expire_page(params[:page_path])
|
|
47
|
+
def respond(page)
|
|
27
48
|
render :json => {controller: page.controller, action: page.action, content: page.content}
|
|
28
49
|
end
|
|
29
50
|
|
|
@@ -38,30 +59,5 @@ module RubberRing
|
|
|
38
59
|
@page.edit_mode = false
|
|
39
60
|
end
|
|
40
61
|
end
|
|
41
|
-
|
|
42
|
-
def cache?
|
|
43
|
-
if params[:cache] == '1' and params[:publish].nil?
|
|
44
|
-
disable_edit_mode
|
|
45
|
-
Thread::new{
|
|
46
|
-
Build.assets!
|
|
47
|
-
}
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def publish?
|
|
52
|
-
if params[:publish] == '1' and params[:cache] == '1'
|
|
53
|
-
disable_edit_mode
|
|
54
|
-
Thread::new{
|
|
55
|
-
Build.assets!
|
|
56
|
-
Publish.assets!
|
|
57
|
-
}
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def disable_edit_mode
|
|
62
|
-
@page_caching = true
|
|
63
|
-
@page.edit_mode = false
|
|
64
|
-
end
|
|
65
|
-
|
|
66
62
|
end
|
|
67
63
|
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>Rubber Ring Login</title>
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<%= stylesheet_link_tag 'rubber_ring/application', media: 'all' %>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<div class="tbs">
|
|
10
|
+
<%= yield %>
|
|
11
|
+
</div>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
<div class="tbs" id="rubber-ring-application">
|
|
3
3
|
<div class="navbar">
|
|
4
4
|
<div class="navbar-inner">
|
|
5
|
-
<span class="brand">
|
|
5
|
+
<span class="brand">
|
|
6
|
+
<a href="/">Rubber Ring</a>
|
|
7
|
+
</span>
|
|
6
8
|
<ul class="nav">
|
|
7
9
|
<li>
|
|
8
10
|
<a class="dropdown" id="attachment-manager" href="javascript:void(0);">Attachments</a>
|
|
@@ -12,10 +14,7 @@
|
|
|
12
14
|
</li>
|
|
13
15
|
<% if RubberRing.static_only %>
|
|
14
16
|
<li>
|
|
15
|
-
|
|
16
|
-
</li>
|
|
17
|
-
<li>
|
|
18
|
-
<a href="?cache=1&publish=1" target="_blank">Publish</a>
|
|
17
|
+
<%= link_to 'Build & Publish', rubber_ring.build_path %>
|
|
19
18
|
</li>
|
|
20
19
|
<% end %>
|
|
21
20
|
<li class="alert-saved">
|
|
@@ -24,7 +23,7 @@
|
|
|
24
23
|
</ul>
|
|
25
24
|
<ul class="nav pull-right">
|
|
26
25
|
<li>
|
|
27
|
-
|
|
26
|
+
<%= link_to 'Logout', rubber_ring.logout_path %>
|
|
28
27
|
</li>
|
|
29
28
|
</ul>
|
|
30
29
|
</div>
|