monitorsys-cheetah 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []