hexx 7.1.0 → 8.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +9 -0
  4. data/.metrics +5 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +2 -63
  7. data/.travis.yml +5 -0
  8. data/.yardopts +2 -0
  9. data/Gemfile +3 -0
  10. data/Guardfile +16 -0
  11. data/{LICENSE.rdoc → LICENSE} +2 -2
  12. data/README.md +138 -0
  13. data/Rakefile +8 -14
  14. data/config/initializer.rb +5 -0
  15. data/config/initializers/capture.rb +19 -0
  16. data/config/initializers/sandbox.rb +16 -0
  17. data/config/initializers/sandbox/helpers.rb +38 -0
  18. data/config/initializers/sandbox/matchers.rb +19 -0
  19. data/config/metrics/STYLEGUIDE +230 -0
  20. data/config/metrics/cane.yml +5 -0
  21. data/config/metrics/churn.yml +6 -0
  22. data/config/metrics/flay.yml +2 -0
  23. data/config/metrics/metric_fu.yml +15 -0
  24. data/config/metrics/pippi.yml +3 -0
  25. data/config/metrics/reek.yml +1 -0
  26. data/config/metrics/roodi.yml +24 -0
  27. data/config/metrics/rubocop.yml +79 -0
  28. data/config/metrics/saikuro.yml +3 -0
  29. data/config/metrics/simplecov.yml +6 -0
  30. data/config/metrics/yardstick.yml +37 -0
  31. data/hexx.gemspec +24 -0
  32. data/lib/hexx.rb +8 -15
  33. data/lib/hexx/generator.rb +71 -0
  34. data/lib/hexx/generator/file.rb +83 -0
  35. data/lib/hexx/generator/folder.rb +68 -0
  36. data/lib/hexx/name.rb +122 -46
  37. data/lib/hexx/version.rb +6 -5
  38. data/spec/fixtures/root/_.beta +1 -0
  39. data/spec/fixtures/root/__omega +0 -0
  40. data/spec/fixtures/root/delta.erb.erb +0 -0
  41. data/spec/fixtures/root/gamma.rb.erb +1 -0
  42. data/spec/fixtures/root/subfolder/alfa.yml +0 -0
  43. data/spec/spec_helper.rb +5 -10
  44. data/spec/tests/lib/generator_spec.rb +126 -0
  45. data/spec/tests/lib/name_spec.rb +113 -0
  46. metadata +54 -168
  47. data/README.rdoc +0 -371
  48. data/lib/hexx/coercible.rb +0 -43
  49. data/lib/hexx/configurable.rb +0 -101
  50. data/lib/hexx/creators/base.rb +0 -103
  51. data/lib/hexx/creators/coercion.rb +0 -82
  52. data/lib/hexx/creators/dependency.rb +0 -87
  53. data/lib/hexx/creators/module_dependency.rb +0 -57
  54. data/lib/hexx/creators/parameter.rb +0 -40
  55. data/lib/hexx/dependable.rb +0 -51
  56. data/lib/hexx/helpers/exceptions.rb +0 -53
  57. data/lib/hexx/helpers/messages.rb +0 -26
  58. data/lib/hexx/helpers/parameters.rb +0 -47
  59. data/lib/hexx/helpers/validations.rb +0 -21
  60. data/lib/hexx/message.rb +0 -79
  61. data/lib/hexx/null.rb +0 -218
  62. data/lib/hexx/service.rb +0 -388
  63. data/lib/hexx/service/with_callbacks.rb +0 -104
  64. data/lib/hexx/service_invalid.rb +0 -73
  65. data/spec/hexx/coercible_spec.rb +0 -72
  66. data/spec/hexx/configurable_spec.rb +0 -93
  67. data/spec/hexx/dependable_spec.rb +0 -125
  68. data/spec/hexx/helpers/exceptions_spec.rb +0 -96
  69. data/spec/hexx/helpers/messages_spec.rb +0 -48
  70. data/spec/hexx/helpers/parameters_spec.rb +0 -96
  71. data/spec/hexx/helpers/validations_spec.rb +0 -32
  72. data/spec/hexx/message_spec.rb +0 -83
  73. data/spec/hexx/name_spec.rb +0 -80
  74. data/spec/hexx/null_spec.rb +0 -152
  75. data/spec/hexx/service_invalid_spec.rb +0 -46
  76. data/spec/hexx/service_spec.rb +0 -89
  77. data/spec/support/initializers/focus.rb +0 -5
  78. data/spec/support/initializers/garbage_collection.rb +0 -11
  79. data/spec/support/initializers/i18n.rb +0 -3
  80. data/spec/support/initializers/random_order.rb +0 -4
  81. data/spec/support/initializers/rspec.rb +0 -5
  82. data/spec/support/matchers/methods.rb +0 -11
@@ -1,73 +0,0 @@
1
- require_relative "message"
2
-
3
- module Hexx
4
-
5
- # The exception to be risen by invalid services.
6
- #
7
- # @example
8
- # service GetItem < Hexx::Service
9
- # allow_params :uuid
10
- # validates :uuid, presence: true
11
- # def run
12
- # validate!
13
- # end
14
- # end
15
- #
16
- # service = GetItem.new
17
- # service.run # => fails with the {Hexx::ServiceInvalid}.
18
- class ServiceInvalid < ::RuntimeError
19
-
20
- # @!attribute [r] service
21
- # @return [Hexx::Service] The invalid service object.
22
- attr_reader :service
23
-
24
- # @!scope class
25
- # @!method new(service)
26
- # Initializes the exception.
27
- #
28
- # @example
29
- # fail Hexx::ServiceInvalid.new service
30
- #
31
- # @param [Hexx::Service] service The invalid service.
32
- # @raise [ArgumentError] if the argument is not a service object.
33
- # @return [Hexx::ServiceInvalid] The exception.
34
-
35
- # @api hide
36
- def initialize(service)
37
- @service = service
38
- end
39
-
40
- # @!attribute [r] message
41
- # Returns a default text message for the exception.
42
- #
43
- # @example
44
- # error = Hexx::ServiceInvalid.new service
45
- # error.message # => "Service invalid: #<Hexx::Service... >"
46
- #
47
- # @return [String] The message.
48
- def message
49
- "Service invalid: #{ service.inspect }"
50
- end
51
-
52
- # @!attribute [r] messages
53
- # Returns a list of error messages from the service.
54
- #
55
- # @example
56
- # service.errors.add :base, "some error"
57
- #
58
- # error = Hexx::ServiceInvalid.new service
59
- # error.messages
60
- # # => [#<Hexx::Message @type="error" @text="some error" >]
61
- #
62
- # @return [Array<Hexx::Message>] The list of error messages.
63
- def messages
64
- errors.map { |text| Message.new type: "error", text: text }
65
- end
66
-
67
- private
68
-
69
- def errors
70
- service.errors.messages.values.flatten
71
- end
72
- end
73
- end
@@ -1,72 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Hexx
4
- describe Coercible do
5
-
6
- # ==========================================================================
7
- # Prepare environment
8
- # ==========================================================================
9
-
10
- before { class TestModel; extend Coercible; end }
11
- before { module TestModule; end }
12
- before { class TestCoercion < Struct.new(:string); end }
13
-
14
- let(:test_model) { TestModel }
15
- let(:test_module) { TestModule }
16
- let(:test_coercion) { TestCoercion }
17
-
18
- after { Hexx.send :remove_const, :TestCoercion }
19
- after { Hexx.send :remove_const, :TestModule }
20
- after { Hexx.send :remove_const, :TestModel }
21
-
22
- # ==========================================================================
23
- # Run tests
24
- # ==========================================================================
25
-
26
- describe ".attr_coerced" do
27
-
28
- context "when the name is neither type nor symbol" do
29
-
30
- it "fails with TypeError" do
31
- expect { test_model.send :attr_coerced, 1, type: test_coercion }
32
- .to raise_error(TypeError)
33
- end
34
- end
35
-
36
- context "when the name is empty" do
37
-
38
- it "fails with ArgumentError" do
39
- expect { test_model.send :attr_coerced, "", type: test_coercion }
40
- .to raise_error(ArgumentError)
41
- end
42
- end
43
-
44
- context "when no type is set" do
45
-
46
- it "fails with ArgumentError" do
47
- expect { test_model.send :attr_coerced, :name }
48
- .to raise_error(ArgumentError)
49
- end
50
- end
51
-
52
- context "when a type is not a class" do
53
-
54
- it "fails with TypeError" do
55
- expect { test_model.send :attr_coerced, :name, type: test_module }
56
- .to raise_error(TypeError)
57
- end
58
- end
59
-
60
- context "with valid arguments" do
61
-
62
- before { test_model.send :attr_coerced, :name, type: test_coercion }
63
- subject { test_model.new }
64
-
65
- it "coerces an attribute with given type" do
66
- subject.name = "some name"
67
- expect(subject.name).to be_kind_of test_coercion
68
- end
69
- end
70
- end
71
- end
72
- end
@@ -1,93 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Hexx
4
- describe Configurable do
5
-
6
- # Mocks gem core module to test dependencies from
7
- before { module Test; extend Configurable; end }
8
- after { Hexx.send :remove_const, :Test }
9
-
10
- let(:described_module) { Test }
11
-
12
- describe ".configure" do
13
-
14
- it "is defined" do
15
- expect(described_module).to respond_to :configure
16
- end
17
-
18
- it "yields block with self" do
19
- described_module.configure do |config|
20
- expect(config).to eq described_module
21
- end
22
- end
23
- end
24
-
25
- describe ".depends_on" do
26
-
27
- it "is defined" do
28
- expect(described_module).to respond_to :depends_on
29
- end
30
-
31
- it "accepts symbolic attributes" do
32
- expect { described_module.depends_on :item }.not_to raise_error
33
- end
34
-
35
- it "accepts string attributes" do
36
- expect { described_module.depends_on "item" }.not_to raise_error
37
- end
38
-
39
- it "accepts arrays" do
40
- expect { described_module.depends_on "item", [:item] }
41
- .not_to raise_error
42
- end
43
-
44
- it "accepts default option" do
45
- expect { described_module.depends_on :item, default: Hexx::Service }
46
- .not_to raise_error
47
- end
48
-
49
- it "fails when wrong object given" do
50
- expect { described_module.depends_on 1 }.to raise_error TypeError
51
- end
52
-
53
- it "fails when blank object given" do
54
- expect { described_module.depends_on "" }.to raise_error ArgumentError
55
- end
56
-
57
- it "adds dependencies getters" do
58
- described_module.depends_on :item, "user"
59
- expect(described_module).to respond_to :item
60
- expect(described_module).to respond_to :user
61
- end
62
-
63
- it "adds dependencies setters" do
64
- described_module.depends_on :item, "user"
65
- expect(described_module).to respond_to :item=
66
- expect(described_module).to respond_to :user=
67
- end
68
-
69
- context ":item" do
70
-
71
- before { described_module.depends_on :item }
72
-
73
- it "makes a setter to allow modules" do
74
- described_module.item = String
75
- expect(described_module.item).to eq String
76
- end
77
-
78
- it "makes a setter to require modules" do
79
- expect { described_module.item = :String }.to raise_error TypeError
80
- end
81
- end
82
-
83
- context ":item, default: Hexx::Service" do
84
-
85
- before { described_module.depends_on :item, default: Hexx::Service }
86
-
87
- it "sets default value for the item" do
88
- expect(described_module.item).to eq Hexx::Service
89
- end
90
- end
91
- end
92
- end
93
- end
@@ -1,125 +0,0 @@
1
- require "spec_helper"
2
-
3
- module Hexx
4
- describe Dependable do
5
-
6
- # ==========================================================================
7
- # Prepare environment
8
- # ==========================================================================
9
-
10
- before { class Test; extend Dependable; end }
11
- before { module TestModule; end }
12
- before { class TestClass; end }
13
-
14
- let(:described_class) { Test }
15
- let(:test_module) { TestModule }
16
- let(:test_class) { TestModule }
17
-
18
- after { Hexx.send :remove_const, :TestClass }
19
- after { Hexx.send :remove_const, :TestModule }
20
- after { Hexx.send :remove_const, :Test }
21
-
22
- # ==========================================================================
23
- # Run tests
24
- # ==========================================================================
25
-
26
- describe ".depends_on" do
27
-
28
- it "is private" do
29
- expect { described_class.depends_on :item }.to raise_error
30
- expect { described_class.send :depends_on, :item }.not_to raise_error
31
- end
32
-
33
- it "accepts string argument" do
34
- expect { described_class.send :depends_on, "item" }.not_to raise_error
35
- end
36
-
37
- it "requires non-empty argument" do
38
- expect { described_class.send :depends_on, "" }
39
- .to raise_error(ArgumentError)
40
- end
41
-
42
- it "requires string or symbol" do
43
- expect { described_class.send :depends_on, 1 }
44
- .to raise_error(TypeError)
45
- end
46
-
47
- it "accepts the :default option with class value" do
48
- expect { described_class.send :depends_on, :item, default: test_class }
49
- .not_to raise_error
50
- end
51
-
52
- it "accepts the :default option with module value" do
53
- expect { described_class.send :depends_on, :item, default: test_module }
54
- .not_to raise_error
55
- end
56
-
57
- it "accepts the :default option with nil" do
58
- expect { described_class.send :depends_on, :item, default: nil }
59
- .not_to raise_error
60
- end
61
-
62
- it "requires the :default option to be nil, class or module" do
63
- expect { described_class.send :depends_on, :item, default: 1 }
64
- .to raise_error { TypeError }
65
- end
66
-
67
- context "with a default implementation" do
68
-
69
- before { described_class.send :depends_on, :item, default: test_class }
70
- subject { described_class.new }
71
-
72
- it "declares a getter" do
73
- expect(subject).to respond_to :item
74
- end
75
-
76
- it "declares a setter" do
77
- expect(subject).to respond_to :item=
78
- expect { subject.item = described_class }
79
- .to change { subject.item }.to described_class
80
- end
81
-
82
- it "makes a setter to require module or class" do
83
- expect { subject.item = 1 }.to raise_error { TypeError }
84
- end
85
-
86
- it "sets implementation by default" do
87
- expect(subject.item).to eq test_class
88
- end
89
-
90
- it "resets implementation to default" do
91
- expect { subject.item = nil }.not_to change { subject.item }
92
- end
93
- end
94
-
95
- context "without a default implementation" do
96
-
97
- before { described_class.send :depends_on, :item }
98
- subject { described_class.new }
99
-
100
- it "declares a getter" do
101
- expect(subject).to respond_to :item
102
- end
103
-
104
- it "declares a setter" do
105
- expect(subject).to respond_to :item=
106
- subject.item = test_class
107
- expect(subject.item).to be test_class
108
- end
109
-
110
- it "makes a setter to require module or class" do
111
- expect { subject.item = 1 }.to raise_error(TypeError)
112
- end
113
-
114
- it "fails before the dependency not implemented" do
115
- expect { subject.item }.to raise_error(NotImplementedError)
116
- end
117
-
118
- it "fails when the dependency implementation resets" do
119
- subject.item = test_class
120
- expect { subject.item = nil }.to raise_error(NotImplementedError)
121
- end
122
- end
123
- end
124
- end
125
- end
@@ -1,96 +0,0 @@
1
- # encoding: utf-8
2
- require "spec_helper"
3
-
4
- module Hexx
5
- describe Helpers::Exceptions do
6
-
7
- before { class Test; include Helpers::Exceptions; end }
8
- after { Hexx.send :remove_const, :Test }
9
-
10
- let(:service_invalid) { Hexx::ServiceInvalid }
11
- let(:message) { Hexx::Message.new type: "error", text: "text" }
12
- let(:described_class) { Test }
13
- subject { described_class.new }
14
-
15
- it "includes Messages" do
16
- expect(described_class).to include Helpers::Messages
17
- end
18
-
19
- describe ".raises" do
20
-
21
- it "declares the specific StandardError exception(s)" do
22
- described_class.send :raises, :TestException
23
- exception = described_class.const_get :TestException
24
- expect(exception.new).to be_kind_of StandardError
25
- end
26
-
27
- it "accepts a list of values" do
28
- expect { described_class.send :raises, :One, :Two }.not_to raise_error
29
- expect(described_class.const_defined? :One).to be_truthy
30
- expect(described_class.const_defined? :Two).to be_truthy
31
- end
32
-
33
- it "accepts an array of values" do
34
- expect { described_class.send :raises, %w(One Two) }.not_to raise_error
35
- expect(described_class.const_defined? :One).to be_truthy
36
- expect(described_class.const_defined? :Two).to be_truthy
37
- end
38
-
39
- it "requires value" do
40
- expect { described_class.send :raises }.to raise_error ArgumentError
41
- end
42
-
43
- it "fails if non-string or non-symbol value given" do
44
- expect { described_class.send :raises, 1 }.to raise_error TypeError
45
- end
46
- end
47
-
48
- describe "#on_error" do
49
-
50
- it "fails with ServiceInvalid" do
51
- expect { subject.on_error [message] }.to raise_error service_invalid
52
- end
53
-
54
- it "adds errors to the service" do
55
- begin; subject.on_error [message]; rescue; end
56
- expect(subject.errors.messages).to eq(base: ["text"])
57
- end
58
- end
59
-
60
- describe "#escape" do
61
-
62
- it "yields a block" do
63
- value = "Hello!"
64
- result = subject.escape { value }
65
- expect(result).to eq value
66
- end
67
-
68
- context "when a block raises ServiceInvalid error" do
69
-
70
- let!(:exception) { service_invalid.new(subject) }
71
-
72
- it "re-raises the exception" do
73
- expect { subject.escape { fail exception } }
74
- .to raise_error { exception }
75
- end
76
- end
77
-
78
- context "when a block raises StandardError" do
79
-
80
- let(:run) { subject.escape { fail "text" } }
81
-
82
- it "re-raises the ServiceInvalid" do
83
- expect { run }.to raise_error service_invalid
84
- end
85
-
86
- it "adds error to the messages" do
87
- begin
88
- run
89
- rescue => err
90
- expect(err.messages).to contain_exactly message
91
- end
92
- end
93
- end
94
- end
95
- end
96
- end