docx_manager_client 0.1.0

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