model_base_generators 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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