Module: RunApi::Suno::Validators

Defined in:
lib/runapi/suno/validators.rb

Class Method Summary collapse

Class Method Details

.param(resource, params, key) ⇒ Object



142
143
144
# File 'lib/runapi/suno/validators.rb', line 142

def param(resource, params, key)
  resource.send(:param, params, key)
end

.require_all!(resource, params, *keys) ⇒ Object



134
135
136
# File 'lib/runapi/suno/validators.rb', line 134

def require_all!(resource, params, *keys)
  keys.each { |key| require_param!(resource, params, key) }
end

.require_param!(resource, params, key) ⇒ Object

Raises:

  • (Core::ValidationError)


138
139
140
# File 'lib/runapi/suno/validators.rb', line 138

def require_param!(resource, params, key)
  raise Core::ValidationError, "#{key} is required" if param(resource, params, key).nil?
end

.truthy?(value) ⇒ Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/runapi/suno/validators.rb', line 150

def truthy?(value)
  [ true, 1, "1", "true", "TRUE", "True" ].include?(value)
end

.validate_add_instrumental!(params, resource) ⇒ Object



56
57
58
59
60
# File 'lib/runapi/suno/validators.rb', line 56

def validate_add_instrumental!(params, resource)
  require_all!(resource, params, :upload_url, :title, :negative_tags, :tags, :model)
  validate_optional!(resource, params, :model, Types::MODELS)
  validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
end

.validate_add_vocals!(params, resource) ⇒ Object



62
63
64
65
66
# File 'lib/runapi/suno/validators.rb', line 62

def validate_add_vocals!(params, resource)
  require_all!(resource, params, :upload_url, :prompt, :title, :negative_tags, :style, :model)
  validate_optional!(resource, params, :model, Types::MODELS)
  validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
end

.validate_boost_style!(params, resource) ⇒ Object



130
131
132
# File 'lib/runapi/suno/validators.rb', line 130

def validate_boost_style!(params, resource)
  require_param!(resource, params, :description)
end

.validate_convert_audio!(params, resource) ⇒ Object



77
78
79
# File 'lib/runapi/suno/validators.rb', line 77

def validate_convert_audio!(params, resource)
  require_all!(resource, params, :task_id, :audio_id)
end

.validate_cover_audio!(params, resource) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/runapi/suno/validators.rb', line 42

def validate_cover_audio!(params, resource)
  require_param!(resource, params, :upload_url)
  require_param!(resource, params, :model)
  if param(resource, params, :custom_mode)
    require_param!(resource, params, :style)
    require_param!(resource, params, :title)
  else
    require_param!(resource, params, :prompt)
  end
  validate_optional!(resource, params, :model, Types::MODELS)
  validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
  validate_optional!(resource, params, :persona_model, Types::PERSONA_MODELS)
end

.validate_create_mashup!(params, resource) ⇒ Object



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/runapi/suno/validators.rb', line 100

def validate_create_mashup!(params, resource)
  upload_url_list = param(resource, params, :upload_url_list)
  unless upload_url_list.is_a?(Array) && upload_url_list.size == 2
    raise Core::ValidationError, "upload_url_list must contain exactly 2 URLs"
  end
  require_param!(resource, params, :model)
  if param(resource, params, :custom_mode)
    require_all!(resource, params, :style, :title)
    require_param!(resource, params, :prompt) unless truthy?(param(resource, params, :instrumental))
  else
    require_param!(resource, params, :prompt)
  end
  validate_optional!(resource, params, :model, Types::MODELS)
  validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
end

.validate_extend_music!(params, resource) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/runapi/suno/validators.rb', line 21

def validate_extend_music!(params, resource)
  unless %i[task_id audio_id audio_url upload_url].any? { |key| param(resource, params, key) }
    raise Core::ValidationError, "task_id, audio_id, audio_url, or upload_url is required"
  end
  require_param!(resource, params, :default_param_flag)
  require_param!(resource, params, :model)

  if truthy?(param(resource, params, :default_param_flag))
    require_param!(resource, params, :style)
    require_param!(resource, params, :title)
    require_param!(resource, params, :continue_at)
  end
  validate_optional!(resource, params, :model, Types::MODELS)
  validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
  validate_optional!(resource, params, :persona_model, Types::PERSONA_MODELS)
end

.validate_generate_artwork!(params, resource) ⇒ Object



38
39
40
# File 'lib/runapi/suno/validators.rb', line 38

def validate_generate_artwork!(params, resource)
  require_param!(resource, params, :task_id)
end

.validate_generate_lyrics!(params, resource) ⇒ Object



85
86
87
# File 'lib/runapi/suno/validators.rb', line 85

def validate_generate_lyrics!(params, resource)
  require_param!(resource, params, :prompt)
end

.validate_generate_midi!(params, resource) ⇒ Object



73
74
75
# File 'lib/runapi/suno/validators.rb', line 73

def validate_generate_midi!(params, resource)
  require_param!(resource, params, :task_id)
end

.validate_generate_persona!(params, resource) ⇒ Object



126
127
128
# File 'lib/runapi/suno/validators.rb', line 126

def validate_generate_persona!(params, resource)
  require_all!(resource, params, :task_id, :audio_id, :name, :description)
end

.validate_get_timestamped_lyrics!(params, resource) ⇒ Object



89
90
91
# File 'lib/runapi/suno/validators.rb', line 89

def validate_get_timestamped_lyrics!(params, resource)
  require_all!(resource, params, :task_id, :audio_id)
end

.validate_optional!(resource, params, key, allowed) ⇒ Object



146
147
148
# File 'lib/runapi/suno/validators.rb', line 146

def validate_optional!(resource, params, key, allowed)
  resource.send(:validate_optional!, params, key, allowed)
end

.validate_replace_section!(params, resource) ⇒ Object



93
94
95
96
97
98
# File 'lib/runapi/suno/validators.rb', line 93

def validate_replace_section!(params, resource)
  require_all!(resource, params, :task_id, :audio_id, :prompt, :tags, :title, :infill_start_time, :infill_end_time)
  if param(resource, params, :infill_end_time).to_f <= param(resource, params, :infill_start_time).to_f
    raise Core::ValidationError, "infill_end_time must be greater than infill_start_time"
  end
end

.validate_separate_audio_stems!(params, resource) ⇒ Object



68
69
70
71
# File 'lib/runapi/suno/validators.rb', line 68

def validate_separate_audio_stems!(params, resource)
  require_all!(resource, params, :task_id, :audio_id)
  validate_optional!(resource, params, :type, Types::SEPARATE_AUDIO_STEMS_TYPES)
end

.validate_text_to_music!(params, resource) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/runapi/suno/validators.rb', line 8

def validate_text_to_music!(params, resource)
  if param(resource, params, :custom_mode)
    require_param!(resource, params, :style)
    require_param!(resource, params, :title)
  else
    require_param!(resource, params, :prompt)
  end
  require_param!(resource, params, :model)
  validate_optional!(resource, params, :model, Types::MODELS)
  validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS)
  validate_optional!(resource, params, :persona_model, Types::PERSONA_MODELS)
end

.validate_text_to_sound!(params, resource) ⇒ Object



116
117
118
119
120
121
122
123
124
# File 'lib/runapi/suno/validators.rb', line 116

def validate_text_to_sound!(params, resource)
  require_all!(resource, params, :prompt, :model)
  validate_optional!(resource, params, :model, Types::SOUND_MODELS)
  validate_optional!(resource, params, :sound_key, Types::SOUND_KEYS)
  tempo = param(resource, params, :sound_tempo)
  if tempo && !(1..300).cover?(tempo.to_i)
    raise Core::ValidationError, "sound_tempo must be between 1 and 300"
  end
end

.validate_visualize_music!(params, resource) ⇒ Object



81
82
83
# File 'lib/runapi/suno/validators.rb', line 81

def validate_visualize_music!(params, resource)
  require_all!(resource, params, :task_id, :audio_id)
end