model_base_generators 0.3.6 → 0.3.7
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/Rakefile +1 -1
- data/example/.model_base/controllers +1 -0
- data/example/app/controllers/attached_files_controller.rb +63 -0
- data/example/app/helpers/attached_files_helper.rb +3 -0
- data/example/app/models/attached_file.rb +4 -0
- data/example/app/models/issue_comment.rb +4 -0
- data/example/app/validations/attached_file_validation.rb +8 -0
- data/example/app/validations/issue_comment_validation.rb +8 -0
- data/example/app/views/attached_files/_attached_file.json.jbuilder +2 -0
- data/example/app/views/attached_files/_form.html.erb +48 -0
- data/example/app/views/attached_files/_table.html.erb +31 -0
- data/example/app/views/attached_files/edit.html.erb +5 -0
- data/example/app/views/attached_files/index.html.erb +9 -0
- data/example/app/views/attached_files/index.json.jbuilder +1 -0
- data/example/app/views/attached_files/new.html.erb +5 -0
- data/example/app/views/attached_files/show.html.erb +27 -0
- data/example/app/views/attached_files/show.json.jbuilder +1 -0
- data/example/config/routes.rb +1 -0
- data/example/db/schema.rb +7 -0
- data/example/spec/controllers/attached_files_controller_spec.rb +181 -0
- data/example/spec/factories/attached_files.rb +7 -0
- data/example/spec/helpers/attached_files_helper_spec.rb +15 -0
- data/example/spec/requests/attached_files_spec.rb +14 -0
- data/example/spec/routing/attached_files_routing_spec.rb +38 -0
- data/example/spec/views/attached_files/edit.html.erb_spec.rb +23 -0
- data/example/spec/views/attached_files/index.html.erb_spec.rb +22 -0
- data/example/spec/views/attached_files/new.html.erb_spec.rb +23 -0
- data/example/spec/views/attached_files/show.html.erb_spec.rb +19 -0
- data/lib/generators/model_base/templates/app/controllers/concerns/authentication.rb +3 -0
- data/lib/generators/model_base/templates/spec/factories/users.rb +3 -0
- data/lib/generators/model_base/templates/spec/support/controller_macros.rb +3 -0
- data/lib/generators/model_base/templates/spec/support/devise.rb +3 -0
- data/lib/generators/model_base/templates/spec/support/field_assertions.rb +3 -0
- data/lib/generators/model_base/templates/spec/support/time_match_support.rb +3 -0
- data/lib/model_base/column_attribute.rb +8 -3
- data/lib/model_base/meta_model.rb +1 -1
- data/lib/model_base/version.rb +1 -1
- data/lib/templates/erb/scaffold/_table.html.erb +7 -3
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12bc2ae6438e288406a11f289b337ddb2c73fc73
|
4
|
+
data.tar.gz: 6ea1fa31940044e0e5dba22387f260192c67d80e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 66a87abc8fb944a33794a7df483607b63f00bd0ba93740a6a860403fdb9eb3e90e3cfa4b297ecfab973ee01b34f2c876418e9f9639fd870037f40e265f83e787
|
7
|
+
data.tar.gz: e59829fe201033895a7a937a5aed790045c6734b452d2fc95721275b26b5405f764d3b470fdb538c9bfe317267a43f1288a8826a24d876c795de5cd84e3b8681
|
data/Rakefile
CHANGED
@@ -7,7 +7,7 @@ namespace :example do
|
|
7
7
|
desc "Run spec in example"
|
8
8
|
task :spec do
|
9
9
|
Bundler.with_clean_env do
|
10
|
-
cmd = 'cd example && bundle && bundle exec rake spec'
|
10
|
+
cmd = 'cd example && bundle && rm -f db/*.sqlite3 && bundle exec rake db:create db:schema:load spec'
|
11
11
|
unless system(cmd)
|
12
12
|
raise "Failure: #{cmd}"
|
13
13
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class AttachedFilesController < ApplicationController
|
3
|
+
include Authentication
|
4
|
+
load_and_authorize_resource except: [:index]
|
5
|
+
|
6
|
+
before_action :set_attached_file, only: [:show, :edit, :update, :destroy]
|
7
|
+
|
8
|
+
# GET /attached_files
|
9
|
+
def index
|
10
|
+
@attached_files = AttachedFile.all
|
11
|
+
end
|
12
|
+
|
13
|
+
# GET /attached_files/1
|
14
|
+
def show
|
15
|
+
end
|
16
|
+
|
17
|
+
# GET /attached_files/new
|
18
|
+
def new
|
19
|
+
@attached_file = AttachedFile.new
|
20
|
+
end
|
21
|
+
|
22
|
+
# GET /attached_files/1/edit
|
23
|
+
def edit
|
24
|
+
end
|
25
|
+
|
26
|
+
# POST /attached_files
|
27
|
+
def create
|
28
|
+
@attached_file = AttachedFile.new(attached_file_params)
|
29
|
+
|
30
|
+
if @attached_file.save
|
31
|
+
redirect_to @attached_file, notice: 'Attached file was successfully created.'
|
32
|
+
else
|
33
|
+
render :new
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# PATCH/PUT /attached_files/1
|
38
|
+
def update
|
39
|
+
if @attached_file.update(attached_file_params)
|
40
|
+
redirect_to @attached_file, notice: 'Attached file was successfully updated.'
|
41
|
+
else
|
42
|
+
render :edit
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# DELETE /attached_files/1
|
47
|
+
def destroy
|
48
|
+
@attached_file.destroy
|
49
|
+
redirect_to attached_files_url, notice: 'Attached file was successfully destroyed.'
|
50
|
+
end
|
51
|
+
|
52
|
+
private
|
53
|
+
|
54
|
+
# Use callbacks to share common setup or constraints between actions.
|
55
|
+
def set_attached_file
|
56
|
+
@attached_file = AttachedFile.find(params[:id])
|
57
|
+
end
|
58
|
+
|
59
|
+
# Only allow a trusted parameter "white list" through.
|
60
|
+
def attached_file_params
|
61
|
+
params.require(:attached_file).permit(:issue_comment_id, :url)
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<%= form_for attached_file, :html => { :class => "form-horizontal attached_file" } do |f| %>
|
2
|
+
|
3
|
+
<% if attached_file.errors.any? %>
|
4
|
+
<div id="error_expl" class="panel panel-danger">
|
5
|
+
<div class="panel-heading">
|
6
|
+
<h3 class="panel-title"><%= pluralize(attached_file.errors.count, "error") %> prohibited this attached_file from being saved:</h3>
|
7
|
+
</div>
|
8
|
+
<div class="panel-body">
|
9
|
+
<ul>
|
10
|
+
<% attached_file.errors.full_messages.each do |msg| %>
|
11
|
+
<li><%= msg %></li>
|
12
|
+
<% end %>
|
13
|
+
</ul>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
<div class="form-group">
|
19
|
+
<%= f.label :id, :class => 'control-label col-lg-2' %>
|
20
|
+
<div class="col-lg-10">
|
21
|
+
<%= f.number_field :id, :class => 'form-control' %>
|
22
|
+
</div>
|
23
|
+
<%=f.error_span(:id) %>
|
24
|
+
</div>
|
25
|
+
<div class="form-group">
|
26
|
+
<%= f.label :issue_comment_id, :class => 'control-label col-lg-2' %>
|
27
|
+
<div class="col-lg-10">
|
28
|
+
<%= f.collection_select :issue_comment_id, IssueComment.all, :id, :title, {}, :class=>"form-control" %>
|
29
|
+
</div>
|
30
|
+
<%=f.error_span(:issue_comment_id) %>
|
31
|
+
</div>
|
32
|
+
<div class="form-group">
|
33
|
+
<%= f.label :url, :class => 'control-label col-lg-2' %>
|
34
|
+
<div class="col-lg-10">
|
35
|
+
<%= f.text_field :url, :class => 'form-control' %>
|
36
|
+
</div>
|
37
|
+
<%=f.error_span(:url) %>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
<div class="form-group">
|
41
|
+
<div class="col-lg-offset-2 col-lg-10">
|
42
|
+
<%= f.submit nil, :class => 'btn btn-primary' %>
|
43
|
+
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
|
44
|
+
attached_files_path, :class => 'btn btn-default' %>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
|
48
|
+
<% end %>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
<%- model_class = AttachedFile -%>
|
2
|
+
<table class="table table-striped">
|
3
|
+
<thead>
|
4
|
+
<tr>
|
5
|
+
<th><%= model_class.human_attribute_name(:id) %></th>
|
6
|
+
<th><%= model_class.human_attribute_name(:issue_comment_id) %></th>
|
7
|
+
<th><%= model_class.human_attribute_name(:url) %></th>
|
8
|
+
<th><%= model_class.human_attribute_name(:created_at) %></th>
|
9
|
+
<th><%=t '.actions', :default => t("helpers.actions") %></th>
|
10
|
+
</tr>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<% attached_files.each do |attached_file| %>
|
14
|
+
<tr>
|
15
|
+
<td><%= attached_file.id %></td>
|
16
|
+
<td><%= attached_file.issue_comment.title %></td>
|
17
|
+
<td><%= attached_file.url %></td>
|
18
|
+
<td><%=l attached_file.created_at %></td>
|
19
|
+
<td>
|
20
|
+
<%= link_to t('.edit', :default => t("helpers.links.edit")),
|
21
|
+
edit_attached_file_path(attached_file), :class => 'btn btn-default btn-xs' %>
|
22
|
+
<%= link_to t('.destroy', :default => t("helpers.links.destroy")),
|
23
|
+
attached_file_path(attached_file),
|
24
|
+
:method => :delete,
|
25
|
+
:data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) },
|
26
|
+
:class => 'btn btn-xs btn-danger' %>
|
27
|
+
</td>
|
28
|
+
</tr>
|
29
|
+
<% end %>
|
30
|
+
</tbody>
|
31
|
+
</table>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<%- model_class = AttachedFile -%>
|
2
|
+
<div class="page-header">
|
3
|
+
<h1><%=t '.title', :default => [:'helpers.titles.edit', 'Edit %{model}'], :model => model_class.model_name.human.titleize %></h1>
|
4
|
+
</div>
|
5
|
+
<%= render 'attached_files/form', attached_file: @attached_file %>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<%- model_class = AttachedFile -%>
|
2
|
+
<div class="page-header">
|
3
|
+
<h1><%=t '.title', :default => model_class.model_name.human.pluralize.titleize %></h1>
|
4
|
+
</div>
|
5
|
+
<%= render 'attached_files/table', attached_files: @attached_files %>
|
6
|
+
|
7
|
+
<%= link_to t('.new', :default => t("helpers.links.new")),
|
8
|
+
new_attached_file_path,
|
9
|
+
:class => 'btn btn-primary' %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.array! @attached_files, partial: 'attached_files/attached_file', as: :attached_file
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<%- model_class = AttachedFile -%>
|
2
|
+
<div class="page-header">
|
3
|
+
<h1><%=t '.title', :default => model_class.model_name.human.titleize %></h1>
|
4
|
+
</div>
|
5
|
+
|
6
|
+
<dl class="dl-horizontal">
|
7
|
+
<dt><strong><%= model_class.human_attribute_name(:id) %>:</strong></dt>
|
8
|
+
<dd><%= @attached_file.id %></dd>
|
9
|
+
<dt><strong><%= model_class.human_attribute_name(:issue_comment_id) %>:</strong></dt>
|
10
|
+
<dd><%= @attached_file.issue_comment_id %></dd>
|
11
|
+
<dt><strong><%= model_class.human_attribute_name(:url) %>:</strong></dt>
|
12
|
+
<dd><%= @attached_file.url %></dd>
|
13
|
+
<dt><strong><%= model_class.human_attribute_name(:created_at) %>:</strong></dt>
|
14
|
+
<dd><%=l @attached_file.created_at %></dd>
|
15
|
+
<dt><strong><%= model_class.human_attribute_name(:updated_at) %>:</strong></dt>
|
16
|
+
<dd><%=l @attached_file.updated_at %></dd>
|
17
|
+
</dl>
|
18
|
+
|
19
|
+
<%= link_to t('.back', :default => t("helpers.links.back")),
|
20
|
+
attached_files_path, :class => 'btn btn-default' %>
|
21
|
+
<%= link_to t('.edit', :default => t("helpers.links.edit")),
|
22
|
+
edit_attached_file_path(@attached_file), :class => 'btn btn-default' %>
|
23
|
+
<%= link_to t('.destroy', :default => t("helpers.links.destroy")),
|
24
|
+
attached_file_path(@attached_file),
|
25
|
+
:method => 'delete',
|
26
|
+
:data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) },
|
27
|
+
:class => 'btn btn-danger' %>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.partial! "attached_files/attached_file", attached_file: @attached_file
|
data/example/config/routes.rb
CHANGED
data/example/db/schema.rb
CHANGED
@@ -57,4 +57,11 @@ ActiveRecord::Schema.define(version: 20_161_013_025_452) do
|
|
57
57
|
t.datetime :created_at, null: false
|
58
58
|
t.datetime :updated_at, null: false
|
59
59
|
end
|
60
|
+
|
61
|
+
create_table :attached_files do |t|
|
62
|
+
t.references :issue_comment, null: false, foreign_key: true
|
63
|
+
t.string :url, limit: 4096, null: false, foreign_key: true
|
64
|
+
t.datetime :created_at, null: false
|
65
|
+
t.datetime :updated_at, null: false
|
66
|
+
end
|
60
67
|
end
|
@@ -0,0 +1,181 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
# This spec was generated by rspec-rails when you ran the scaffold generator.
|
5
|
+
# It demonstrates how one might use RSpec to specify the controller code that
|
6
|
+
# was generated by Rails when you ran the scaffold generator.
|
7
|
+
#
|
8
|
+
# It assumes that the implementation code is generated by the rails scaffold
|
9
|
+
# generator. If you are using any extension libraries to generate different
|
10
|
+
# controller code, this generated spec may or may not pass.
|
11
|
+
#
|
12
|
+
# It only uses APIs available in rails and/or rspec-rails. There are a number
|
13
|
+
# of tools you can use to make these specs even more expressive, but we're
|
14
|
+
# sticking to rails and rspec-rails APIs to keep things simple and stable.
|
15
|
+
#
|
16
|
+
# Compared to earlier versions of this generator, there is very limited use of
|
17
|
+
# stubs and message expectations in this spec. Stubs are only used when there
|
18
|
+
# is no simpler way to get a handle on the object needed for the example.
|
19
|
+
# Message expectations are only used when there is no simpler way to specify
|
20
|
+
# that an instance is receiving a specific message.
|
21
|
+
|
22
|
+
RSpec.describe AttachedFilesController, type: :controller do
|
23
|
+
let(:user) { FactoryGirl.create(:user) }
|
24
|
+
let(:project) { FactoryGirl.create(:project, owner: user) }
|
25
|
+
let(:issue) { FactoryGirl.create(:issue, project: project, creator: user) }
|
26
|
+
let(:issue_comment) { FactoryGirl.create(:issue_comment, issue: issue, user: user) }
|
27
|
+
let(:attached_file) { FactoryGirl.create(:attached_file, issue_comment: issue_comment) }
|
28
|
+
before { devise_user_login(user) }
|
29
|
+
|
30
|
+
# This should return the minimal set of attributes required to create a valid
|
31
|
+
# AttachedFile. As you add validations to AttachedFile, be sure to
|
32
|
+
# adjust the attributes here as well.
|
33
|
+
let(:valid_parameters) do
|
34
|
+
FactoryGirl.attributes_for(:attached_file).merge(issue_comment_id: issue_comment.id)
|
35
|
+
end
|
36
|
+
|
37
|
+
let(:invalid_parameters) do
|
38
|
+
valid_parameters.symbolize_keys.merge(url: '')
|
39
|
+
end
|
40
|
+
|
41
|
+
# This should return the minimal set of values that should be in the session
|
42
|
+
# in order to pass any filters (e.g. authentication) defined in
|
43
|
+
# AttachedFilesController. Be sure to keep this updated too.
|
44
|
+
let(:valid_session) { {} }
|
45
|
+
|
46
|
+
describe 'GET #index' do
|
47
|
+
it 'assigns all attached_files as @attached_files' do
|
48
|
+
get :index, session: valid_session,
|
49
|
+
params: {}
|
50
|
+
expect(assigns(:attached_files)).to eq([attached_file])
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe 'GET #show' do
|
55
|
+
it 'assigns the requested attached_file as @attached_file' do
|
56
|
+
attached_file # To create attached_file
|
57
|
+
get :show, session: valid_session,
|
58
|
+
params: { id: attached_file.to_param }
|
59
|
+
expect(assigns(:attached_file)).to eq(attached_file)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
describe 'GET #new' do
|
64
|
+
it 'assigns a new attached_file as @attached_file' do
|
65
|
+
get :new, session: valid_session,
|
66
|
+
params: {}
|
67
|
+
expect(assigns(:attached_file)).to be_a_new(AttachedFile)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
describe 'GET #edit' do
|
72
|
+
it 'assigns the requested attached_file as @attached_file' do
|
73
|
+
attached_file # To create attached_file
|
74
|
+
get :edit, session: valid_session,
|
75
|
+
params: { id: attached_file.to_param }
|
76
|
+
expect(assigns(:attached_file)).to eq(attached_file)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe 'POST #create' do
|
81
|
+
context 'with valid params' do
|
82
|
+
it 'creates a new AttachedFile' do
|
83
|
+
expect {
|
84
|
+
post :create, session: valid_session,
|
85
|
+
params: { attached_file: valid_parameters }
|
86
|
+
}.to change(AttachedFile, :count).by(1)
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'assigns a newly created attached_file as @attached_file' do
|
90
|
+
post :create, session: valid_session,
|
91
|
+
params: { attached_file: valid_parameters }
|
92
|
+
expect(assigns(:attached_file)).to be_a(AttachedFile)
|
93
|
+
expect(assigns(:attached_file)).to be_persisted
|
94
|
+
end
|
95
|
+
|
96
|
+
it 'redirects to the created attached_file' do
|
97
|
+
post :create, session: valid_session,
|
98
|
+
params: { attached_file: valid_parameters }
|
99
|
+
expect(response).to redirect_to(AttachedFile.last)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'with invalid params' do
|
104
|
+
it 'assigns a newly created but unsaved attached_file as @attached_file' do
|
105
|
+
post :create, session: valid_session,
|
106
|
+
params: { attached_file: invalid_parameters }
|
107
|
+
expect(assigns(:attached_file)).to be_a_new(AttachedFile)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "re-renders the 'new' template" do
|
111
|
+
post :create, session: valid_session,
|
112
|
+
params: { attached_file: invalid_parameters }
|
113
|
+
expect(response).to render_template('new')
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe 'PUT #update' do
|
119
|
+
context 'with valid params' do
|
120
|
+
let(:new_url) { valid_parameters[:url].succ }
|
121
|
+
let(:new_parameters) do
|
122
|
+
valid_parameters.merge(url: new_url)
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'updates the requested attached_file' do
|
126
|
+
attached_file # To create attached_file
|
127
|
+
put :update, session: valid_session,
|
128
|
+
params: { id: attached_file.to_param, attached_file: new_parameters }
|
129
|
+
attached_file.reload
|
130
|
+
expect(attached_file.url).to eq new_url
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'assigns the requested attached_file as @attached_file' do
|
134
|
+
attached_file # To create attached_file
|
135
|
+
put :update, session: valid_session,
|
136
|
+
params: { id: attached_file.to_param, attached_file: new_parameters }
|
137
|
+
expect(assigns(:attached_file)).to eq(attached_file)
|
138
|
+
end
|
139
|
+
|
140
|
+
it 'redirects to the attached_file' do
|
141
|
+
attached_file # To create attached_file
|
142
|
+
put :update, session: valid_session,
|
143
|
+
params: { id: attached_file.to_param, attached_file: new_parameters }
|
144
|
+
expect(response).to redirect_to(attached_file)
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'with invalid params' do
|
149
|
+
it 'assigns the attached_file as @attached_file' do
|
150
|
+
attached_file # To create attached_file
|
151
|
+
put :update, session: valid_session,
|
152
|
+
params: { id: attached_file.to_param, attached_file: invalid_parameters }
|
153
|
+
expect(assigns(:attached_file)).to eq(attached_file)
|
154
|
+
end
|
155
|
+
|
156
|
+
it "re-renders the 'edit' template" do
|
157
|
+
attached_file # To create attached_file
|
158
|
+
put :update, session: valid_session,
|
159
|
+
params: { id: attached_file.to_param, attached_file: invalid_parameters }
|
160
|
+
expect(response).to render_template('edit')
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
describe 'DELETE #destroy' do
|
166
|
+
it 'destroys the requested attached_file' do
|
167
|
+
attached_file # To create attached_file
|
168
|
+
expect {
|
169
|
+
delete :destroy, session: valid_session,
|
170
|
+
params: { id: attached_file.to_param }
|
171
|
+
}.to change(AttachedFile, :count).by(-1)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'redirects to the attached_files list' do
|
175
|
+
attached_file # To create attached_file
|
176
|
+
delete :destroy, session: valid_session,
|
177
|
+
params: { id: attached_file.to_param }
|
178
|
+
expect(response).to redirect_to(attached_files_url)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
# Specs in this file have access to a helper object that includes
|
5
|
+
# the AttachedFilesHelper. For example:
|
6
|
+
#
|
7
|
+
# describe AttachedFilesHelper do
|
8
|
+
# describe "string concat" do
|
9
|
+
# it "concats two strings with spaces" do
|
10
|
+
# expect(helper.concat_strings("this","that")).to eq("this that")
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
RSpec.describe AttachedFilesHelper, type: :helper do
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'AttachedFiles', type: :request do
|
5
|
+
let(:user) { FactoryGirl.create(:user) }
|
6
|
+
before { login_as(user, scope: :user) }
|
7
|
+
|
8
|
+
describe 'GET /attached_files' do
|
9
|
+
it 'works! (now write some real specs)' do
|
10
|
+
get attached_files_path
|
11
|
+
expect(response).to have_http_status(200)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe AttachedFilesController, type: :routing do
|
5
|
+
describe 'routing' do
|
6
|
+
it 'routes to #index' do
|
7
|
+
expect(get: '/attached_files').to route_to('attached_files#index')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'routes to #new' do
|
11
|
+
expect(get: '/attached_files/new').to route_to('attached_files#new')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'routes to #show' do
|
15
|
+
expect(get: '/attached_files/1').to route_to('attached_files#show', id: '1')
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'routes to #edit' do
|
19
|
+
expect(get: '/attached_files/1/edit').to route_to('attached_files#edit', id: '1')
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'routes to #create' do
|
23
|
+
expect(post: '/attached_files').to route_to('attached_files#create')
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'routes to #update via PUT' do
|
27
|
+
expect(put: '/attached_files/1').to route_to('attached_files#update', id: '1')
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'routes to #update via PATCH' do
|
31
|
+
expect(patch: '/attached_files/1').to route_to('attached_files#update', id: '1')
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'routes to #destroy' do
|
35
|
+
expect(delete: '/attached_files/1').to route_to('attached_files#destroy', id: '1')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'attached_files/edit', type: :view do
|
5
|
+
let(:user) { FactoryGirl.create(:user) }
|
6
|
+
let(:project) { FactoryGirl.create(:project, owner: user) }
|
7
|
+
let(:issue) { FactoryGirl.create(:issue, project: project, creator: user) }
|
8
|
+
let(:issue_comment) { FactoryGirl.create(:issue_comment, issue: issue, user: user) }
|
9
|
+
let(:attached_file) { FactoryGirl.create(:attached_file, issue_comment: issue_comment) }
|
10
|
+
before(:each) do
|
11
|
+
assign(:attached_file, attached_file)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'renders the edit attached_file form' do
|
15
|
+
render
|
16
|
+
|
17
|
+
assert_select 'form[action=?][method=?]', attached_file_path(attached_file), 'post' do
|
18
|
+
assert_select 'input#attached_file_id[name=?]', 'attached_file[id]'
|
19
|
+
assert_select 'select#attached_file_issue_comment_id[name=?]', 'attached_file[issue_comment_id]'
|
20
|
+
assert_select 'input#attached_file_url[name=?]', 'attached_file[url]'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'attached_files/index', type: :view do
|
5
|
+
let(:user) { FactoryGirl.create(:user) }
|
6
|
+
let(:project) { FactoryGirl.create(:project, owner: user) }
|
7
|
+
let(:issue) { FactoryGirl.create(:issue, project: project, creator: user) }
|
8
|
+
let(:issue_comment) { FactoryGirl.create(:issue_comment, issue: issue, user: user) }
|
9
|
+
before(:each) do
|
10
|
+
assign(:attached_files, [
|
11
|
+
FactoryGirl.create(:attached_file, issue_comment: issue_comment, url: 'attached_file_url_1'),
|
12
|
+
FactoryGirl.create(:attached_file, issue_comment: issue_comment, url: 'attached_file_url_2'),
|
13
|
+
])
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'renders a list of attached_files' do
|
17
|
+
render
|
18
|
+
assert_select 'tr>td', text: issue_comment.title, count: 2
|
19
|
+
assert_select 'tr>td', text: 'attached_file_url_1', count: 1
|
20
|
+
assert_select 'tr>td', text: 'attached_file_url_2', count: 1
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'attached_files/new', type: :view do
|
5
|
+
let(:user) { FactoryGirl.create(:user) }
|
6
|
+
let(:project) { FactoryGirl.create(:project, owner: user) }
|
7
|
+
let(:issue) { FactoryGirl.create(:issue, project: project, creator: user) }
|
8
|
+
let(:issue_comment) { FactoryGirl.create(:issue_comment, issue: issue, user: user) }
|
9
|
+
let(:attached_file) { FactoryGirl.build(:attached_file, issue_comment: issue_comment) }
|
10
|
+
before(:each) do
|
11
|
+
assign(:attached_file, attached_file)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'renders new attached_file form' do
|
15
|
+
render
|
16
|
+
|
17
|
+
assert_select 'form[action=?][method=?]', attached_files_path, 'post' do
|
18
|
+
assert_select 'input#attached_file_id[name=?]', 'attached_file[id]'
|
19
|
+
assert_select 'select#attached_file_issue_comment_id[name=?]', 'attached_file[issue_comment_id]'
|
20
|
+
assert_select 'input#attached_file_url[name=?]', 'attached_file[url]'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rails_helper'
|
3
|
+
|
4
|
+
RSpec.describe 'attached_files/show', type: :view do
|
5
|
+
let(:user) { FactoryGirl.create(:user) }
|
6
|
+
let(:project) { FactoryGirl.create(:project, owner: user) }
|
7
|
+
let(:issue) { FactoryGirl.create(:issue, project: project, creator: user) }
|
8
|
+
let(:issue_comment) { FactoryGirl.create(:issue_comment, issue: issue, user: user) }
|
9
|
+
let(:attached_file) { FactoryGirl.create(:attached_file, issue_comment: issue_comment) }
|
10
|
+
before(:each) do
|
11
|
+
assign(:attached_file, attached_file)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'renders attributes in <p>' do
|
15
|
+
render
|
16
|
+
expect(rendered).to match(/1/)
|
17
|
+
expect(rendered).to match(/attached_file_url_1/)
|
18
|
+
end
|
19
|
+
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
<%- unless ModelBase.config.frozen_string_literal.nil? -%>
|
2
|
+
# frozen_string_literal: <%= ModelBase.config.frozen_string_literal.inspect %>
|
3
|
+
<%- end -%>
|
1
4
|
# https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-(and-RSpec)
|
2
5
|
RSpec.configure do |config|
|
3
6
|
config.with_options(:type => :controller) do |c|
|
@@ -1,3 +1,6 @@
|
|
1
|
+
<%- unless ModelBase.config.frozen_string_literal.nil? -%>
|
2
|
+
# frozen_string_literal: <%= ModelBase.config.frozen_string_literal.inspect %>
|
3
|
+
<%- end -%>
|
1
4
|
def assert_select_datetime_field(object, field, n = 5)
|
2
5
|
(1..n).each do |i|
|
3
6
|
assert_select "select##{object}_#{field}_#{i}i[name=?]", "#{object}[#{field}(#{i}i)]"
|
@@ -1,3 +1,6 @@
|
|
1
|
+
<%- unless ModelBase.config.frozen_string_literal.nil? -%>
|
2
|
+
# frozen_string_literal: <%= ModelBase.config.frozen_string_literal.inspect %>
|
3
|
+
<%- end -%>
|
1
4
|
module TimeMatchSupport
|
2
5
|
def localized_time_re(time_str)
|
3
6
|
Regexp.new(Regexp.escape(localize(Time.zone.parse(time_str))))
|
@@ -72,7 +72,7 @@ module ModelBase
|
|
72
72
|
if tc = ref_model.title_column
|
73
73
|
tc.sample_value(idx)
|
74
74
|
else
|
75
|
-
1
|
75
|
+
block_given? ? yield : 1
|
76
76
|
end
|
77
77
|
elsif enumerized?
|
78
78
|
enum = model.model_class.send(name)
|
@@ -133,7 +133,11 @@ module ModelBase
|
|
133
133
|
when :datetime, :timestamp, :time
|
134
134
|
'localize(Time.zone.parse(\'%s\'))' % sample_value(idx)
|
135
135
|
else
|
136
|
-
|
136
|
+
if !title? && ref_model && !ref_model.title_column
|
137
|
+
"#{ref_model.full_resource_name}.title"
|
138
|
+
else
|
139
|
+
"'%s'" % sample_value(idx)
|
140
|
+
end
|
137
141
|
end
|
138
142
|
end
|
139
143
|
|
@@ -172,7 +176,8 @@ module ModelBase
|
|
172
176
|
ref_model.respond_to?(:choices_for) ?
|
173
177
|
"#{ref_model.name}.choices_for(#{taregt_name})" :
|
174
178
|
"#{ref_model.name}.all"
|
175
|
-
|
179
|
+
tc = ref_model.title_column
|
180
|
+
"#{form_name}.collection_select :#{column_attr.name}, #{query}, :id, :#{tc ? tc.name : 'title'}"
|
176
181
|
end
|
177
182
|
end
|
178
183
|
|
@@ -108,7 +108,7 @@ module ModelBase
|
|
108
108
|
end
|
109
109
|
|
110
110
|
def all_dependencies(required = true)
|
111
|
-
dependencies.values.map{|m| [m] + m.
|
111
|
+
dependencies.values.map{|m| [m] + m.all_dependencies(required)}.flatten.uniq(&:name)
|
112
112
|
end
|
113
113
|
|
114
114
|
def factory_girl_options
|
data/lib/model_base/version.rb
CHANGED
@@ -14,11 +14,15 @@
|
|
14
14
|
<%- model.columns_for(:index).each do |column| -%>
|
15
15
|
<%- if column.linkable? -%>
|
16
16
|
<td><%%= link_to <%= model.full_resource_name %>.<%= column.name %>, <%= singular_controller_routing_path %>_path(<%= model.full_resource_name %>) %></td>
|
17
|
-
<%- elsif
|
18
|
-
<%- if column.
|
17
|
+
<%- elsif column.ref_model -%>
|
18
|
+
<%- if tcol = column.ref_model.try(:title_column) -%>
|
19
|
+
<%- if column.required? -%>
|
19
20
|
<td><%%= <%= model.full_resource_name %>.<%= column.reference.name %>.<%= tcol.name %> %></td>
|
20
|
-
|
21
|
+
<%- else -%>
|
21
22
|
<td><%%= <%= model.full_resource_name %>.<%= column.reference.name %>.try(:<%= tcol.name %>) %></td>
|
23
|
+
<%- end -%>
|
24
|
+
<%- else -%>
|
25
|
+
<td><%%= <%= model.full_resource_name %>.<%= column.reference.name %>.title %></td>
|
22
26
|
<%- end -%>
|
23
27
|
<%- elsif column.enumerized? -%>
|
24
28
|
<td><%%= <%= model.full_resource_name %>.<%= column.name %>_text %></td>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model_base_generators
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akm
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- example/app/channels/application_cable/channel.rb
|
143
143
|
- example/app/channels/application_cable/connection.rb
|
144
144
|
- example/app/controllers/application_controller.rb
|
145
|
+
- example/app/controllers/attached_files_controller.rb
|
145
146
|
- example/app/controllers/concerns/.keep
|
146
147
|
- example/app/controllers/concerns/authentication.rb
|
147
148
|
- example/app/controllers/issue_comments_controller.rb
|
@@ -150,6 +151,7 @@ files:
|
|
150
151
|
- example/app/controllers/project_assignments_controller.rb
|
151
152
|
- example/app/controllers/projects_controller.rb
|
152
153
|
- example/app/helpers/application_helper.rb
|
154
|
+
- example/app/helpers/attached_files_helper.rb
|
153
155
|
- example/app/helpers/issue_comments_helper.rb
|
154
156
|
- example/app/helpers/issues_helper.rb
|
155
157
|
- example/app/helpers/phases_helper.rb
|
@@ -159,6 +161,7 @@ files:
|
|
159
161
|
- example/app/mailers/application_mailer.rb
|
160
162
|
- example/app/models/ability.rb
|
161
163
|
- example/app/models/application_record.rb
|
164
|
+
- example/app/models/attached_file.rb
|
162
165
|
- example/app/models/concerns/.keep
|
163
166
|
- example/app/models/issue.rb
|
164
167
|
- example/app/models/issue_comment.rb
|
@@ -167,11 +170,22 @@ files:
|
|
167
170
|
- example/app/models/project_assignment.rb
|
168
171
|
- example/app/models/user.rb
|
169
172
|
- example/app/validations/ar_internal_metadatum_validation.rb
|
173
|
+
- example/app/validations/attached_file_validation.rb
|
174
|
+
- example/app/validations/issue_comment_validation.rb
|
170
175
|
- example/app/validations/issue_validation.rb
|
171
176
|
- example/app/validations/phase_validation.rb
|
172
177
|
- example/app/validations/project_assignment_validation.rb
|
173
178
|
- example/app/validations/project_validation.rb
|
174
179
|
- example/app/validations/user_validation.rb
|
180
|
+
- example/app/views/attached_files/_attached_file.json.jbuilder
|
181
|
+
- example/app/views/attached_files/_form.html.erb
|
182
|
+
- example/app/views/attached_files/_table.html.erb
|
183
|
+
- example/app/views/attached_files/edit.html.erb
|
184
|
+
- example/app/views/attached_files/index.html.erb
|
185
|
+
- example/app/views/attached_files/index.json.jbuilder
|
186
|
+
- example/app/views/attached_files/new.html.erb
|
187
|
+
- example/app/views/attached_files/show.html.erb
|
188
|
+
- example/app/views/attached_files/show.json.jbuilder
|
175
189
|
- example/app/views/issue_comments/_form.html.erb
|
176
190
|
- example/app/views/issue_comments/_issue_comment.json.jbuilder
|
177
191
|
- example/app/views/issue_comments/_table.html.erb
|
@@ -251,28 +265,33 @@ files:
|
|
251
265
|
- example/public/apple-touch-icon-precomposed.png
|
252
266
|
- example/public/apple-touch-icon.png
|
253
267
|
- example/public/favicon.ico
|
268
|
+
- example/spec/controllers/attached_files_controller_spec.rb
|
254
269
|
- example/spec/controllers/issue_comments_controller_spec.rb
|
255
270
|
- example/spec/controllers/issues_controller_spec.rb
|
256
271
|
- example/spec/controllers/phases_controller_spec.rb
|
257
272
|
- example/spec/controllers/project_assignments_controller_spec.rb
|
258
273
|
- example/spec/controllers/projects_controller_spec.rb
|
274
|
+
- example/spec/factories/attached_files.rb
|
259
275
|
- example/spec/factories/issue_comments.rb
|
260
276
|
- example/spec/factories/issues.rb
|
261
277
|
- example/spec/factories/phases.rb
|
262
278
|
- example/spec/factories/project_assignments.rb
|
263
279
|
- example/spec/factories/projects.rb
|
264
280
|
- example/spec/factories/users.rb
|
281
|
+
- example/spec/helpers/attached_files_helper_spec.rb
|
265
282
|
- example/spec/helpers/issue_comments_helper_spec.rb
|
266
283
|
- example/spec/helpers/issues_helper_spec.rb
|
267
284
|
- example/spec/helpers/phases_helper_spec.rb
|
268
285
|
- example/spec/helpers/project_assignments_helper_spec.rb
|
269
286
|
- example/spec/helpers/projects_helper_spec.rb
|
270
287
|
- example/spec/rails_helper.rb
|
288
|
+
- example/spec/requests/attached_files_spec.rb
|
271
289
|
- example/spec/requests/issue_comments_spec.rb
|
272
290
|
- example/spec/requests/issues_spec.rb
|
273
291
|
- example/spec/requests/phases_spec.rb
|
274
292
|
- example/spec/requests/project_assignments_spec.rb
|
275
293
|
- example/spec/requests/projects_spec.rb
|
294
|
+
- example/spec/routing/attached_files_routing_spec.rb
|
276
295
|
- example/spec/routing/issue_comments_routing_spec.rb
|
277
296
|
- example/spec/routing/issues_routing_spec.rb
|
278
297
|
- example/spec/routing/phases_routing_spec.rb
|
@@ -283,6 +302,10 @@ files:
|
|
283
302
|
- example/spec/support/devise.rb
|
284
303
|
- example/spec/support/field_assertions.rb
|
285
304
|
- example/spec/support/time_match_support.rb
|
305
|
+
- example/spec/views/attached_files/edit.html.erb_spec.rb
|
306
|
+
- example/spec/views/attached_files/index.html.erb_spec.rb
|
307
|
+
- example/spec/views/attached_files/new.html.erb_spec.rb
|
308
|
+
- example/spec/views/attached_files/show.html.erb_spec.rb
|
286
309
|
- example/spec/views/issue_comments/edit.html.erb_spec.rb
|
287
310
|
- example/spec/views/issue_comments/index.html.erb_spec.rb
|
288
311
|
- example/spec/views/issue_comments/new.html.erb_spec.rb
|