Class: TRMNLP::Commands::Push

Inherits:
Base
  • Object
show all
Defined in:
lib/trmnlp/commands/push.rb

Instance Method Summary collapse

Methods inherited from Base

#initialize

Constructor Details

This class inherits a constructor from TRMNLP::Commands::Base

Instance Method Details

#callObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/trmnlp/commands/push.rb', line 9

def call
  context.validate!
  authenticate!

  is_new = false
  zip_path = 'upload.zip'

  api = APIClient.new(config)

  plugin_settings_id = options.id || config.plugin.id
  if plugin_settings_id.nil?
    output 'Creating a new plugin on the server...'
    response = api.post_plugin_setting(name: 'New TRMNLP Plugin', plugin_id: 37) # hardcoded id for private_plugin
    plugin_settings_id = response.dig('data', 'id')
    is_new = true
  end

  unless is_new || options.force
    answer = prompt("Plugin settings on the server will be overwritten. Are you sure? (y/n) ").downcase
    raise Error, 'aborting' unless answer == 'y' || answer == 'yes'
  end

  Zip::File.open(zip_path, Zip::File::CREATE) do |zip_file|
    paths.src_files.each do |file|
      zip_file.add(File.basename(file), file)
    end
  end

  response = api.post_plugin_setting_archive(plugin_settings_id, zip_path)
  paths.plugin_config.write(response.dig('data', 'settings_yaml'))

  size = File.size(zip_path)
  
  output "  Uploaded plugin (\#{size} bytes)\n  Dashboard: \#{config.app.edit_plugin_settings_uri(plugin_settings_id)}\n  HEREDOC\n\n  if is_new\n    output <<~HEREDOC\n\n    IMPORTANT! Don't forget to add it to your device playlist!\n\n        \#{config.app.playlists_uri}\n    HEREDOC\n  end\nrescue\n  if is_new && plugin_settings_id\n    output 'Error during creation, cleaning up...'\n    api.delete_plugin_setting(plugin_settings_id)\n  end\n\n  raise\nensure\n  File.delete(zip_path) if File.exist?(zip_path)\nend\n"