model_base_generators 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/example/app/controllers/project_assignments_controller.rb +1 -1
- data/example/app/views/project_assignments/_form.html.erb +14 -0
- data/example/app/views/project_assignments/_table.html.erb +4 -0
- data/example/app/views/project_assignments/show.html.erb +4 -0
- data/example/db/schema.rb +2 -0
- data/example/spec/factories/project_assignments.rb +2 -0
- data/example/spec/support/field_assertions.rb +5 -0
- data/example/spec/views/project_assignments/edit.html.erb_spec.rb +2 -0
- data/example/spec/views/project_assignments/index.html.erb_spec.rb +2 -0
- data/example/spec/views/project_assignments/new.html.erb_spec.rb +2 -0
- data/example/spec/views/project_assignments/show.html.erb_spec.rb +2 -0
- data/lib/model_base/column_attribute.rb +48 -6
- data/lib/model_base/config.rb +4 -0
- data/lib/model_base/meta_model.rb +9 -1
- data/lib/model_base/version.rb +1 -1
- data/lib/model_base.rb +4 -0
- data/lib/templates/rspec/scaffold/edit_spec.rb +1 -2
- data/lib/templates/rspec/scaffold/index_spec.rb +4 -4
- data/lib/templates/rspec/scaffold/new_spec.rb +1 -2
- data/lib/templates/rspec/scaffold/show_spec.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 68314ef8b406587412d78bdddaf77afac98fafd5
|
4
|
+
data.tar.gz: 4989519ef484404842ade4d6322048c4205fbe1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb3fb2d839116e34fd7fad805a2f8e988c1b7f0f4db1f909c61fb9fe41cf3c6fffb41f13e085ab56a6f09af3657a1df31329d12ed9a55acf6612ff45fb9b35a9
|
7
|
+
data.tar.gz: 4c3462e95b70e2ba2dd8479e044a0bbe2da42323336ba2511e31cb5ae67beee6d50c6c90d4ccfddc642ad9d4a272eeb61c5b0530f271ecdf144d9058ccb76cf3
|
@@ -57,6 +57,6 @@ class ProjectAssignmentsController < ApplicationController
|
|
57
57
|
|
58
58
|
# Only allow a trusted parameter "white list" through.
|
59
59
|
def project_assignment_params
|
60
|
-
params.require(:project_assignment).permit(:project_id, :user_id)
|
60
|
+
params.require(:project_assignment).permit(:project_id, :user_id, :started_at, :finished_at)
|
61
61
|
end
|
62
62
|
end
|
@@ -36,6 +36,20 @@
|
|
36
36
|
</div>
|
37
37
|
<%=f.error_span(:user_id) %>
|
38
38
|
</div>
|
39
|
+
<div class="form-group">
|
40
|
+
<%= f.label :started_at, :class => 'control-label col-lg-2' %>
|
41
|
+
<div class="col-lg-10">
|
42
|
+
<%= f.datetime_select :started_at, :class => 'form-control' %>
|
43
|
+
</div>
|
44
|
+
<%=f.error_span(:started_at) %>
|
45
|
+
</div>
|
46
|
+
<div class="form-group">
|
47
|
+
<%= f.label :finished_at, :class => 'control-label col-lg-2' %>
|
48
|
+
<div class="col-lg-10">
|
49
|
+
<%= f.datetime_select :finished_at, :class => 'form-control' %>
|
50
|
+
</div>
|
51
|
+
<%=f.error_span(:finished_at) %>
|
52
|
+
</div>
|
39
53
|
|
40
54
|
<div class="form-group">
|
41
55
|
<div class="col-lg-offset-2 col-lg-10">
|
@@ -5,6 +5,8 @@
|
|
5
5
|
<th><%= model_class.human_attribute_name(:id) %></th>
|
6
6
|
<th><%= model_class.human_attribute_name(:project_id) %></th>
|
7
7
|
<th><%= model_class.human_attribute_name(:user_id) %></th>
|
8
|
+
<th><%= model_class.human_attribute_name(:started_at) %></th>
|
9
|
+
<th><%= model_class.human_attribute_name(:finished_at) %></th>
|
8
10
|
<th><%= model_class.human_attribute_name(:created_at) %></th>
|
9
11
|
<th><%=t '.actions', :default => t("helpers.actions") %></th>
|
10
12
|
</tr>
|
@@ -15,6 +17,8 @@
|
|
15
17
|
<td><%= project_assignment.id %></td>
|
16
18
|
<td><%= project_assignment.project.name %></td>
|
17
19
|
<td><%= project_assignment.user.email %></td>
|
20
|
+
<td><%=l project_assignment.started_at %></td>
|
21
|
+
<td><%=l project_assignment.finished_at %></td>
|
18
22
|
<td><%=l project_assignment.created_at %></td>
|
19
23
|
<td>
|
20
24
|
<%= link_to t('.edit', :default => t("helpers.links.edit")),
|
@@ -10,6 +10,10 @@
|
|
10
10
|
<dd><%= @project_assignment.project.name %></dd>
|
11
11
|
<dt><strong><%= model_class.human_attribute_name(:user_id) %>:</strong></dt>
|
12
12
|
<dd><%= @project_assignment.user.email %></dd>
|
13
|
+
<dt><strong><%= model_class.human_attribute_name(:started_at) %>:</strong></dt>
|
14
|
+
<dd><%=l @project_assignment.started_at %></dd>
|
15
|
+
<dt><strong><%= model_class.human_attribute_name(:finished_at) %>:</strong></dt>
|
16
|
+
<dd><%=l @project_assignment.finished_at %></dd>
|
13
17
|
<dt><strong><%= model_class.human_attribute_name(:created_at) %>:</strong></dt>
|
14
18
|
<dd><%=l @project_assignment.created_at %></dd>
|
15
19
|
</dl>
|
data/example/db/schema.rb
CHANGED
@@ -26,6 +26,8 @@ ActiveRecord::Schema.define(version: 20161013025452) do
|
|
26
26
|
create_table :project_assignments do |t|
|
27
27
|
t.references :project, null: false, foreign_key: true
|
28
28
|
t.references :user , null: false, foreign_key: true
|
29
|
+
t.datetime :started_at
|
30
|
+
t.datetime :finished_at
|
29
31
|
t.datetime :created_at, null: false
|
30
32
|
end
|
31
33
|
|
@@ -14,6 +14,8 @@ RSpec.describe "project_assignments/edit", type: :view do
|
|
14
14
|
assert_select "input#project_assignment_id[name=?]", "project_assignment[id]"
|
15
15
|
assert_select "select#project_assignment_project_id[name=?]", "project_assignment[project_id]"
|
16
16
|
assert_select "select#project_assignment_user_id[name=?]", "project_assignment[user_id]"
|
17
|
+
assert_select_datetime_field :project_assignment, :started_at
|
18
|
+
assert_select_datetime_field :project_assignment, :finished_at
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -14,5 +14,7 @@ RSpec.describe "project_assignments/index", type: :view do
|
|
14
14
|
render
|
15
15
|
assert_select "tr>td", :text => 'project1', :count => 2
|
16
16
|
assert_select "tr>td", :text => 'user1@example.com', :count => 2
|
17
|
+
assert_select "tr>td", :text => localize(Time.zone.parse('2020-03-22 09:50:00')), :count => 2
|
18
|
+
assert_select "tr>td", :text => localize(Time.zone.parse('2020-03-22 23:40:00')), :count => 2
|
17
19
|
end
|
18
20
|
end
|
@@ -14,6 +14,8 @@ RSpec.describe "project_assignments/new", type: :view do
|
|
14
14
|
assert_select "input#project_assignment_id[name=?]", "project_assignment[id]"
|
15
15
|
assert_select "select#project_assignment_project_id[name=?]", "project_assignment[project_id]"
|
16
16
|
assert_select "select#project_assignment_user_id[name=?]", "project_assignment[user_id]"
|
17
|
+
assert_select_datetime_field :project_assignment, :started_at
|
18
|
+
assert_select_datetime_field :project_assignment, :finished_at
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -11,5 +11,7 @@ RSpec.describe "project_assignments/show", type: :view do
|
|
11
11
|
render
|
12
12
|
expect(rendered).to match(/project1/)
|
13
13
|
expect(rendered).to match(/user1@example.com/)
|
14
|
+
expect(rendered).to match(Regexp.new(Regexp.escape(localize(Time.zone.parse('2020-03-22 09:50:00')))))
|
15
|
+
expect(rendered).to match(Regexp.new(Regexp.escape(localize(Time.zone.parse('2020-03-22 23:40:00')))))
|
14
16
|
end
|
15
17
|
end
|
@@ -31,7 +31,7 @@ module ModelBase
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def required?
|
34
|
-
!column.
|
34
|
+
column ? !column.null : false
|
35
35
|
end
|
36
36
|
|
37
37
|
def enumerized?
|
@@ -53,6 +53,14 @@ module ModelBase
|
|
53
53
|
LOCALIZED_TYPES.include?(type)
|
54
54
|
end
|
55
55
|
|
56
|
+
def single_sample_only?
|
57
|
+
ref_model || enumerized? ||
|
58
|
+
case type
|
59
|
+
when :boolean, :datetime, :timestamp, :time, :date then true
|
60
|
+
else false
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
56
64
|
def sample_value(idx = 1, context: nil)
|
57
65
|
if name == 'id'
|
58
66
|
idx
|
@@ -71,12 +79,12 @@ module ModelBase
|
|
71
79
|
r = enum.values.first
|
72
80
|
context == :factory ? r.to_sym : r.text
|
73
81
|
else
|
74
|
-
|
82
|
+
case type
|
75
83
|
when :integer then idx
|
76
84
|
when :float then idx + 0.5
|
77
85
|
when :decimal then "#{idx}.99"
|
78
|
-
when :datetime, :timestamp, :time then
|
79
|
-
when :date then
|
86
|
+
when :datetime, :timestamp, :time then sample_time(idx).to_s(:db)
|
87
|
+
when :date then sample_time(idx).to_date.to_s(:db)
|
80
88
|
when :string then
|
81
89
|
case name
|
82
90
|
when 'type' then ""
|
@@ -91,8 +99,42 @@ module ModelBase
|
|
91
99
|
end
|
92
100
|
end
|
93
101
|
|
94
|
-
def
|
95
|
-
|
102
|
+
def base_sample_value
|
103
|
+
name.split('').map(&:ord).sum
|
104
|
+
end
|
105
|
+
|
106
|
+
def sample_time(idx = 1)
|
107
|
+
ModelBase.base_time +
|
108
|
+
model.sample_value.hours +
|
109
|
+
(base_sample_value.minutes * 10 * idx)
|
110
|
+
end
|
111
|
+
|
112
|
+
def sample_value_regexp_exp(idx = 1)
|
113
|
+
case type
|
114
|
+
when :datetime, :timestamp, :time
|
115
|
+
'Regexp.new(Regexp.escape(%s))' % sample_string_exp(idx)
|
116
|
+
else
|
117
|
+
'/%s/' % sample_value(idx)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def assert_select_exp
|
122
|
+
model_name = model.full_resource_name
|
123
|
+
case type
|
124
|
+
when :datetime, :timestamp, :time
|
125
|
+
"assert_select_datetime_field :#{model_name}, :#{name}"
|
126
|
+
else
|
127
|
+
"assert_select \"#{ input_type }##{ model_name }_#{ name }[name=?]\", \"#{ model_name }[#{ name }]\""
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def sample_string_exp(idx = 1)
|
132
|
+
case type
|
133
|
+
when :datetime, :timestamp, :time
|
134
|
+
'localize(Time.zone.parse(\'%s\'))' % sample_value(idx)
|
135
|
+
else
|
136
|
+
"'%s'" % sample_value(idx)
|
137
|
+
end
|
96
138
|
end
|
97
139
|
|
98
140
|
def new_attribute_exp
|
data/lib/model_base/config.rb
CHANGED
@@ -48,7 +48,7 @@ module ModelBase
|
|
48
48
|
belongs_to_refs = model_class.reflections.values.select{|ref| ref.is_a?(ActiveRecord::Reflection::BelongsToReflection) }
|
49
49
|
cols = raw_cols.map do |col|
|
50
50
|
ref = belongs_to_refs.detect{|ref| ref.foreign_key == col.name}
|
51
|
-
ColumnAttribute.new(self, col.name, col.type, reference: ref)
|
51
|
+
ColumnAttribute.new(self, col.name, col.type, column: col, reference: ref)
|
52
52
|
end
|
53
53
|
@title_column = nil
|
54
54
|
ModelBase.config.title_column_candidates.each do |tcc|
|
@@ -66,6 +66,10 @@ module ModelBase
|
|
66
66
|
@raw_columns ||= retrieve_columns
|
67
67
|
end
|
68
68
|
|
69
|
+
def [](name)
|
70
|
+
raw_columns.detect{|c| c.name == name.to_s}
|
71
|
+
end
|
72
|
+
|
69
73
|
def columns
|
70
74
|
@columns ||=
|
71
75
|
title_column ? raw_columns : [ColumnAttribute.new(self, 'id', :integer, title: true)] + raw_columns
|
@@ -136,5 +140,9 @@ module ModelBase
|
|
136
140
|
r << "let(:user){ FactoryGirl.create(:user) }" unless deps.any?{|m| m.full_resource_name == 'user' }
|
137
141
|
r.join("\n" << spacer)
|
138
142
|
end
|
143
|
+
|
144
|
+
def sample_value
|
145
|
+
@sample_value ||= name.split('').map(&:ord).sum
|
146
|
+
end
|
139
147
|
end
|
140
148
|
end
|
data/lib/model_base/version.rb
CHANGED
data/lib/model_base.rb
CHANGED
@@ -27,6 +27,10 @@ module ModelBase
|
|
27
27
|
require 'model_base/generators/factory_girl/model'
|
28
28
|
::ModelBase::Generators::FactoryGirl::Model.enable!
|
29
29
|
end
|
30
|
+
|
31
|
+
def base_time
|
32
|
+
Time.zone.parse(config.base_time)
|
33
|
+
end
|
30
34
|
end
|
31
35
|
end
|
32
36
|
require 'model_base/railtie' if defined?(Rails)
|
@@ -11,8 +11,7 @@ RSpec.describe "<%= ns_table_name %>/edit", <%= type_metatag(:view) %> do
|
|
11
11
|
|
12
12
|
assert_select "form[action=?][method=?]", <%= ns_file_name %>_path(@<%= ns_file_name %>), "post" do
|
13
13
|
<% model.columns_for(:form).each do |attribute| -%>
|
14
|
-
|
15
|
-
assert_select "<%= attribute.input_type -%>#<%= ns_file_name %>_<%= name %>[name=?]", "<%= ns_file_name %>[<%= name %>]"
|
14
|
+
<%= attribute.assert_select_exp %>
|
16
15
|
<% end -%>
|
17
16
|
end
|
18
17
|
end
|
@@ -18,11 +18,11 @@ RSpec.describe "<%= ns_table_name %>/index", <%= type_metatag(:view) %> do
|
|
18
18
|
it "renders a list of <%= ns_table_name %>" do
|
19
19
|
render
|
20
20
|
<% model.columns_for(:spec_index).each do |attribute| -%>
|
21
|
-
<%- if attribute.
|
22
|
-
assert_select "tr>td", :text => <%= attribute.
|
21
|
+
<%- if attribute.single_sample_only? -%>
|
22
|
+
assert_select "tr>td", :text => <%= attribute.sample_string_exp %>, :count => 2
|
23
23
|
<%- else -%>
|
24
|
-
assert_select "tr>td", :text => <%= attribute.
|
25
|
-
assert_select "tr>td", :text => <%= attribute.
|
24
|
+
assert_select "tr>td", :text => <%= attribute.sample_string_exp(1) %>, :count => 1
|
25
|
+
assert_select "tr>td", :text => <%= attribute.sample_string_exp(2) %>, :count => 1
|
26
26
|
<%- end -%>
|
27
27
|
<% end -%>
|
28
28
|
end
|
@@ -12,8 +12,7 @@ RSpec.describe "<%= ns_table_name %>/new", <%= type_metatag(:view) %> do
|
|
12
12
|
|
13
13
|
assert_select "form[action=?][method=?]", <%= index_helper %>_path, "post" do
|
14
14
|
<% model.columns_for(:form).each do |attribute| -%>
|
15
|
-
|
16
|
-
assert_select "<%= attribute.input_type -%>#<%= ns_file_name %>_<%= name %>[name=?]", "<%= ns_file_name %>[<%= name %>]"
|
15
|
+
<%= attribute.assert_select_exp %>
|
17
16
|
<% end -%>
|
18
17
|
end
|
19
18
|
end
|
@@ -9,7 +9,7 @@ RSpec.describe "<%= ns_table_name %>/show", <%= type_metatag(:view) %> do
|
|
9
9
|
it "renders attributes in <p>" do
|
10
10
|
render
|
11
11
|
<% model.columns_for(:spec_show).each do |attribute| -%>
|
12
|
-
expect(rendered).to match(
|
12
|
+
expect(rendered).to match(<%= attribute.sample_value_regexp_exp %>)
|
13
13
|
<% end -%>
|
14
14
|
end
|
15
15
|
end
|
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.2.
|
4
|
+
version: 0.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- akm
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-10-
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -237,6 +237,7 @@ files:
|
|
237
237
|
- example/spec/spec_helper.rb
|
238
238
|
- example/spec/support/controller_macros.rb
|
239
239
|
- example/spec/support/devise.rb
|
240
|
+
- example/spec/support/field_assertions.rb
|
240
241
|
- example/spec/views/issues/edit.html.erb_spec.rb
|
241
242
|
- example/spec/views/issues/index.html.erb_spec.rb
|
242
243
|
- example/spec/views/issues/new.html.erb_spec.rb
|