ocean-rails 5.7.2 → 5.7.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/generators/ocean_scaffold/templates/controller_specs/create_spec.rb +1 -0
- data/lib/generators/ocean_scaffold/templates/controller_specs/delete_spec.rb +1 -0
- data/lib/generators/ocean_scaffold/templates/controller_specs/index_spec.rb +1 -0
- data/lib/generators/ocean_scaffold/templates/controller_specs/show_spec.rb +1 -0
- data/lib/generators/ocean_scaffold/templates/controller_specs/update_spec.rb +1 -0
- data/lib/generators/ocean_scaffold/templates/view_specs/_resource_spec.rb +1 -0
- data/lib/generators/ocean_scaffold_dynamo/USAGE +8 -0
- data/lib/generators/ocean_scaffold_dynamo/ocean_scaffold_dynamo_generator.rb +96 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/controller.rb +83 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/controller_specs/create_spec.rb +72 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/controller_specs/delete_spec.rb +48 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/controller_specs/index_spec.rb +52 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/controller_specs/show_spec.rb +44 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/controller_specs/update_spec.rb +86 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/model_spec.rb +39 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/resource_routing_spec.rb +27 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/view_specs/_resource_spec.rb +56 -0
- data/lib/generators/ocean_scaffold_dynamo/templates/views/_resource.json.jbuilder +11 -0
- data/lib/ocean/version.rb +1 -1
- metadata +14 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b77eee37e70f96b4d1f17874b279db7e1d87a73d
|
4
|
+
data.tar.gz: bdbbfac3f27b19de30d717c5c1aae93c3461c061
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8b074a8b9c4febf03d0a8e24277ce89f6d6f371e05ecd86c40e2d0c87fd89de1969ef2461333e08b40ce161b1271ba61099eb6c405ac089bda82a9f59a2fdd6b
|
7
|
+
data.tar.gz: 9dd6e17eb74d8ec7faa99956e841889efaff0b737b04c852f02743db8b3b762a4186a77f725aa24ca2c803c8a9cd80a3d607dfca66de1eac98a36a65ae492318
|
@@ -3,6 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe "<%= plural_name %>/_<%= singular_name %>" do
|
4
4
|
|
5
5
|
before :each do # Must be :each (:all causes all tests to fail)
|
6
|
+
<%= class_name %>.delete_all
|
6
7
|
render partial: "<%= plural_name %>/<%= singular_name %>", locals: {<%= singular_name %>: create(:<%= singular_name %>)}
|
7
8
|
@json = JSON.parse(rendered)
|
8
9
|
@u = @json['<%= singular_name %>']
|
@@ -0,0 +1,96 @@
|
|
1
|
+
class OceanScaffoldDynamoGenerator < Rails::Generators::NamedBase #:nodoc: all
|
2
|
+
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
|
5
|
+
def convert_to_dynamodb
|
6
|
+
gsub_file "#{Rails.root}/app/models/#{singular_name}.rb",
|
7
|
+
"class #{class_name} < ActiveRecord::Base",
|
8
|
+
"class #{class_name} < OceanDynamo::Table"
|
9
|
+
end
|
10
|
+
|
11
|
+
def extend_model
|
12
|
+
inject_into_class "#{Rails.root}/app/models/#{singular_name}.rb",
|
13
|
+
class_name.constantize,
|
14
|
+
"
|
15
|
+
|
16
|
+
ocean_resource_model index: false,
|
17
|
+
search: false
|
18
|
+
|
19
|
+
dynamo_schema(:id, table_name_suffix: Api.basename_suffix,
|
20
|
+
create: Rails.env != 'production') do
|
21
|
+
# Input attributes
|
22
|
+
attribute :name
|
23
|
+
attribute :description
|
24
|
+
attribute :created_by
|
25
|
+
attribute :updated_by
|
26
|
+
end
|
27
|
+
|
28
|
+
# Relations
|
29
|
+
|
30
|
+
|
31
|
+
# Attributes
|
32
|
+
|
33
|
+
|
34
|
+
# Validations
|
35
|
+
|
36
|
+
|
37
|
+
"
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_model_specs
|
41
|
+
template "model_spec.rb", "#{Rails.root}/spec/models/#{singular_name}_spec.rb"
|
42
|
+
end
|
43
|
+
|
44
|
+
def replace_controller
|
45
|
+
template "controller.rb", "#{Rails.root}/app/controllers/#{plural_name}_controller.rb"
|
46
|
+
end
|
47
|
+
|
48
|
+
def remove_html_controller_specs
|
49
|
+
remove_file "spec/controllers/#{plural_name}_controller_spec.rb"
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_json_controller_specs
|
53
|
+
template "controller_specs/delete_spec.rb", "#{Rails.root}/spec/controllers/#{plural_name}/delete_spec.rb"
|
54
|
+
template "controller_specs/show_spec.rb", "#{Rails.root}/spec/controllers/#{plural_name}/show_spec.rb"
|
55
|
+
template "controller_specs/index_spec.rb", "#{Rails.root}/spec/controllers/#{plural_name}/index_spec.rb"
|
56
|
+
template "controller_specs/create_spec.rb", "#{Rails.root}/spec/controllers/#{plural_name}/create_spec.rb"
|
57
|
+
template "controller_specs/update_spec.rb", "#{Rails.root}/spec/controllers/#{plural_name}/update_spec.rb"
|
58
|
+
end
|
59
|
+
|
60
|
+
def remove_html_views
|
61
|
+
remove_file "app/views/#{plural_name}/_form.html.erb"
|
62
|
+
remove_file "app/views/#{plural_name}/edit.html.erb"
|
63
|
+
remove_file "app/views/#{plural_name}/index.html.erb"
|
64
|
+
remove_file "app/views/#{plural_name}/index.json.jbuilder"
|
65
|
+
remove_file "app/views/#{plural_name}/new.html.erb"
|
66
|
+
remove_file "app/views/#{plural_name}/show.html.erb"
|
67
|
+
remove_file "app/views/#{plural_name}/show.json.jbuilder"
|
68
|
+
end
|
69
|
+
|
70
|
+
def add_json_views
|
71
|
+
template "views/_resource.json.jbuilder", "#{Rails.root}/app/views/#{plural_name}/_#{singular_name}.json.jbuilder"
|
72
|
+
end
|
73
|
+
|
74
|
+
def remove_html_view_specs
|
75
|
+
remove_file "spec/views/#{plural_name}/index.html.erb_spec.rb"
|
76
|
+
remove_file "spec/views/#{plural_name}/show.html.erb_spec.rb"
|
77
|
+
remove_file "spec/views/#{plural_name}/new.html.erb_spec.rb"
|
78
|
+
remove_file "spec/views/#{plural_name}/create.html.erb_spec.rb"
|
79
|
+
remove_file "spec/views/#{plural_name}/update.html.erb_spec.rb"
|
80
|
+
remove_file "spec/views/#{plural_name}/edit.html.erb_spec.rb"
|
81
|
+
end
|
82
|
+
|
83
|
+
def add_json_view_spec
|
84
|
+
template "view_specs/_resource_spec.rb", "#{Rails.root}/spec/views/#{plural_name}/_#{singular_name}_spec.rb"
|
85
|
+
end
|
86
|
+
|
87
|
+
def remove_request_specs
|
88
|
+
remove_file "spec/requests/#{plural_name}_spec.rb"
|
89
|
+
end
|
90
|
+
|
91
|
+
def update_routing_specs
|
92
|
+
remove_file "spec/routing/#{plural_name}_routing_spec.rb"
|
93
|
+
template "resource_routing_spec.rb", "#{Rails.root}/spec/routing/#{plural_name}_routing_spec.rb"
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
<% if namespaced? -%>
|
2
|
+
require_dependency "<%= namespaced_file_path %>/application_controller"
|
3
|
+
|
4
|
+
<% end -%>
|
5
|
+
<% module_namespacing do -%>
|
6
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
7
|
+
|
8
|
+
ocean_resource_controller required_attributes: [:lock_version]
|
9
|
+
|
10
|
+
before_action :find_<%= singular_table_name %>, :only => [:show, :update, :destroy]
|
11
|
+
|
12
|
+
|
13
|
+
# GET <%= route_url %>
|
14
|
+
def index
|
15
|
+
expires_in 0, 's-maxage' => 30.minutes
|
16
|
+
# if stale?(collection_etag(<%= class_name %>)) # collection_etag is still ActiveRecord only!
|
17
|
+
# Instead, we get all the instances and compute the ETag manually.
|
18
|
+
# You may wish to remove this action entirely. You may also wish to remove the caching,
|
19
|
+
# in which case you don't need to compute the Etag at all.
|
20
|
+
@<%= plural_table_name %> = <%= class_name %>.all
|
21
|
+
latest = @<%= plural_table_name %>.max_by(&:updated_at)
|
22
|
+
last_updated = latest && latest.updated_at
|
23
|
+
if stale?(etag: "<%= class_name %>:#{@<%= plural_table_name %>.length}:#{last_updated}")
|
24
|
+
api_render @<%= plural_table_name %>
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
# GET <%= route_url %>/a-b-c-d-e
|
30
|
+
def show
|
31
|
+
expires_in 0, 's-maxage' => 30.minutes
|
32
|
+
if stale?(etag: @<%= singular_table_name %>.lock_version, # NB: DynamoDB tables don't have cache_key - FIX!
|
33
|
+
last_modified: @<%= singular_table_name %>.updated_at)
|
34
|
+
api_render @<%= singular_table_name %>
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
# POST <%= route_url %>
|
40
|
+
def create
|
41
|
+
ActionController::Parameters.permit_all_parameters = true
|
42
|
+
name = params[:name]
|
43
|
+
description = params[:description]
|
44
|
+
@<%= singular_table_name %> = <%= class_name %>.new(name: name, description: description)
|
45
|
+
set_updater(@<%= singular_table_name %>)
|
46
|
+
@<%= singular_table_name %>.save!
|
47
|
+
api_render @<%= singular_table_name %>, new: true
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# PUT <%= route_url %>/a-b-c-d-e
|
52
|
+
def update
|
53
|
+
if missing_attributes?
|
54
|
+
render_api_error 422, "Missing resource attributes"
|
55
|
+
return
|
56
|
+
end
|
57
|
+
@<%= singular_table_name %>.name = params[:name] if params[:name]
|
58
|
+
@<%= singular_table_name %>.description = params[:description] if params[:description]
|
59
|
+
set_updater(@<%= singular_table_name %>)
|
60
|
+
@<%= singular_table_name %>.save!
|
61
|
+
api_render @<%= singular_table_name %>
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
# DELETE <%= route_url %>/a-b-c-d-e
|
66
|
+
def destroy
|
67
|
+
@<%= singular_table_name %>.destroy
|
68
|
+
render_head_204
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def find_<%= singular_table_name %>
|
75
|
+
ActionController::Parameters.permit_all_parameters = true
|
76
|
+
@<%= singular_table_name %> = <%= class_name %>.find_by_key(params['id'], consistent: true)
|
77
|
+
return true if @<%= singular_table_name %>
|
78
|
+
render_api_error 404, "<%= class_name %> not found"
|
79
|
+
false
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
<% end -%>
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= class_name.pluralize %>Controller do
|
4
|
+
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "POST" do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
<%= class_name %>.delete_all
|
11
|
+
permit_with 200
|
12
|
+
request.headers['HTTP_ACCEPT'] = "application/json"
|
13
|
+
request.headers['X-API-Token'] = "incredibly-fake!"
|
14
|
+
@args = build(:<%= singular_name %>).attributes
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
it "should return JSON" do
|
19
|
+
post :create, @args
|
20
|
+
expect(response.content_type).to eq "application/json"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return a 400 if the X-API-Token header is missing" do
|
24
|
+
request.headers['X-API-Token'] = nil
|
25
|
+
post :create, @args
|
26
|
+
expect(response.status).to eq 400
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return a 201 when successful" do
|
30
|
+
post :create, @args
|
31
|
+
expect(response).to render_template(partial: "_<%= singular_name %>", count: 1)
|
32
|
+
expect(response.status).to eq 201
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should contain a Location header when successful" do
|
36
|
+
post :create, @args
|
37
|
+
expect(response.headers['Location']).to be_a String
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return the new resource in the body when successful" do
|
41
|
+
post :create, @args
|
42
|
+
expect(response.body).to be_a String
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# Uncomment this test as soon as there is one or more DB attributes that define
|
47
|
+
# the uniqueness of a record.
|
48
|
+
#
|
49
|
+
# it "should return a 422 if the <%= singular_name %> already exists" do
|
50
|
+
# post :create, @args
|
51
|
+
# expect(response.status).to eq 201
|
52
|
+
# expect(response.content_type).to eq "application/json"
|
53
|
+
# post :create, @args
|
54
|
+
# expect(response.status).to eq 422
|
55
|
+
# expect(response.content_type).to eq "application/json"
|
56
|
+
# expect(JSON.parse(response.body).to eq({"_api_error" => ["<%= class_name %> already exists"]})
|
57
|
+
# end
|
58
|
+
|
59
|
+
#
|
60
|
+
# Uncomment this test as soon as there is one or more DB attributes that need
|
61
|
+
# validating.
|
62
|
+
#
|
63
|
+
# it "should return a 422 when there are validation errors" do
|
64
|
+
# post :create, @args.merge('name' => "qz")
|
65
|
+
# expect(response.status).to eq 422
|
66
|
+
# expect(response.content_type).to eq "application/json"
|
67
|
+
# expect(JSON.parse(response.body)).to eq({"name"=>["is too short (minimum is 3 characters)"]})
|
68
|
+
# end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= class_name.pluralize %>Controller do
|
4
|
+
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "DELETE" do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
<%= class_name %>.delete_all
|
11
|
+
permit_with 200
|
12
|
+
@<%= singular_name %> = create :<%= singular_name %>
|
13
|
+
request.headers['HTTP_ACCEPT'] = "application/json"
|
14
|
+
request.headers['X-API-Token'] = "so-totally-fake"
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
it "should return JSON" do
|
19
|
+
delete :destroy, id: @<%= singular_name %>
|
20
|
+
expect(response.content_type).to eq "application/json"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return a 400 if the X-API-Token header is missing" do
|
24
|
+
request.headers['X-API-Token'] = nil
|
25
|
+
delete :destroy, id: @<%= singular_name %>
|
26
|
+
expect(response.status).to eq 400
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return a 204 when successful" do
|
30
|
+
delete :destroy, id: @<%= singular_name %>
|
31
|
+
expect(response.status).to eq 204
|
32
|
+
expect(response.content_type).to eq "application/json"
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should return a 404 when the <%= class_name %> can't be found" do
|
36
|
+
delete :destroy, id: "0-0-0-0-0"
|
37
|
+
expect(response.status).to eq 404
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should destroy the <%= class_name %> when successful" do
|
41
|
+
delete :destroy, id: @<%= singular_name %>
|
42
|
+
expect(response.status).to eq 204
|
43
|
+
expect(<%= class_name %>.find_by_id(@<%= singular_name %>.id)).to be_nil
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= class_name.pluralize %>Controller do
|
4
|
+
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "INDEX" do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
<%= class_name %>.delete_all
|
11
|
+
permit_with 200
|
12
|
+
create :<%= singular_name %>
|
13
|
+
create :<%= singular_name %>
|
14
|
+
create :<%= singular_name %>
|
15
|
+
request.headers['HTTP_ACCEPT'] = "application/json"
|
16
|
+
request.headers['X-API-Token'] = "boy-is-this-fake"
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
it "should return JSON" do
|
21
|
+
get :index
|
22
|
+
expect(response.content_type).to eq "application/json"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return a 400 if the X-API-Token header is missing" do
|
26
|
+
request.headers['X-API-Token'] = nil
|
27
|
+
get :index
|
28
|
+
expect(response.status).to eq 400
|
29
|
+
expect(response.content_type).to eq "application/json"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should return a 200 when successful" do
|
33
|
+
get :index
|
34
|
+
expect(response.status).to eq 200
|
35
|
+
expect(response).to render_template(partial: "_<%= singular_name %>", count: 3)
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return a collection" do
|
39
|
+
get :index
|
40
|
+
expect(response.status).to eq 200
|
41
|
+
wrapper = JSON.parse(response.body)
|
42
|
+
expect(wrapper).to be_a Hash
|
43
|
+
resource = wrapper['_collection']
|
44
|
+
expect(resource).to be_a Hash
|
45
|
+
coll = resource['resources']
|
46
|
+
expect(coll).to be_an Array
|
47
|
+
expect(coll.count).to eq 3
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= class_name.pluralize %>Controller do
|
4
|
+
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "GET" do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
<%= class_name %>.delete_all
|
11
|
+
permit_with 200
|
12
|
+
@<%= singular_name %> = create :<%= singular_name %>
|
13
|
+
request.headers['HTTP_ACCEPT'] = "application/json"
|
14
|
+
request.headers['X-API-Token'] = "totally-fake"
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
it "should return JSON" do
|
19
|
+
get :show, id: @<%= singular_name %>
|
20
|
+
expect(response.content_type).to eq "application/json"
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should return a 400 if the X-API-Token header is missing" do
|
24
|
+
request.headers['X-API-Token'] = nil
|
25
|
+
get :show, id: @<%= singular_name %>
|
26
|
+
expect(response.status).to eq 400
|
27
|
+
expect(response.content_type).to eq "application/json"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return a 404 when the user can't be found" do
|
31
|
+
get :show, id: "0-0-0-0-0"
|
32
|
+
expect(response.status).to eq 404
|
33
|
+
expect(response.content_type).to eq "application/json"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return a 200 when successful" do
|
37
|
+
get :show, id: @<%= singular_name %>
|
38
|
+
expect(response.status).to eq 200
|
39
|
+
expect(response).to render_template(partial: "_<%= singular_name %>", count: 1)
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= class_name.pluralize %>Controller do
|
4
|
+
|
5
|
+
render_views
|
6
|
+
|
7
|
+
describe "PUT" do
|
8
|
+
|
9
|
+
before :each do
|
10
|
+
<%= class_name %>.delete_all
|
11
|
+
permit_with 200
|
12
|
+
request.headers['HTTP_ACCEPT'] = "application/json"
|
13
|
+
request.headers['X-API-Token'] = "incredibly-fake!"
|
14
|
+
@u = create :<%= singular_name %>
|
15
|
+
@args = @u.attributes
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
it "should return JSON" do
|
20
|
+
put :update, @args
|
21
|
+
expect(response.content_type).to eq "application/json"
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return a 400 if the X-API-Token header is missing" do
|
25
|
+
request.headers['X-API-Token'] = nil
|
26
|
+
put :update, @args
|
27
|
+
expect(response.status).to eq 400
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return a 404 if the resource can't be found" do
|
31
|
+
put :update, id: "0-0-0-0-0"
|
32
|
+
expect(response.status).to eq 404
|
33
|
+
expect(response.content_type).to eq "application/json"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should return a 422 when resource properties are missing (all must be set simultaneously)" do
|
37
|
+
put :update, id: @u.id
|
38
|
+
expect(response.status).to eq 422
|
39
|
+
expect(response.content_type).to eq "application/json"
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should return a 409 when there is an update conflict" do
|
43
|
+
@args['lock_version'] = -2
|
44
|
+
put :update, @args
|
45
|
+
expect(response.status).to eq(409)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return a 200 when successful" do
|
49
|
+
put :update, @args
|
50
|
+
expect(response.status).to eq 200
|
51
|
+
expect(response).to render_template(partial: "_<%= singular_name %>", count: 1)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should return the updated resource in the body when successful" do
|
55
|
+
put :update, @args
|
56
|
+
expect(response.status).to eq 200
|
57
|
+
expect(JSON.parse(response.body)).to be_a Hash
|
58
|
+
end
|
59
|
+
|
60
|
+
#
|
61
|
+
# Uncomment this test as soon as there is one or more DB attributes that need
|
62
|
+
# validating.
|
63
|
+
#
|
64
|
+
# it "should return a 422 when there are validation errors" do
|
65
|
+
# put :update, @args.merge('name' => "qz")
|
66
|
+
# expect(response.status).to eq 422
|
67
|
+
# expect(response.content_type).to eq "application/json"
|
68
|
+
# expect(JSON.parse(response.body)).to eq({"name"=>["is too short (minimum is 3 characters)"]})
|
69
|
+
# end
|
70
|
+
|
71
|
+
|
72
|
+
# it "should alter the <%= singular_name %> when successful" do
|
73
|
+
# expect(@u.name).to eq @args['name']
|
74
|
+
# expect(@u.description).to eq @args['description']
|
75
|
+
# @args['name'] = "zalagadoola"
|
76
|
+
# @args['description'] = "menchikaboola"
|
77
|
+
# put :update, @args
|
78
|
+
# expect(response.status).to eq 200
|
79
|
+
# @u.reload
|
80
|
+
# expect(@u.name).to eq "zalagadoola"
|
81
|
+
# expect(@u.description).to eq "menchikaboola"
|
82
|
+
# end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe <%= class_name %> do
|
4
|
+
|
5
|
+
|
6
|
+
describe "attributes" do
|
7
|
+
|
8
|
+
it "should have a name" do
|
9
|
+
expect(create(:<%= singular_name %>).name).to be_a String
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should have a description" do
|
13
|
+
expect(create(:<%= singular_name %>).description).to be_a String
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should have a creation time" do
|
17
|
+
expect(create(:<%= singular_name %>).created_at).to be_a Time
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should have an update time" do
|
21
|
+
expect(create(:<%= singular_name %>).updated_at).to be_a Time
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should have a creator" do
|
25
|
+
expect(create(:<%= singular_name %>).created_by).to be_a String
|
26
|
+
end
|
27
|
+
|
28
|
+
it "should have an updater" do
|
29
|
+
expect(create(:<%= singular_name %>).updated_by).to be_a String
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
describe "relations" do
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe <%= class_name.pluralize %>Controller do
|
4
|
+
describe "routing" do
|
5
|
+
|
6
|
+
it "routes to #index" do
|
7
|
+
expect(get("/v1/<%= plural_name %>")).to route_to("<%= plural_name %>#index")
|
8
|
+
end
|
9
|
+
|
10
|
+
it "routes to #show" do
|
11
|
+
expect(get("/v1/<%= plural_name %>/1-2-3-4-5")).to route_to("<%= plural_name %>#show", id: "1-2-3-4-5")
|
12
|
+
end
|
13
|
+
|
14
|
+
it "routes to #create" do
|
15
|
+
expect(post("/v1/<%= plural_name %>")).to route_to("<%= plural_name %>#create")
|
16
|
+
end
|
17
|
+
|
18
|
+
it "routes to #update" do
|
19
|
+
expect(put("/v1/<%= plural_name %>/1-2-3-4-5")).to route_to("<%= plural_name %>#update", id: "1-2-3-4-5")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "routes to #destroy" do
|
23
|
+
expect(delete("/v1/<%= plural_name %>/1-2-3-4-5")).to route_to("<%= plural_name %>#destroy", id: "1-2-3-4-5")
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "<%= plural_name %>/_<%= singular_name %>" do
|
4
|
+
|
5
|
+
before :each do # Must be :each (:all causes all tests to fail)
|
6
|
+
<%= class_name %>.delete_all
|
7
|
+
render partial: "<%= plural_name %>/<%= singular_name %>", locals: {<%= singular_name %>: create(:<%= singular_name %>)}
|
8
|
+
@json = JSON.parse(rendered)
|
9
|
+
@u = @json['<%= singular_name %>']
|
10
|
+
@links = @u['_links'] rescue {}
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
it "has a named root" do
|
15
|
+
expect(@u).not_to eq nil
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
it "should have three hyperlinks" do
|
20
|
+
expect(@links.size).to eq 3
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should have a self hyperlink" do
|
24
|
+
expect(@links).to be_hyperlinked('self', /<%= plural_name %>/)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have a creator hyperlink" do
|
28
|
+
expect(@links).to be_hyperlinked('creator', /api_users/)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should have an updater hyperlink" do
|
32
|
+
expect(@links).to be_hyperlinked('updater', /api_users/)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
it "should have a name" do
|
37
|
+
expect(@u['name']).to be_a String
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should have a description" do
|
41
|
+
expect(@u['description']).to be_a String
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should have a created_at time" do
|
45
|
+
expect(@u['created_at']).to be_a String
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should have an updated_at time" do
|
49
|
+
expect(@u['updated_at']).to be_a String
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should have a lock_version field" do
|
53
|
+
expect(@u['lock_version']).to be_an Integer
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
json.<%= singular_name %> do |json|
|
2
|
+
json._links hyperlinks(self: <%= singular_name %>_url(<%= singular_name %>),
|
3
|
+
creator: smart_api_user_url(<%= singular_name %>.created_by),
|
4
|
+
updater: smart_api_user_url(<%= singular_name %>.updated_by))
|
5
|
+
json.(<%= singular_name %>, :lock_version,
|
6
|
+
:name,
|
7
|
+
:description
|
8
|
+
)
|
9
|
+
json.created_at <%= singular_name %>.created_at.utc.iso8601
|
10
|
+
json.updated_at <%= singular_name %>.updated_at.utc.iso8601
|
11
|
+
end
|
data/lib/ocean/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocean-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.7.
|
4
|
+
version: 5.7.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Bengtson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|
@@ -236,6 +236,18 @@ files:
|
|
236
236
|
- lib/generators/ocean_scaffold/templates/resource_routing_spec.rb
|
237
237
|
- lib/generators/ocean_scaffold/templates/view_specs/_resource_spec.rb
|
238
238
|
- lib/generators/ocean_scaffold/templates/views/_resource.json.jbuilder
|
239
|
+
- lib/generators/ocean_scaffold_dynamo/USAGE
|
240
|
+
- lib/generators/ocean_scaffold_dynamo/ocean_scaffold_dynamo_generator.rb
|
241
|
+
- lib/generators/ocean_scaffold_dynamo/templates/controller.rb
|
242
|
+
- lib/generators/ocean_scaffold_dynamo/templates/controller_specs/create_spec.rb
|
243
|
+
- lib/generators/ocean_scaffold_dynamo/templates/controller_specs/delete_spec.rb
|
244
|
+
- lib/generators/ocean_scaffold_dynamo/templates/controller_specs/index_spec.rb
|
245
|
+
- lib/generators/ocean_scaffold_dynamo/templates/controller_specs/show_spec.rb
|
246
|
+
- lib/generators/ocean_scaffold_dynamo/templates/controller_specs/update_spec.rb
|
247
|
+
- lib/generators/ocean_scaffold_dynamo/templates/model_spec.rb
|
248
|
+
- lib/generators/ocean_scaffold_dynamo/templates/resource_routing_spec.rb
|
249
|
+
- lib/generators/ocean_scaffold_dynamo/templates/view_specs/_resource_spec.rb
|
250
|
+
- lib/generators/ocean_scaffold_dynamo/templates/views/_resource.json.jbuilder
|
239
251
|
- lib/generators/ocean_setup/USAGE
|
240
252
|
- lib/generators/ocean_setup/ocean_setup_generator.rb
|
241
253
|
- lib/generators/ocean_setup/templates/Gemfile
|