# Weeler
[![Gem Version](https://badge.fury.io/rb/weeler.svg)](https://badge.fury.io/rb/weeler)
[![Build Status](https://travis-ci.org/weby-lv/weeler.svg?branch=master)](https://travis-ci.org/weby-lv/weeler)
[![Coverage Status](https://coveralls.io/repos/weby-lv/weeler/badge.svg)](https://coveralls.io/r/weby-lv/weeler)
[![Code Climate](https://codeclimate.com/github/weby-lv/weeler/badges/gpa.svg)](https://codeclimate.com/github/weby-lv/weeler)
## Installation
### Rails 6.0
2.0.0 version only supports Rails 6.0 and ruby 2.5 or higher version. In Gemfile include:
```ruby
gem 'weeler', '~> 2.0'
```
### Rails 5.0
1.6.0 version only supports Rails 5.0 and ruby 2.2.2 and higher version. In Gemfile include:
```ruby
gem 'weeler', '~> 1.6'
```
### Rails 4.2
```ruby
gem 'weeler', '~> 1.5'
```
After specifying necessary gems in Gemfile run
```bash
bundle install
```
## Setup
Run weeler generator:
$ rails g weeler:install
This will generate follwing files:
* config/initializers/weeler.rb
* db/migrate/xxxxxxxxxxxxxx_create_weeler_seos.rb
* db/migrate/xxxxxxxxxxxxxx_create_weeler_settings.rb
* db/migrate/xxxxxxxxxxxxxx_create_weeler_translations.rb
* db/migrate/xxxxxxxxxxxxxx_translate_weeler_seos.rb
* app/controllers/weeler/application_controller.rb
* lib/assets/javascripts/weeler/app/index.js
* lib/assets/stylesheets/weeler/app/index.css
* your route file will be appended
Following will be appended to your route file:
mount_weeler_at "weeler" do
# weeler_resources :example, include_in_weeler_menu: true
# Also you orderable and imageable concerns
end
And then migrate database:
$ rake db:migrate
## Weeler Structure
- app
-- controllers
--- weeler
---- application_controller.rb
-- views
--- weeler
- lib
-- assets
--- javascripts
---- weeler
----- app
------ index.js
--- stylesheets
---- weeler
----- app
------ index.css
## Usage
### Controllers, Views, Routes
Place weeler backend controllers in app/controllers/weeler/ directory and view files in app/views/weeler directory. Then add a route, a resource weeler_resources to this controller inside mount_weeler_at in config/routes.rb
All weeler contollers have to extend Weeler::BaseController.
### Menu
If you want your controller work under menu section, you should extend one of:
* Weeler::AdministrationController - for administration section;
* Weeler::ContentController - for content section;
Then you should append config.content_menu_items or config.administration_menu_items array with hash that contains: name for submenu name and weeler_path as string for relative weeler path. E.g.:
config.content_menu_items = [
{name: "Posts", weeler_path: "posts"},
{name: "Post comments", weeler_path: "comments"}
]
### acts_as_restful
Weeler action controller method.
It creates all restful actions for action controller. Create a controller for your
model (e.g. Post) what you want to administrate in weeler. Add method acts_as_restful Post
and permit params for your resource - option permit_params. Also you can paginate - add
option paginate
e.g.
class Weeler::PostController < Weeler::ContentController
acts_as_restful Post, permit_params: [:title, :body], paginate: 50
end
It will handle :index, :new, :edit, :update,
:destroy, :order, :activation and :remove_image actions
For permiting custom by role or permiting all params (permit!),
you must add block permit_params: -> (params) { params.require(:post).permit! }
You can override redirect path after :create, :update, :destroy actions.
You can do this by overriding private methods in your controller.
def after_create_path
{ action: :edit, id: @item.id }
end
def after_update_path
{ action: :edit, id: @item.id }
end
def after_destroy_path
{ action: :index }
end
Or you can override what happens after successful :create, :update, :destroy actions.
You can do this by overriding private methods in your controller.
def after_create_action
redirect_to( after_create_path, {:notice => "Successfully created item"} )
end
def after_update_action
redirect_to( after_update_path, {:notice => "Successfully updated item"} )
end
def after_destroy_action
redirect_to( after_destroy_path, {:notice => "Successfully destroyed item"})
end
You should implement form file with your own active record attributes.
To do that, create _form.html.haml in views/weeler/_YOUR_RESOURCE_/_form.html.haml
where _YOUR_RESOURCE_ is name of your resource.
Also you can override all standart restful action view and implement, if you need,
_filter.html.haml
### View partials for restful controllers:
Weeler have default views for index, new, edit actions. You should override _form.html.haml partial.
## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new Pull Request