roqua-support 0.1.9 → 0.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1991866262608934e88ac4b7d2cd0d794477ec72
4
- data.tar.gz: 0eb198caeb8ca15f35086ca0fb66b97611779195
3
+ metadata.gz: 548055897fac03f26d5dddd82f144fa64d34d813
4
+ data.tar.gz: f497700a4fffb165d1b8b9a8d5ddc486bd77c841
5
5
  SHA512:
6
- metadata.gz: f695a20d4bf268ec51a62ac3f3535b7078d4e395511df2ceadb81e685eddb2e3d34129fdceee704650fb52f9e39a9061c516ce09d57167c0843d16b58993c0ee
7
- data.tar.gz: 19bb1d53157b599e686067628cc0eaaab20a7e648a8a7ffebf90e3a4355afec1107456e356f94ad6906b5ecf6e8cd475ecd0035fd4ad4249ce650a7393d6c6e8
6
+ metadata.gz: c8936bf834d18d7799e200de067c5739132b617c1aaf9e5cfe5fb44d2734ea277abad62ee3d7ecf7a60df0429b803919c757c1e9191fc8fcb02fe7726570b831
7
+ data.tar.gz: 6040338582c978cd5b0b00ff7d3bffdf728862c3551af1d7d517f579e57d3edb515d813c41ac9cab8b3acbb9c9247386d9514d1638b3599643b5394c1b991609
data/.gitignore CHANGED
@@ -11,6 +11,8 @@ lib/bundler/man
11
11
  pkg
12
12
  rdoc
13
13
  spec/reports
14
+ spec/spec
15
+ spec/internal/log
14
16
  test/tmp
15
17
  test/version_tmp
16
- tmp
18
+ tmp
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.1.10 / 2014-10-30
2
+
3
+ * Added ActiveInteractionAwareResponder
4
+ * Added ApiErrorsResponder
5
+
1
6
  ## 0.1.9 / 2014-06-18
2
7
 
3
8
  * add Fabricate.clear_singletons! utility method
data/Gemfile CHANGED
@@ -6,4 +6,8 @@ gemspec
6
6
  group :test do
7
7
  gem 'guard-rspec', '~> 4.2.6'
8
8
  gem 'fuubar', '~> 1.3.2'
9
+ gem 'actionpack', '~> 4.0'
10
+ gem 'rspec-rails'
11
+ gem 'combustion', '~> 0.5.2'
12
+ gem 'active_interaction', '~> 1.0'
9
13
  end
data/Gemfile.lock CHANGED
@@ -7,75 +7,116 @@ PATH
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- activesupport (4.1.1)
10
+ actionpack (4.1.6)
11
+ actionview (= 4.1.6)
12
+ activesupport (= 4.1.6)
13
+ rack (~> 1.5.2)
14
+ rack-test (~> 0.6.2)
15
+ actionview (4.1.6)
16
+ activesupport (= 4.1.6)
17
+ builder (~> 3.1)
18
+ erubis (~> 2.7.0)
19
+ active_interaction (1.3.0)
20
+ activemodel (>= 3.2, < 5)
21
+ activemodel (4.1.6)
22
+ activesupport (= 4.1.6)
23
+ builder (~> 3.1)
24
+ activesupport (4.1.6)
11
25
  i18n (~> 0.6, >= 0.6.9)
12
26
  json (~> 1.7, >= 1.7.7)
13
27
  minitest (~> 5.1)
14
28
  thread_safe (~> 0.1)
15
29
  tzinfo (~> 1.1)
16
- celluloid (0.15.2)
17
- timers (~> 1.1.0)
18
- celluloid-io (0.15.0)
19
- celluloid (>= 0.15.0)
20
- nio4r (>= 0.5.0)
30
+ builder (3.2.2)
31
+ celluloid (0.16.0)
32
+ timers (~> 4.0.0)
21
33
  coderay (1.1.0)
34
+ combustion (0.5.2)
35
+ activesupport (>= 3.0.0)
36
+ railties (>= 3.0.0)
37
+ thor (>= 0.14.6)
22
38
  diff-lcs (1.2.5)
23
- ffi (1.9.3)
24
- formatador (0.2.4)
25
- fuubar (1.3.2)
39
+ erubis (2.7.0)
40
+ ffi (1.9.6)
41
+ formatador (0.2.5)
42
+ fuubar (1.3.3)
26
43
  rspec (>= 2.14.0, < 3.1.0)
27
- ruby-progressbar (~> 1.3)
28
- guard (2.4.0)
44
+ ruby-progressbar (~> 1.4)
45
+ guard (2.7.0)
29
46
  formatador (>= 0.2.4)
30
- listen (~> 2.1)
47
+ listen (~> 2.7)
31
48
  lumberjack (~> 1.0)
32
49
  pry (>= 0.9.12)
33
50
  thor (>= 0.18.1)
34
- guard-rspec (4.2.6)
51
+ guard-rspec (4.2.10)
35
52
  guard (~> 2.1)
36
53
  rspec (>= 2.14, < 4.0)
37
- i18n (0.6.9)
54
+ hitimes (1.2.2)
55
+ i18n (0.6.11)
38
56
  json (1.8.1)
39
- listen (2.5.0)
57
+ listen (2.7.11)
40
58
  celluloid (>= 0.15.2)
41
- celluloid-io (>= 0.15.0)
42
59
  rb-fsevent (>= 0.9.3)
43
60
  rb-inotify (>= 0.9)
44
- lumberjack (1.0.4)
61
+ lumberjack (1.0.9)
45
62
  method_source (0.8.2)
46
- minitest (5.3.5)
47
- nio4r (1.0.0)
48
- pry (0.9.12.6)
49
- coderay (~> 1.0)
50
- method_source (~> 0.8)
63
+ minitest (5.4.2)
64
+ pry (0.10.1)
65
+ coderay (~> 1.1.0)
66
+ method_source (~> 0.8.1)
51
67
  slop (~> 3.4)
52
- rake (10.1.1)
68
+ rack (1.5.2)
69
+ rack-test (0.6.2)
70
+ rack (>= 1.0)
71
+ railties (4.1.6)
72
+ actionpack (= 4.1.6)
73
+ activesupport (= 4.1.6)
74
+ rake (>= 0.8.7)
75
+ thor (>= 0.18.1, < 2.0)
76
+ rake (10.3.2)
53
77
  rb-fsevent (0.9.4)
54
- rb-inotify (0.9.3)
78
+ rb-inotify (0.9.5)
55
79
  ffi (>= 0.5.0)
56
- rspec (2.14.1)
57
- rspec-core (~> 2.14.0)
58
- rspec-expectations (~> 2.14.0)
59
- rspec-mocks (~> 2.14.0)
60
- rspec-core (2.14.7)
61
- rspec-expectations (2.14.5)
62
- diff-lcs (>= 1.1.3, < 2.0)
63
- rspec-mocks (2.14.6)
64
- ruby-progressbar (1.4.1)
65
- slop (3.4.7)
66
- thor (0.18.1)
80
+ rspec (3.0.0)
81
+ rspec-core (~> 3.0.0)
82
+ rspec-expectations (~> 3.0.0)
83
+ rspec-mocks (~> 3.0.0)
84
+ rspec-core (3.0.4)
85
+ rspec-support (~> 3.0.0)
86
+ rspec-expectations (3.0.4)
87
+ diff-lcs (>= 1.2.0, < 2.0)
88
+ rspec-support (~> 3.0.0)
89
+ rspec-mocks (3.0.4)
90
+ rspec-support (~> 3.0.0)
91
+ rspec-rails (3.0.2)
92
+ actionpack (>= 3.0)
93
+ activesupport (>= 3.0)
94
+ railties (>= 3.0)
95
+ rspec-core (~> 3.0.0)
96
+ rspec-expectations (~> 3.0.0)
97
+ rspec-mocks (~> 3.0.0)
98
+ rspec-support (~> 3.0.0)
99
+ rspec-support (3.0.4)
100
+ ruby-progressbar (1.6.0)
101
+ slop (3.6.0)
102
+ thor (0.19.1)
67
103
  thread_safe (0.3.4)
68
- timers (1.1.0)
69
- tzinfo (1.2.1)
104
+ timers (4.0.1)
105
+ hitimes
106
+ tzinfo (1.2.2)
70
107
  thread_safe (~> 0.1)
71
108
 
72
109
  PLATFORMS
73
110
  ruby
74
111
 
75
112
  DEPENDENCIES
113
+ actionpack (~> 4.0)
114
+ active_interaction (~> 1.0)
76
115
  bundler (~> 1.0)
116
+ combustion (~> 0.5.2)
77
117
  fuubar (~> 1.3.2)
78
118
  guard-rspec (~> 4.2.6)
79
119
  rake
80
120
  roqua-support!
81
121
  rspec (>= 2.12.0, < 4.0)
122
+ rspec-rails
data/README.md CHANGED
@@ -45,6 +45,37 @@ require 'roqua/support/request_logger'
45
45
  Roqua::Support::RequestLogger.attach_to :action_controller
46
46
  ```
47
47
 
48
+ ### Responders
49
+
50
+ #### option 1
51
+
52
+ Create responder including the required responder modules and use it in a controller.
53
+
54
+ ```ruby
55
+ class ApiResponder < ActionController::Responder
56
+ include Roqua::Responders::ApiErrorsResponder
57
+ include Roqua::Responders::ActiveInteractionAwareResponder
58
+ end
59
+ ```
60
+
61
+ ```
62
+ class ApiAreaController < ApplicationController
63
+ self.responder = ApiResponder
64
+ ...
65
+ ```
66
+
67
+ #### option 2
68
+
69
+ Use gem 'responders'
70
+
71
+ And add required responder modules in a controller.
72
+
73
+ ```
74
+ class ApiAreaController < ApplicationController
75
+ responders :flash, Roqua::Responders::ApiErrorsResponder, Roqua::Responders::ActiveInteractionAwareResponder
76
+ ...
77
+ ```
78
+
48
79
  ## Contributing
49
80
 
50
81
  1. Fork it
data/lib/roqua-support.rb CHANGED
@@ -1,2 +1,9 @@
1
1
  require "roqua-support/version"
2
2
  require "roqua/support"
3
+
4
+ module Roqua
5
+ module Responders
6
+ autoload :ApiErrorsResponder, 'roqua/responders/api_errors_responder'
7
+ autoload :ActiveInteractionAwareResponder, 'roqua/responders/active_interaction_aware_responder'
8
+ end
9
+ end
@@ -1,5 +1,5 @@
1
1
  module Roqua
2
2
  module Support
3
- VERSION = "0.1.9"
3
+ VERSION = "0.1.10"
4
4
  end
5
5
  end
@@ -0,0 +1,25 @@
1
+ # For json and xml, will render the result of an active_interaction operation if no errors where present.
2
+ # Otherwise renders the interaction
3
+ module Roqua
4
+ module Responders
5
+ module ActiveInteractionAwareResponder
6
+ def to_format
7
+ if resource.is_a?(ActiveInteraction::Base)
8
+ if resource.errors.empty?
9
+ @resource = resource.result
10
+ @resources[-1] = resource
11
+ end
12
+ end
13
+ super
14
+ end
15
+
16
+ def json_resource_errors
17
+ if !resource.is_a?(ActiveInteraction::Base) || resource.errors.empty?
18
+ super
19
+ else
20
+ {:errors => resource.errors.as_json}
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,15 @@
1
+ # Scopes json errors to the object-class:
2
+ #
3
+ # @example
4
+ # {errors: {person: name: ['blank']}}
5
+ #
6
+ # Does not play well with others, replaces json_resource_errors; when including multiple responders, ordering matters.
7
+ module Roqua
8
+ module Responders
9
+ module ApiErrorsResponder
10
+ def json_resource_errors
11
+ {:errors => {resource.class.name.underscore => resource.errors}}
12
+ end
13
+ end
14
+ end
15
+ end
@@ -27,7 +27,7 @@ module Roqua
27
27
  info("#{message}:finished", {duration: duration}.merge(options))
28
28
  value
29
29
  rescue => e
30
- error("#{message}:failed", {exception: e.class, message: e.message}.merge(options))
30
+ error("#{message}:failed", {exception: e.class.name, message: e.message}.merge(options))
31
31
  raise
32
32
  end
33
33
  end
@@ -0,0 +1,54 @@
1
+ require "spec_helper"
2
+
3
+ require 'roqua/responders/active_interaction_aware_responder'
4
+ class AIAResponder < ActionController::Responder
5
+ include Roqua::Responders::ActiveInteractionAwareResponder
6
+ end
7
+
8
+ require 'active_interaction'
9
+ class TestInteraction < ActiveInteraction::Base
10
+ string :some_string
11
+ def execute
12
+ {foo: some_string}
13
+ end
14
+ end
15
+
16
+ class ApplicationController < ActionController::Base
17
+ respond_to :json
18
+ end
19
+
20
+ describe Roqua::Responders::ActiveInteractionAwareResponder, type: :controller do
21
+ context 'with a valid interaction' do
22
+ controller(ApplicationController) do
23
+ self.responder = AIAResponder
24
+ def index
25
+ use_case = TestInteraction.run some_string: 'bla'
26
+ respond_with use_case
27
+ end
28
+ end
29
+
30
+ subject { get :index, format: :json }
31
+
32
+ it 'returns the result if valid' do
33
+ subject
34
+ expect(response.body).to eq '{"foo":"bla"}'
35
+ end
36
+
37
+ end
38
+
39
+ context 'with an invalid interaction' do
40
+ controller(ApplicationController) do
41
+ self.responder = AIAResponder
42
+ def index
43
+ use_case = TestInteraction.run
44
+ respond_with use_case
45
+ end
46
+ end
47
+ subject { post :index, format: :json }
48
+
49
+ it 'returns the interaction' do
50
+ subject
51
+ expect(response.body).to eq '{"errors":{"some_string":["is required"]}}'
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+ require 'roqua/responders/api_errors_responder'
3
+ class AEResponder < ActionController::Responder
4
+ include Roqua::Responders::ApiErrorsResponder
5
+ end
6
+
7
+ class ApplicationController < ActionController::Base
8
+ respond_to :json
9
+ end
10
+
11
+ class SomeModel
12
+ include ActiveModel::Model
13
+
14
+ attr_accessor :name
15
+ end
16
+
17
+ describe Roqua::Responders::ApiErrorsResponder, type: :controller do
18
+ context 'with an invalid model' do
19
+ controller(ApplicationController) do
20
+ self.responder = AEResponder
21
+ def index
22
+ sm = SomeModel.new name: 'foo'
23
+ sm.errors.add :name, "That is not a real name"
24
+ respond_with sm
25
+ end
26
+ end
27
+ subject { post :index, format: :json }
28
+
29
+ it 'returns the errors scoped on the object name' do
30
+ subject
31
+ expect(response.body).to eq '{"errors":{"some_model":{"name":["That is not a real name"]}}}'
32
+ end
33
+ end
34
+ end
@@ -1,3 +1,4 @@
1
+ require 'spec_helper'
1
2
  require 'roqua/support/errors'
2
3
 
3
4
  describe 'Error reporting' do
@@ -12,6 +13,7 @@ describe 'Error reporting' do
12
13
  let(:logwrapper) { Roqua::LogWrapper.new(logger) }
13
14
 
14
15
  before do
16
+ Rails.env = 'foo' # in test we don't log
15
17
  Roqua.logger = logwrapper
16
18
  end
17
19
 
@@ -85,4 +85,4 @@ module Roqua
85
85
  end
86
86
  end
87
87
  end
88
- end
88
+ end
@@ -0,0 +1,8 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ require 'combustion'
5
+
6
+ Combustion.initialize! :action_controller
7
+
8
+ require 'rspec/rails'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roqua-support
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marten Veldthuis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-19 00:00:00.000000000 Z
11
+ date: 2014-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -102,6 +102,8 @@ files:
102
102
  - lib/roqua/core_ext/enumerable/sort_by_alphanum.rb
103
103
  - lib/roqua/core_ext/fabrication/singleton.rb
104
104
  - lib/roqua/core_ext/fixnum/clamp.rb
105
+ - lib/roqua/responders/active_interaction_aware_responder.rb
106
+ - lib/roqua/responders/api_errors_responder.rb
105
107
  - lib/roqua/support.rb
106
108
  - lib/roqua/support/command_runner.rb
107
109
  - lib/roqua/support/errors.rb
@@ -114,10 +116,13 @@ files:
114
116
  - spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb
115
117
  - spec/roqua/core_ext/fabrication/singleton_spec.rb
116
118
  - spec/roqua/core_ext/fixnum/clamp_spec.rb
119
+ - spec/roqua/responders/active_interaction_aware_responder_spec.rb
120
+ - spec/roqua/responders/api_errors_responder_spec.rb
117
121
  - spec/roqua/support/errors_spec.rb
118
122
  - spec/roqua/support/logging_spec.rb
119
123
  - spec/roqua/support/request_logger_spec.rb
120
124
  - spec/roqua/support_spec.rb
125
+ - spec/spec_helper.rb
121
126
  homepage: https://github.com/roqua/healthy
122
127
  licenses:
123
128
  - MIT
@@ -138,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
143
  version: '0'
139
144
  requirements: []
140
145
  rubyforge_project:
141
- rubygems_version: 2.2.1
146
+ rubygems_version: 2.3.0
142
147
  signing_key:
143
148
  specification_version: 4
144
149
  summary: Helper objects and proxies used by a lot of RoQua applications
@@ -148,7 +153,11 @@ test_files:
148
153
  - spec/roqua/core_ext/enumerable/sort_by_alphanum_spec.rb
149
154
  - spec/roqua/core_ext/fabrication/singleton_spec.rb
150
155
  - spec/roqua/core_ext/fixnum/clamp_spec.rb
156
+ - spec/roqua/responders/active_interaction_aware_responder_spec.rb
157
+ - spec/roqua/responders/api_errors_responder_spec.rb
151
158
  - spec/roqua/support/errors_spec.rb
152
159
  - spec/roqua/support/logging_spec.rb
153
160
  - spec/roqua/support/request_logger_spec.rb
154
161
  - spec/roqua/support_spec.rb
162
+ - spec/spec_helper.rb
163
+ has_rdoc: