docx_manager_client 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/docx_manager_client.gemspec +27 -0
- data/lib/docx_manager_client.rb +18 -0
- data/lib/docx_manager_client/connection.rb +66 -0
- data/lib/docx_manager_client/logger.rb +23 -0
- data/lib/docx_manager_client/model.rb +9 -0
- data/lib/docx_manager_client/model_additions/belongs_to_docx_template.rb +73 -0
- data/lib/docx_manager_client/model_additions/docx_template.rb +54 -0
- data/lib/docx_manager_client/version.rb +3 -0
- metadata +100 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 220ebbb2f4e89ea757e7deef16d1df7a3b8f0108105fd3c7bf4d92db66a62322
|
4
|
+
data.tar.gz: 9302f4d2a0d7033dbbdaba79c37343070d720fe8fcae88903945fbb6cdae30b5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 151a4e8ab801e8099138cb1606b137dbcf9f43461a8d85eabe8cee3b1d6adbb0c06f53b87a789568800d45a7cbc27493f549a43d89f059e2a02cafb67362b948
|
7
|
+
data.tar.gz: 40261aac0d5239ae89c71705367544f88cb2a1298ff61b8eefc74820c04d13300d21b6c328d57d1e2d306e6319e0f1fe79d8278c4b9e91e1d4dba445d07544db
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'docx_manager_client/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "docx_manager_client"
|
9
|
+
s.version = DocxManagerClient::VERSION
|
10
|
+
s.authors = ["Bader Sader"]
|
11
|
+
s.email = ["bader.bahjat@gmail.com"]
|
12
|
+
|
13
|
+
s.homepage = 'https://github.com/baderSader/docx_manager_client'
|
14
|
+
s.summary = 'a rails client for the project DocxManagerServer'
|
15
|
+
s.description = 'a client for the porject DocxManagerServer that server docx into pdf and png ..etc please check:{{URL}}'
|
16
|
+
s.platform = Gem::Platform::RUBY
|
17
|
+
s.license = 'MIT'
|
18
|
+
|
19
|
+
s.files = `git ls-files lib init.rb docx_manager_client.gemspec`.split($INPUT_RECORD_SEPARATOR)
|
20
|
+
s.require_paths = ['lib']
|
21
|
+
|
22
|
+
s.required_ruby_version = '>= 2.4.0'
|
23
|
+
|
24
|
+
s.add_runtime_dependency 'activemodel', '>= 5'
|
25
|
+
s.add_runtime_dependency 'faraday_middleware', '~> 1.0.0'
|
26
|
+
s.add_runtime_dependency 'hashie', '~> 4.1', '>= 4.0.0'
|
27
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require "docx_manager_client/version"
|
2
|
+
|
3
|
+
require "docx_manager_client/logger"
|
4
|
+
require "docx_manager_client/connection"
|
5
|
+
require "docx_manager_client/model"
|
6
|
+
|
7
|
+
module DocxManagerClient
|
8
|
+
class DependencyError < StandardError; end
|
9
|
+
end
|
10
|
+
include DocxManagerClient::Logger
|
11
|
+
include DocxManagerClient::Connection
|
12
|
+
|
13
|
+
require "active_model/callbacks"
|
14
|
+
ActiveModel::Callbacks.include(DocxManagerClient::Model)
|
15
|
+
|
16
|
+
ActiveSupport.on_load(:active_record) do
|
17
|
+
extend DocxManagerClient::Model
|
18
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'faraday_middleware'
|
2
|
+
require 'hashie'
|
3
|
+
|
4
|
+
module DocxManagerClient
|
5
|
+
module Connection
|
6
|
+
class ConfigMissing < StandardError; end
|
7
|
+
|
8
|
+
def self.docx_server_api(method, path, body = {})
|
9
|
+
response = docx_server_json.send(method, path, body)
|
10
|
+
[response.status, Hashie::Mash.new(response.body)]
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.docx_server_api_multipart(method, path, payload)
|
14
|
+
response = docx_server_multipart.send(method, path, payload)
|
15
|
+
[response.status, Hashie::Mash.new(response.body)]
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.docx_server_headers
|
19
|
+
{
|
20
|
+
'client' => docx_manager_api_key,
|
21
|
+
'Authorization' => docx_manager_token,
|
22
|
+
'User-Agent' => "DocxManagerClient #{DocxManagerClient::VERSION}"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.docx_server_json
|
27
|
+
@docx_server_json ||= Faraday.new(url: "#{docx_manager_server_path}/api/v1", headers: docx_server_headers) do |f|
|
28
|
+
f.request :json
|
29
|
+
f.use :instrumentation
|
30
|
+
f.response :json
|
31
|
+
f.adapter :net_http
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.docx_server_multipart
|
36
|
+
@docx_server_multipart ||= Faraday.new(url: "#{docx_manager_server_path}/api/v1", headers: docx_server_headers) do |f|
|
37
|
+
f.request :multipart
|
38
|
+
f.request :url_encoded
|
39
|
+
f.use :instrumentation
|
40
|
+
f.response :json
|
41
|
+
f.adapter :net_http
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.docx_manager_server_path
|
46
|
+
exist = ENV['DOCX_MANAGER_SERVER_PATH'] || Rails.application.secrets[:docx_manager_server_path]
|
47
|
+
raise ConfigMissing.new("ENV['DOCX_MANAGER_SERVER_PATH'] or Rails.application.secrets[:docx_manager_server_path] not exist") if exist.blank?
|
48
|
+
|
49
|
+
exist.to_s
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.docx_manager_api_key
|
53
|
+
exist = ENV['DOCX_MANAGER_API_KEY'] || Rails.application.secrets[:docx_manager_api_key]
|
54
|
+
raise ConfigMissing.new("ENV['DOCX_MANAGER_API_KEY'] or Rails.application.secrets[:docx_manager_api_key] not exist") if exist.blank?
|
55
|
+
|
56
|
+
exist.to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.docx_manager_token
|
60
|
+
exist = ENV['DOCX_MANAGER_TOKEN'] || Rails.application.secrets[:docx_manager_token]
|
61
|
+
raise ConfigMissing.new("ENV['DOCX_MANAGER_TOKEN'] or Rails.application.secrets[:docx_manager_token] not exist") if exist.blank?
|
62
|
+
|
63
|
+
exist.to_s
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module DocxManagerClient
|
2
|
+
module Logger
|
3
|
+
|
4
|
+
def self.logger
|
5
|
+
@@logger ||= defined?(Rails) ? Rails.logger : Logger.new(STDOUT)
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.logger=(logger)
|
9
|
+
@@logger = logger
|
10
|
+
end
|
11
|
+
|
12
|
+
ActiveSupport::Notifications.subscribe('request.faraday') do |name, starts, ends, _, env|
|
13
|
+
url = env[:url]
|
14
|
+
http_method = env[:method].to_s.upcase
|
15
|
+
duration = (ends - starts)
|
16
|
+
response = env.response.body
|
17
|
+
info = "\e[96m \e[1m DocxManagerClient \e[0m \e[33m #{url.host} #{http_method}\e[0m \e[92m #{env.status}\e[0m \e[1m \e[32m(#{duration} seconds) \e[0m \e[4m#{url.request_uri}\e[0m"
|
18
|
+
debug = "DocxManagerClient::#{response}"
|
19
|
+
DocxManagerClient::Logger.logger.info info
|
20
|
+
DocxManagerClient::Logger.logger.debug debug
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require_relative './model_additions/belongs_to_docx_template.rb'
|
2
|
+
require_relative './model_additions/docx_template.rb'
|
3
|
+
|
4
|
+
module DocxManagerClient
|
5
|
+
module Model
|
6
|
+
include DocxManagerClient::ModelAdditions::BelongsToDocxTemplate
|
7
|
+
include DocxManagerClient::ModelAdditions::DocxTemplate
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
module DocxManagerClient
|
2
|
+
module ModelAdditions
|
3
|
+
module BelongsToDocxTemplate
|
4
|
+
|
5
|
+
def belongs_to_docx_template(name:, belongs_to:, template_type:)
|
6
|
+
# dependency check
|
7
|
+
raise DocxManagerClient::DependencyError.new("#{self.name} dose not have relation 'belongs_to :#{belongs_to}'") unless self.reflect_on_all_associations(:belongs_to).map(&:name).include?(belongs_to.to_sym)
|
8
|
+
|
9
|
+
# attr_accessor
|
10
|
+
attr_accessor :"#{name}_docx_file"
|
11
|
+
|
12
|
+
# callbacks
|
13
|
+
after_save :"post_#{name}_docx"
|
14
|
+
after_destroy :"delete_#{name}_docx"
|
15
|
+
|
16
|
+
# instance methods
|
17
|
+
define_method "#{name}_docx_path" do
|
18
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:get, send("#{name}_docx_request_paht"))
|
19
|
+
docx_response_attr(status, response, :docx_url)
|
20
|
+
end
|
21
|
+
|
22
|
+
define_method "#{name}_pdf_path" do
|
23
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:get, send("#{name}_docx_request_paht"))
|
24
|
+
docx_response_attr(status, response, :pdf_url)
|
25
|
+
end
|
26
|
+
|
27
|
+
define_method "#{name}_png_path" do
|
28
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:get, send("#{name}_docx_request_paht"))
|
29
|
+
docx_response_attr(status, response, :png_url)
|
30
|
+
end
|
31
|
+
|
32
|
+
define_method "post_#{name}_docx" do
|
33
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:post, send("#{name}_docx_request_paht"), send("#{name}_request_attributes"))
|
34
|
+
docx_response_attr(status, response)
|
35
|
+
end
|
36
|
+
|
37
|
+
define_method "delete_#{name}_docx" do
|
38
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:delete, send("#{name}_docx_request_paht"), send("#{name}_request_attributes"))
|
39
|
+
docx_response_attr(status, response)
|
40
|
+
end
|
41
|
+
|
42
|
+
# private methods
|
43
|
+
define_method :docx_response_attr do |status, response, attr = nil|
|
44
|
+
if status < 300
|
45
|
+
attr.nil? ? response.data : response.data.attributes.send(attr)
|
46
|
+
else
|
47
|
+
response.errors
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
define_method "#{name}_docx_request_paht" do
|
52
|
+
reference_record_id = send("#{belongs_to}_id")
|
53
|
+
reference_record_type = self.class.reflect_on_association(belongs_to).klass.name
|
54
|
+
record_id = id
|
55
|
+
record_type = self.class.name
|
56
|
+
"templates/#{template_type}/#{reference_record_type}/#{reference_record_id}/generated_documents/#{record_type}/#{record_id}"
|
57
|
+
end
|
58
|
+
|
59
|
+
define_method "#{name}_request_attributes" do
|
60
|
+
{ request_attributes: send("#{name}_docx_hash") }
|
61
|
+
end
|
62
|
+
|
63
|
+
define_method "#{name}_docx_hash" do
|
64
|
+
raise NotImplementedError,
|
65
|
+
"\e[1m\e[91m#{self.class}\e[0m belongs_to_docx_template :#{name} but didn't define \e[91m'#{name}_docx_hash'\e[0m"
|
66
|
+
end
|
67
|
+
|
68
|
+
private :docx_response_attr, "#{name}_docx_hash".to_sym, "#{name}_docx_request_paht".to_sym, "#{name}_request_attributes".to_sym
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module DocxManagerClient
|
2
|
+
module ModelAdditions
|
3
|
+
module DocxTemplate
|
4
|
+
def docx_template(template_type:)
|
5
|
+
|
6
|
+
# attr_accessor
|
7
|
+
attr_accessor :"#{template_type}_docx_file"
|
8
|
+
|
9
|
+
# callbacks
|
10
|
+
after_save :"post_#{template_type}_document"
|
11
|
+
after_destroy :"delete_#{template_type}_document"
|
12
|
+
|
13
|
+
# instance methods
|
14
|
+
define_method "#{template_type}_docx_path" do
|
15
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:get, send("#{template_type}_docx_request_paht"))
|
16
|
+
docx_response_attr(status, response, :docx_url)
|
17
|
+
end
|
18
|
+
|
19
|
+
define_method "post_#{template_type}_document" do
|
20
|
+
return unless send("#{template_type}_docx_file").present?
|
21
|
+
|
22
|
+
file = Faraday::FilePart.new(
|
23
|
+
send("#{template_type}_docx_file").tempfile.path,
|
24
|
+
send("#{template_type}_docx_file").content_type,
|
25
|
+
send("#{template_type}_docx_file").original_filename
|
26
|
+
)
|
27
|
+
payload = { template: { document: file } }
|
28
|
+
status, response = DocxManagerClient::Connection.docx_server_api_multipart(:post, send("#{template_type}_docx_request_paht"), payload)
|
29
|
+
docx_response_attr(status, response, :docx_url)
|
30
|
+
end
|
31
|
+
|
32
|
+
define_method "delete_#{template_type}_document" do
|
33
|
+
status, response = DocxManagerClient::Connection.docx_server_api(:delete, send("#{template_type}_docx_request_paht"))
|
34
|
+
docx_response_attr(status, response)
|
35
|
+
end
|
36
|
+
|
37
|
+
# private methods
|
38
|
+
define_method :docx_response_attr do |status, response, attr = nil|
|
39
|
+
if status < 300
|
40
|
+
attr.nil? ? response.data : response.data.attributes.send(attr)
|
41
|
+
else
|
42
|
+
response.errors
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
define_method "#{template_type}_docx_request_paht" do
|
47
|
+
"templates/#{template_type}/#{self.class.name}/#{id}"
|
48
|
+
end
|
49
|
+
|
50
|
+
private :docx_response_attr, "#{template_type}_docx_request_paht".to_sym
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
metadata
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: docx_manager_client
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bader Sader
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-04-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: hashie
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.1'
|
48
|
+
- - ">="
|
49
|
+
- !ruby/object:Gem::Version
|
50
|
+
version: 4.0.0
|
51
|
+
type: :runtime
|
52
|
+
prerelease: false
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - "~>"
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '4.1'
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 4.0.0
|
61
|
+
description: a client for the porject DocxManagerServer that server docx into pdf
|
62
|
+
and png ..etc please check:{{URL}}
|
63
|
+
email:
|
64
|
+
- bader.bahjat@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- docx_manager_client.gemspec
|
70
|
+
- lib/docx_manager_client.rb
|
71
|
+
- lib/docx_manager_client/connection.rb
|
72
|
+
- lib/docx_manager_client/logger.rb
|
73
|
+
- lib/docx_manager_client/model.rb
|
74
|
+
- lib/docx_manager_client/model_additions/belongs_to_docx_template.rb
|
75
|
+
- lib/docx_manager_client/model_additions/docx_template.rb
|
76
|
+
- lib/docx_manager_client/version.rb
|
77
|
+
homepage: https://github.com/baderSader/docx_manager_client
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata: {}
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 2.4.0
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubygems_version: 3.1.4
|
97
|
+
signing_key:
|
98
|
+
specification_version: 4
|
99
|
+
summary: a rails client for the project DocxManagerServer
|
100
|
+
test_files: []
|