blocks-sdk 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/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE.txt +21 -0
- data/README.md +197 -0
- data/Rakefile +4 -0
- data/docs/ARCHITECTURE.md +160 -0
- data/lib/blocks/sdk/base_client.rb +43 -0
- data/lib/blocks/sdk/cache/memory_cache.rb +92 -0
- data/lib/blocks/sdk/clients/translations_client.rb +136 -0
- data/lib/blocks/sdk/configuration.rb +38 -0
- data/lib/blocks/sdk/rails/controllers/api/translations_controller.rb +53 -0
- data/lib/blocks/sdk/rails/controllers/translations_webhooks_controller.rb +62 -0
- data/lib/blocks/sdk/rails/i18n_backend.rb +79 -0
- data/lib/blocks/sdk/rails/initializer.rb +25 -0
- data/lib/blocks/sdk/rails/railtie.rb +33 -0
- data/lib/blocks/sdk/rails/routes.rb +17 -0
- data/lib/blocks/sdk/rails/translations_route_mapper.rb +21 -0
- data/lib/blocks/sdk/rails.rb +12 -0
- data/lib/blocks/sdk/service_manager.rb +93 -0
- data/lib/blocks/sdk/version.rb +5 -0
- data/lib/blocks/sdk.rb +111 -0
- data/mise.toml +2 -0
- data/sig/blocks/sdk.rbs +6 -0
- metadata +107 -0
data/lib/blocks/sdk.rb
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "sdk/version"
|
|
4
|
+
require_relative "sdk/configuration"
|
|
5
|
+
require_relative "sdk/base_client"
|
|
6
|
+
require_relative "sdk/service_manager"
|
|
7
|
+
require_relative "sdk/rails" if defined?(Rails)
|
|
8
|
+
require_relative "sdk/rails/railtie" if defined?(Rails)
|
|
9
|
+
|
|
10
|
+
module Blocks
|
|
11
|
+
module Sdk
|
|
12
|
+
class Error < StandardError; end
|
|
13
|
+
|
|
14
|
+
class << self
|
|
15
|
+
attr_writer :configuration, :service_manager
|
|
16
|
+
|
|
17
|
+
def configuration
|
|
18
|
+
@configuration ||= Configuration.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Alias for configuration for convenience
|
|
22
|
+
def config
|
|
23
|
+
configuration
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def configure
|
|
27
|
+
yield(configuration) if block_given?
|
|
28
|
+
configuration
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def service_manager
|
|
32
|
+
@service_manager ||= ServiceManager.new
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Load translations into cache on Rails boot
|
|
36
|
+
# This method should be called after Rails initialization
|
|
37
|
+
# It fetches translations for all configured modules and languages
|
|
38
|
+
def load_translations_on_boot
|
|
39
|
+
return unless defined?(Rails)
|
|
40
|
+
return unless configuration.cache_enabled
|
|
41
|
+
|
|
42
|
+
# Get modules and languages from configuration or environment
|
|
43
|
+
modules = translation_modules
|
|
44
|
+
languages = translation_languages
|
|
45
|
+
|
|
46
|
+
modules.each do |module_name|
|
|
47
|
+
languages.each do |language|
|
|
48
|
+
begin
|
|
49
|
+
service_manager.fetch(
|
|
50
|
+
service_name: "translations",
|
|
51
|
+
params: { module_name: module_name, language: language },
|
|
52
|
+
config: {
|
|
53
|
+
base_url: configuration.uilm_base_url,
|
|
54
|
+
project_key: configuration.uilm_project_key
|
|
55
|
+
}
|
|
56
|
+
)
|
|
57
|
+
rescue StandardError => e
|
|
58
|
+
log_error("Failed to load translations for #{module_name} (#{language}): #{e.message}")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
private
|
|
65
|
+
|
|
66
|
+
def translation_modules
|
|
67
|
+
explicit = Array(configuration.translation_modules).map(&:to_s).reject(&:empty?)
|
|
68
|
+
return explicit if explicit.any?
|
|
69
|
+
|
|
70
|
+
modules_env = ENV.fetch("BLOCKS_TRANSLATION_MODULES", "")
|
|
71
|
+
return [] if modules_env.nil? || modules_env.strip.empty?
|
|
72
|
+
|
|
73
|
+
modules_env.split(",").map(&:strip).reject(&:empty?)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def translation_languages
|
|
77
|
+
explicit = Array(configuration.translation_languages).map(&:to_s).reject(&:empty?)
|
|
78
|
+
return explicit if explicit.any?
|
|
79
|
+
|
|
80
|
+
languages_env = ENV.fetch("BLOCKS_TRANSLATION_LANGUAGES", "")
|
|
81
|
+
if languages_env.nil? || languages_env.strip.empty?
|
|
82
|
+
return default_translation_languages
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
languages_env.split(",").map(&:strip).reject(&:empty?)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
# Defaults to every locale I18n knows about plus the current/default
|
|
89
|
+
# locale, so boot-time fetching covers the whole app — not just :en.
|
|
90
|
+
def default_translation_languages
|
|
91
|
+
return ["en"] unless defined?(::I18n)
|
|
92
|
+
|
|
93
|
+
available = Array(::I18n.available_locales).map(&:to_s)
|
|
94
|
+
current = ::I18n.respond_to?(:locale) ? ::I18n.locale.to_s : nil
|
|
95
|
+
default = ::I18n.respond_to?(:default_locale) ? ::I18n.default_locale.to_s : nil
|
|
96
|
+
|
|
97
|
+
([current, default] + available).compact.reject(&:empty?).uniq
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def log_error(message)
|
|
101
|
+
if configuration.logger
|
|
102
|
+
configuration.logger.error(message)
|
|
103
|
+
elsif defined?(Rails) && Rails.logger
|
|
104
|
+
Rails.logger.error(message)
|
|
105
|
+
else
|
|
106
|
+
warn(message)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
data/mise.toml
ADDED
data/sig/blocks/sdk.rbs
ADDED
metadata
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: blocks-sdk
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.1.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- bugloper
|
|
8
|
+
bindir: exe
|
|
9
|
+
cert_chain: []
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: faraday
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - "~>"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2.0'
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - "~>"
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: '2.0'
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: rails
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '6.0'
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '6.0'
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: rake
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '13.0'
|
|
47
|
+
type: :development
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - "~>"
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '13.0'
|
|
54
|
+
description: SDK for working with Blocks
|
|
55
|
+
email:
|
|
56
|
+
- bugloper@hey.com
|
|
57
|
+
executables: []
|
|
58
|
+
extensions: []
|
|
59
|
+
extra_rdoc_files: []
|
|
60
|
+
files:
|
|
61
|
+
- CHANGELOG.md
|
|
62
|
+
- CODE_OF_CONDUCT.md
|
|
63
|
+
- LICENSE.txt
|
|
64
|
+
- README.md
|
|
65
|
+
- Rakefile
|
|
66
|
+
- docs/ARCHITECTURE.md
|
|
67
|
+
- lib/blocks/sdk.rb
|
|
68
|
+
- lib/blocks/sdk/base_client.rb
|
|
69
|
+
- lib/blocks/sdk/cache/memory_cache.rb
|
|
70
|
+
- lib/blocks/sdk/clients/translations_client.rb
|
|
71
|
+
- lib/blocks/sdk/configuration.rb
|
|
72
|
+
- lib/blocks/sdk/rails.rb
|
|
73
|
+
- lib/blocks/sdk/rails/controllers/api/translations_controller.rb
|
|
74
|
+
- lib/blocks/sdk/rails/controllers/translations_webhooks_controller.rb
|
|
75
|
+
- lib/blocks/sdk/rails/i18n_backend.rb
|
|
76
|
+
- lib/blocks/sdk/rails/initializer.rb
|
|
77
|
+
- lib/blocks/sdk/rails/railtie.rb
|
|
78
|
+
- lib/blocks/sdk/rails/routes.rb
|
|
79
|
+
- lib/blocks/sdk/rails/translations_route_mapper.rb
|
|
80
|
+
- lib/blocks/sdk/service_manager.rb
|
|
81
|
+
- lib/blocks/sdk/version.rb
|
|
82
|
+
- mise.toml
|
|
83
|
+
- sig/blocks/sdk.rbs
|
|
84
|
+
homepage: https://github.com/selise/l0-ruby-blocks-sdk
|
|
85
|
+
licenses:
|
|
86
|
+
- MIT
|
|
87
|
+
metadata:
|
|
88
|
+
source_code_uri: https://github.com/selise/l0-ruby-blocks-sdk
|
|
89
|
+
changelog_uri: https://github.com/selise/l0-ruby-blocks-sdk/blob/main/CHANGELOG.md
|
|
90
|
+
rdoc_options: []
|
|
91
|
+
require_paths:
|
|
92
|
+
- lib
|
|
93
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
94
|
+
requirements:
|
|
95
|
+
- - ">="
|
|
96
|
+
- !ruby/object:Gem::Version
|
|
97
|
+
version: 3.2.0
|
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - ">="
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '0'
|
|
103
|
+
requirements: []
|
|
104
|
+
rubygems_version: 3.6.9
|
|
105
|
+
specification_version: 4
|
|
106
|
+
summary: Blocks SDK for Ruby
|
|
107
|
+
test_files: []
|