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.
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
@@ -0,0 +1,2 @@
1
+ [tools]
2
+ ruby = "3.4.8"
@@ -0,0 +1,6 @@
1
+ module Blocks
2
+ module Sdk
3
+ VERSION: String
4
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
5
+ end
6
+ end
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: []