ocean-rails 5.7.2 → 5.7.3
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.
- 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
|