wolf_core 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/lib/wolf_core/application/application_service.rb +130 -0
- data/lib/wolf_core/application/salesforce_oauth_service.rb +24 -0
- data/lib/wolf_core/application/service_exception.rb +12 -0
- data/lib/wolf_core/infrastructure/http_data_source.rb +15 -0
- data/lib/wolf_core/utils/hash_extension.rb +26 -0
- data/lib/wolf_core/utils/object_extension.rb +9 -0
- data/lib/wolf_core/utils/require_utils.rb +10 -0
- data/lib/wolf_core/utils/result.rb +27 -0
- data/lib/wolf_core/version.rb +5 -0
- data/lib/wolf_core.rb +10 -0
- metadata +70 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9b284a7f298a9af0d3d5bba012296ae0c3097561fc68152d3c9c172dc4f51d83
|
4
|
+
data.tar.gz: 9836ec6f17456d430c81f91fdb753454b6fe4dcd14399c64026295f608fa4a23
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b56f79dec0d5ff8b128dd2bee0dada31b54c8df9b660923bb4274fd89d28c44a9099dcdff5776a666b0edf92146d69db63998f15b0527e6f0832b0be332543e7
|
7
|
+
data.tar.gz: e531e17cb5befd062079f8dd3a165ec8705a973039a080dfc0c7133766bb1f6e5a32f8f4fa6e714df9ab5a8e163033f2b8488f5962b2722477eca3152eac6914
|
@@ -0,0 +1,130 @@
|
|
1
|
+
module WolfCore
|
2
|
+
class ApplicationService
|
3
|
+
def call
|
4
|
+
process
|
5
|
+
rescue => e
|
6
|
+
if e.instance_of?(WolfCore::ServiceException)
|
7
|
+
return Result.failure(
|
8
|
+
error: e.error.to_h.merge({ backtrace: e.backtrace })
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Honeybadger.notify(e)
|
13
|
+
return Result.failure(error: { message: e.message, backtrace: e.backtrace })
|
14
|
+
end
|
15
|
+
|
16
|
+
def process
|
17
|
+
raise NotImplementedError
|
18
|
+
end
|
19
|
+
|
20
|
+
def raise_failed_result(result)
|
21
|
+
return if result.success?
|
22
|
+
|
23
|
+
raise_service_error(result.error.to_h)
|
24
|
+
end
|
25
|
+
|
26
|
+
def validate_presence(object, message)
|
27
|
+
return if object.present?
|
28
|
+
|
29
|
+
raise_service_error({ message: message })
|
30
|
+
end
|
31
|
+
|
32
|
+
def raise_service_error(error_data)
|
33
|
+
raise WolfCore::ServiceException, error_data
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_non_permitted_parameters(params, allowed_params)
|
37
|
+
permitted = params.slice(*allowed_params)
|
38
|
+
if permitted.blank?
|
39
|
+
raise_service_error({ message: "There are not permitted parameters"})
|
40
|
+
end
|
41
|
+
return permitted
|
42
|
+
end
|
43
|
+
|
44
|
+
def http_get(url:, headers: {}, query: nil)
|
45
|
+
WolfCore::HttpDataSource.http_get(url: url, headers: headers, query: query)
|
46
|
+
end
|
47
|
+
|
48
|
+
def http_post(url:, headers: {}, body: nil, query: nil)
|
49
|
+
WolfCore::HttpDataSource.http_post(url: url, headers: headers, query: query, body: body)
|
50
|
+
end
|
51
|
+
|
52
|
+
def barton_integration_http_post(path:, body:, error_message:)
|
53
|
+
domain_url = ENV['CURRENT_SAM_URL']
|
54
|
+
response = http_post(url: "#{domain_url}/#{path}", body: body)
|
55
|
+
validate_http_response(
|
56
|
+
response: response, message: error_message, error_data: { url: path }
|
57
|
+
)
|
58
|
+
response
|
59
|
+
end
|
60
|
+
|
61
|
+
def validate_http_response(response:, message:, error_data: nil)
|
62
|
+
unless response.code == 200
|
63
|
+
error_data = {
|
64
|
+
message: message,
|
65
|
+
response: parse_http_response(response)
|
66
|
+
}.merge(error_data || {})
|
67
|
+
raise_service_error(error_data)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def parse_http_response(response)
|
72
|
+
body = JSON.parse(response.body) rescue response.body
|
73
|
+
{
|
74
|
+
code: response.code,
|
75
|
+
body: body,
|
76
|
+
message: response.message,
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
def get_salesforce_access_token
|
81
|
+
result = WolfCore::SalesforceOauthService.new.call
|
82
|
+
raise_failed_result(result)
|
83
|
+
result.data.access_token
|
84
|
+
end
|
85
|
+
|
86
|
+
def get_salesforce_foreign_object(record_id:)
|
87
|
+
data = saleforce_http_get(
|
88
|
+
query: { calltype: 'getRecord', RecordId: record_id }
|
89
|
+
)
|
90
|
+
foreign_object = data.first
|
91
|
+
puts "foreign object is"
|
92
|
+
pp foreign_object
|
93
|
+
foreign_object
|
94
|
+
end
|
95
|
+
|
96
|
+
def saleforce_http_get(query: nil)
|
97
|
+
response = http_get(
|
98
|
+
url: ENV['SALESFORCE_URL'],
|
99
|
+
headers: { 'Authorization' => "Bearer #{@salesforce_access_token}" },
|
100
|
+
query: query
|
101
|
+
)
|
102
|
+
validate_salesforce_response(response)
|
103
|
+
JSON.parse(response.parsed_response)
|
104
|
+
end
|
105
|
+
|
106
|
+
def validate_salesforce_response(response)
|
107
|
+
return if response.code == 200
|
108
|
+
message = JSON.parse(response.body).first['message']
|
109
|
+
raise_service_error({ message: message })
|
110
|
+
end
|
111
|
+
|
112
|
+
def get_wolf_token
|
113
|
+
response = http_post(
|
114
|
+
query: { tenant: ENV['TENANT'] },
|
115
|
+
url: "#{ENV['WOLF_PLATFORM_URL']}/api/v1/sign_in",
|
116
|
+
body: {
|
117
|
+
email: ENV['WOLF_ADMIN_EMAIL'],
|
118
|
+
password: ENV['WOLF_ADMIN_PASSWORD']
|
119
|
+
}
|
120
|
+
)
|
121
|
+
validate_http_response(
|
122
|
+
response: response, message: 'Failed to get wolf token'
|
123
|
+
)
|
124
|
+
response_body = JSON.parse(response.body)
|
125
|
+
wolf_token = response_body.dig('user', 'authentication_token')
|
126
|
+
puts "wolf token is #{wolf_token}"
|
127
|
+
wolf_token
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module WolfCore
|
2
|
+
class SalesforceOauthService < WolfCore::ApplicationService
|
3
|
+
def process
|
4
|
+
response = http_post(
|
5
|
+
url: ENV['SALESFORCE_OAUTH_URL'],
|
6
|
+
headers: { 'Content-Type' => 'application/x-www-form-urlencoded' },
|
7
|
+
body: {
|
8
|
+
grant_type: ENV['SALESFORCE_OAUTH_GRANT_TYPE'],
|
9
|
+
username: ENV['SALESFORCE_OAUTH_USERNAME'],
|
10
|
+
password: ENV['SALESFORCE_OAUTH_PASSWORD'],
|
11
|
+
client_id: ENV['SALESFORCE_OAUTH_CLIENT_ID'],
|
12
|
+
client_secret: ENV['SALESFORCE_OAUTH_CLIENT_SECRET'],
|
13
|
+
}
|
14
|
+
)
|
15
|
+
if response.code == 200
|
16
|
+
access_token = JSON.parse(response.body)['access_token']
|
17
|
+
puts "salesforce access token is #{access_token}"
|
18
|
+
Result.success(data: { access_token: access_token })
|
19
|
+
else
|
20
|
+
Result.failure(error: { message: response.message, code: response.code, body: response.body })
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module WolfCore
|
2
|
+
module HttpDataSource
|
3
|
+
module_function
|
4
|
+
|
5
|
+
def http_get(url:, headers: {}, query: nil)
|
6
|
+
HTTParty.get(url, headers: headers, query: query)
|
7
|
+
end
|
8
|
+
|
9
|
+
def http_post(url:, headers: {}, query: nil, body: nil)
|
10
|
+
headers['Content-Type'] ||= 'application/json'
|
11
|
+
body = body&.to_json if headers['Content-Type'] == 'application/json'
|
12
|
+
HTTParty.post(url, headers: headers, query: query, body: body)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Hash
|
2
|
+
def with_indifferent_access
|
3
|
+
hash = self.dup
|
4
|
+
hash.extend IndifferentAccess
|
5
|
+
hash
|
6
|
+
end
|
7
|
+
|
8
|
+
module IndifferentAccess
|
9
|
+
def [](key)
|
10
|
+
fetch(key.to_s) { fetch(key.to_sym) { nil } }
|
11
|
+
end
|
12
|
+
|
13
|
+
def fetch(key, *extras)
|
14
|
+
super(key.to_s, *extras)
|
15
|
+
rescue KeyError
|
16
|
+
super(key.to_sym, *extras)
|
17
|
+
end
|
18
|
+
|
19
|
+
def has_key?(key)
|
20
|
+
key?(key.to_s) || key?(key.to_sym)
|
21
|
+
end
|
22
|
+
alias_method :include?, :has_key?
|
23
|
+
alias_method :key?, :has_key?
|
24
|
+
alias_method :member?, :has_key?
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module WolfCore
|
2
|
+
class Result
|
3
|
+
attr_accessor :data, :error
|
4
|
+
|
5
|
+
def initialize(success:, data: nil, error: nil)
|
6
|
+
@success = success
|
7
|
+
@data = data
|
8
|
+
@error = error
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.success(data: {})
|
12
|
+
Result.new(success: true, data: OpenStruct.new(data))
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.failure(error: {})
|
16
|
+
Result.new(success: false, error: OpenStruct.new(error))
|
17
|
+
end
|
18
|
+
|
19
|
+
def success?
|
20
|
+
@success
|
21
|
+
end
|
22
|
+
|
23
|
+
def failure?
|
24
|
+
!@success
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/wolf_core.rb
ADDED
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wolf_core
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Javier Roncallo
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-07-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: httparty
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Repository to store shared code among Ruby projects.
|
28
|
+
email:
|
29
|
+
- jroncallo96@gmail.com
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- lib/wolf_core.rb
|
35
|
+
- lib/wolf_core/application/application_service.rb
|
36
|
+
- lib/wolf_core/application/salesforce_oauth_service.rb
|
37
|
+
- lib/wolf_core/application/service_exception.rb
|
38
|
+
- lib/wolf_core/infrastructure/http_data_source.rb
|
39
|
+
- lib/wolf_core/utils/hash_extension.rb
|
40
|
+
- lib/wolf_core/utils/object_extension.rb
|
41
|
+
- lib/wolf_core/utils/require_utils.rb
|
42
|
+
- lib/wolf_core/utils/result.rb
|
43
|
+
- lib/wolf_core/version.rb
|
44
|
+
homepage: https://github.com/onewolfxyz/wolf_core
|
45
|
+
licenses: []
|
46
|
+
metadata:
|
47
|
+
allowed_push_host: https://rubygems.org
|
48
|
+
homepage_uri: https://github.com/onewolfxyz/wolf_core
|
49
|
+
source_code_uri: https://github.com/onewolfxyz/wolf_core
|
50
|
+
changelog_uri: https://github.com/onewolfxyz/wolf_core
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 2.7.4
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements: []
|
66
|
+
rubygems_version: 3.5.14
|
67
|
+
signing_key:
|
68
|
+
specification_version: 4
|
69
|
+
summary: Repository to store shared code among Ruby projects.
|
70
|
+
test_files: []
|