tila 0.0.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +44 -0
- data/Rakefile +34 -0
- data/lib/tasks/tila_tasks.rake +4 -0
- data/lib/tila.rb +14 -0
- data/lib/tila/actionable.rb +43 -0
- data/lib/tila/form_handler.rb +31 -0
- data/lib/tila/messages.rb +12 -0
- data/lib/tila/modelable.rb +28 -0
- data/lib/tila/objects.rb +10 -0
- data/lib/tila/params.rb +21 -0
- data/lib/tila/resource_loaders.rb +43 -0
- data/lib/tila/resourceful.rb +42 -0
- data/lib/tila/resourceful_urls.rb +22 -0
- data/lib/tila/save_destroy.rb +14 -0
- data/lib/tila/version.rb +3 -0
- data/test/dummy/README.rdoc +28 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/assets/javascripts/application.js +13 -0
- data/test/dummy/app/assets/stylesheets/application.css +15 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/bin/bundle +3 -0
- data/test/dummy/bin/rails +4 -0
- data/test/dummy/bin/rake +4 -0
- data/test/dummy/bin/setup +29 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +26 -0
- data/test/dummy/config/boot.rb +5 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +41 -0
- data/test/dummy/config/environments/production.rb +79 -0
- data/test/dummy/config/environments/test.rb +42 -0
- data/test/dummy/config/initializers/assets.rb +11 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy/config/initializers/inflections.rb +16 -0
- data/test/dummy/config/initializers/mime_types.rb +4 -0
- data/test/dummy/config/initializers/session_store.rb +3 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +23 -0
- data/test/dummy/config/routes.rb +56 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/public/404.html +67 -0
- data/test/dummy/public/422.html +67 -0
- data/test/dummy/public/500.html +66 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/test_helper.rb +20 -0
- data/test/tila_test.rb +7 -0
- metadata +160 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a6f8a260763517d729f728c1d7598f246c99bdd8
|
4
|
+
data.tar.gz: 9b6b93fcc8be2b7deb4a4de95cdfbdb92966aa27
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0e9a4a1d61bd734ed8a8f3be2e4993f2567d46438d5139754afa2692842b42e291897ca6d6fc12166c1f94a28217884d03da07ac4324ed7582b7ddbbb146201c
|
7
|
+
data.tar.gz: d50ee02a1b6cf40467516809b51fb9d520cf63c0f045258242cf2fe122e629c01135d9912874107cd06e9b58ab854e1cef165532552b2f921e8eff1df813e79f
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2015 Rolf van de Krol
|
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,44 @@
|
|
1
|
+
# Tila
|
2
|
+
|
3
|
+
Most Rails projects contain a lot of controllers that are quite repetitive,
|
4
|
+
because most controllers essentially what is needed to get a simple CRUD
|
5
|
+
interface. This project contains components that can be used to build the
|
6
|
+
controller of this simple CRUD interface.
|
7
|
+
|
8
|
+
Because Tila favors composition over inheritance, is allows for a flexibility
|
9
|
+
that most other projects in this space don't have. If you only want to use a
|
10
|
+
part of Tila, that works perfectly fine.
|
11
|
+
|
12
|
+
## Components
|
13
|
+
|
14
|
+
* __Actionable__: Provides an `action` helper so we can simply find out which
|
15
|
+
action is called and contains a list of actions that are operated on
|
16
|
+
collection and which actions are actions that save the model instance. It also
|
17
|
+
provides simple helpers to find out if the current action is in one of the
|
18
|
+
lists.
|
19
|
+
* __Modelable__: Provides an `model` helper so we can access the model that the
|
20
|
+
controller is for, and a few helpers to access model name.
|
21
|
+
* __Messages__: Provide a simple helper for generating message strings from
|
22
|
+
I18n. Requires _Modelable_.
|
23
|
+
* __Objects__: Provides a simple accessor for `@object` and `@objects`. The
|
24
|
+
_ResourceLoaders_ component registers the loaded resources here.
|
25
|
+
* __Params__: Provides a way to update the attributes of the object and simple
|
26
|
+
starting point for filtering out the permitted resource params. Requires
|
27
|
+
_Modelable_, _Objects_.
|
28
|
+
* __SaveDestroy__: Provides the `save_object` and `destroy_object` methods.
|
29
|
+
Requires _Objects_.
|
30
|
+
* __FormHandler__: Provides methods to handle the submit of forms and the
|
31
|
+
destroy. Requires _Messages_, _Objects_, _SaveDestroy_. You need to define a
|
32
|
+
`location_after_save` and a `location_after_destroy` method, if you want to
|
33
|
+
use this module in isolation. The _Resourceful_ component defines these
|
34
|
+
methods for you.
|
35
|
+
* __ResourceLoaders__: Provides methods for loading the resources. Requires
|
36
|
+
_Modelable_ and _Objects_.
|
37
|
+
* __ResourcefulUrls__: Generates the URLs to the controller. Requires
|
38
|
+
_Modelable_.
|
39
|
+
* __Resourceful__: Implements the actual controller actions, registers the
|
40
|
+
_before_action_ to load the resources. This is the part that you want to
|
41
|
+
include when you want to enjoy the full glory of Tila. Requires _Actionable_,
|
42
|
+
_Params_, _FormHandler_, _ResourceLoaders_ and _ResourcefulUrls_.
|
43
|
+
|
44
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,34 @@
|
|
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 = 'Tila'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.rdoc')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
Bundler::GemHelper.install_tasks
|
23
|
+
|
24
|
+
require 'rake/testtask'
|
25
|
+
|
26
|
+
Rake::TestTask.new(:test) do |t|
|
27
|
+
t.libs << 'lib'
|
28
|
+
t.libs << 'test'
|
29
|
+
t.pattern = 'test/**/*_test.rb'
|
30
|
+
t.verbose = false
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
task default: :test
|
data/lib/tila.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
module Tila
|
2
|
+
autoload :Actionable, 'tila/actionable'
|
3
|
+
autoload :Modelable, 'tila/modelable'
|
4
|
+
autoload :Messages, 'tila/messages'
|
5
|
+
autoload :Objects, 'tila/objects'
|
6
|
+
autoload :Params, 'tila/params'
|
7
|
+
|
8
|
+
autoload :SaveDestroy, 'tila/save_destroy'
|
9
|
+
autoload :FormHandler, 'tila/form_handler'
|
10
|
+
|
11
|
+
autoload :ResourceLoaders, 'tila/resource_loaders'
|
12
|
+
autoload :ResourcefulUrls, 'tila/resourceful_urls'
|
13
|
+
autoload :Resourceful, 'tila/resourceful'
|
14
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Tila
|
2
|
+
module Actionable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
helper_method :action
|
7
|
+
end
|
8
|
+
|
9
|
+
class_methods do
|
10
|
+
def collection_actions
|
11
|
+
[:index]
|
12
|
+
end
|
13
|
+
|
14
|
+
def new_actions
|
15
|
+
[:new, :create]
|
16
|
+
end
|
17
|
+
|
18
|
+
def save_actions
|
19
|
+
[:create, :update]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def action
|
26
|
+
params[:action].to_sym
|
27
|
+
end
|
28
|
+
|
29
|
+
def collection_action?
|
30
|
+
self.class.collection_actions.include? action
|
31
|
+
end
|
32
|
+
def new_action?
|
33
|
+
self.class.new_actions.include? action
|
34
|
+
end
|
35
|
+
def save_action?
|
36
|
+
self.class.save_actions.include? action
|
37
|
+
end
|
38
|
+
|
39
|
+
def member_action?
|
40
|
+
!collection_action?
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Tila
|
2
|
+
module FormHandler
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include Messages
|
5
|
+
include Objects
|
6
|
+
include SaveDestroy
|
7
|
+
|
8
|
+
protected
|
9
|
+
|
10
|
+
def handle_form(error_view, message_key)
|
11
|
+
respond_to do |format|
|
12
|
+
if save_object
|
13
|
+
format.html { redirect_to location_after_save, notice: message(message_key) }
|
14
|
+
format.json { render :show, status: :created, location: object }
|
15
|
+
else
|
16
|
+
format.html { render error_view }
|
17
|
+
format.json { render json: object.errors, status: :unprocessable_entity }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def handle_destroy(message_key)
|
23
|
+
destroy_object
|
24
|
+
|
25
|
+
respond_to do |format|
|
26
|
+
format.html { redirect_to location_after_destroy, notice: message(message_key) }
|
27
|
+
format.json { head :no_content }
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Tila
|
2
|
+
module Modelable
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
class_methods do
|
6
|
+
def model
|
7
|
+
@model ||= controller_path.singularize.camelize.constantize
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def model
|
14
|
+
self.class.model
|
15
|
+
end
|
16
|
+
|
17
|
+
def object_name
|
18
|
+
self.class.model.model_name.element
|
19
|
+
end
|
20
|
+
def objects_name
|
21
|
+
object_name.pluralize
|
22
|
+
end
|
23
|
+
|
24
|
+
def model_name
|
25
|
+
model.model_name.singular
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/tila/objects.rb
ADDED
data/lib/tila/params.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Tila
|
2
|
+
module Params
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include Modelable
|
5
|
+
include Objects
|
6
|
+
|
7
|
+
protected
|
8
|
+
|
9
|
+
def update_resource_params
|
10
|
+
object.attributes = permitted_resource_params
|
11
|
+
end
|
12
|
+
|
13
|
+
def permitted_resource_params
|
14
|
+
raise "The permitted_resource_params method should be overriden"
|
15
|
+
end
|
16
|
+
|
17
|
+
def resource_params
|
18
|
+
params.require(object_name)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Tila
|
2
|
+
module ResourceLoaders
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include Modelable
|
5
|
+
include Objects
|
6
|
+
|
7
|
+
protected
|
8
|
+
|
9
|
+
def resource_base
|
10
|
+
model
|
11
|
+
end
|
12
|
+
|
13
|
+
def load_resource
|
14
|
+
if member_action?
|
15
|
+
self.object ||= load_resource_instance
|
16
|
+
instance_variable_set("@#{object_name}", object)
|
17
|
+
else
|
18
|
+
self.collection ||= load_collection
|
19
|
+
instance_variable_set("@#{objects_name}", collection)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def load_resource_instance
|
24
|
+
if new_action?
|
25
|
+
build_resource
|
26
|
+
elsif params[:id]
|
27
|
+
find_resource
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def find_resource
|
32
|
+
resource_base.find(params[:id])
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_resource
|
36
|
+
resource_base.new
|
37
|
+
end
|
38
|
+
|
39
|
+
def load_collection
|
40
|
+
resource_base.where(nil)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Tila
|
2
|
+
module Resourceful
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include Actionable
|
5
|
+
include Params
|
6
|
+
include FormHandler
|
7
|
+
include ResourceLoaders
|
8
|
+
include ResourcefulUrls
|
9
|
+
|
10
|
+
included do
|
11
|
+
before_action :load_resource
|
12
|
+
before_action :update_resource_params, only: save_actions
|
13
|
+
end
|
14
|
+
|
15
|
+
def index; end
|
16
|
+
def show; end
|
17
|
+
def new; end
|
18
|
+
def edit; end
|
19
|
+
|
20
|
+
def create
|
21
|
+
handle_form :new, :created
|
22
|
+
end
|
23
|
+
|
24
|
+
def update
|
25
|
+
handle_form :edit, :updated
|
26
|
+
end
|
27
|
+
|
28
|
+
def destroy
|
29
|
+
handle_destroy :destroyed
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def location_after_save
|
35
|
+
object_url
|
36
|
+
end
|
37
|
+
|
38
|
+
def location_after_destroy
|
39
|
+
collection_url
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Tila
|
2
|
+
module ResourcefulUrls
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include Modelable
|
5
|
+
|
6
|
+
included do
|
7
|
+
helper_method :object_url, :collection_url
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def object_url(object = nil, options = {})
|
13
|
+
target = object ? object : self.object
|
14
|
+
|
15
|
+
send "#{model.model_name.route_key.singularize}_url", target, options
|
16
|
+
end
|
17
|
+
|
18
|
+
def collection_url(options = {})
|
19
|
+
send "#{model.model_name.route_key}_url", options
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/tila/version.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
== README
|
2
|
+
|
3
|
+
This README would normally document whatever steps are necessary to get the
|
4
|
+
application up and running.
|
5
|
+
|
6
|
+
Things you may want to cover:
|
7
|
+
|
8
|
+
* Ruby version
|
9
|
+
|
10
|
+
* System dependencies
|
11
|
+
|
12
|
+
* Configuration
|
13
|
+
|
14
|
+
* Database creation
|
15
|
+
|
16
|
+
* Database initialization
|
17
|
+
|
18
|
+
* How to run the test suite
|
19
|
+
|
20
|
+
* Services (job queues, cache servers, search engines, etc.)
|
21
|
+
|
22
|
+
* Deployment instructions
|
23
|
+
|
24
|
+
* ...
|
25
|
+
|
26
|
+
|
27
|
+
Please feel free to use a different markup language if you do not plan to run
|
28
|
+
<tt>rake doc:app</tt>.
|