agilib 0.1.7 → 0.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.DS_Store +0 -0
- data/app/.DS_Store +0 -0
- data/app/views/apitome/docs/_all_examples.html.erb +10 -0
- data/app/views/apitome/docs/_body.html.erb +4 -0
- data/app/views/apitome/docs/_curl.html.erb +4 -0
- data/app/views/apitome/docs/_example.html.erb +24 -0
- data/app/views/apitome/docs/_explanation.html.erb +3 -0
- data/app/views/apitome/docs/_header.html.erb +8 -0
- data/app/views/apitome/docs/_headers.html.erb +4 -0
- data/app/views/apitome/docs/_navigation.html.erb +28 -0
- data/app/views/apitome/docs/_params.html.erb +30 -0
- data/app/views/apitome/docs/_query.html.erb +4 -0
- data/app/views/apitome/docs/_route.html.erb +4 -0
- data/app/views/apitome/docs/_status.html.erb +4 -0
- data/app/views/apitome/docs/index.html.erb +6 -0
- data/app/views/apitome/docs/show.html.erb +2 -0
- data/lib/.DS_Store +0 -0
- data/lib/agilib/composer/templates/recipes/apitome.rb +13 -0
- data/lib/agilib/composer/templates/recipes/push.rb +3 -3
- data/lib/agilib/composer/templates/recipes/rspec.rb +1 -4
- data/lib/agilib/composer/templates/recipes/token.rb +2 -2
- data/lib/agilib/composer/templates/runner.rb +1 -1
- data/lib/agilib/composer/templates/snippets/rspec/tokens_acceptance_spec.rb +23 -7
- data/lib/agilib/composer/templates/snippets/rspec/users_acceptance_spec.rb +49 -43
- data/lib/agilib/version.rb +1 -1
- data/lib/generators/agilib/install/templates/config/initializers/agilib.rb +1 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fc9deaf2be5e4a69fc444229b6ba64f9ecf2aef4
|
4
|
+
data.tar.gz: 2ec8ec06863cbbe8231aa8aa024f6a9e71a8a38c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e34f93cb5b3ce6b062b005abb29a82c95b73461ac8796cf9b3e6e26b383b7035ae66211c52983ea21e7ed5be48aae39813e1854c129b0efb00ed7d0cc403d0b
|
7
|
+
data.tar.gz: ae8a8a786913b14e79471e80f8c82f79f55d3804889a3f831b93afc39f2bf20f42f13be345367ce28343183dcf18b9af0b3b1364810e6a3824cce29fff0de445
|
data/.DS_Store
CHANGED
Binary file
|
data/app/.DS_Store
CHANGED
Binary file
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<% resources.each do |resource| %>
|
2
|
+
<section class="example" id="<%= id_for(resource['name']) %>">
|
3
|
+
<h2 class="resource-name"><%= resource['name'] %></h2>
|
4
|
+
<% resource['examples'].each do |example| %>
|
5
|
+
<article id="<%= id_for(example['link'].gsub('.json', '')) %>">
|
6
|
+
<%= render partial: 'example', locals: { example: set_example(example['link'].gsub('.json', '')) } %>
|
7
|
+
</article>
|
8
|
+
<% end %>
|
9
|
+
</section>
|
10
|
+
<% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h3><%= example['description'] %></h3>
|
2
|
+
|
3
|
+
<%= render partial: 'apitome/docs/explanation', locals: {explaination: example['explanation']} if example['explanation'] %>
|
4
|
+
<%= render partial: 'apitome/docs/params', locals: {params: example['parameters']} if example['parameters'].size > 0 %>
|
5
|
+
|
6
|
+
<% example['requests'].each_with_index do |request, index| %>
|
7
|
+
<div id="<%= "request-#{index}" %>">
|
8
|
+
<h3>Request</h3>
|
9
|
+
<div class="request">
|
10
|
+
<%= render partial: 'apitome/docs/route', locals: {request: request, index: index} %>
|
11
|
+
<%= render partial: 'apitome/docs/headers', locals: {request: request, index: index, headers: request['request_headers']} %>
|
12
|
+
<%= render partial: 'apitome/docs/query', locals: {request: request, index: index} unless request['request_query_parameters'].empty? %>
|
13
|
+
<%= render partial: 'apitome/docs/body', locals: {request: request, index: index, body: request['request_body'], type: request['request_content_type']} if request['request_body'] %>
|
14
|
+
<%= render partial: 'apitome/docs/curl', locals: {request: request, index: index} if request['curl'] %>
|
15
|
+
</div>
|
16
|
+
|
17
|
+
<h3>Response</h3>
|
18
|
+
<div class="response">
|
19
|
+
<%= render partial: 'apitome/docs/status', locals: {request: request, index: index} %>
|
20
|
+
<%= render partial: 'apitome/docs/headers', locals: {request: request, index: index, headers: request['response_headers']} %>
|
21
|
+
<%= render partial: 'apitome/docs/body', locals: {request: request, index: index, body: request['response_body'], type: request['response_content_type']} if request['response_body'] %>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
<% end %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<header class="navbar navbar-fixed-top docs-nav" role="banner">
|
2
|
+
<div class="container">
|
3
|
+
<div class="navbar-header">
|
4
|
+
<h1 class="navbar-brand"><a href="<%= Apitome.configuration.mount_at %>"><%= Apitome.configuration.title %></a></h1>
|
5
|
+
</div>
|
6
|
+
<p class="navbar-text pull-right"><%= link_to '<img src="http://agivis.com.br/assets/logo_agivis-af5e30b64fe8cc778c0b0010b613e88c.jpg" alt="" height="25">'.html_safe, "http://www.agivis.com.br", :target => "_blank" %></hp>
|
7
|
+
</div>
|
8
|
+
</header>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<ul class="nav sidenav">
|
2
|
+
<li>
|
3
|
+
<% if Apitome.configuration.single_page %>
|
4
|
+
<a href="#readme">README</a>
|
5
|
+
<% else %>
|
6
|
+
<a href="<%= Apitome.configuration.mount_at %>">README</a>
|
7
|
+
<% end %>
|
8
|
+
</li>
|
9
|
+
<% resources.each do |resource| %>
|
10
|
+
<li>
|
11
|
+
<% if Apitome.configuration.single_page %>
|
12
|
+
<a href="#<%= id_for(resource['examples'].first['link']) %>"><%= resource['name'] %></a>
|
13
|
+
<ul class="nav">
|
14
|
+
<% resource['examples'].each do |example| %>
|
15
|
+
<li><%= link_to example['description'], "##{id_for(example['link'])}" %></li>
|
16
|
+
<% end %>
|
17
|
+
</ul>
|
18
|
+
<% else %>
|
19
|
+
<li><%= link_to resource['name'], "#{Apitome.configuration.mount_at}/#{resource['examples'].first['link'].gsub(/\.json$/, '')}" %></li>
|
20
|
+
<ul class="nav">
|
21
|
+
<% resource['examples'].each do |example| %>
|
22
|
+
<li><%= link_to example['description'], "#{Apitome.configuration.mount_at}/#{example['link'].gsub(/\.json$/, '')}" %></li>
|
23
|
+
<% end %>
|
24
|
+
</ul>
|
25
|
+
<% end %>
|
26
|
+
</li>
|
27
|
+
<% end %>
|
28
|
+
</ul>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<section class="params">
|
2
|
+
<h3>Parameters</h3>
|
3
|
+
<div class="table-responsive">
|
4
|
+
<table class="table table-bordered">
|
5
|
+
<tr>
|
6
|
+
<% param_headers(params).each do |title| %>
|
7
|
+
<th><%= title %></th>
|
8
|
+
<% end %>
|
9
|
+
</tr>
|
10
|
+
<% params.each do |param| %>
|
11
|
+
<tr>
|
12
|
+
<td class="name">
|
13
|
+
<% if param['scope'] %>
|
14
|
+
<%= "#{param['scope']}[#{param['name']}]" %>
|
15
|
+
<% else %>
|
16
|
+
<%= param['name'] %>
|
17
|
+
<% end %>
|
18
|
+
<% if param['required'] %>
|
19
|
+
<span class="label label-danger required">required</span>
|
20
|
+
<% end %>
|
21
|
+
</td>
|
22
|
+
<td class="description"><%= param['description'] %></td>
|
23
|
+
<% param_extras(params).each do |extra| %>
|
24
|
+
<td class="extra"><%= param[extra] %></td>
|
25
|
+
<% end %>
|
26
|
+
</tr>
|
27
|
+
<% end %>
|
28
|
+
</table>
|
29
|
+
</div>
|
30
|
+
</section>
|
data/lib/.DS_Store
CHANGED
Binary file
|
@@ -0,0 +1,13 @@
|
|
1
|
+
gem 'apitome'
|
2
|
+
|
3
|
+
if defined? app_name
|
4
|
+
name = app_name
|
5
|
+
elsif defined? application_name
|
6
|
+
name = application_name
|
7
|
+
end
|
8
|
+
|
9
|
+
templater.post_bundler do
|
10
|
+
generate 'apitome:install'
|
11
|
+
|
12
|
+
gsub_file 'config/initializers/apitome.rb', 'Apitome Documentation', "#{name.humanize} Api Documentation"
|
13
|
+
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
templater.post_bundler do
|
3
3
|
|
4
|
-
if Agilib::Composer.options[:all] || yes?("\nO projeto deverá ter Notificação por Push? [yes,no]", :green)
|
4
|
+
# if Agilib::Composer.options[:all] || yes?("\nO projeto deverá ter Notificação por Push? [yes,no]", :green)
|
5
5
|
|
6
|
-
do_configure = yes?("\nDeseja configurar agora? [yes,no]", :green)
|
6
|
+
do_configure = yes?("\nDeseja configurar o módulo Push Notification agora? [yes,no]", :green)
|
7
7
|
|
8
8
|
generate 'agilib:push'
|
9
9
|
rake 'db:migrate'
|
@@ -42,5 +42,5 @@ templater.post_bundler do
|
|
42
42
|
|
43
43
|
end
|
44
44
|
|
45
|
-
end
|
45
|
+
# end
|
46
46
|
end
|
@@ -6,7 +6,6 @@ gem "database_cleaner", :group => :test
|
|
6
6
|
gem "email_spec", :group => :test
|
7
7
|
gem 'simplecov', :require => false, :group => :test
|
8
8
|
gem 'rspec_api_documentation', :group => [:development, :test]
|
9
|
-
gem 'raddocs', :github => "smartlogic/raddocs"
|
10
9
|
gem 'json_spec', :group => [:development, :test]
|
11
10
|
|
12
11
|
templater.post_bundler do
|
@@ -136,13 +135,11 @@ SimpleCov.start
|
|
136
135
|
|
137
136
|
say("\nConfigurando RSpec API Documentation...\n", :green)
|
138
137
|
|
139
|
-
inject_into_file "config/routes.rb", "\n\n get \"/docs\" => Raddocs::App, :anchor => false\n\n", :after => "agilib"
|
140
|
-
|
141
138
|
append_file spec_helper_path do
|
142
139
|
<<-TEXT
|
143
140
|
RspecApiDocumentation.configure do |config|
|
144
141
|
config.format = [:json]
|
145
|
-
config.keep_source_order =
|
142
|
+
config.keep_source_order = false
|
146
143
|
end
|
147
144
|
TEXT
|
148
145
|
end
|
@@ -1,10 +1,10 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
templater.post_bundler do
|
3
3
|
|
4
|
-
if Agilib::Composer.options[:all] || yes?("\nO projeto deverá ter Autenticação por Token? [yes,no]\n", :green)
|
4
|
+
# if Agilib::Composer.options[:all] || yes?("\nO projeto deverá ter Autenticação por Token? [yes,no]\n", :green)
|
5
5
|
say("\nConfigurando o módulo Token Authenticatable... \n\n", :green)
|
6
6
|
generate 'agilib:token'
|
7
7
|
rake 'db:migrate'
|
8
|
-
end
|
8
|
+
# end
|
9
9
|
|
10
10
|
end
|
@@ -4,7 +4,7 @@ require File.join(File.expand_path('./../../../../', __FILE__), 'agilib.rb')
|
|
4
4
|
require 'composer'
|
5
5
|
require File.join(File.dirname(__FILE__), 'core_ext.rb')
|
6
6
|
|
7
|
-
%w(default gems responders simple_form bootstrap rspec devise token push cancan better_errors layout finalize).each do |recipe|
|
7
|
+
%w(default gems responders simple_form bootstrap rspec apitome devise token push cancan better_errors layout finalize).each do |recipe|
|
8
8
|
apply templater.recipe(recipe)
|
9
9
|
end
|
10
10
|
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'rspec_api_documentation/dsl'
|
3
5
|
|
4
|
-
resource "Tokens" do
|
6
|
+
resource "1 - Tokens de Autenticação" do
|
5
7
|
header "Accept", "application/json"
|
6
8
|
header "Content-Type", "application/json"
|
7
9
|
|
@@ -11,15 +13,29 @@ resource "Tokens" do
|
|
11
13
|
# POST /tokens
|
12
14
|
post "/tokens" do
|
13
15
|
|
14
|
-
parameter :email, "
|
15
|
-
parameter :password, "
|
16
|
+
parameter :email, "Email do Usuário", :required => true
|
17
|
+
parameter :password, "Senha do Usuário", :required => true
|
16
18
|
|
17
19
|
let(:email) { user.email }
|
18
20
|
let(:password) { user.password }
|
19
21
|
|
20
22
|
let(:raw_post) { params.to_json }
|
21
23
|
|
22
|
-
example_request "
|
24
|
+
example_request "1.1 Solicitar Token de Autenticação" do
|
25
|
+
expect(status).to eq(200)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# GET /tokens
|
30
|
+
get "/tokens/check" do
|
31
|
+
|
32
|
+
parameter :user_token, "Token de Autenticação", :required => true
|
33
|
+
|
34
|
+
let(:user_token) { user.authentication_token }
|
35
|
+
|
36
|
+
let(:raw_post) { params.to_json }
|
37
|
+
|
38
|
+
example_request "1.2 Checar validade do Token" do
|
23
39
|
expect(status).to eq(200)
|
24
40
|
end
|
25
41
|
end
|
@@ -27,13 +43,13 @@ resource "Tokens" do
|
|
27
43
|
# DELETE /tokens
|
28
44
|
delete "/tokens" do
|
29
45
|
|
30
|
-
parameter :
|
46
|
+
parameter :user_token, "Token de Autenticação", :required => true
|
31
47
|
|
32
|
-
let(:
|
48
|
+
let(:user_token) { user.authentication_token }
|
33
49
|
|
34
50
|
let(:raw_post) { params.to_json }
|
35
51
|
|
36
|
-
example_request "
|
52
|
+
example_request "1.3 Remover Token de Autenticação" do
|
37
53
|
expect(status).to eq(200)
|
38
54
|
end
|
39
55
|
end
|
@@ -1,23 +1,23 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
require 'rspec_api_documentation/dsl'
|
3
5
|
|
4
|
-
resource "
|
6
|
+
resource "2 - Usuários" do
|
5
7
|
header "Accept", "application/json"
|
6
8
|
header "Content-Type", "application/json"
|
7
9
|
|
8
10
|
let(:current_user) { create(:user) }
|
9
11
|
|
10
|
-
let(:
|
11
|
-
let(:
|
12
|
+
let(:user_token) { current_user.authentication_token if current_user }
|
13
|
+
let(:user_email) { current_user.email if current_user }
|
12
14
|
|
13
15
|
# POST /users
|
14
16
|
post "/users" do
|
15
|
-
parameter :name, "
|
16
|
-
parameter :email, "
|
17
|
-
parameter :password, "
|
18
|
-
parameter :password_confirmation, "
|
19
|
-
parameter :auth_token, "User token", :required => true
|
20
|
-
parameter :auth_email, "User email", :required => true
|
17
|
+
parameter :name, "Nome do usuário", :required => true, :scope => "user"
|
18
|
+
parameter :email, "E-mail do usuário", :required => true, :scope => "user"
|
19
|
+
parameter :password, "Senha do usuário", :required => true, :scope => "user"
|
20
|
+
parameter :password_confirmation, "Confirmação da Senha", :required => true, :scope => "user"
|
21
21
|
|
22
22
|
let(:name) { "User Test" }
|
23
23
|
let(:email) { "usertest@email.com" }
|
@@ -25,61 +25,67 @@ resource "Users" do
|
|
25
25
|
let(:password_confirmation) { "password1234" }
|
26
26
|
|
27
27
|
let(:raw_post) do
|
28
|
-
params.to_json
|
28
|
+
# puts params.to_json
|
29
|
+
params.to_json
|
29
30
|
end
|
30
31
|
|
31
|
-
example_request "
|
32
|
+
example_request "2.1 Criação de um usuário" do
|
33
|
+
# puts response_body
|
32
34
|
expect(status).to eq(201)
|
33
35
|
|
34
36
|
current_user = JSON.parse(response_body)
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
38
|
-
# GET /users/:id
|
39
|
-
get "/users/:id" do
|
40
|
-
parameter :auth_token, "User token", :required => true
|
41
|
-
parameter :auth_email, "User email", :required => true
|
42
|
-
|
43
|
-
let(:id) { current_user.id }
|
44
|
-
|
45
|
-
let(:raw_post) { params.to_json }
|
46
|
-
|
47
|
-
example_request "Getting a specific user" do
|
48
|
-
status.should == 200
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
40
|
# PUT /users/:id
|
53
41
|
put "/users/:id" do
|
54
|
-
parameter :name, "
|
55
|
-
parameter :email, "
|
56
|
-
parameter :password, "
|
57
|
-
parameter :password_confirmation, "
|
58
|
-
parameter :
|
59
|
-
parameter :
|
42
|
+
parameter :name, "Nome do usuário", :required => false, :scope => "user"
|
43
|
+
parameter :email, "E-mail do usuário", :required => false, :scope => "user"
|
44
|
+
parameter :password, "Senha do usuário", :required => false, :scope => "user"
|
45
|
+
parameter :password_confirmation, "Confirmação da Senha", :required => true, :scope => "user"
|
46
|
+
parameter :user_token, "Token de Autenticação", :required => true
|
47
|
+
parameter :user_email, "Email de Autenticação", :required => true
|
60
48
|
|
61
49
|
let(:id) { current_user.id }
|
62
50
|
let(:name) { "Updated Name" }
|
63
51
|
|
64
52
|
let(:raw_post) { params.to_json }
|
65
53
|
|
66
|
-
example_request "
|
54
|
+
example_request "2.2 Alteração do Perfil" do
|
55
|
+
puts response_body
|
67
56
|
expect(status).to eq(204)
|
57
|
+
|
68
58
|
end
|
69
59
|
end
|
70
60
|
|
71
|
-
#
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
parameter :auth_email, "User email", :required => true
|
61
|
+
# # GET /users/:id
|
62
|
+
# get "/users/:id" do
|
63
|
+
# parameter :user_token, "User token", :required => true
|
64
|
+
# parameter :user_email, "User email", :required => true
|
76
65
|
|
77
|
-
|
78
|
-
let(:id) { current_user.id }
|
66
|
+
# let(:id) { current_user.id }
|
79
67
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
68
|
+
# example_request "Getting a specific user" do
|
69
|
+
|
70
|
+
# puts response_body
|
71
|
+
|
72
|
+
# response_body.should == current_user.to_json
|
73
|
+
# status.should == 200
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
|
77
|
+
# # DELETE /users/:id
|
78
|
+
# delete "/users/:id" do
|
79
|
+
# parameter :id, "Id of user", :required => true, :scope => :user
|
80
|
+
# parameter :user_token, "User token", :required => true
|
81
|
+
# parameter :user_email, "User email", :required => true
|
82
|
+
|
83
|
+
# let(:raw_post) { params.to_json }
|
84
|
+
# let(:id) { user.id }
|
85
|
+
|
86
|
+
# example_request "Deleting an user" do
|
87
|
+
# status.should == 204
|
88
|
+
# end
|
89
|
+
# end
|
84
90
|
|
85
91
|
end
|
data/lib/agilib/version.rb
CHANGED
@@ -42,7 +42,7 @@ Agilib.setup do |config|
|
|
42
42
|
#
|
43
43
|
# Default: {:user_token => :user_token, :user_email => :user_email}
|
44
44
|
#
|
45
|
-
options.auth_params = {:user_token => :
|
45
|
+
options.auth_params = {:user_token => :user_token, :user_email => :user_email}
|
46
46
|
|
47
47
|
# ===============================================================================
|
48
48
|
# Define quais parâmetros serão passados para solicitar o token
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: agilib
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marcos Junior
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01-
|
11
|
+
date: 2014-01-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: executable-hooks
|
@@ -184,6 +184,20 @@ files:
|
|
184
184
|
- app/views/agilib/devices/show.json.jbuilder
|
185
185
|
- app/views/agilib/welcome/index.html
|
186
186
|
- app/views/agilib/welcome/index.html.erb
|
187
|
+
- app/views/apitome/docs/_all_examples.html.erb
|
188
|
+
- app/views/apitome/docs/_body.html.erb
|
189
|
+
- app/views/apitome/docs/_curl.html.erb
|
190
|
+
- app/views/apitome/docs/_example.html.erb
|
191
|
+
- app/views/apitome/docs/_explanation.html.erb
|
192
|
+
- app/views/apitome/docs/_header.html.erb
|
193
|
+
- app/views/apitome/docs/_headers.html.erb
|
194
|
+
- app/views/apitome/docs/_navigation.html.erb
|
195
|
+
- app/views/apitome/docs/_params.html.erb
|
196
|
+
- app/views/apitome/docs/_query.html.erb
|
197
|
+
- app/views/apitome/docs/_route.html.erb
|
198
|
+
- app/views/apitome/docs/_status.html.erb
|
199
|
+
- app/views/apitome/docs/index.html.erb
|
200
|
+
- app/views/apitome/docs/show.html.erb
|
187
201
|
- bin/agilib
|
188
202
|
- lib/.DS_Store
|
189
203
|
- lib/agilib.rb
|
@@ -192,6 +206,7 @@ files:
|
|
192
206
|
- lib/agilib/composer/composer.rb
|
193
207
|
- lib/agilib/composer/templater.rb
|
194
208
|
- lib/agilib/composer/templates/core_ext.rb
|
209
|
+
- lib/agilib/composer/templates/recipes/apitome.rb
|
195
210
|
- lib/agilib/composer/templates/recipes/better_errors.rb
|
196
211
|
- lib/agilib/composer/templates/recipes/bootstrap.rb
|
197
212
|
- lib/agilib/composer/templates/recipes/cancan.rb
|