monitorsys-cheetah 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ae030d5f29a8258a77590ea096b244af549c3bf6419825d760f3840e9785c981
4
+ data.tar.gz: cf8c831542d900f314d314be0e60e5a342c79928c09ec5a492778c56628821d5
5
+ SHA512:
6
+ metadata.gz: 598eeea7bcd5c52b828988bd78c2a971436105108f0bc36ab3f703ad8d3d85b7f9e547865f71f5c15d43b03572149f083a0ea9dc00214d35faf1c3f727d356c9
7
+ data.tar.gz: b244a6483eb2267fafafd72f3b54f3341bb632d7f620f54b980210324a73e6df8850daba1c49d625d0d476518058d29d426d06e0f63a7cbc6221217aacef78f1
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ cheetah_production
10
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cheetah.gemspec
4
+ gemspec
5
+
6
+ gem 'rake', '~> 12.0'
7
+
8
+ gem 'sqlite3'
9
+ gem 'activerecord'
10
+ gem 'fileutils'
11
+ gem 'honeybadger'
12
+ gem 'stomp'
@@ -0,0 +1,52 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ monitorsys-cheetah (0.1.0)
5
+ activerecord
6
+ fileutils
7
+ honeybadger
8
+ rake (~> 12.0)
9
+ sqlite3
10
+ stomp
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ activemodel (6.1.0)
16
+ activesupport (= 6.1.0)
17
+ activerecord (6.1.0)
18
+ activemodel (= 6.1.0)
19
+ activesupport (= 6.1.0)
20
+ activesupport (6.1.0)
21
+ concurrent-ruby (~> 1.0, >= 1.0.2)
22
+ i18n (>= 1.6, < 2)
23
+ minitest (>= 5.1)
24
+ tzinfo (~> 2.0)
25
+ zeitwerk (~> 2.3)
26
+ concurrent-ruby (1.1.7)
27
+ fileutils (1.4.1)
28
+ honeybadger (4.7.2)
29
+ i18n (1.8.5)
30
+ concurrent-ruby (~> 1.0)
31
+ minitest (5.14.2)
32
+ rake (12.3.3)
33
+ sqlite3 (1.4.2)
34
+ stomp (1.4.10)
35
+ tzinfo (2.0.4)
36
+ concurrent-ruby (~> 1.0)
37
+ zeitwerk (2.4.2)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ activerecord
44
+ fileutils
45
+ honeybadger
46
+ monitorsys-cheetah!
47
+ rake (~> 12.0)
48
+ sqlite3
49
+ stomp
50
+
51
+ BUNDLED WITH
52
+ 2.1.4
@@ -0,0 +1,36 @@
1
+ # Cheetah
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cheetah`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'cheetah'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle install
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install cheetah
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/joaomangilli/cheetah.
36
+
@@ -0,0 +1,4 @@
1
+ require "bundler/gem_tasks"
2
+ import 'lib/tasks/migrate.rake'
3
+
4
+ task :default => :spec
@@ -0,0 +1,32 @@
1
+ require_relative 'lib/cheetah/version'
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'monitorsys-cheetah'
5
+ spec.version = Cheetah::VERSION
6
+ spec.authors = ["João Mangilli"]
7
+ spec.email = ["joao-luis-mangilli@hotmail.com"]
8
+
9
+ spec.summary = 'It is a gem for Fabio'
10
+ spec.homepage = 'http://monitorsys.com.br'
11
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.3.0")
12
+
13
+ spec.add_dependency('rake', '~> 12.0')
14
+ spec.add_dependency('sqlite3')
15
+ spec.add_dependency('activerecord')
16
+ spec.add_dependency('fileutils')
17
+ spec.add_dependency('stomp')
18
+ spec.add_dependency('honeybadger')
19
+
20
+ spec.metadata["homepage_uri"] = spec.homepage
21
+ # spec.metadata["source_code_uri"] = "TODO: Put your gem's public repo URL here."
22
+ # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
23
+
24
+ # Specify which files should be added to the gem when it is released.
25
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
26
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
27
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
28
+ end
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+ end
@@ -0,0 +1,9 @@
1
+ require 'sqlite3'
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.establish_connection(
5
+ adapter: 'sqlite3',
6
+ database: 'cheetah_production',
7
+ pool: 100,
8
+ timeout: 50000
9
+ )
@@ -0,0 +1,16 @@
1
+ require 'stomp'
2
+ require 'open-uri'
3
+ require 'fileutils'
4
+ require 'honeybadger' unless ENV['HONEYBADGER_API_KEY'].to_s.empty?
5
+
6
+ require_relative '../config/sqllite3'
7
+ require_relative 'cheetah/models/application_record'
8
+ require_relative 'cheetah/models/configuration'
9
+ require_relative 'cheetah/models/invoice'
10
+ require_relative 'cheetah/services/event_receiver'
11
+ require_relative 'cheetah/services/file_downloader'
12
+ require_relative 'cheetah/services/queue_listener'
13
+
14
+ module Cheetah
15
+
16
+ end
@@ -0,0 +1,5 @@
1
+ module Cheetah
2
+ class ApplicationRecord < ActiveRecord::Base
3
+ self.abstract_class = true
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Cheetah
2
+ class Configuration < ApplicationRecord
3
+ after_save :create_directory
4
+
5
+ private
6
+
7
+ def create_directory
8
+ return if directory.nil?
9
+
10
+ unless File.directory?(directory)
11
+ FileUtils.mkdir_p(directory)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ module Cheetah
2
+ class Invoice < ApplicationRecord
3
+ def head_office?
4
+ cnpj && cnpj[11].to_i == 1
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,70 @@
1
+ module Cheetah
2
+ class EventReceiver
3
+ attr_reader :data
4
+
5
+ def initialize(data)
6
+ @data = data
7
+ end
8
+
9
+ def self.receive!(data)
10
+ new(data).receive!
11
+ end
12
+
13
+ def receive!
14
+ return if invalid?
15
+
16
+ Cheetah::FileDownloader.download!(invoice)
17
+ end
18
+
19
+ private
20
+
21
+ def invoice
22
+ Cheetah::Invoice.create!(
23
+ s3_path: s3_path,
24
+ company_name: company_name,
25
+ kind: kind,
26
+ cnpj: cnpj,
27
+ year: year,
28
+ month: month,
29
+ canceled: canceled,
30
+ number: number
31
+ )
32
+ end
33
+
34
+ def invalid?
35
+ [s3_path, kind, cnpj, year, month, canceled, number].map(&:to_s).any?(&:empty?)
36
+ end
37
+
38
+ def s3_path
39
+ data[:s3_path]
40
+ end
41
+
42
+ def company_name
43
+ data[:company_name]
44
+ end
45
+
46
+ def kind
47
+ data[:kind]
48
+ end
49
+
50
+ def cnpj
51
+ data[:cnpj]
52
+ end
53
+
54
+ def year
55
+ data[:year]
56
+ end
57
+
58
+ def month
59
+ data[:month]
60
+ end
61
+
62
+ def canceled
63
+ data[:canceled]
64
+ end
65
+
66
+ def number
67
+ data[:number]
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,41 @@
1
+ module Cheetah
2
+ class FileDownloader
3
+ attr_reader :invoice
4
+
5
+ CANCELED_FOLDER_NAME = 'canceladas'
6
+
7
+ def initialize(invoice)
8
+ @invoice = invoice
9
+ end
10
+
11
+ def self.download!(invoice)
12
+ new(invoice).download!
13
+ end
14
+
15
+ def download!
16
+ File.open("#{directory}/#{invoice.number}.xml", 'wb') do |file|
17
+ file.write(open(invoice.s3_path).read)
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def directory
24
+ folder = "#{configuration.directory}/#{invoice.kind}/#{invoice.cnpj}/#{invoice.year}/#{invoice.month}#{canceled}"
25
+
26
+ unless File.directory?(folder)
27
+ FileUtils.mkdir_p(folder)
28
+ end
29
+
30
+ folder
31
+ end
32
+
33
+ def canceled
34
+ "/#{CANCELED_FOLDER_NAME}" if invoice.canceled?
35
+ end
36
+
37
+ def configuration
38
+ Cheetah::Configuration.first_or_initialize
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,54 @@
1
+ module Cheetah
2
+ class QueueListener
3
+ def listen
4
+ stomp_client.subscribe(topic) do |msg|
5
+ begin
6
+ data = JSON.parse(msg.body)
7
+
8
+ Cheetah::EventReceiver.receive!(data.to_h.with_indifferent_access)
9
+ rescue StandardError => e
10
+ puts "Um erro aconteceu!", e
11
+
12
+ Honeybadger.notify(e) unless ENV['HONEYBADGER_API_KEY'].to_s.empty?
13
+ end
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def stomp_client
20
+ @stomp_client ||= Stomp::Client.new(
21
+ hosts: [
22
+ login: login,
23
+ passcode: passcode,
24
+ host: host,
25
+ port: port,
26
+ ssl: true
27
+ ],
28
+ connect_headers: {
29
+ 'client-id' => 'cheetah'
30
+ }
31
+ )
32
+ end
33
+
34
+ def topic
35
+ ENV['CHEETAH_ACTIVE_MQ_TOPIC']
36
+ end
37
+
38
+ def login
39
+ ENV['CHEETAH_ACTIVE_MQ_LOGIN']
40
+ end
41
+
42
+ def passcode
43
+ ENV['CHEETAH_ACTIVE_MQ_PASSCODE']
44
+ end
45
+
46
+ def host
47
+ ENV['CHEETAH_ACTIVE_MQ_HOST']
48
+ end
49
+
50
+ def port
51
+ ENV['CHEETAH_ACTIVE_MQ_PORT']
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,3 @@
1
+ module Cheetah
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,25 @@
1
+ require_relative '../../config/sqllite3'
2
+
3
+ namespace :cheetah do
4
+ namespace :db do
5
+ task :migrate do
6
+ ActiveRecord::Schema.define do
7
+ create_table :configurations do |t|
8
+ t.string :directory
9
+ t.timestamps
10
+ end
11
+ create_table :invoices do |t|
12
+ t.string :s3_path
13
+ t.string :company_name
14
+ t.string :kind
15
+ t.string :cnpj
16
+ t.string :year
17
+ t.string :month
18
+ t.boolean :canceled
19
+ t.string :number
20
+ t.timestamps
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: monitorsys-cheetah
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - João Mangilli
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2021-01-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '12.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '12.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sqlite3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activerecord
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fileutils
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: stomp
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: honeybadger
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description:
98
+ email:
99
+ - joao-luis-mangilli@hotmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - ".gitignore"
105
+ - Gemfile
106
+ - Gemfile.lock
107
+ - README.md
108
+ - Rakefile
109
+ - cheetah.gemspec
110
+ - config/sqllite3.rb
111
+ - lib/cheetah.rb
112
+ - lib/cheetah/models/application_record.rb
113
+ - lib/cheetah/models/configuration.rb
114
+ - lib/cheetah/models/invoice.rb
115
+ - lib/cheetah/services/event_receiver.rb
116
+ - lib/cheetah/services/file_downloader.rb
117
+ - lib/cheetah/services/queue_listener.rb
118
+ - lib/cheetah/version.rb
119
+ - lib/tasks/migrate.rake
120
+ homepage: http://monitorsys.com.br
121
+ licenses: []
122
+ metadata:
123
+ homepage_uri: http://monitorsys.com.br
124
+ post_install_message:
125
+ rdoc_options: []
126
+ require_paths:
127
+ - lib
128
+ required_ruby_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 2.3.0
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ requirements: []
139
+ rubygems_version: 3.1.4
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: It is a gem for Fabio
143
+ test_files: []