model_base_generators 0.1.0

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.
@@ -0,0 +1,5 @@
1
+ <%%- model_class = <%= model.name.sub(/\ATemplate::/, '::Template::') %> -%>
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 '<%= model.full_resource_name.pluralize %>/form', <%= model.full_resource_name %>: @<%= model.full_resource_name %> %>
@@ -0,0 +1,46 @@
1
+ <%%- model_class = <%= model.name.sub(/\ATemplate::/, '::Template::') %> -%>
2
+ <div class="page-header">
3
+ <h1><%%=t '.title', :default => model_class.model_name.human.pluralize.titleize %></h1>
4
+ </div>
5
+ <table class="table table-striped">
6
+ <thead>
7
+ <tr>
8
+ <%- model.display_columns.each do |column| -%>
9
+ <th><%%= model_class.human_attribute_name(:<%= column.name %>) %></th>
10
+ <%- end -%>
11
+ <th><%%= model_class.human_attribute_name(:created_at) %></th>
12
+ <th><%%=t '.actions', :default => t("helpers.actions") %></th>
13
+ </tr>
14
+ </thead>
15
+ <tbody>
16
+ <%% @<%= model.plural_full_resource_name %>.each do |<%= model.full_resource_name %>| %>
17
+ <tr>
18
+ <%- model.columns.each do |column| -%>
19
+ <%- if column.linkable? -%>
20
+ <td><%%= link_to <%= model.full_resource_name %>.<%= column.name %>, <%= singular_controller_routing_path %>_path(<%= model.full_resource_name %>) %></td>
21
+ <%- elsif tcol = column.ref_model.try(:title_column) -%>
22
+ <td><%%= <%= model.full_resource_name %>.<%= column.reference.name %>.<%= tcol.name %> %></td>
23
+ <%- elsif column.enumerized? -%>
24
+ <td><%%= <%= model.full_resource_name %>.<%= column.name %>_text %></td>
25
+ <%- else -%>
26
+ <td><%%= <%= model.full_resource_name %>.<%= column.name %> %></td>
27
+ <%- end -%>
28
+ <%- end -%>
29
+ <td><%%=l <%= model.full_resource_name %>.created_at %></td>
30
+ <td>
31
+ <%%= link_to t('.edit', :default => t("helpers.links.edit")),
32
+ edit_<%= singular_controller_routing_path %>_path(<%= model.full_resource_name %>), :class => 'btn btn-default btn-xs' %>
33
+ <%%= link_to t('.destroy', :default => t("helpers.links.destroy")),
34
+ <%= singular_controller_routing_path %>_path(<%= model.full_resource_name %>),
35
+ :method => :delete,
36
+ :data => { :confirm => t('.confirm', :default => t("helpers.links.confirm", :default => 'Are you sure?')) },
37
+ :class => 'btn btn-xs btn-danger' %>
38
+ </td>
39
+ </tr>
40
+ <%% end %>
41
+ </tbody>
42
+ </table>
43
+
44
+ <%%= link_to t('.new', :default => t("helpers.links.new")),
45
+ new_<%= singular_controller_routing_path %>_path,
46
+ :class => 'btn btn-primary' %>
@@ -0,0 +1,5 @@
1
+ <%%- model_class = <%= model.name.sub(/\ATemplate::/, '::Template::') %> -%>
2
+ <div class="page-header">
3
+ <h1><%%=t '.title', :default => [:'helpers.titles.new', 'New %{model}'], :model => model_class.model_name.human.titleize %></h1>
4
+ </div>
5
+ <%%= render '<%= model.full_resource_name.pluralize %>/form', <%= model.full_resource_name %>: @<%= model.full_resource_name %> %>
@@ -0,0 +1,27 @@
1
+ <%%- model_class = <%= model.name.sub(/\ATemplate::/, '::Template::') %> -%>
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
+ <%- model.columns.each do |column| -%>
8
+ <dt><strong><%%= model_class.human_attribute_name(:<%= column.name %>) %>:</strong></dt>
9
+ <%- if tcol = column.ref_model.try(:title_column) -%>
10
+ <dd><%%= @<%= model.full_resource_name %>.<%= column.reference.name %>.<%= tcol.name %> %></dd>
11
+ <%- elsif column.enumerized? -%>
12
+ <dd><%%= @<%= model.full_resource_name %>.<%= column.name %>_text %></dd>
13
+ <%- else -%>
14
+ <dd><%%= @<%= model.full_resource_name %>.<%= column.name %> %></dd>
15
+ <%- end -%>
16
+ <%- end -%>
17
+ </dl>
18
+
19
+ <%%= link_to t('.back', :default => t("helpers.links.back")),
20
+ <%= controller_routing_path %>_path, :class => 'btn btn-default' %>
21
+ <%%= link_to t('.edit', :default => t("helpers.links.edit")),
22
+ edit_<%= singular_controller_routing_path %>_path(@<%= model.full_resource_name %>), :class => 'btn btn-default' %>
23
+ <%%= link_to t('.destroy', :default => t("helpers.links.destroy")),
24
+ <%= singular_controller_routing_path %>_path(@<%= model.full_resource_name %>),
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,16 @@
1
+ require 'rails_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the <%= class_name %>Helper. For example:
5
+ #
6
+ # describe <%= class_name %>Helper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # expect(helper.concat_strings("this","that")).to eq("this that")
10
+ # end
11
+ # end
12
+ # end
13
+ <% module_namespacing do -%>
14
+ RSpec.describe <%= class_name %>Helper, <%= type_metatag(:helper) %> do
15
+ end
16
+ <% end -%>
@@ -0,0 +1,13 @@
1
+ require 'rails_helper'
2
+
3
+ RSpec.describe "<%= class_name.pluralize %>", <%= type_metatag(:request) %> do
4
+ let(:user) { FactoryGirl.create(:user) }
5
+ before{ login_as(user, :scope => :user) }
6
+
7
+ describe "GET /<%= table_name %>" do
8
+ it "works! (now write some real specs)" do
9
+ get <%= index_helper %>_path
10
+ expect(response).to have_http_status(200)
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ require 'rails_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ RSpec.describe <%= class_name %>, <%= type_metatag(:model) %> do
5
+ end
6
+ <% end -%>
@@ -0,0 +1,215 @@
1
+ <%-
2
+ # ns_file_name incldues namespace.
3
+ # file_name doesn't include namespace.
4
+ file_name = ns_parts.blank? ? file_name || name : ns_parts.last.singularize.underscore
5
+ -%>
6
+ require 'rails_helper'
7
+
8
+ # This spec was generated by rspec-rails when you ran the scaffold generator.
9
+ # It demonstrates how one might use RSpec to specify the controller code that
10
+ # was generated by Rails when you ran the scaffold generator.
11
+ #
12
+ # It assumes that the implementation code is generated by the rails scaffold
13
+ # generator. If you are using any extension libraries to generate different
14
+ # controller code, this generated spec may or may not pass.
15
+ #
16
+ # It only uses APIs available in rails and/or rspec-rails. There are a number
17
+ # of tools you can use to make these specs even more expressive, but we're
18
+ # sticking to rails and rspec-rails APIs to keep things simple and stable.
19
+ #
20
+ # Compared to earlier versions of this generator, there is very limited use of
21
+ # stubs and message expectations in this spec. Stubs are only used when there
22
+ # is no simpler way to get a handle on the object needed for the example.
23
+ # Message expectations are only used when there is no simpler way to specify
24
+ # that an instance is receiving a specific message.
25
+
26
+ <% module_namespacing do -%>
27
+ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:controller) %> do
28
+
29
+ <%-
30
+ required_ref_attrs = model.columns.select{|attr| attr.reference && attr.required? }
31
+ required_data_attrs = model.columns.select{|attr| !attr.reference && attr.required? }
32
+ -%>
33
+ <%- required_ref_attrs.each do |attr| -%>
34
+ let(:<%= attr.name %>){ FactoryGirl.create(:<%= attr.ref_model.full_resource_name %>) }
35
+ <%- end -%>
36
+ <%- unless required_ref_attrs.any?{|attr| attr.ref_model.name == 'User' }-%>
37
+ let(:user){ FactoryGirl.create(:user) }
38
+ <%- end -%>
39
+ before{ devise_user_login(user) }
40
+
41
+ <%-
42
+ unless required_ref_attrs.empty?
43
+ extra_attributes_to_merge = ".merge(%s)" % required_ref_attrs.map{|attr| "#{attr.name}_id: #{attr.name}.id"}.join(', ')
44
+ extra_attributes_for_factory = ", %s" % required_ref_attrs.map{|attr| "#{attr.name}: #{attr.name}"}.join(', ')
45
+ end
46
+ -%>
47
+ let(:<%= file_name %>){ FactoryGirl.create(:<%= file_name %><%= extra_attributes_for_factory %>) }
48
+
49
+ # This should return the minimal set of attributes required to create a valid
50
+ # <%= class_name %>. As you add validations to <%= class_name %>, be sure to
51
+ # adjust the attributes here as well.
52
+ let(:valid_parameters) {
53
+ FactoryGirl.attributes_for(:<%= file_name %>)<%= extra_attributes_to_merge %>
54
+ }
55
+
56
+ let(:invalid_parameters) {
57
+ <%- if !required_data_attrs.empty? -%>
58
+ valid_parameters.symbolize_keys.merge(<%= required_data_attrs.first.name %>: '')
59
+ <%- elsif !required_ref_attrs.empty? -%>
60
+ valid_parameters.symbolize_keys.merge(<%= required_ref_attrs.first.name %>_id: '')
61
+ <%- else -%>
62
+ skip("Add a hash of attributes invalid for your model")
63
+ <%- end -%>
64
+ }
65
+
66
+ # This should return the minimal set of values that should be in the session
67
+ # in order to pass any filters (e.g. authentication) defined in
68
+ # <%= controller_class_name %>Controller. Be sure to keep this updated too.
69
+ let(:valid_session) { {} }
70
+
71
+ <% unless options[:singleton] -%>
72
+ describe "GET #index" do
73
+ it "assigns all <%= table_name.pluralize %> as @<%= table_name.pluralize %>" do
74
+ get :index, params: {}, session: valid_session
75
+ expect(assigns(:<%= table_name %>)).to eq([<%= file_name %>])
76
+ end
77
+ end
78
+
79
+ <% end -%>
80
+ describe "GET #show" do
81
+ it "assigns the requested <%= file_name %> as @<%= file_name %>" do
82
+ <%= file_name %> # To create <%= file_name %>
83
+ get :show, params: {:id => <%= file_name %>.to_param}, session: valid_session
84
+ expect(assigns(:<%= file_name %>)).to eq(<%= file_name %>)
85
+ end
86
+ end
87
+
88
+ describe "GET #new" do
89
+ it "assigns a new <%= file_name %> as @<%= file_name %>" do
90
+ get :new, params: {}, session: valid_session
91
+ expect(assigns(:<%= file_name %>)).to be_a_new(<%= class_name %>)
92
+ end
93
+ end
94
+
95
+ describe "GET #edit" do
96
+ it "assigns the requested <%= file_name %> as @<%= file_name %>" do
97
+ <%= file_name %> # To create <%= file_name %>
98
+ get :edit, params: {:id => <%= file_name %>.to_param}, session: valid_session
99
+ expect(assigns(:<%= file_name %>)).to eq(<%= file_name %>)
100
+ end
101
+ end
102
+
103
+ describe "POST #create" do
104
+ context "with valid params" do
105
+ it "creates a new <%= class_name %>" do
106
+ expect {
107
+ post :create, params: {:<%= file_name %> => valid_parameters}, session: valid_session
108
+ }.to change(<%= class_name %>, :count).by(1)
109
+ end
110
+
111
+ it "assigns a newly created <%= file_name %> as @<%= file_name %>" do
112
+ post :create, params: {:<%= file_name %> => valid_parameters}, session: valid_session
113
+ expect(assigns(:<%= file_name %>)).to be_a(<%= class_name %>)
114
+ expect(assigns(:<%= file_name %>)).to be_persisted
115
+ end
116
+
117
+ it "redirects to the created <%= file_name %>" do
118
+ post :create, params: {:<%= file_name %> => valid_parameters}, session: valid_session
119
+ expect(response).to redirect_to(<%= class_name %>.last)
120
+ end
121
+ end
122
+
123
+ context "with invalid params" do
124
+ it "assigns a newly created but unsaved <%= file_name %> as @<%= file_name %>" do
125
+ post :create, params: {:<%= file_name %> => invalid_parameters}, session: valid_session
126
+ expect(assigns(:<%= file_name %>)).to be_a_new(<%= class_name %>)
127
+ end
128
+
129
+ it "re-renders the 'new' template" do
130
+ post :create, params: {:<%= file_name %> => invalid_parameters}, session: valid_session
131
+ expect(response).to render_template("new")
132
+ end
133
+ end
134
+ end
135
+
136
+ describe "PUT #update" do
137
+ context "with valid params" do
138
+ <%- if !required_data_attrs.empty? -%>
139
+ <%- required_data_attrs.each do |required_data_attr| -%>
140
+ let(:new_<%= required_data_attr.name %>){ valid_parameters[:<%= required_data_attr.name %>].succ }
141
+ <%- end -%>
142
+ <%- elsif !required_ref_attrs.empty? -%>
143
+ let(:another_<%= required_ref_attrs.last.name %>){ FactoryGirl.create(:<%= required_ref_attrs.last.name %><%= extra_attributes_for_factory %>) }
144
+ <%- end -%>
145
+
146
+ let(:new_parameters) {
147
+ <%- if !required_data_attrs.empty? -%>
148
+ valid_parameters.merge(<%= required_data_attrs.map{|attr| "#{attr.name}: new_#{attr.name}"}.join(', ') %>)
149
+ <%- elsif !required_ref_attrs.empty? -%>
150
+ valid_parameters.merge(<%= required_ref_attrs.last.name %>_id: another_<%= required_ref_attrs.last.name %>.id)
151
+ <%- else required_data_attrs.empty? -%>
152
+ skip("Add a hash of attributes valid for your model")
153
+ <%- end -%>
154
+ }
155
+
156
+ it "updates the requested <%= file_name %>" do
157
+ <%= file_name %> # To create <%= file_name %>
158
+ put :update, params: {:id => <%= file_name %>.to_param, :<%= file_name %> => new_parameters}, session: valid_session
159
+ <%= file_name %>.reload
160
+ <%- if !required_data_attrs.empty? -%>
161
+ <%- required_data_attrs.each do |attr| -%>
162
+ expect(<%= file_name %>.<%= attr.name %>).to eq new_<%= attr.name %>
163
+ <%- end -%>
164
+ <%- elsif !required_ref_attrs.empty? -%>
165
+ expect(<%= file_name %>.<%= required_ref_attrs.last.name %>_id).to eq another_<%= required_ref_attrs.last.name %>.id
166
+ <%- else -%>
167
+ skip("Add assertions for updated state")
168
+ <%- end -%>
169
+ end
170
+
171
+ it "assigns the requested <%= file_name %> as @<%= file_name %>" do
172
+ <%= file_name %> # To create <%= file_name %>
173
+ put :update, params: {:id => <%= file_name %>.to_param, :<%= file_name %> => valid_parameters}, session: valid_session
174
+ expect(assigns(:<%= file_name %>)).to eq(<%= file_name %>)
175
+ end
176
+
177
+ it "redirects to the <%= file_name %>" do
178
+ <%= file_name %> # To create <%= file_name %>
179
+ put :update, params: {:id => <%= file_name %>.to_param, :<%= file_name %> => valid_parameters}, session: valid_session
180
+ expect(response).to redirect_to(<%= file_name %>)
181
+ end
182
+ end
183
+
184
+ context "with invalid params" do
185
+ it "assigns the <%= file_name %> as @<%= file_name %>" do
186
+ <%= file_name %> # To create <%= file_name %>
187
+ put :update, params: {:id => <%= file_name %>.to_param, :<%= file_name %> => invalid_parameters}, session: valid_session
188
+ expect(assigns(:<%= file_name %>)).to eq(<%= file_name %>)
189
+ end
190
+
191
+ it "re-renders the 'edit' template" do
192
+ <%= file_name %> # To create <%= file_name %>
193
+ put :update, params: {:id => <%= file_name %>.to_param, :<%= file_name %> => invalid_parameters}, session: valid_session
194
+ expect(response).to render_template("edit")
195
+ end
196
+ end
197
+ end
198
+
199
+ describe "DELETE #destroy" do
200
+ it "destroys the requested <%= file_name %>" do
201
+ <%= file_name %> # To create <%= file_name %>
202
+ expect {
203
+ delete :destroy, params: {:id => <%= file_name %>.to_param}, session: valid_session
204
+ }.to change(<%= class_name %>, :count).by(-1)
205
+ end
206
+
207
+ it "redirects to the <%= table_name %> list" do
208
+ <%= file_name %> # To create <%= file_name %>
209
+ delete :destroy, params: {:id => <%= file_name %>.to_param}, session: valid_session
210
+ expect(response).to redirect_to(<%= index_helper %>_url)
211
+ end
212
+ end
213
+
214
+ end
215
+ <% end -%>
@@ -0,0 +1,19 @@
1
+ require 'rails_helper'
2
+
3
+ <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
+ RSpec.describe "<%= ns_table_name %>/edit", <%= type_metatag(:view) %> do
5
+ before(:each) do
6
+ @<%= ns_file_name %> = assign(:<%= ns_file_name %>, FactoryGirl.create(:<%= ns_file_name %>))
7
+ end
8
+
9
+ it "renders the edit <%= ns_file_name %> form" do
10
+ render
11
+
12
+ assert_select "form[action=?][method=?]", <%= ns_file_name %>_path(@<%= ns_file_name %>), "post" do
13
+ <% for attribute in output_attributes -%>
14
+ <%- name = attribute.respond_to?(:column_name) ? attribute.column_name : attribute.name %>
15
+ assert_select "<%= attribute.input_type -%>#<%= ns_file_name %>_<%= name %>[name=?]", "<%= ns_file_name %>[<%= name %>]"
16
+ <% end -%>
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'rails_helper'
2
+
3
+ <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
+ RSpec.describe "<%= ns_table_name %>/index", <%= type_metatag(:view) %> do
5
+ before(:each) do
6
+ assign(:<%= table_name %>, [
7
+ <% [1,2].each_with_index do |id, model_index| -%>
8
+ FactoryGirl.create(:<%= ns_file_name %>),
9
+ <% end -%>
10
+ ])
11
+ end
12
+
13
+ it "renders a list of <%= ns_table_name %>" do
14
+ render
15
+ <% for attribute in output_attributes -%>
16
+ assert_select "tr>td", :text => <%= value_for(attribute) %>.to_s, :count => 2
17
+ <% end -%>
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ require 'rails_helper'
2
+
3
+ <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
+ RSpec.describe "<%= ns_table_name %>/new", <%= type_metatag(:view) %> do
5
+ before(:each) do
6
+ assign(:<%= ns_file_name %>, FactoryGirl.build(:<%= ns_file_name %>))
7
+ end
8
+
9
+ it "renders new <%= ns_file_name %> form" do
10
+ render
11
+
12
+ assert_select "form[action=?][method=?]", <%= index_helper %>_path, "post" do
13
+ <% for attribute in output_attributes -%>
14
+ <%- name = attribute.respond_to?(:column_name) ? attribute.column_name : attribute.name %>
15
+ assert_select "<%= attribute.input_type -%>#<%= ns_file_name %>_<%= name %>[name=?]", "<%= ns_file_name %>[<%= name %>]"
16
+ <% end -%>
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,45 @@
1
+ require "rails_helper"
2
+
3
+ <% module_namespacing do -%>
4
+ RSpec.describe <%= controller_class_name %>Controller, <%= type_metatag(:routing) %> do
5
+ describe "routing" do
6
+
7
+ <% unless options[:singleton] -%>
8
+ it "routes to #index" do
9
+ expect(:get => "/<%= ns_table_name %>").to route_to("<%= ns_table_name %>#index")
10
+ end
11
+
12
+ <% end -%>
13
+ it "routes to #new" do
14
+ expect(:get => "/<%= ns_table_name %>/new").to route_to("<%= ns_table_name %>#new")
15
+ end
16
+
17
+ it "routes to #show" do
18
+ expect(:get => "/<%= ns_table_name %>/1").to route_to("<%= ns_table_name %>#show", :id => "1")
19
+ end
20
+
21
+ it "routes to #edit" do
22
+ expect(:get => "/<%= ns_table_name %>/1/edit").to route_to("<%= ns_table_name %>#edit", :id => "1")
23
+ end
24
+
25
+ it "routes to #create" do
26
+ expect(:post => "/<%= ns_table_name %>").to route_to("<%= ns_table_name %>#create")
27
+ end
28
+
29
+ it "routes to #update via PUT" do
30
+ expect(:put => "/<%= ns_table_name %>/1").to route_to("<%= ns_table_name %>#update", :id => "1")
31
+ end
32
+
33
+ <% if Rails::VERSION::STRING > '4' -%>
34
+ it "routes to #update via PATCH" do
35
+ expect(:patch => "/<%= ns_table_name %>/1").to route_to("<%= ns_table_name %>#update", :id => "1")
36
+ end
37
+
38
+ <% end -%>
39
+ it "routes to #destroy" do
40
+ expect(:delete => "/<%= ns_table_name %>/1").to route_to("<%= ns_table_name %>#destroy", :id => "1")
41
+ end
42
+
43
+ end
44
+ end
45
+ <% end -%>
@@ -0,0 +1,15 @@
1
+ require 'rails_helper'
2
+
3
+ <% output_attributes = attributes.reject{|attribute| [:datetime, :timestamp, :time, :date].index(attribute.type) } -%>
4
+ RSpec.describe "<%= ns_table_name %>/show", <%= type_metatag(:view) %> do
5
+ before(:each) do
6
+ @<%= ns_file_name %> = assign(:<%= ns_file_name %>, FactoryGirl.create(:<%= ns_file_name %>))
7
+ end
8
+
9
+ it "renders attributes in <p>" do
10
+ render
11
+ <% for attribute in output_attributes -%>
12
+ expect(rendered).to match(/<%= raw_value_for(attribute) %>/)
13
+ <% end -%>
14
+ end
15
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'model_base/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "model_base_generators"
8
+ spec.version = ModelBase::VERSION
9
+ spec.authors = ["akm"]
10
+ spec.email = ["akm2000@gmail.com"]
11
+
12
+ spec.summary = %q{Provide generators for models with assocations.}
13
+ spec.description = %q{Provide generators for models with assocations.}
14
+ spec.homepage = "https://github.com/akm/model_base_generators"
15
+ spec.license = "MIT"
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
+ f.match(%r{^(test|spec|features)/})
19
+ end
20
+ spec.bindir = "exe"
21
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_runtime_dependency "rails"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.13"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "rspec", "~> 3.0"
29
+ spec.add_development_dependency "rspec-its"
30
+ spec.add_development_dependency 'rspec-rails'
31
+ spec.add_development_dependency 'generator_spec'
32
+ end