hexx 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +12 -1
- data/README.rdoc +11 -2
- data/Rakefile +6 -0
- data/lib/generators/controller/controller.rb +29 -7
- data/lib/generators/controller/templates/application_controller.erb +24 -0
- data/lib/generators/controller/templates/controller.erb +4 -8
- data/lib/generators/controller/templates/controller_action.erb +2 -2
- data/lib/generators/controller/templates/controller_action_spec.erb +13 -20
- data/lib/generators/controller/templates/controller_spec.erb +42 -29
- data/lib/generators/controller/templates/routing_action_spec.erb +9 -6
- data/lib/generators/controller/templates/routing_spec.erb +2 -1
- data/lib/generators/dependency/dependency.rb +18 -2
- data/lib/generators/dependency/templates/dependency_setting_spec.erb +12 -7
- data/lib/generators/dependency/templates/initializer.erb +4 -0
- data/lib/generators/dependency/templates/initializer_setting.erb +4 -0
- data/lib/generators/dependency/templates/module_spec.erb +5 -5
- data/lib/generators/domain/templates/spec.erb +4 -4
- data/lib/generators/install/install.rb +28 -14
- data/lib/generators/install/templates/CHANGELOG.erb +13 -1
- data/lib/generators/install/templates/Gemfile.erb +5 -1
- data/lib/generators/install/templates/Guardfile.erb +32 -0
- data/lib/generators/install/templates/README.erb +12 -6
- data/lib/generators/install/templates/Rakefile.erb +8 -2
- data/lib/generators/install/templates/coveralls.erb +1 -0
- data/lib/generators/install/templates/gemspec.erb +4 -0
- data/lib/generators/install/templates/gitignore.erb +28 -0
- data/lib/generators/install/templates/rspec.erb +1 -0
- data/lib/generators/install/templates/rubocop.erb +58 -0
- data/lib/generators/install/templates/spec/caching.erb +12 -0
- data/lib/generators/install/templates/spec/controllers.erb +14 -0
- data/lib/generators/install/templates/spec/database_cleaner.erb +1 -0
- data/lib/generators/install/templates/spec/json_shema.erb +10 -0
- data/lib/generators/install/templates/spec/rspec.erb +5 -0
- data/lib/generators/install/templates/travis.erb +3 -0
- data/lib/generators/request/templates/request_spec.erb +28 -24
- data/lib/generators/use_case/templates/use_case.erb +6 -5
- data/lib/generators/use_case/templates/use_case_spec.erb +10 -10
- data/lib/hexx/exceptions/not_found_error.rb +4 -0
- data/lib/hexx/exceptions/record_invalid.rb +5 -1
- data/lib/hexx/exceptions/use_case_invalid.rb +4 -0
- data/lib/hexx/models.rb +2 -0
- data/lib/hexx/use_case.rb +29 -1
- data/lib/hexx/version.rb +1 -1
- data/spec/hexx/exceptions/not_found_error_spec.rb +5 -15
- data/spec/hexx/exceptions/record_invalid_spec.rb +5 -15
- data/spec/hexx/exceptions/runtime_error_spec.rb +7 -13
- data/spec/hexx/exceptions/use_case_invalid_spec.rb +5 -15
- data/spec/hexx/models_spec.rb +20 -13
- data/spec/hexx/settings_spec.rb +3 -3
- data/spec/hexx/use_case_spec.rb +19 -1
- data/spec/spec_helper.rb +6 -0
- data/spec/support/exception_matchers.rb +20 -0
- metadata +50 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e785de1749dfa0413059159c18f56b3249f057cf
|
|
4
|
+
data.tar.gz: 3d29b3bdcc0a0af55f7915a034872a35bd128409
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b3bb5ed74006254480995a7a7eb1a1f44c586d19dc3aadfa3d632556ff14e90098de4ea192b282550d109e3f43a0266a61918b4f9f068cd96658d8b2634c136f
|
|
7
|
+
data.tar.gz: 43298906942eaf319ad0a25d9bdb7a466dc22d0dcc45d68780cf4505213da94d70d1a9d67d47fe0aeef9a3a3b7bce9ed501b02b8a81580a8865fcdbf0d7e2332
|
data/CHANGELOG.rdoc
CHANGED
|
@@ -1 +1,12 @@
|
|
|
1
|
-
= CHANGELOG
|
|
1
|
+
= CHANGELOG
|
|
2
|
+
|
|
3
|
+
== 0.1.0 (28.09.2014)
|
|
4
|
+
|
|
5
|
+
=== Changed features:
|
|
6
|
+
|
|
7
|
+
* `install` generator refactored for usage of json_schema in requests specs:
|
|
8
|
+
- `json_schema` matchers added to support
|
|
9
|
+
- `request` matchers removed from support
|
|
10
|
+
- `controllers` matchers refactored
|
|
11
|
+
|
|
12
|
+
* `controller` generator refactored
|
data/README.rdoc
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
= Hexx
|
|
2
2
|
|
|
3
|
+
{<img src="http://img.shields.io/gem/v/hexx.svg?style=flat" alt="Gem Version" />}[https://rubygems.org/gems/hexx]
|
|
3
4
|
{<img src="http://img.shields.io/travis/nepalez/hexx.svg?style=flat" alt="Bild Status" />}[https://travis-ci.org/nepalez/hexx]
|
|
4
5
|
{<img src="http://img.shields.io/codeclimate/github/nepalez/hexx.svg?style=flat" alt="Code Metrics" />}[https://codeclimate.com/github/nepalez/hexx]
|
|
5
6
|
{<img src="http://img.shields.io/gemnasium/nepalez/hexx.svg?style=flat" alt="Dependency Status" />}[https://gemnasium.com/nepalez/hexx]
|
|
@@ -17,7 +18,15 @@ Provides:
|
|
|
17
18
|
|
|
18
19
|
Add this line to your application's Gemfile:
|
|
19
20
|
|
|
20
|
-
|
|
21
|
+
gem "hexx"
|
|
22
|
+
|
|
23
|
+
And then execute:
|
|
24
|
+
|
|
25
|
+
$ bundle
|
|
26
|
+
|
|
27
|
+
Or install it yourself as:
|
|
28
|
+
|
|
29
|
+
$ gem install hexx
|
|
21
30
|
|
|
22
31
|
== Usage
|
|
23
32
|
|
|
@@ -69,7 +78,7 @@ In a typical case the controller should constist from:
|
|
|
69
78
|
# An action (outer port) of the controller
|
|
70
79
|
def show
|
|
71
80
|
use_case = GetItem.new params.allow(:id)
|
|
72
|
-
# subscribes the controller for listening
|
|
81
|
+
# subscribes the controller for listening to the use case
|
|
73
82
|
# notifications via the controller's inner ports.
|
|
74
83
|
use_case.subscribe self
|
|
75
84
|
use_case.run
|
data/Rakefile
CHANGED
|
@@ -16,7 +16,7 @@ module Hexx
|
|
|
16
16
|
def create_routing_spec
|
|
17
17
|
template(
|
|
18
18
|
"routing_spec.erb",
|
|
19
|
-
"spec/routing/#{
|
|
19
|
+
"spec/routing/#{api_path}/#{file_name}_routing_spec.rb",
|
|
20
20
|
skip: true
|
|
21
21
|
)
|
|
22
22
|
end
|
|
@@ -24,7 +24,7 @@ module Hexx
|
|
|
24
24
|
def add_route_spec
|
|
25
25
|
inject_template_into_file(
|
|
26
26
|
"routing_action_spec.erb",
|
|
27
|
-
"spec/routing/#{
|
|
27
|
+
"spec/routing/#{api_path}/#{file_name}_routing_spec.rb",
|
|
28
28
|
before: " end\nend"
|
|
29
29
|
)
|
|
30
30
|
end
|
|
@@ -32,7 +32,7 @@ module Hexx
|
|
|
32
32
|
def create_controller_spec
|
|
33
33
|
template(
|
|
34
34
|
"controller_spec.erb",
|
|
35
|
-
"spec/controllers/#{
|
|
35
|
+
"spec/controllers/#{api_path}/#{file_name}_controller_spec.rb",
|
|
36
36
|
skip: true
|
|
37
37
|
)
|
|
38
38
|
end
|
|
@@ -40,15 +40,23 @@ module Hexx
|
|
|
40
40
|
def add_controller_action_spec
|
|
41
41
|
inject_template_into_file(
|
|
42
42
|
"controller_action_spec.erb",
|
|
43
|
-
"spec/controllers/#{
|
|
43
|
+
"spec/controllers/#{api_path}/#{file_name}_controller_spec.rb",
|
|
44
44
|
after: "describe \"action\" do"
|
|
45
45
|
)
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
def create_application_controller
|
|
49
|
+
template(
|
|
50
|
+
"application_controller.erb",
|
|
51
|
+
"app/controllers/#{api_path}/application_controller.rb",
|
|
52
|
+
skip: true
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
|
|
48
56
|
def create_controller
|
|
49
57
|
template(
|
|
50
58
|
"controller.erb",
|
|
51
|
-
"app/controllers/#{
|
|
59
|
+
"app/controllers/#{api_path}/#{file_name}_controller.rb",
|
|
52
60
|
skip: true
|
|
53
61
|
)
|
|
54
62
|
end
|
|
@@ -56,8 +64,22 @@ module Hexx
|
|
|
56
64
|
def add_controller_action
|
|
57
65
|
inject_template_into_file(
|
|
58
66
|
"controller_action.erb",
|
|
59
|
-
"app/controllers/#{
|
|
60
|
-
after: " <
|
|
67
|
+
"app/controllers/#{api_path}/#{file_name}_controller.rb",
|
|
68
|
+
after: " < ApplicationController"
|
|
69
|
+
)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def create_application_layout
|
|
73
|
+
create_file(
|
|
74
|
+
"app/views/layouts/#{api_path}/application.json.jbuilder",
|
|
75
|
+
skip: true
|
|
76
|
+
)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def create_view
|
|
80
|
+
create_file(
|
|
81
|
+
"app/views/#{api_path}/#{file_name}/#{action_name}.json.jbuilder",
|
|
82
|
+
skip: true
|
|
61
83
|
)
|
|
62
84
|
end
|
|
63
85
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module <%= module_name %>
|
|
2
|
+
module Api
|
|
3
|
+
module V1
|
|
4
|
+
|
|
5
|
+
# Base controller for the API
|
|
6
|
+
# Collects standard method for responding to users.
|
|
7
|
+
class ApplicationController < ::ApplicationController
|
|
8
|
+
|
|
9
|
+
# def on_error(messages, status: 400)
|
|
10
|
+
# @messages = messages
|
|
11
|
+
# render template: "<%= gem_name %>/api/v1/shared/error", status: status
|
|
12
|
+
# end
|
|
13
|
+
|
|
14
|
+
# def on_not_found(messages)
|
|
15
|
+
# on_error messages, status: 404
|
|
16
|
+
# end
|
|
17
|
+
|
|
18
|
+
# def on_not_changed
|
|
19
|
+
# render status: 304
|
|
20
|
+
# end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
@@ -3,15 +3,11 @@ module <%= module_name %>
|
|
|
3
3
|
module V1
|
|
4
4
|
|
|
5
5
|
# TODO: add a description
|
|
6
|
-
|
|
6
|
+
class <%= class_name %>Controller < ApplicationController
|
|
7
7
|
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
|
|
12
|
-
# def error(messages)
|
|
13
|
-
# render json: { success: false, messages: messages }, status: 422
|
|
14
|
-
# end
|
|
8
|
+
# ======================================================================
|
|
9
|
+
# Inner ports (to be called by use cases)
|
|
10
|
+
# ======================================================================
|
|
15
11
|
end
|
|
16
12
|
end
|
|
17
13
|
end
|
|
@@ -1,28 +1,21 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
# describe "#<%= action_name %>" do
|
|
4
|
-
|
|
5
|
-
# let!(:params)
|
|
6
|
-
|
|
7
|
-
#
|
|
8
|
-
# before { allow(use_case_class).to receive(:new) { use_case } }
|
|
4
|
+
|
|
5
|
+
# let!(:params) { { "something" => "something", "wrong" => "wrong" } }
|
|
6
|
+
|
|
7
|
+
# before { allow(<%= use_case %>).to receive(:new).and_return(use_case) }
|
|
9
8
|
# after { <%= action_type %> :<%= action_name %>, params }
|
|
10
|
-
|
|
11
|
-
# it "
|
|
12
|
-
# expect(
|
|
13
|
-
# expect(options).to eq params.
|
|
14
|
-
# slice %w(something)
|
|
15
|
-
# end
|
|
9
|
+
|
|
10
|
+
# it "provides a use case with proper parameters" do
|
|
11
|
+
# expect(<%= use_case %>).to receive(:new).with(params.slice("something"))
|
|
16
12
|
# end
|
|
17
|
-
|
|
18
|
-
# it "listens to use case
|
|
19
|
-
# expect(
|
|
20
|
-
# expect(listener).to eq controller
|
|
21
|
-
# end
|
|
13
|
+
|
|
14
|
+
# it "listens to use case" do
|
|
15
|
+
# expect(controller).to listen_to use_case
|
|
22
16
|
# end
|
|
23
|
-
|
|
24
|
-
# it "runs the case after
|
|
25
|
-
# expect(use_case).to
|
|
26
|
-
# expect(use_case).to receive(:run).order
|
|
17
|
+
|
|
18
|
+
# it "runs the case after subscribtion" do
|
|
19
|
+
# expect(use_case).to run_after_subscription
|
|
27
20
|
# end
|
|
28
21
|
# end
|
|
@@ -1,48 +1,61 @@
|
|
|
1
1
|
require "spec_helper"
|
|
2
|
+
require "support/matchers/controllers"
|
|
2
3
|
|
|
3
4
|
module <%= module_name %>
|
|
4
5
|
module Api
|
|
5
6
|
module V1
|
|
6
|
-
describe <%= class_name %>Controller
|
|
7
|
-
|
|
7
|
+
describe <%= class_name %>Controller do
|
|
8
|
+
|
|
9
|
+
# Add this line if your project is a Rails Engine, not the Application
|
|
8
10
|
# routes { <%= module_name %>::Engine.routes }
|
|
9
11
|
|
|
10
|
-
# let
|
|
12
|
+
# let(:use_case) { double "use_case" }
|
|
13
|
+
|
|
11
14
|
# before do
|
|
12
|
-
# allow(use_case).to receive(:run){ controller.render inline: "" }
|
|
15
|
+
# allow(use_case).to receive(:run) { controller.render inline: "" }
|
|
16
|
+
# allow(use_case).to receive(:subscribe)
|
|
13
17
|
# end
|
|
14
18
|
|
|
15
19
|
describe "action" do
|
|
16
20
|
end
|
|
17
21
|
|
|
18
|
-
describe "
|
|
19
|
-
|
|
20
|
-
#
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
# it "
|
|
26
|
-
# expect(
|
|
27
|
-
#
|
|
28
|
-
|
|
29
|
-
#
|
|
30
|
-
#
|
|
31
|
-
#
|
|
32
|
-
#
|
|
22
|
+
describe "responder" do
|
|
23
|
+
|
|
24
|
+
# describe "#on_error" do
|
|
25
|
+
|
|
26
|
+
# controller(<%= class_name %>Controller) { def index; on_error :messages; end }
|
|
27
|
+
# before { get :index, format: :json }
|
|
28
|
+
|
|
29
|
+
# it "sets @messages" do
|
|
30
|
+
# expect(assigns(:messages)).to eq :messages
|
|
31
|
+
# end
|
|
32
|
+
|
|
33
|
+
# it "renders a proper template" do
|
|
34
|
+
# expect(response)
|
|
35
|
+
# .to render_template "<%= gem_name %>/api/v1/shared/error"
|
|
36
|
+
# end
|
|
37
|
+
|
|
38
|
+
# it "returns status 400" do
|
|
39
|
+
# expect(response.status).to eq 400
|
|
33
40
|
# end
|
|
34
41
|
# end
|
|
35
42
|
|
|
36
|
-
# describe "#
|
|
37
|
-
|
|
38
|
-
#
|
|
39
|
-
#
|
|
40
|
-
|
|
41
|
-
#
|
|
42
|
-
#
|
|
43
|
-
#
|
|
44
|
-
|
|
45
|
-
#
|
|
43
|
+
# describe "#on_not_found" do
|
|
44
|
+
|
|
45
|
+
# controller(<%= class_name %>Controller) { def index; on_not_found :messages; end }
|
|
46
|
+
# before { get :index, format: :json }
|
|
47
|
+
|
|
48
|
+
# it "sets @messages" do
|
|
49
|
+
# expect(assigns(:messages)).to eq :messages
|
|
50
|
+
# end
|
|
51
|
+
|
|
52
|
+
# it "renders a proper template" do
|
|
53
|
+
# expect(response)
|
|
54
|
+
# .to render_template "<%= gem_name %>/api/v1/shared/error"
|
|
55
|
+
# end
|
|
56
|
+
|
|
57
|
+
# it "returns status 404" do
|
|
58
|
+
# expect(response.status).to eq 404
|
|
46
59
|
# end
|
|
47
60
|
# end
|
|
48
61
|
end
|
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
|
|
2
2
|
# describe "#<%= action_name %>" do
|
|
3
|
-
|
|
4
|
-
# let
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
|
|
8
|
-
#
|
|
3
|
+
|
|
4
|
+
# let(:action) do
|
|
5
|
+
# { controller: "<%= gem_name %>/#{ root }", action: "<%= action_name %>" }
|
|
6
|
+
# end
|
|
7
|
+
|
|
8
|
+
# subject(:request) { { <%= action_type %>: "/#{ root }/something" } }
|
|
9
|
+
|
|
10
|
+
# it "is routable in json" do
|
|
11
|
+
# expect(request).to route_to action.merge(format: "json")
|
|
9
12
|
# end
|
|
10
13
|
# end
|
|
@@ -2,9 +2,10 @@ require "spec_helper"
|
|
|
2
2
|
|
|
3
3
|
module <%= module_name %>
|
|
4
4
|
describe "<%= file_name %>" do
|
|
5
|
+
|
|
5
6
|
# Add this line if your project is a Rails engine, not the application:
|
|
6
7
|
# routes { <%= module_name %>::Engine.routes }
|
|
7
8
|
|
|
8
|
-
# let
|
|
9
|
+
# let(:root) { "api/v1/<%= file_name %>" }
|
|
9
10
|
end
|
|
10
11
|
end
|
|
@@ -11,13 +11,13 @@ module Hexx
|
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
def add_spec
|
|
14
|
-
template "module_spec.erb", "spec/#{ gem_name }_spec.rb", skip: true
|
|
14
|
+
template "module_spec.erb", "spec/lib/#{ gem_name }_spec.rb", skip: true
|
|
15
15
|
end
|
|
16
16
|
|
|
17
17
|
def insert_setting_spec
|
|
18
18
|
inject_template_into_file(
|
|
19
19
|
"dependency_setting_spec.erb",
|
|
20
|
-
"spec/#{ gem_name }_spec.rb",
|
|
20
|
+
"spec/lib/#{ gem_name }_spec.rb",
|
|
21
21
|
before: "\nend"
|
|
22
22
|
)
|
|
23
23
|
end
|
|
@@ -29,6 +29,22 @@ module Hexx
|
|
|
29
29
|
before: "\nend"
|
|
30
30
|
)
|
|
31
31
|
end
|
|
32
|
+
|
|
33
|
+
def add_initializer
|
|
34
|
+
template(
|
|
35
|
+
"initializer.erb",
|
|
36
|
+
"spec/dummy/config/initializers/#{ gem_name }.rb",
|
|
37
|
+
skip: true
|
|
38
|
+
)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def insert_initializer_setting
|
|
42
|
+
inject_template_into_file(
|
|
43
|
+
"initializer_setting.erb",
|
|
44
|
+
"spec/dummy/config/initializers/#{ gem_name }.rb",
|
|
45
|
+
after: " do |config|"
|
|
46
|
+
)
|
|
47
|
+
end
|
|
32
48
|
end
|
|
33
49
|
end
|
|
34
50
|
end
|
|
@@ -1,32 +1,37 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
# describe ".<%= file_name %>_name" do
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
# it "is public" do
|
|
6
6
|
# expect(subject).to respond_to(:<%= file_name %>_name).with(0).arguments
|
|
7
7
|
# end
|
|
8
8
|
# end
|
|
9
9
|
|
|
10
10
|
# describe ".<%= file_name %>" do
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
# it "is public" do
|
|
13
13
|
# expect(subject).to respond_to(:<%= file_name %>).with(0).arguments
|
|
14
14
|
# end
|
|
15
15
|
# end
|
|
16
16
|
|
|
17
17
|
# describe ".<%= file_name %>_name=" do
|
|
18
|
-
|
|
19
|
-
#
|
|
20
|
-
#
|
|
18
|
+
|
|
19
|
+
# around do |example|
|
|
20
|
+
# restore = subject.<%= file_name %>_name
|
|
21
|
+
# subject.<%= file_name %>_name = nil
|
|
22
|
+
# example.run
|
|
23
|
+
# subject.<%= file_name %>_name = restore
|
|
24
|
+
# end
|
|
25
|
+
|
|
21
26
|
# it "is public" do
|
|
22
27
|
# expect(subject).to respond_to(:<%= file_name %>_name=).with(1).argument
|
|
23
28
|
# end
|
|
24
|
-
|
|
29
|
+
|
|
25
30
|
# it "sets a <%= file_name %>_name" do
|
|
26
31
|
# expect { subject.<%= file_name %>_name = "TestClass" }
|
|
27
32
|
# .to change { subject.<%= file_name %>_name }.from(nil).to "TestClass"
|
|
28
33
|
# end
|
|
29
|
-
|
|
34
|
+
|
|
30
35
|
# it "sets a <%= file_name %>" do
|
|
31
36
|
# expect { subject.<%= file_name %>_name = "TestClass" }
|
|
32
37
|
# .to change { subject.<%= file_name %> }.from(nil).to TestClass
|