sapience 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +21 -0
  3. data/.simplecov +19 -16
  4. data/.travis.yml +3 -3
  5. data/CHANGELOG.md +4 -0
  6. data/Gemfile +0 -8
  7. data/README.md +5 -0
  8. data/config/default.yml +4 -0
  9. data/docker-compose.yml +14 -0
  10. data/lib/sapience/appender/stream.rb +0 -1
  11. data/lib/sapience/base.rb +34 -4
  12. data/lib/sapience/configuration.rb +41 -20
  13. data/lib/sapience/core_ext/hash.rb +10 -7
  14. data/lib/sapience/core_ext/symbol.rb +15 -0
  15. data/lib/sapience/core_ext/thread.rb +1 -0
  16. data/lib/sapience/extensions/action_cable/tagged_logger_proxy.rb +2 -0
  17. data/lib/sapience/extensions/action_controller/live.rb +2 -0
  18. data/lib/sapience/extensions/action_controller/log_subscriber.rb +76 -121
  19. data/lib/sapience/extensions/action_dispatch/debug_exceptions.rb +2 -0
  20. data/lib/sapience/extensions/action_view/log_subscriber.rb +16 -6
  21. data/lib/sapience/extensions/action_view/streaming_template_renderer.rb +2 -0
  22. data/lib/sapience/extensions/active_job/logging.rb +1 -1
  23. data/lib/sapience/extensions/active_model_serializers/logging.rb +7 -2
  24. data/lib/sapience/extensions/active_record/log_subscriber.rb +45 -29
  25. data/lib/sapience/extensions/rails/rack/logger.rb +1 -0
  26. data/lib/sapience/extensions/rails/rack/logger_info_as_debug.rb +2 -0
  27. data/lib/sapience/formatters/color.rb +0 -1
  28. data/lib/sapience/formatters/default.rb +0 -1
  29. data/lib/sapience/formatters/json.rb +0 -1
  30. data/lib/sapience/formatters/raw.rb +0 -1
  31. data/lib/sapience/log.rb +54 -35
  32. data/lib/sapience/logger.rb +50 -71
  33. data/lib/sapience/rails.rb +17 -20
  34. data/lib/sapience/sapience.rb +23 -27
  35. data/lib/sapience/subscriber.rb +1 -13
  36. data/lib/sapience/version.rb +1 -1
  37. data/lib/sapience.rb +4 -3
  38. data/sapience.gemspec +6 -1
  39. data/test_app/Gemfile +7 -0
  40. data/test_app/Rakefile +2 -0
  41. data/test_app/app/models/post.rb +1 -1
  42. data/test_app/app/views/posts/_form.html.slim +18 -0
  43. data/test_app/app/views/posts/edit.html.slim +8 -0
  44. data/test_app/app/views/posts/index.html.slim +25 -0
  45. data/test_app/app/views/posts/new.html.slim +5 -0
  46. data/test_app/app/views/posts/show.html.slim +15 -0
  47. data/test_app/app/workers/test_worker.rb +17 -0
  48. data/test_app/bin/sneakers +10 -0
  49. data/test_app/config/initializers/sneakers.rb +15 -0
  50. data/test_app/config/sapience_example.yml +24 -0
  51. data/test_app/db/migrate/{20160812093621_create_posts.rb → 20160902141445_create_posts.rb} +1 -1
  52. data/test_app/db/schema.rb +1 -1
  53. data/test_app/lib/external_sneaker.rb +46 -0
  54. data/test_app/spec/factories/posts.rb +7 -0
  55. data/test_app/spec/factories/users.rb +8 -0
  56. data/test_app/spec/rails_helper.rb +8 -3
  57. data/test_app/spec/requests/posts_spec.rb +2 -1
  58. data/test_app/spec/views/posts/edit.html.slim_spec.rb +17 -0
  59. data/test_app/spec/views/posts/index.html.slim_spec.rb +17 -0
  60. data/test_app/spec/views/posts/new.html.slim_spec.rb +17 -0
  61. data/test_app/spec/views/posts/show.html.slim_spec.rb +14 -0
  62. data/test_app/spec/workers/test_worker_spec.rb +36 -0
  63. data/test_app.simplecov +19 -0
  64. metadata +95 -15
  65. data/.coveralls.yml +0 -1
  66. data/lib/sapience/extensions/action_controller/log_subscriber_processing.rb +0 -24
  67. data/test_app/app/views/posts/_form.html.erb +0 -32
  68. data/test_app/app/views/posts/create.html.erb +0 -2
  69. data/test_app/app/views/posts/destroy.html.erb +0 -2
  70. data/test_app/app/views/posts/edit.html.erb +0 -6
  71. data/test_app/app/views/posts/index.html.erb +0 -31
  72. data/test_app/app/views/posts/new.html.erb +0 -5
  73. data/test_app/app/views/posts/show.html.erb +0 -19
  74. data/test_app/app/views/posts/update.html.erb +0 -2
@@ -6,6 +6,8 @@ abort("The Rails environment is running in production mode!") if Rails.env.produ
6
6
  require "spec_helper"
7
7
  require "rspec/rails"
8
8
  require "rspec/its"
9
+ require "rspec/wait"
10
+ require_relative "../../spec/support/file_helper"
9
11
 
10
12
  Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
11
13
 
@@ -14,6 +16,7 @@ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
14
16
  ActiveRecord::Migration.maintain_test_schema!
15
17
 
16
18
  RSpec.configure do |config|
19
+ config.include FileHelper
17
20
  # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
18
21
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
19
22
 
@@ -25,14 +28,16 @@ RSpec.configure do |config|
25
28
  Sapience.reset!
26
29
  end
27
30
 
28
- config.before(:suite) do
31
+ config.before(:each) do
29
32
  FileUtils.cp(
30
33
  Rails.root.join("spec/fixtures/sapience.yml"),
31
34
  Rails.root.join("config/sapience.yml"),
32
35
  )
33
36
  end
34
37
 
35
- config.after(:suite) do
36
- FileUtils.rm(Rails.root.join("config/sapience.yml"))
38
+ config.after(:each) do
39
+ sapience_config = Rails.root.join("config/sapience.yml")
40
+ FileUtils.rm(sapience_config) if File.exist?(sapience_config)
37
41
  end
42
+ config.include FactoryGirl::Syntax::Methods
38
43
  end
@@ -1,8 +1,9 @@
1
1
  require "rails_helper"
2
2
 
3
- RSpec.describe "Posts", type: :request do
3
+ describe "Posts", type: :request do
4
4
  describe "GET /posts" do
5
5
  it "works! (now write some real specs)" do
6
+ create :post
6
7
  get posts_path
7
8
  expect(response).to have_http_status(200)
8
9
  end
@@ -0,0 +1,17 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe "posts/edit", type: :view do
4
+ let(:post) { create(:post, title: "Title", body: "Body") }
5
+ before(:each) do
6
+ @post = assign(:post, post)
7
+ end
8
+
9
+ it "renders the edit post form" do
10
+ render
11
+
12
+ assert_select "form[action=?][method=?]", post_path(@post), "post" do
13
+ assert_select "input#post_title[name=?]", "post[title]"
14
+ assert_select "input#post_body[name=?]", "post[body]"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe "posts/index", type: :view do
4
+ let(:posts) { [create(:post, title: "Title", body: "Body"), create(:post)] }
5
+ before(:each) do
6
+ assign(:posts, posts)
7
+ end
8
+
9
+ it "renders a list of posts" do
10
+ render
11
+ assert_select "tr>td", text: "Title", count: 1
12
+ assert_select "tr>td", text: "Body", count: 1
13
+
14
+ assert_select "tr>td", text: "This is a post", count: 1
15
+ assert_select "tr>td", text: "It has a lot of content", count: 1
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe "posts/new", type: :view do
4
+ let(:post) { build :post }
5
+ before(:each) do
6
+ assign(:post, post)
7
+ end
8
+
9
+ it "renders new post form" do
10
+ render
11
+
12
+ assert_select "form[action=?][method=?]", posts_path, "post" do
13
+ assert_select "input#post_title[name=?]", "post[title]"
14
+ assert_select "input#post_body[name=?]", "post[body]"
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ require "rails_helper"
2
+
3
+ RSpec.describe "posts/show", type: :view do
4
+ let(:post) { create(:post, title: "Title", body: "Body") }
5
+ before(:each) do
6
+ @post = assign(:post, post)
7
+ end
8
+
9
+ it "renders attributes in <p>" do
10
+ render
11
+ expect(rendered).to match(/Title/)
12
+ expect(rendered).to match(/Body/)
13
+ end
14
+ end
@@ -0,0 +1,36 @@
1
+ require "rails_helper"
2
+ require "serverengine"
3
+ require "sneakers"
4
+ require "sneakers/runner"
5
+ require "external_sneaker"
6
+
7
+ describe TestWorker, "This is manual labor as we can't verify that sneakers is running", :skip do
8
+ include FileHelper
9
+ let(:message) do
10
+ {
11
+ title: "Cool",
12
+ body: "Hot",
13
+ }
14
+ end
15
+ let(:logger) { Sapience[described_class] }
16
+
17
+ before do
18
+ @sneakers_worker = ExternalSneaker.new("rake sneakers:run")
19
+ @sneakers_worker.start
20
+
21
+ Sneakers.publish(
22
+ message.to_json,
23
+ to_queue: described_class::QUEUE_NAME,
24
+ routing_key: described_class::ROUTING_KEY,
25
+ )
26
+ end
27
+
28
+ after do
29
+ delete_file("config/sapience.yml")
30
+ delete_file(described_class::VERIFICATION_FILE)
31
+ end
32
+
33
+ it "runs properly" do
34
+ wait(30.seconds).for { File.exist?(described_class::VERIFICATION_FILE) }.to eq(true)
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ require "simplecov-json"
2
+ require "codeclimate-test-reporter"
3
+ require "coveralls"
4
+
5
+ CodeClimate::TestReporter.start
6
+ SimpleCov.maximum_coverage_drop 1
7
+
8
+ SimpleCov.formatters = [
9
+ SimpleCov::Formatter::HTMLFormatter,
10
+ SimpleCov::Formatter::JSONFormatter,
11
+ CodeClimate::TestReporter::Formatter,
12
+ Coveralls::SimpleCov::Formatter,
13
+ ]
14
+
15
+ SimpleCov.start do
16
+ add_filter "/spec/"
17
+ add_filter "/bin/"
18
+ add_filter "/gemfiles/"
19
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sapience
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mikael Henriksson
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-09-01 00:00:00.000000000 Z
12
+ date: 2016-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: concurrent-ruby
@@ -138,7 +138,35 @@ dependencies:
138
138
  - !ruby/object:Gem::Version
139
139
  version: '0'
140
140
  - !ruby/object:Gem::Dependency
141
- name: codeclimate-test-reporter
141
+ name: pry-nav
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: sentry-raven
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ - !ruby/object:Gem::Dependency
169
+ name: dogstatsd-ruby
142
170
  requirement: !ruby/object:Gem::Requirement
143
171
  requirements:
144
172
  - - ">="
@@ -152,7 +180,49 @@ dependencies:
152
180
  - !ruby/object:Gem::Version
153
181
  version: '0'
154
182
  - !ruby/object:Gem::Dependency
155
- name: coveralls
183
+ name: rails
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: 5.0.0.1
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - "~>"
194
+ - !ruby/object:Gem::Version
195
+ version: 5.0.0.1
196
+ - !ruby/object:Gem::Dependency
197
+ name: grape
198
+ requirement: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ type: :development
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - ">="
208
+ - !ruby/object:Gem::Version
209
+ version: '0'
210
+ - !ruby/object:Gem::Dependency
211
+ name: active_model_serializers
212
+ requirement: !ruby/object:Gem::Requirement
213
+ requirements:
214
+ - - "~>"
215
+ - !ruby/object:Gem::Version
216
+ version: 0.10.0
217
+ type: :development
218
+ prerelease: false
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - "~>"
222
+ - !ruby/object:Gem::Version
223
+ version: 0.10.0
224
+ - !ruby/object:Gem::Dependency
225
+ name: codeclimate-test-reporter
156
226
  requirement: !ruby/object:Gem::Requirement
157
227
  requirements:
158
228
  - - ">="
@@ -189,7 +259,7 @@ executables:
189
259
  extensions: []
190
260
  extra_rdoc_files: []
191
261
  files:
192
- - ".coveralls.yml"
262
+ - ".codeclimate.yml"
193
263
  - ".gitignore"
194
264
  - ".rspec"
195
265
  - ".ruby-version"
@@ -218,12 +288,12 @@ files:
218
288
  - lib/sapience/configuration.rb
219
289
  - lib/sapience/configuration/grape.rb
220
290
  - lib/sapience/core_ext/hash.rb
291
+ - lib/sapience/core_ext/symbol.rb
221
292
  - lib/sapience/core_ext/thread.rb
222
293
  - lib/sapience/descendants.rb
223
294
  - lib/sapience/extensions/action_cable/tagged_logger_proxy.rb
224
295
  - lib/sapience/extensions/action_controller/live.rb
225
296
  - lib/sapience/extensions/action_controller/log_subscriber.rb
226
- - lib/sapience/extensions/action_controller/log_subscriber_processing.rb
227
297
  - lib/sapience/extensions/action_dispatch/debug_exceptions.rb
228
298
  - lib/sapience/extensions/action_view/log_subscriber.rb
229
299
  - lib/sapience/extensions/action_view/streaming_template_renderer.rb
@@ -249,6 +319,7 @@ files:
249
319
  - lib/sapience/subscriber.rb
250
320
  - lib/sapience/version.rb
251
321
  - sapience.gemspec
322
+ - test_app.simplecov
252
323
  - test_app/.gitignore
253
324
  - test_app/.rspec
254
325
  - test_app/.ruby-version
@@ -277,18 +348,17 @@ files:
277
348
  - test_app/app/views/layouts/application.html.erb
278
349
  - test_app/app/views/layouts/mailer.html.erb
279
350
  - test_app/app/views/layouts/mailer.text.erb
280
- - test_app/app/views/posts/_form.html.erb
281
- - test_app/app/views/posts/create.html.erb
282
- - test_app/app/views/posts/destroy.html.erb
283
- - test_app/app/views/posts/edit.html.erb
284
- - test_app/app/views/posts/index.html.erb
285
- - test_app/app/views/posts/new.html.erb
286
- - test_app/app/views/posts/show.html.erb
287
- - test_app/app/views/posts/update.html.erb
351
+ - test_app/app/views/posts/_form.html.slim
352
+ - test_app/app/views/posts/edit.html.slim
353
+ - test_app/app/views/posts/index.html.slim
354
+ - test_app/app/views/posts/new.html.slim
355
+ - test_app/app/views/posts/show.html.slim
356
+ - test_app/app/workers/test_worker.rb
288
357
  - test_app/bin/bundle
289
358
  - test_app/bin/rails
290
359
  - test_app/bin/rake
291
360
  - test_app/bin/setup
361
+ - test_app/bin/sneakers
292
362
  - test_app/bin/update
293
363
  - test_app/config.ru
294
364
  - test_app/config/application.rb
@@ -307,16 +377,19 @@ files:
307
377
  - test_app/config/initializers/mime_types.rb
308
378
  - test_app/config/initializers/new_framework_defaults.rb
309
379
  - test_app/config/initializers/session_store.rb
380
+ - test_app/config/initializers/sneakers.rb
310
381
  - test_app/config/initializers/wrap_parameters.rb
311
382
  - test_app/config/locales/en.yml
312
383
  - test_app/config/puma.rb
313
384
  - test_app/config/routes.rb
385
+ - test_app/config/sapience_example.yml
314
386
  - test_app/config/secrets.yml
315
387
  - test_app/db/migrate/20160812092236_create_users.rb
316
- - test_app/db/migrate/20160812093621_create_posts.rb
388
+ - test_app/db/migrate/20160902141445_create_posts.rb
317
389
  - test_app/db/schema.rb
318
390
  - test_app/db/seeds.rb
319
391
  - test_app/lib/assets/.keep
392
+ - test_app/lib/external_sneaker.rb
320
393
  - test_app/lib/tasks/.keep
321
394
  - test_app/log/.keep
322
395
  - test_app/public/404.html
@@ -327,6 +400,8 @@ files:
327
400
  - test_app/public/favicon.ico
328
401
  - test_app/public/robots.txt
329
402
  - test_app/spec/controllers/posts_controller_spec.rb
403
+ - test_app/spec/factories/posts.rb
404
+ - test_app/spec/factories/users.rb
330
405
  - test_app/spec/fixtures/sapience.yml
331
406
  - test_app/spec/helpers/posts_helper_spec.rb
332
407
  - test_app/spec/integration/sapience_spec.rb
@@ -336,6 +411,11 @@ files:
336
411
  - test_app/spec/requests/posts_spec.rb
337
412
  - test_app/spec/routing/posts_routing_spec.rb
338
413
  - test_app/spec/spec_helper.rb
414
+ - test_app/spec/views/posts/edit.html.slim_spec.rb
415
+ - test_app/spec/views/posts/index.html.slim_spec.rb
416
+ - test_app/spec/views/posts/new.html.slim_spec.rb
417
+ - test_app/spec/views/posts/show.html.slim_spec.rb
418
+ - test_app/spec/workers/test_worker_spec.rb
339
419
  - test_app/tmp/.keep
340
420
  - test_app/vendor/assets/stylesheets/.keep
341
421
  homepage: https://github.com/reevoo/sapience
data/.coveralls.yml DELETED
@@ -1 +0,0 @@
1
- repo_token: 2pF5ERW8NKVYqrkGeGTvzGP7oYLidlQ41
@@ -1,24 +0,0 @@
1
- require "action_controller/log_subscriber"
2
-
3
- class ActionController::LogSubscriber # rubocop:disable ClassAndModuleChildren
4
- # Log as info to show Processing messages in production
5
- def start_processing(event)
6
- controller_logger(event).info { "Processing ##{event.payload[:action]}" }
7
- end
8
-
9
- private
10
-
11
- # Returns the logger for the supplied event.
12
- # Returns ActionController::Base.logger if no controller is present
13
- def controller_logger(event)
14
- if (controller = event.payload[:controller])
15
- begin
16
- controller.constantize.logger
17
- rescue NameError
18
- ActionController::Base.logger
19
- end
20
- else
21
- ActionController::Base.logger
22
- end
23
- end
24
- end
@@ -1,32 +0,0 @@
1
- <%= form_for(post) do |f| %>
2
- <% if post.errors.any? %>
3
- <div id="error_explanation">
4
- <h2><%= pluralize(post.errors.count, "error") %> prohibited this post from being saved:</h2>
5
-
6
- <ul>
7
- <% post.errors.full_messages.each do |message| %>
8
- <li><%= message %></li>
9
- <% end %>
10
- </ul>
11
- </div>
12
- <% end %>
13
-
14
- <div class="field">
15
- <%= f.label :title %>
16
- <%= f.text_field :title %>
17
- </div>
18
-
19
- <div class="field">
20
- <%= f.label :body %>
21
- <%= f.text_field :body %>
22
- </div>
23
-
24
- <div class="field">
25
- <%= f.label :author_id %>
26
- <%= f.text_field :author_id %>
27
- </div>
28
-
29
- <div class="actions">
30
- <%= f.submit %>
31
- </div>
32
- <% end %>
@@ -1,2 +0,0 @@
1
- <h1>Posts#create</h1>
2
- <p>Find me in app/views/posts/create.html.erb</p>
@@ -1,2 +0,0 @@
1
- <h1>Posts#destroy</h1>
2
- <p>Find me in app/views/posts/destroy.html.erb</p>
@@ -1,6 +0,0 @@
1
- <h1>Editing Post</h1>
2
-
3
- <%= render 'form', post: @post %>
4
-
5
- <%= link_to 'Show', @post %> |
6
- <%= link_to 'Back', posts_path %>
@@ -1,31 +0,0 @@
1
- <p id="notice"><%= notice %></p>
2
-
3
- <h1>Posts</h1>
4
-
5
- <table>
6
- <thead>
7
- <tr>
8
- <th>Title</th>
9
- <th>Body</th>
10
- <th>Author</th>
11
- <th colspan="3"></th>
12
- </tr>
13
- </thead>
14
-
15
- <tbody>
16
- <% @posts.each do |post| %>
17
- <tr>
18
- <td><%= post.title %></td>
19
- <td><%= post.body %></td>
20
- <td><%= post.author %></td>
21
- <td><%= link_to 'Show', post %></td>
22
- <td><%= link_to 'Edit', edit_post_path(post) %></td>
23
- <td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
24
- </tr>
25
- <% end %>
26
- </tbody>
27
- </table>
28
-
29
- <br>
30
-
31
- <%= link_to 'New Post', new_post_path %>
@@ -1,5 +0,0 @@
1
- <h1>New Post</h1>
2
-
3
- <%= render 'form', post: @post %>
4
-
5
- <%= link_to 'Back', posts_path %>
@@ -1,19 +0,0 @@
1
- <p id="notice"><%= notice %></p>
2
-
3
- <p>
4
- <strong>Title:</strong>
5
- <%= @post.title %>
6
- </p>
7
-
8
- <p>
9
- <strong>Body:</strong>
10
- <%= @post.body %>
11
- </p>
12
-
13
- <p>
14
- <strong>Author:</strong>
15
- <%= @post.author %>
16
- </p>
17
-
18
- <%= link_to 'Edit', edit_post_path(@post) %> |
19
- <%= link_to 'Back', posts_path %>
@@ -1,2 +0,0 @@
1
- <h1>Posts#update</h1>
2
- <p>Find me in app/views/posts/update.html.erb</p>