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 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
@@ -0,0 +1,3 @@
1
+ module DocxManagerClient
2
+ VERSION = "0.1.0"
3
+ 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: []