litera 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 +7 -0
- data/README.md +125 -0
- data/Rakefile +19 -0
- data/app/assets/config/litera_manifest.js +1 -0
- data/app/assets/stylesheets/litera/application.css +15 -0
- data/app/assets/stylesheets/litera/main.css +14 -0
- data/app/controllers/litera/application_controller.rb +19 -0
- data/app/controllers/litera/messages_controller.rb +13 -0
- data/app/helpers/litera/application_helper.rb +7 -0
- data/app/jobs/litera/application_job.rb +6 -0
- data/app/jobs/litera/message_job.rb +9 -0
- data/app/models/litera/application_record.rb +7 -0
- data/app/models/litera/message.rb +11 -0
- data/app/views/layouts/litera/application.html.erb +13 -0
- data/app/views/litera/messages/index.html.erb +27 -0
- data/app/views/litera/messages/show.html.erb +32 -0
- data/config/routes.rb +3 -0
- data/db/migrate/20221102211322_create_litera_messages.rb +15 -0
- data/lib/generators/litera/install_generator.rb +14 -0
- data/lib/generators/litera/templates/litera.rb +16 -0
- data/lib/litera/configuration.rb +13 -0
- data/lib/litera/engine.rb +13 -0
- data/lib/litera/errors/not_authorized.rb +8 -0
- data/lib/litera/version.rb +5 -0
- data/lib/litera.rb +10 -0
- data/lib/tasks/litera_tasks.rake +4 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 43ce216fa357aed945907939fea46e685daa7d6408f96a97921cf23e1aec769e
|
4
|
+
data.tar.gz: 21bd3b5811723594dd6305c492722c8c119ea7e7f39493eac631b7934224ab60
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6bfae89f0ac76b687b3ab7af8eb99355d1ba6ecb9b6b659cc459d3373bd3cb4716362287d38f2149391f30557322f6b975c9de007a476ac5ffe3a20099171746
|
7
|
+
data.tar.gz: f98eb603ef6522e0499da967c7cfe93e67365255c8ee0e8a8cedf667d21e41702b96502f22f2dfaf2d26b035c4ef2e26bca1c0206b4df018ae149f9d79f2db73
|
data/README.md
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
# Litera - Messages Dashboard
|
2
|
+
|
3
|
+
This rails engine aims to provide a simple dasboard for the messages
|
4
|
+
received in your application regardless the services you are using to
|
5
|
+
handle your messages (GooglePubSub, Amazon SQS, Apache Kafka, etc) in
|
6
|
+
order to easily track and debug the data in your received data.
|
7
|
+
|
8
|
+
## Installation
|
9
|
+
|
10
|
+
Add `Litera` to your application's Gemfile:
|
11
|
+
|
12
|
+
```ruby
|
13
|
+
gem "litera"
|
14
|
+
```
|
15
|
+
|
16
|
+
And then install litera:
|
17
|
+
|
18
|
+
```bash
|
19
|
+
rails g litera:install
|
20
|
+
```
|
21
|
+
|
22
|
+
Install litera migrations:
|
23
|
+
|
24
|
+
```bash
|
25
|
+
rails g litera:install:migrations
|
26
|
+
```
|
27
|
+
|
28
|
+
Run pending migrations:
|
29
|
+
|
30
|
+
```bash
|
31
|
+
rails db:migrate
|
32
|
+
```
|
33
|
+
|
34
|
+
Add the following line to your `app/assets/config/manifest.js`:
|
35
|
+
|
36
|
+
```javascript
|
37
|
+
//= link litera/application.css
|
38
|
+
```
|
39
|
+
|
40
|
+
Lastly, mount litera engine in your `config/routes.rb`:
|
41
|
+
|
42
|
+
```bash
|
43
|
+
Rails.application.routes.draw do
|
44
|
+
mount Litera::Engine => "/litera"
|
45
|
+
...
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
## Configuration
|
50
|
+
|
51
|
+
Configure what is the name of the method that returns your current user
|
52
|
+
and how he will be authorized to access the messages dashboard.
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
Litera.setup do |config|
|
56
|
+
# Configure what is the name of the method that returns the current
|
57
|
+
# logged in user in your application.
|
58
|
+
# config.litera_user = :current_user
|
59
|
+
|
60
|
+
# Setup the name of the main application controller in your application.
|
61
|
+
# config.parent_controller = "ApplicationController"
|
62
|
+
|
63
|
+
# Define how the current user will be authorized ot not to access the
|
64
|
+
# messages dashboard.
|
65
|
+
# config.authorization = -> (user) do
|
66
|
+
# user.admin?
|
67
|
+
# end
|
68
|
+
end
|
69
|
+
```
|
70
|
+
|
71
|
+
## Usage
|
72
|
+
|
73
|
+
Track your messages inmmediately after you received them using:
|
74
|
+
|
75
|
+
```ruby
|
76
|
+
Litera::Message.create!({
|
77
|
+
service: :google_pub_sub,
|
78
|
+
body: message.body,
|
79
|
+
metadata: message.attributes,
|
80
|
+
external_id: message.message_id,
|
81
|
+
published_at: message.published_at
|
82
|
+
})
|
83
|
+
```
|
84
|
+
|
85
|
+
You can use an active job if you want to save it in background:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
Litera::MessageJob.perform_later({
|
89
|
+
service: :google_pub_sub,
|
90
|
+
body: message.body,
|
91
|
+
metadata: message.attributes,
|
92
|
+
external_id: message.message_id,
|
93
|
+
published_at: message.published_at
|
94
|
+
})
|
95
|
+
```
|
96
|
+
|
97
|
+
## Development
|
98
|
+
|
99
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then,
|
100
|
+
run `rake spec` to run the tests. You can also run `bin/console` for an
|
101
|
+
interactive prompt that will allow you to experiment.
|
102
|
+
|
103
|
+
To install this gem onto your local machine, run `bundle exec rake install`.
|
104
|
+
To release a new version, update the version number in `version.rb`, and
|
105
|
+
then run `bundle exec rake release`, which will create a git tag for the
|
106
|
+
version, push git commits and the created tag, and push the `.gem` file
|
107
|
+
to [rubygems.org](https://rubygems.org).
|
108
|
+
|
109
|
+
## Contributing
|
110
|
+
|
111
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/amco/litera-rb.
|
112
|
+
This project is intended to be a safe, welcoming space for collaboration, and
|
113
|
+
contributors are expected to adhere to the
|
114
|
+
[code of conduct](https://github.com/amco/litera-rb/blob/master/CODE_OF_CONDUCT.md).
|
115
|
+
|
116
|
+
## License
|
117
|
+
|
118
|
+
The gem is available as open source under the terms of the
|
119
|
+
[MIT License](https://opensource.org/licenses/MIT).
|
120
|
+
|
121
|
+
## Code of Conduct
|
122
|
+
|
123
|
+
Everyone interacting in the Litera project's codebases, issue trackers, chat rooms
|
124
|
+
and mailing lists is expected to follow the
|
125
|
+
[code of conduct](https://github.com/amco/litera-rb/blob/master/CODE_OF_CONDUCT.md).
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
|
5
|
+
APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__)
|
6
|
+
load "rails/tasks/engine.rake"
|
7
|
+
|
8
|
+
load "rails/tasks/statistics.rake"
|
9
|
+
|
10
|
+
require "bundler/gem_tasks"
|
11
|
+
require "rspec/core/rake_task"
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new(:spec)
|
14
|
+
|
15
|
+
require "rubocop/rake_task"
|
16
|
+
|
17
|
+
RuboCop::RakeTask.new
|
18
|
+
|
19
|
+
task default: %i[spec rubocop]
|
@@ -0,0 +1 @@
|
|
1
|
+
//= link_directory ../stylesheets/litera .css
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
* This is a manifest file that'll be compiled into application.css, which will include all the files
|
3
|
+
* listed below.
|
4
|
+
*
|
5
|
+
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
|
6
|
+
* or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
|
7
|
+
*
|
8
|
+
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
|
9
|
+
* compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
|
10
|
+
* files in this directory. Styles in this file should be added after the last require_* statement.
|
11
|
+
* It is generally better to create a new file per style scope.
|
12
|
+
*
|
13
|
+
*= require_tree .
|
14
|
+
*= require_self
|
15
|
+
*/
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Litera
|
4
|
+
class ApplicationController < Litera.parent_controller.constantize
|
5
|
+
before_action :authorize_litera_user
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def litera_user
|
10
|
+
send(Litera.litera_user)
|
11
|
+
end
|
12
|
+
|
13
|
+
def authorize_litera_user
|
14
|
+
if !Litera.authorization.call(litera_user)
|
15
|
+
raise Litera::Errors::NotAuthorized
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Litera
|
2
|
+
class Message < ApplicationRecord
|
3
|
+
validates :body, presence: true
|
4
|
+
validates :service, presence: true
|
5
|
+
validates :metadata, presence: true
|
6
|
+
validates :external_id, presence: true
|
7
|
+
validates :published_at, presence: true
|
8
|
+
|
9
|
+
scope :ordered, -> { order(published_at: :desc) }
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
<h1><%= Litera::Message.model_name.human(count: 2) %></h1>
|
2
|
+
|
3
|
+
<table width="100%">
|
4
|
+
<thead>
|
5
|
+
<tr>
|
6
|
+
<th><%= Litera::Message.human_attribute_name(:published_at) %></th>
|
7
|
+
<th><%= Litera::Message.human_attribute_name(:service) %></th>
|
8
|
+
<th><%= Litera::Message.human_attribute_name(:id) %></th>
|
9
|
+
<th><%= Litera::Message.human_attribute_name(:metadata) %></th>
|
10
|
+
<th></th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
|
14
|
+
<tbody>
|
15
|
+
<% @messages.each do |message| %>
|
16
|
+
<tr>
|
17
|
+
<td><%= l(message.published_at) %></td>
|
18
|
+
<td><%= message.service %></td>
|
19
|
+
<td><%= message.external_id %></td>
|
20
|
+
<td><%= message.metadata.to_s.truncate(50).html_safe %></td>
|
21
|
+
<td><%= link_to t(".show"), message %></td>
|
22
|
+
</tr>
|
23
|
+
<% end %>
|
24
|
+
</body>
|
25
|
+
</table>
|
26
|
+
|
27
|
+
<%== pagy_nav(@pagy) %>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<h1>Message: <%= @message.external_id %></h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tbody>
|
5
|
+
<tr>
|
6
|
+
<th><%= Litera::Message.human_attribute_name(:published_at) %></th>
|
7
|
+
<td><%= l(@message.published_at) %></td>
|
8
|
+
</tr>
|
9
|
+
|
10
|
+
<tr>
|
11
|
+
<th><%= Litera::Message.human_attribute_name(:service) %></th>
|
12
|
+
<td><%= @message.service %></td>
|
13
|
+
</tr>
|
14
|
+
|
15
|
+
<tr>
|
16
|
+
<th><%= Litera::Message.human_attribute_name(:id) %></th>
|
17
|
+
<td><%= @message.external_id %></td>
|
18
|
+
</tr>
|
19
|
+
|
20
|
+
<tr>
|
21
|
+
<th><%= Litera::Message.human_attribute_name(:metadata) %></th>
|
22
|
+
<td><pre><%= JSON.pretty_generate(@message.metadata) %></pre></td>
|
23
|
+
</tr>
|
24
|
+
|
25
|
+
<tr>
|
26
|
+
<th><%= Litera::Message.human_attribute_name(:body) %></th>
|
27
|
+
<td><pre><%= JSON.pretty_generate(@message.body) %></pre></td>
|
28
|
+
</tr>
|
29
|
+
</body>
|
30
|
+
</table>
|
31
|
+
|
32
|
+
<%= link_to t(".back"), messages_path %>
|
data/config/routes.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
class CreateLiteraMessages < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
create_table :litera_messages do |t|
|
4
|
+
t.jsonb :body, default: {}
|
5
|
+
t.jsonb :metadata, default: {}
|
6
|
+
t.string :service
|
7
|
+
t.string :external_id
|
8
|
+
t.datetime :published_at
|
9
|
+
|
10
|
+
t.timestamps
|
11
|
+
end
|
12
|
+
|
13
|
+
add_index :litera_messages, :published_at
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Litera
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
source_root File.expand_path("templates", __dir__)
|
7
|
+
desc "Creates litera initializer."
|
8
|
+
|
9
|
+
def create_initializer
|
10
|
+
template "litera.rb", "config/initializers/litera.rb"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
Litera.setup do |config|
|
4
|
+
# Configure what is the name of the method that returns the current
|
5
|
+
# logged in user in your application.
|
6
|
+
# config.litera_user = :current_user
|
7
|
+
|
8
|
+
# Setup the name of the main application controller in your application.
|
9
|
+
# config.parent_controller = "ApplicationController"
|
10
|
+
|
11
|
+
# Define how the current user will be authorized ot not to access the
|
12
|
+
# messages dashboard.
|
13
|
+
# config.authorization = -> (user) do
|
14
|
+
# user.admin?
|
15
|
+
# end
|
16
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Litera
|
4
|
+
module Configuration
|
5
|
+
mattr_accessor :litera_user, default: :current_user
|
6
|
+
mattr_accessor :parent_controller, default: "ApplicationController"
|
7
|
+
mattr_accessor :authorization, default: -> (user) { user.admin? }
|
8
|
+
|
9
|
+
def setup
|
10
|
+
yield(self) if block_given?
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Litera
|
4
|
+
class Engine < ::Rails::Engine
|
5
|
+
isolate_namespace Litera
|
6
|
+
|
7
|
+
config.generators do |g|
|
8
|
+
g.test_framework :rspec
|
9
|
+
g.fixture_replacement :factory_bot
|
10
|
+
g.factory_bot dir: "spec/factories"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
data/lib/litera.rb
ADDED
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: litera
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alejandro Gutiérrez
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-11-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pagy
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.0'
|
41
|
+
description: Rails engine that provides a simple dashboard to track received messages
|
42
|
+
in your application.
|
43
|
+
email:
|
44
|
+
- alejandrodevs@gmail.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- README.md
|
50
|
+
- Rakefile
|
51
|
+
- app/assets/config/litera_manifest.js
|
52
|
+
- app/assets/stylesheets/litera/application.css
|
53
|
+
- app/assets/stylesheets/litera/main.css
|
54
|
+
- app/controllers/litera/application_controller.rb
|
55
|
+
- app/controllers/litera/messages_controller.rb
|
56
|
+
- app/helpers/litera/application_helper.rb
|
57
|
+
- app/jobs/litera/application_job.rb
|
58
|
+
- app/jobs/litera/message_job.rb
|
59
|
+
- app/models/litera/application_record.rb
|
60
|
+
- app/models/litera/message.rb
|
61
|
+
- app/views/layouts/litera/application.html.erb
|
62
|
+
- app/views/litera/messages/index.html.erb
|
63
|
+
- app/views/litera/messages/show.html.erb
|
64
|
+
- config/routes.rb
|
65
|
+
- db/migrate/20221102211322_create_litera_messages.rb
|
66
|
+
- lib/generators/litera/install_generator.rb
|
67
|
+
- lib/generators/litera/templates/litera.rb
|
68
|
+
- lib/litera.rb
|
69
|
+
- lib/litera/configuration.rb
|
70
|
+
- lib/litera/engine.rb
|
71
|
+
- lib/litera/errors/not_authorized.rb
|
72
|
+
- lib/litera/version.rb
|
73
|
+
- lib/tasks/litera_tasks.rake
|
74
|
+
homepage: https://github.com/amco/litera-rb
|
75
|
+
licenses:
|
76
|
+
- MIT
|
77
|
+
metadata:
|
78
|
+
homepage_uri: https://github.com/amco/litera-rb
|
79
|
+
source_code_uri: https://github.com/amco/litera-rb
|
80
|
+
changelog_uri: https://github.com/amco/litera-rb/blob/master/CHANGELOG.md
|
81
|
+
rubygems_mfa_required: 'true'
|
82
|
+
post_install_message:
|
83
|
+
rdoc_options: []
|
84
|
+
require_paths:
|
85
|
+
- lib
|
86
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ">="
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 2.7.0
|
91
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - ">="
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
requirements: []
|
97
|
+
rubygems_version: 3.3.7
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: Rails engine dashboard for message tracking.
|
101
|
+
test_files: []
|