Module: OpencodeTheme
- Includes:
- HTTParty
- Defined in:
- lib/opencode_theme.rb,
lib/opencode_theme/cli.rb,
lib/opencode_theme/version.rb,
lib/opencode_theme/base_service.rb
Defined Under Namespace
Classes: Cli
Constant Summary collapse
- NOOPParser =
Proc.new { |data, format| {} }
- TIMER_RESET =
10- PERMIT_LOWER_LIMIT =
3- CONFIG_FILE =
'config.yml'- VERSION =
'1.0.7.1'.freeze
- URL_API =
'https://opencode.tray.com.br'- @@current_api_call_count =
0
Class Method Summary collapse
- .api_usage ⇒ Object
- .asset_list ⇒ Object
- .check_config ⇒ Object
- .clean ⇒ Object
- .config ⇒ Object
- .config=(config) ⇒ Object
- .delete_asset(asset) ⇒ Object
- .delta_seconds ⇒ Object
- .get_asset(asset) ⇒ Object
- .ignore_files ⇒ Object
- .install_opencode_components(name, user = nil, origin = nil) ⇒ Object
- .install_opencode_components_notification(name, user = nil, origin = nil) ⇒ Object
- .is_binary_data?(string) ⇒ Boolean
- .list ⇒ Object
- .list_opencode_components ⇒ Object
- .needs_sleep? ⇒ Boolean
- .parser_json(body) ⇒ Object
- .passed_api_refresh? ⇒ Boolean
- .path(type = nil) ⇒ Object
- .send_asset(data) ⇒ Object
- .sleep ⇒ Object
- .test? ⇒ Boolean
- .theme_delete(theme_id) ⇒ Object
- .theme_new(_theme_base, theme_name) ⇒ Object
- .whitelist_files ⇒ Object
Class Method Details
.api_usage ⇒ Object
12 13 14 |
# File 'lib/opencode_theme/base_service.rb', line 12 def self.api_usage '' end |
.asset_list ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/opencode_theme/base_service.rb', line 64 def self.asset_list response = opencode_theme.get(path, parser: NOOPParser, query: { gem_version: OpencodeTheme::VERSION }) if response.code == 200 # assets = response.code == 200 ? parser_json(response.body)['assets'].map { |a| { } } : response.body assets = parser_json(response.body)['assets'].map do |file| { asset: file['path'][1..file['path'].length], public_url: file['uri'] } end assets end end |
.check_config ⇒ Object
16 17 18 19 |
# File 'lib/opencode_theme/base_service.rb', line 16 def self.check_config response = opencode_theme.post('/api/check', query: { theme_id: config[:theme_id], gem_version: OpencodeTheme::VERSION }) { success: response.success?, response: parser_json(response.body) } end |
.clean ⇒ Object
48 49 50 51 |
# File 'lib/opencode_theme/base_service.rb', line 48 def self.clean response = opencode_theme.post('/api/clean_cache', query: { theme_id: config[:theme_id], gem_version: OpencodeTheme::VERSION }) { success: response.success?, response: parser_json(response.body) } end |
.config ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/opencode_theme.rb', line 34 def self.config @config ||= if File.exist? CONFIG_FILE config = YAML.load(File.read(CONFIG_FILE)) config else puts "#{CONFIG_FILE} não encontrado!" unless test? {} end end |
.config=(config) ⇒ Object
44 45 46 |
# File 'lib/opencode_theme.rb', line 44 def self.config=(config) @config = config end |
.delete_asset(asset) ⇒ Object
87 88 89 90 |
# File 'lib/opencode_theme/base_service.rb', line 87 def self.delete_asset(asset) response = opencode_theme.delete(path, body: { key: "/#{asset}" }, query: { key: "/#{asset}", gem_version: OpencodeTheme::VERSION }) response end |
.delta_seconds ⇒ Object
19 20 21 |
# File 'lib/opencode_theme.rb', line 19 def self.delta_seconds Time.now.to_i - @@current_timer.to_i end |
.get_asset(asset) ⇒ Object
75 76 77 78 79 |
# File 'lib/opencode_theme/base_service.rb', line 75 def self.get_asset(asset) response = opencode_theme.get(path, query: { key: "/#{asset}", gem_version: OpencodeTheme::VERSION }, parser: NOOPParser) asset = parser_json(response.body) asset end |
.ignore_files ⇒ Object
62 63 64 |
# File 'lib/opencode_theme.rb', line 62 def self.ignore_files (config[:ignore_files] || []).compact.map { |r| Regexp.new(r) } end |
.install_opencode_components(name, user = nil, origin = nil) ⇒ Object
32 33 34 35 36 37 38 |
# File 'lib/opencode_theme/base_service.rb', line 32 def self.install_opencode_components(name, user= nil, origin = nil) return unless name query_default = { gem_version: OpencodeTheme::VERSION } query = query_default.merge({ origin: origin, user: user }) response = opencode_theme.post("/api/themes/#{config[:theme_id]}/components/#{name}/install", query: query) response end |
.install_opencode_components_notification(name, user = nil, origin = nil) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/opencode_theme/base_service.rb', line 40 def self.install_opencode_components_notification(name, user= nil, origin = nil) return unless name query_default = { gem_version: OpencodeTheme::VERSION } query = query_default.merge({ origin: origin, user: user, download_component: true }) opencode_route = "/api/themes/#{config[:theme_id]}/components/#{name}/install/notification" response = opencode_theme.post(opencode_route, query: query) end |
.is_binary_data?(string) ⇒ Boolean
49 50 51 52 53 54 55 |
# File 'lib/opencode_theme.rb', line 49 def self.is_binary_data?(string) if string.respond_to?(:encoding) string.encoding == "US-ASCII" else ( string.count( "^ -~", "^\r\n" ).fdiv(string.size) > 0.3 || string.index( "\x00" ) ) unless string.empty? end end |
.list ⇒ Object
21 22 23 24 |
# File 'lib/opencode_theme/base_service.rb', line 21 def self.list response = opencode_theme.get('/api/list', query: { gem_version: OpencodeTheme::VERSION }) { success: response.success?, response: parser_json(response.body) } end |
.list_opencode_components ⇒ Object
26 27 28 29 30 |
# File 'lib/opencode_theme/base_service.rb', line 26 def self.list_opencode_components url_target = "/api/themes/#{config[:theme_id]}/components" response = opencode_theme.get( url_target, query: { gem_version: OpencodeTheme::VERSION }) { success: response.success?, response: parser_json(response.body) } end |
.needs_sleep? ⇒ Boolean
23 24 25 |
# File 'lib/opencode_theme.rb', line 23 def self.needs_sleep? critical_permits? && !passed_api_refresh? end |
.parser_json(body) ⇒ Object
92 93 94 |
# File 'lib/opencode_theme/base_service.rb', line 92 def self.parser_json(body) JSON.parse(body) end |
.passed_api_refresh? ⇒ Boolean
15 16 17 |
# File 'lib/opencode_theme.rb', line 15 def self.passed_api_refresh? delta_seconds > TIMER_RESET end |
.path(type = nil) ⇒ Object
57 58 59 |
# File 'lib/opencode_theme.rb', line 57 def self.path(type = nil) @path ||= config[:theme_id] ? "/api/themes/#{config[:theme_id]}/assets" : "/api/themes/assets" end |
.send_asset(data) ⇒ Object
81 82 83 84 85 |
# File 'lib/opencode_theme/base_service.rb', line 81 def self.send_asset(data) data[:gem_version] = OpencodeTheme::VERSION response = opencode_theme.put(path, body: data) response end |
.sleep ⇒ Object
27 28 29 30 31 32 |
# File 'lib/opencode_theme.rb', line 27 def self.sleep if needs_sleep? Kernel.sleep(TIMER_RESET - delta_seconds) @current_timer = nil end end |
.test? ⇒ Boolean
11 12 13 |
# File 'lib/opencode_theme.rb', line 11 def self.test? ENV['test'] end |
.theme_delete(theme_id) ⇒ Object
53 54 55 56 |
# File 'lib/opencode_theme/base_service.rb', line 53 def self.theme_delete(theme_id) response = opencode_theme.delete("/api/themes/#{theme_id}", parser: NOOPParser, query: { gem_version: OpencodeTheme::VERSION }) { success: response.success?, response: parser_json(response.body) } end |
.theme_new(_theme_base, theme_name) ⇒ Object
58 59 60 61 62 |
# File 'lib/opencode_theme/base_service.rb', line 58 def self.theme_new(_theme_base, theme_name) response = opencode_theme.post('/api/themes', query: { gem_version: OpencodeTheme::VERSION }, body: { theme: { theme_base: theme_name, name: theme_name, gem_version: OpencodeTheme::VERSION } }.to_json, headers: { 'Content-Type' => 'application/json'}, parser: NOOPParser) assets = response.code == 200 ? JSON.parse(response.body)['assets'] : {} { success: response.success?, assets: assets, response: parser_json(response.body) } end |
.whitelist_files ⇒ Object
66 67 68 |
# File 'lib/opencode_theme.rb', line 66 def self.whitelist_files (config[:whitelist_files] || []).compact end |