rows_controller 1.1.9 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +19 -0
- data/.watchr +55 -0
- data/Appraisals +7 -0
- data/MIT-LICENSE +1 -1
- data/README.md +29 -16
- data/Rakefile +21 -12
- data/app/controllers/rows_controller.rb +47 -62
- data/lib/rows_controller/locales/de.yml +2 -2
- data/lib/rows_controller/model.rb +20 -0
- data/lib/rows_controller/resources.rb +78 -0
- data/lib/rows_controller/utils.rb +19 -0
- data/lib/rows_controller/version.rb +1 -1
- data/lib/rows_controller.rb +4 -2
- data/test/controllers/order/items_controller_test.rb +53 -0
- data/test/controllers/orders_controller_test.rb +53 -0
- data/test/controllers/orders_test.rb +93 -0
- data/test/controllers/rows_controller_test.rb +52 -0
- data/test/controllers/rows_ext_controller_test.rb +22 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/controllers/application_controller.rb +5 -0
- data/test/dummy/app/controllers/order/items_controller.rb +8 -0
- data/test/dummy/app/controllers/orders_controller.rb +8 -0
- data/test/dummy/app/models/order/item.rb +2 -0
- data/test/dummy/app/models/order.rb +11 -0
- data/test/dummy/app/views/layouts/application.html.erb +12 -0
- data/test/dummy/app/views/order/items/_form.html.erb +8 -0
- data/test/dummy/app/views/orders/_form.html.erb +8 -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/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/cookies_serializer.rb +3 -0
- data/test/dummy/config/initializers/filter_parameter_logging.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/routes.rb +9 -0
- data/test/dummy/config/secrets.yml +22 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/migrate/001_create_orders.rb +9 -0
- data/test/dummy/db/migrate/002_create_order_items.rb +9 -0
- data/test/dummy/db/schema.rb +28 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/tmp/restart.txt +0 -0
- data/test/fixtures/order/items.yml +5 -0
- data/test/fixtures/orders.yml +5 -0
- data/test/test_helper.rb +27 -0
- metadata +95 -21
- data/app/controllers/rows_controller/helpers.rb +0 -114
- data/app/controllers/rows_ext_controller.rb.bak +0 -18
- data/lib/rows_controller/version.rb.bak +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afd501f680af68257cdd2a7f5df5874862667259
|
4
|
+
data.tar.gz: ec22cd6d7a4f72057d1712065c1310313d9bb1f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 757d0fb0008aa4f1115203f554e18a57fcb76ac0159871754766fc0d6f92bbd3c3415dcc1090cebe76d823dc3d26c2bda2002c114e2f01a02bf5c0974b7525b5
|
7
|
+
data.tar.gz: f310dc6c707b4a8d4aea2ecb005c9d02baa167f3dbc0d08748c1224f42b52bb976582c917ed1c5519d44361621dc453a4a9da4eba58585a0347a04222d1a1e71
|
data/.travis.yml
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
language: ruby
|
2
|
+
sudo: false
|
3
|
+
rvm:
|
4
|
+
# - 2.0.0 # OK for Rails 4.2.4
|
5
|
+
# - 2.2.0
|
6
|
+
- 2.2.3
|
7
|
+
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/rails_4.2.4.gemfile
|
10
|
+
|
11
|
+
matrix:
|
12
|
+
include:
|
13
|
+
# fails due to test/dummy/config/environments/test.rb
|
14
|
+
# - rvm: 1.9.3 # or 2.0.0
|
15
|
+
# gemfile: gemfiles/rails-3.2.16.gemfile
|
16
|
+
exclude:
|
17
|
+
|
18
|
+
notifications:
|
19
|
+
email: false
|
data/.watchr
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
HH = '#' * 22 unless defined?(HH)
|
2
|
+
H = '#' * 5 unless defined?(H)
|
3
|
+
|
4
|
+
def usage
|
5
|
+
puts <<-EOS
|
6
|
+
Ctrl-\\ or ctrl-4 Running all tests
|
7
|
+
Ctrl-C Exit
|
8
|
+
EOS
|
9
|
+
end
|
10
|
+
|
11
|
+
def run(cmd)
|
12
|
+
puts "#{HH} #{Time.now} #{HH}"
|
13
|
+
puts "#{H} #{cmd}"
|
14
|
+
system "/usr/bin/time --format '#{HH} Elapsed time %E' #{cmd}"
|
15
|
+
end
|
16
|
+
|
17
|
+
def run_it(type, file)
|
18
|
+
case type
|
19
|
+
when 'test'; run %Q{ruby -I"lib:test" -rubygems #{file}}
|
20
|
+
when 'spec'; run %Q{rspec -X #{file}}
|
21
|
+
else; puts "#{H} unknown type: #{type}, file: #{file}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def run_all_tests
|
26
|
+
puts "\n#{HH} Running all tests #{HH}\n"
|
27
|
+
%w{test spec}.each { |dir| run "rake #{dir} RAILS_ENV=test" if File.exists?(dir) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def run_matching_files(base)
|
31
|
+
base = base.split('_').first
|
32
|
+
%w{test spec}.each { |type|
|
33
|
+
files = Dir["#{type}/**/*.rb"].select { |file| file =~ /#{base}_.*\.rb/ }
|
34
|
+
run_it type, files.join(' ') unless files.empty?
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
%w{test spec}.each { |type|
|
39
|
+
watch("#{type}/#{type}_helper\.rb") { run_all_tests }
|
40
|
+
watch("#{type}/.*/*_#{type}\.rb") { |match| run_it type, match[0] }
|
41
|
+
}
|
42
|
+
#%w{rb erb haml slim}.each { |type|
|
43
|
+
# watch("app/.*/.*\.#{type}") { |m|
|
44
|
+
# run_matching_files("#{m[0].split('/').at(2).split('.').first}")
|
45
|
+
# }
|
46
|
+
#}
|
47
|
+
Dir['**/*.rb'].find_all{ |x| !(x =~ /_test\.rb$/) }.each { |name|
|
48
|
+
watch(name) { run_all_tests }
|
49
|
+
}
|
50
|
+
|
51
|
+
# Ctrl-\ or ctrl-4
|
52
|
+
Signal.trap('QUIT') { run_all_tests }
|
53
|
+
# Ctrl-C
|
54
|
+
Signal.trap('INT') { abort("Interrupted\n") }
|
55
|
+
usage
|
data/Appraisals
ADDED
data/MIT-LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
RowsController
|
2
2
|
==============
|
3
|
-
[![Gem Version](https://badge.fury.io/rb/rows_controller.
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/rows_controller.svg)](https://badge.fury.io/rb/rows_controller)
|
4
4
|
[![Build Status](https://travis-ci.org/matique/rows_controller.png?branch=master)](https://travis-ci.org/matique/rows_controller)
|
5
5
|
|
6
6
|
DRYs Rails controllers. Imagine replacing that @order by 'resource' in the
|
@@ -8,35 +8,48 @@ controllers/views and, imho, an area for DRYing appears.
|
|
8
8
|
Instead of:
|
9
9
|
|
10
10
|
class OrdersController < ApplicationController
|
11
|
-
|
11
|
+
.....
|
12
|
+
private
|
13
|
+
def order_params
|
14
|
+
params.require(:order).permit(:name)
|
15
|
+
end
|
16
|
+
end
|
12
17
|
|
13
18
|
use:
|
14
19
|
|
15
20
|
class OrdersController < RowsController # < ApplicationController
|
21
|
+
private
|
22
|
+
def resource_whitelist
|
23
|
+
%i{ name }
|
24
|
+
end
|
25
|
+
end
|
16
26
|
|
27
|
+
I.e. RowsController defines all the usual methods (index, show, edit,...).
|
17
28
|
|
18
|
-
The
|
19
|
-
methods (index, show, edit,...).
|
20
|
-
|
21
|
-
The methods may be redefined in OrdersController overwritting the
|
29
|
+
The methods may be redefined in OrdersController overwriting the
|
22
30
|
methods from RowsController.
|
23
31
|
|
24
32
|
Low level methods like 'resources' may be redefined as well.
|
25
33
|
An example:
|
26
34
|
|
27
35
|
def resources
|
28
|
-
@_resources ||= model_class.paginate(:
|
36
|
+
@_resources ||= model_class.paginate(page: params[:page])
|
29
37
|
end
|
30
38
|
|
31
39
|
RowsController inherites from ApplicationController, i.e. all the helpers
|
32
40
|
defined there will be available.
|
33
41
|
|
34
42
|
|
35
|
-
|
36
|
-
|
43
|
+
Customizing of views
|
44
|
+
--------------------
|
45
|
+
|
46
|
+
RowsController initializes some instance variables used in the views
|
47
|
+
(e.g. @order, @orders; legacy @row & @rows are still supported).
|
48
|
+
Furthermore, the helpers resource, resources, set_resource and
|
49
|
+
set_resources are available. You guess their usage.
|
37
50
|
|
38
51
|
Providing e.g. an "#{Rails.root}/app/views/order/index.html.erb"
|
39
|
-
overwrites the default
|
52
|
+
overwrites the default RowsController view as Rails will first look
|
40
53
|
into the directory "#{Rails.root}/app/views" before looking
|
41
54
|
into the RowsController.
|
42
55
|
|
@@ -52,20 +65,21 @@ be changed by e.g.:
|
|
52
65
|
|
53
66
|
class OrdersController < RowsController
|
54
67
|
model_class Booking
|
68
|
+
...
|
55
69
|
|
56
|
-
The model class can be retrieved with model_class.
|
70
|
+
The model class can be retrieved with the helper model_class.
|
57
71
|
|
58
72
|
|
59
73
|
Rails 4
|
60
74
|
-------
|
61
75
|
|
62
76
|
This gem is intended for Rails 4.
|
63
|
-
|
77
|
+
Older Rails versions may use "gem 'rows_controller', '= 1.1.9'".
|
64
78
|
|
65
79
|
Rails 4 introduced strong parameters.
|
66
80
|
To support them a private method 'resource_whitelist' is required
|
67
81
|
in the controllers.
|
68
|
-
Alternatively you may define
|
82
|
+
Alternatively you may define the private method 'resource_params'
|
69
83
|
in the controller to filter params.
|
70
84
|
|
71
85
|
|
@@ -81,7 +95,7 @@ The "id" of the cloned resource is set to nil.
|
|
81
95
|
Usage of "copy" requires a defining in config/routes.rb. An example:
|
82
96
|
|
83
97
|
resources :orders
|
84
|
-
get 'copy', :
|
98
|
+
get 'copy', on: :member
|
85
99
|
end
|
86
100
|
|
87
101
|
### columns
|
@@ -111,5 +125,4 @@ Look for:
|
|
111
125
|
- inherited_resources
|
112
126
|
- decent_exposure
|
113
127
|
|
114
|
-
|
115
|
-
Copyright (c) 2009-2014 [Dittmar Krall], released under the MIT license
|
128
|
+
Copyright (c) 2009-2015 [Dittmar Krall], released under the MIT license.
|
data/Rakefile
CHANGED
@@ -1,17 +1,26 @@
|
|
1
|
-
require
|
1
|
+
require "rubygems"
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'bundler/setup'
|
5
|
+
rescue LoadError
|
6
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
7
|
+
end
|
8
|
+
|
9
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
10
|
+
load 'rails/tasks/engine.rake'
|
11
|
+
|
12
|
+
load 'rails/tasks/statistics.rake'
|
2
13
|
|
3
|
-
Rails.application.load_tasks
|
4
14
|
Bundler::GemHelper.install_tasks
|
5
15
|
|
6
|
-
|
7
|
-
task :clean do
|
8
|
-
FileUtils.rm_rf "pkg"
|
9
|
-
end
|
16
|
+
require 'rake/testtask'
|
10
17
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
18
|
+
Rake::TestTask.new(:test) do |t|
|
19
|
+
puts "Ruby version: #{RUBY_VERSION}"
|
20
|
+
t.libs << 'lib'
|
21
|
+
t.libs << 'test'
|
22
|
+
t.pattern = 'test/**/*_test.rb'
|
23
|
+
t.verbose = false
|
17
24
|
end
|
25
|
+
|
26
|
+
task default: :test
|
@@ -1,17 +1,31 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'rows_controller/resources'
|
2
|
+
require 'rows_controller/model'
|
3
|
+
require 'rows_controller/utils'
|
3
4
|
|
4
5
|
class RowsController < ApplicationController
|
5
|
-
|
6
|
+
before_action :set_resource, only: [:show, :edit, :update, :destroy]
|
7
|
+
|
8
|
+
helper_method :set_resource, :set_resources, :resource, :resources
|
9
|
+
helper_method :resource_columns, :resource_format
|
10
|
+
helper_method :model_class, :model_name
|
11
|
+
helper_method :model_symbol, :model_symbol_plural
|
12
|
+
|
13
|
+
include Rows::Model
|
14
|
+
include Rows::Resources
|
15
|
+
include Rows::Utils
|
16
|
+
|
17
|
+
def self.model_class(model_class = nil)
|
18
|
+
@_model_class = model_class unless model_class.nil?
|
19
|
+
@_model_class
|
20
|
+
end
|
6
21
|
|
7
22
|
# GET /:resources[.json]
|
8
23
|
def index
|
9
24
|
set_resources
|
10
25
|
end
|
11
26
|
|
12
|
-
# GET /:resource
|
27
|
+
# GET /:resource/:id[.json]
|
13
28
|
def show
|
14
|
-
set_resource
|
15
29
|
end
|
16
30
|
|
17
31
|
# GET /:resource/new
|
@@ -19,81 +33,52 @@ class RowsController < ApplicationController
|
|
19
33
|
resource_new
|
20
34
|
end
|
21
35
|
|
22
|
-
# GET /:resource/
|
36
|
+
# GET /:resource/:id/edit
|
23
37
|
def edit
|
24
|
-
set_resource
|
25
38
|
end
|
26
39
|
|
27
|
-
# POST /:resources.json
|
40
|
+
# POST /:resources[.json]
|
28
41
|
def create
|
29
|
-
|
30
|
-
if resource_create
|
31
|
-
flash[:notice] = t('ui.created', model: model_name,
|
32
|
-
default: "%{model} created.").html_safe
|
33
|
-
format.html {
|
34
|
-
if params[:commit] == 'OK'
|
35
|
-
redirect_to_index
|
36
|
-
else
|
37
|
-
redirect_to action: 'edit', id: resource.id
|
38
|
-
end
|
39
|
-
}
|
40
|
-
format.json { render action: 'show', status: :created, location: resource }
|
41
|
-
else
|
42
|
-
format.html { render action: 'new' }
|
43
|
-
format.json { render json: resource.errors, status: :unprocessable_entity }
|
44
|
-
end
|
45
|
-
end
|
42
|
+
create_update(:resource_create, 'created')
|
46
43
|
end
|
47
44
|
|
48
|
-
# PATCH/PUT /:resources
|
45
|
+
# PATCH/PUT /:resources/:id[.json]
|
49
46
|
def update
|
50
|
-
|
51
|
-
respond_to do |format|
|
52
|
-
if resource_update
|
53
|
-
flash[:notice] = t('ui.updated', model: model_name).html_safe
|
54
|
-
format.html {
|
55
|
-
if params[:commit] == 'OK'
|
56
|
-
redirect_to_index
|
57
|
-
else
|
58
|
-
redirect_to action: 'edit'
|
59
|
-
end
|
60
|
-
}
|
61
|
-
format.json { head :no_content }
|
62
|
-
else
|
63
|
-
format.html { render action: 'edit' }
|
64
|
-
format.json { render json: resource.errors, status: :unprocessable_entity }
|
65
|
-
end
|
66
|
-
end
|
47
|
+
create_update(:resource_update, 'updated')
|
67
48
|
end
|
68
49
|
|
69
|
-
# DELETE /:resources
|
50
|
+
# DELETE /:resources/:id[.json]
|
70
51
|
def destroy
|
71
|
-
set_resource
|
72
52
|
resource_destroy
|
73
53
|
flash[:notice] = t('ui.destroyed', model: model_name).html_safe unless request.xhr?
|
74
54
|
respond_to do |format|
|
75
|
-
format.html {
|
76
|
-
format.js { render template: '
|
55
|
+
format.html { redirect_to action: :index }
|
56
|
+
format.js { render template: 'rows_controller/destroy', layout: false }
|
77
57
|
format.json { head :no_content }
|
78
58
|
end
|
79
59
|
end
|
80
60
|
|
81
|
-
|
82
61
|
private
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
62
|
+
def create_update(which, msg)
|
63
|
+
respond_to do |format|
|
64
|
+
if self.send(which)
|
65
|
+
format.html {
|
66
|
+
flash[:notice] = t(msg, scope: :ui, model: model_name,
|
67
|
+
default: "%{model} was successfully #{msg}.").html_safe
|
68
|
+
if params[:commit] == 'OK'
|
69
|
+
redirect_to action: :index
|
70
|
+
else
|
71
|
+
redirect_to action: 'edit', id: resource.id
|
72
|
+
end
|
73
|
+
}
|
74
|
+
format.json { render action: 'show',
|
75
|
+
status: msg == 'created' ? :created : :ok,
|
76
|
+
location: resource }
|
77
|
+
else ## failed
|
78
|
+
format.html { render action: msg == 'created' ? :new : :edit }
|
79
|
+
format.json { render json: resource.errors,
|
80
|
+
status: :unprocessable_entity }
|
81
|
+
end
|
97
82
|
end
|
98
83
|
end
|
99
84
|
|
@@ -8,10 +8,10 @@ de:
|
|
8
8
|
|
9
9
|
editing: 'Editiere %{model}'
|
10
10
|
listing: 'Liste %{model}'
|
11
|
-
new: '
|
11
|
+
new: 'Neue(r/s) %{model}'
|
12
12
|
showing: 'Zeige %{model}'
|
13
13
|
|
14
|
-
empty_list: 'Liste %{model}
|
14
|
+
empty_list: 'Liste %{model} ist leer.'
|
15
15
|
|
16
16
|
button:
|
17
17
|
back: "Zurück"
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Rows::Model
|
2
|
+
|
3
|
+
def model_class
|
4
|
+
@_model_class ||= self.class.model_class ||
|
5
|
+
params[:controller].singularize.camelize.constantize
|
6
|
+
end
|
7
|
+
|
8
|
+
def model_name
|
9
|
+
@_model_name ||= model_class.model_name.name
|
10
|
+
end
|
11
|
+
|
12
|
+
def model_symbol
|
13
|
+
@_model_symbol ||= model_class.model_name.singular
|
14
|
+
end
|
15
|
+
|
16
|
+
def model_symbol_plural
|
17
|
+
@_model_symbol_plural ||= model_class.model_name.plural
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Rows::Resources
|
2
|
+
|
3
|
+
def set_resources(rows = nil)
|
4
|
+
rows ||= model_class.all
|
5
|
+
instance_variable_set("@#{model_symbol_plural}", rows)
|
6
|
+
@rows = rows
|
7
|
+
end
|
8
|
+
|
9
|
+
def set_resource(row = nil)
|
10
|
+
row ||= model_class.find_by_id(params[:id].to_i)
|
11
|
+
instance_variable_set("@#{model_symbol}", row)
|
12
|
+
@row = row
|
13
|
+
end
|
14
|
+
|
15
|
+
def resources
|
16
|
+
@rows || set_resources
|
17
|
+
end
|
18
|
+
|
19
|
+
def resource
|
20
|
+
@row || set_resource
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
# low level resource methods
|
25
|
+
# can be monkey patched
|
26
|
+
def resource_new
|
27
|
+
if params[model_symbol]
|
28
|
+
set_resource model_class.new(resource_params)
|
29
|
+
else
|
30
|
+
set_resource model_class.new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def resource_create
|
35
|
+
resource_new
|
36
|
+
resource.save
|
37
|
+
end
|
38
|
+
|
39
|
+
def resource_update
|
40
|
+
if Rails::VERSION::MAJOR >= 4
|
41
|
+
resource.update(resource_params)
|
42
|
+
else
|
43
|
+
resource.update_attributes(resource_params)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def resource_destroy
|
48
|
+
resource.destroy
|
49
|
+
end
|
50
|
+
|
51
|
+
def resource_columns
|
52
|
+
return model_class.column_headers if model_class.respond_to?(:column_headers)
|
53
|
+
return ['to_s'] unless model_class.respond_to?(:content_columns)
|
54
|
+
['id'] + model_class.content_columns.collect{|c| c.name }
|
55
|
+
end
|
56
|
+
|
57
|
+
def resource_whitelist
|
58
|
+
raise "RowsController requires private method 'resource_whitelist' in controller <#{params[:controller]}>"
|
59
|
+
end
|
60
|
+
|
61
|
+
# Never trust parameters from the scary internet, only allow the white list through.
|
62
|
+
def resource_params
|
63
|
+
permits = resource_whitelist
|
64
|
+
if params.respond_to?(:require)
|
65
|
+
params.require(model_symbol).permit(permits)
|
66
|
+
else
|
67
|
+
pars = params[model_symbol] || {}
|
68
|
+
pars.keys.each { |x|
|
69
|
+
unless permits.include?(x) || permits.include?({x.to_sym => []})
|
70
|
+
pars.delete(x)
|
71
|
+
p "** WARNING: model <#{model_name}> dropping params <#{x}>"
|
72
|
+
end
|
73
|
+
}
|
74
|
+
pars
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Rows::Utils
|
2
|
+
|
3
|
+
# formatting
|
4
|
+
def resource_format(x)
|
5
|
+
return '--'.html_safe if x.nil?
|
6
|
+
bool = x.class == Time || x.class == Date || x.class == DateTime ||
|
7
|
+
x.class == ActiveSupport::TimeWithZone
|
8
|
+
return x.strftime('%d.%m.%Y').html_safe if bool
|
9
|
+
# return I18n.l(x) if bool
|
10
|
+
return x.to_s.html_safe if x.class == Fixnum
|
11
|
+
return 'X'.html_safe if x.class == TrueClass
|
12
|
+
return ' '.html_safe if x.class == FalseClass
|
13
|
+
return x.call if x.class == Proc
|
14
|
+
return '---'.html_safe if x.empty?
|
15
|
+
str = x.to_s
|
16
|
+
return str.gsub(/\r*\n/, '<br/>')
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
data/lib/rows_controller.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
require 'rows_controller/engine
|
1
|
+
require 'rows_controller/engine'
|
2
|
+
|
3
|
+
module Rows
|
4
|
+
end
|
2
5
|
|
3
|
-
require 'active_support/i18n'
|
4
6
|
I18n.load_path << File.expand_path('../rows_controller/locales/en.yml', __FILE__)
|
5
7
|
I18n.load_path << File.expand_path('../rows_controller/locales/de.yml', __FILE__)
|
6
8
|
I18n.reload!
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# mostly generated by Rails
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class Order::ItemsControllerTest < ActionController::TestCase
|
6
|
+
setup do
|
7
|
+
@order_item = order_items(:one)
|
8
|
+
end
|
9
|
+
|
10
|
+
test "should get index" do
|
11
|
+
get :index
|
12
|
+
assert_response :success
|
13
|
+
assert_not_nil assigns(:order_items)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "should get new" do
|
17
|
+
get :new
|
18
|
+
assert_response :success
|
19
|
+
end
|
20
|
+
|
21
|
+
test "should create order_item" do
|
22
|
+
assert_difference('Order::Item.count') do
|
23
|
+
post :create, order_item: { price: @order_item.price }
|
24
|
+
end
|
25
|
+
|
26
|
+
## assert_redirected_to order_item_path(assigns(:order_item))
|
27
|
+
assert_redirected_to edit_order_item_path(assigns(:order_item))
|
28
|
+
end
|
29
|
+
|
30
|
+
test "should show order_item" do
|
31
|
+
get :show, id: @order_item
|
32
|
+
assert_response :success
|
33
|
+
end
|
34
|
+
|
35
|
+
test "should get edit" do
|
36
|
+
get :edit, id: @order_item
|
37
|
+
assert_response :success
|
38
|
+
end
|
39
|
+
|
40
|
+
test "should update order_item" do
|
41
|
+
patch :update, id: @order_item, order_item: { price: @order_item.price }
|
42
|
+
## assert_redirected_to order_item_path(assigns(:order_item))
|
43
|
+
assert_redirected_to edit_order_item_path(assigns(:order_item))
|
44
|
+
end
|
45
|
+
|
46
|
+
test "should destroy order_item" do
|
47
|
+
assert_difference('Order::Item.count', -1) do
|
48
|
+
delete :destroy, id: @order_item
|
49
|
+
end
|
50
|
+
|
51
|
+
assert_redirected_to order_items_path
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# mostly generated by Rails
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class OrdersControllerTest < ActionController::TestCase
|
6
|
+
setup do
|
7
|
+
@order = orders(:one)
|
8
|
+
end
|
9
|
+
|
10
|
+
test "should get index" do
|
11
|
+
get :index
|
12
|
+
assert_response :success
|
13
|
+
assert_not_nil assigns(:orders)
|
14
|
+
end
|
15
|
+
|
16
|
+
test "should get new" do
|
17
|
+
get :new
|
18
|
+
assert_response :success
|
19
|
+
end
|
20
|
+
|
21
|
+
test "should create order" do
|
22
|
+
assert_difference('Order.count') do
|
23
|
+
post :create, order: { name: @order.name }
|
24
|
+
end
|
25
|
+
|
26
|
+
## assert_redirected_to order_path(assigns(:order))
|
27
|
+
assert_redirected_to edit_order_path(assigns(:order))
|
28
|
+
end
|
29
|
+
|
30
|
+
test "should show order" do
|
31
|
+
get :show, id: @order
|
32
|
+
assert_response :success
|
33
|
+
end
|
34
|
+
|
35
|
+
test "should get edit" do
|
36
|
+
get :edit, id: @order
|
37
|
+
assert_response :success
|
38
|
+
end
|
39
|
+
|
40
|
+
test "should update order" do
|
41
|
+
patch :update, id: @order, order: { name: @order.name }
|
42
|
+
## assert_redirected_to order_path(assigns(:order))
|
43
|
+
assert_redirected_to edit_order_path(assigns(:order))
|
44
|
+
end
|
45
|
+
|
46
|
+
test "should destroy order" do
|
47
|
+
assert_difference('Order.count', -1) do
|
48
|
+
delete :destroy, id: @order
|
49
|
+
end
|
50
|
+
|
51
|
+
assert_redirected_to orders_path
|
52
|
+
end
|
53
|
+
end
|