Module: RunApi::Suno::Validators
- Defined in:
- lib/runapi/suno/validators.rb
Class Method Summary collapse
- .param(resource, params, key) ⇒ Object
- .replace_section_time!(params, resource, key) ⇒ Object
- .require_all!(resource, params, *keys) ⇒ Object
- .require_param!(resource, params, key) ⇒ Object
- .truthy?(value) ⇒ Boolean
- .truthy_presence?(value) ⇒ Boolean
- .validate_add_instrumental!(params, resource) ⇒ Object
- .validate_add_vocals!(params, resource) ⇒ Object
- .validate_boost_style!(params, resource) ⇒ Object
- .validate_check_voice!(params, resource) ⇒ Object
- .validate_convert_audio!(params, resource) ⇒ Object
- .validate_cover_audio!(params, resource) ⇒ Object
- .validate_create_mashup!(params, resource) ⇒ Object
- .validate_extend_music!(params, resource) ⇒ Object
- .validate_extend_music_prompt_shape!(params, resource) ⇒ Object
- .validate_generate_artwork!(params, resource) ⇒ Object
- .validate_generate_lyrics!(params, resource) ⇒ Object
- .validate_generate_midi!(params, resource) ⇒ Object
- .validate_generate_persona!(params, resource) ⇒ Object
- .validate_generate_voice!(params, resource) ⇒ Object
- .validate_get_timestamped_lyrics!(params, resource) ⇒ Object
- .validate_optional!(resource, params, key, allowed) ⇒ Object
- .validate_regenerate_validation_phrase!(params, resource) ⇒ Object
- .validate_replace_section!(params, resource) ⇒ Object
- .validate_replace_section_source!(params, resource) ⇒ Object
- .validate_separate_audio_stems!(params, resource) ⇒ Object
- .validate_text_to_music!(params, resource) ⇒ Object
- .validate_text_to_sound!(params, resource) ⇒ Object
- .validate_visualize_music!(params, resource) ⇒ Object
- .validate_voice_to_validation_phrase!(params, resource) ⇒ Object
Class Method Details
.param(resource, params, key) ⇒ Object
190 191 192 |
# File 'lib/runapi/suno/validators.rb', line 190 def param(resource, params, key) resource.send(:param, params, key) end |
.replace_section_time!(params, resource, key) ⇒ Object
175 176 177 178 179 180 |
# File 'lib/runapi/suno/validators.rb', line 175 def replace_section_time!(params, resource, key) value = param(resource, params, key) return value.to_f if value.is_a?(Numeric) raise Core::ValidationError, "#{key} must be a number" end |
.require_all!(resource, params, *keys) ⇒ Object
182 183 184 |
# File 'lib/runapi/suno/validators.rb', line 182 def require_all!(resource, params, *keys) keys.each { |key| require_param!(resource, params, key) } end |
.require_param!(resource, params, key) ⇒ Object
186 187 188 |
# File 'lib/runapi/suno/validators.rb', line 186 def require_param!(resource, params, key) raise Core::ValidationError, "#{key} is required" if param(resource, params, key).nil? end |
.truthy?(value) ⇒ Boolean
198 199 200 |
# File 'lib/runapi/suno/validators.rb', line 198 def truthy?(value) [true, 1, "1", "true", "TRUE", "True"].include?(value) end |
.truthy_presence?(value) ⇒ Boolean
202 203 204 205 206 |
# File 'lib/runapi/suno/validators.rb', line 202 def truthy_presence?(value) return !value.empty? if value.respond_to?(:empty?) !value.nil? end |
.validate_add_instrumental!(params, resource) ⇒ Object
39 40 41 42 43 |
# File 'lib/runapi/suno/validators.rb', line 39 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
45 46 47 48 49 |
# File 'lib/runapi/suno/validators.rb', line 45 def validate_add_vocals!(params, resource) require_all!(resource, params, :upload_url, :lyrics, :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
137 138 139 |
# File 'lib/runapi/suno/validators.rb', line 137 def validate_boost_style!(params, resource) require_param!(resource, params, :description) end |
.validate_check_voice!(params, resource) ⇒ Object
129 130 131 |
# File 'lib/runapi/suno/validators.rb', line 129 def validate_check_voice!(params, resource) require_param!(resource, params, :task_id) end |
.validate_convert_audio!(params, resource) ⇒ Object
60 61 62 |
# File 'lib/runapi/suno/validators.rb', line 60 def validate_convert_audio!(params, resource) require_all!(resource, params, :task_id, :audio_id) end |
.validate_cover_audio!(params, resource) ⇒ Object
35 36 37 |
# File 'lib/runapi/suno/validators.rb', line 35 def validate_cover_audio!(params, resource) resource.send(:validate_contract!, CONTRACT["cover-audio"], params) end |
.validate_create_mashup!(params, resource) ⇒ Object
91 92 93 94 95 96 97 |
# File 'lib/runapi/suno/validators.rb', line 91 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 resource.send(:validate_contract!, CONTRACT["create-mashup"], params) end |
.validate_extend_music!(params, resource) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/runapi/suno/validators.rb', line 12 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, :parameter_mode) require_param!(resource, params, :model) validate_optional!(resource, params, :parameter_mode, Types::PARAMETER_MODES) if param(resource, params, :parameter_mode) == "custom" require_param!(resource, params, :style) require_param!(resource, params, :title) require_param!(resource, params, :continue_at) end validate_extend_music_prompt_shape!(params, resource) validate_optional!(resource, params, :model, Types::MODELS) validate_optional!(resource, params, :vocal_gender, Types::VOCAL_GENDERS) validate_optional!(resource, params, :persona_type, Types::PERSONA_TYPES) end |
.validate_extend_music_prompt_shape!(params, resource) ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/runapi/suno/validators.rb', line 141 def validate_extend_music_prompt_shape!(params, resource) return unless truthy_presence?(param(resource, params, :lyrics)) if truthy_presence?(param(resource, params, :prompt)) raise Core::ValidationError, "prompt cannot be combined with lyrics" end if truthy?(param(resource, params, :instrumental)) raise Core::ValidationError, "lyrics cannot be used when instrumental is true" end upload_mode = %i[audio_url upload_url].any? { |key| truthy_presence?(param(resource, params, key)) } return if param(resource, params, :parameter_mode) == "custom" && upload_mode raise Core::ValidationError, "lyrics can only be used when extending uploaded audio with custom parameters" end |
.validate_generate_artwork!(params, resource) ⇒ Object
31 32 33 |
# File 'lib/runapi/suno/validators.rb', line 31 def validate_generate_artwork!(params, resource) require_param!(resource, params, :task_id) end |
.validate_generate_lyrics!(params, resource) ⇒ Object
68 69 70 |
# File 'lib/runapi/suno/validators.rb', line 68 def validate_generate_lyrics!(params, resource) require_param!(resource, params, :prompt) end |
.validate_generate_midi!(params, resource) ⇒ Object
56 57 58 |
# File 'lib/runapi/suno/validators.rb', line 56 def validate_generate_midi!(params, resource) require_param!(resource, params, :task_id) end |
.validate_generate_persona!(params, resource) ⇒ Object
133 134 135 |
# File 'lib/runapi/suno/validators.rb', line 133 def validate_generate_persona!(params, resource) require_all!(resource, params, :task_id, :audio_id, :name, :description) end |
.validate_generate_voice!(params, resource) ⇒ Object
124 125 126 127 |
# File 'lib/runapi/suno/validators.rb', line 124 def validate_generate_voice!(params, resource) require_all!(resource, params, :task_id, :verify_url) validate_optional!(resource, params, :singer_skill_level, Types::SINGER_SKILL_LEVELS) end |
.validate_get_timestamped_lyrics!(params, resource) ⇒ Object
72 73 74 |
# File 'lib/runapi/suno/validators.rb', line 72 def (params, resource) require_all!(resource, params, :task_id, :audio_id) end |
.validate_optional!(resource, params, key, allowed) ⇒ Object
194 195 196 |
# File 'lib/runapi/suno/validators.rb', line 194 def validate_optional!(resource, params, key, allowed) resource.send(:validate_optional!, params, key, allowed) end |
.validate_regenerate_validation_phrase!(params, resource) ⇒ Object
120 121 122 |
# File 'lib/runapi/suno/validators.rb', line 120 def validate_regenerate_validation_phrase!(params, resource) require_param!(resource, params, :task_id) end |
.validate_replace_section!(params, resource) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/runapi/suno/validators.rb', line 76 def validate_replace_section!(params, resource) resource.send(:validate_contract!, CONTRACT["replace-section"], params) validate_replace_section_source!(params, resource) start_time = replace_section_time!(params, resource, :infill_start_time) end_time = replace_section_time!(params, resource, :infill_end_time) if end_time <= start_time raise Core::ValidationError, "infill_end_time must be greater than infill_start_time" end duration = end_time - start_time return if duration.between?(6, 60) raise Core::ValidationError, "replacement duration must be between 6 and 60 seconds" end |
.validate_replace_section_source!(params, resource) ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'lib/runapi/suno/validators.rb', line 158 def validate_replace_section_source!(params, resource) has_existing_source = %i[task_id audio_id].any? { |key| truthy_presence?(param(resource, params, key)) } has_uploaded_source = %i[upload_url model].any? { |key| truthy_presence?(param(resource, params, key)) } if has_existing_source && has_uploaded_source raise Core::ValidationError, "task_id/audio_id cannot be combined with upload_url/model" end if has_existing_source require_all!(resource, params, :task_id, :audio_id) elsif has_uploaded_source require_all!(resource, params, :upload_url, :model) else raise Core::ValidationError, "task_id and audio_id, or upload_url and model are required" end end |
.validate_separate_audio_stems!(params, resource) ⇒ Object
51 52 53 54 |
# File 'lib/runapi/suno/validators.rb', line 51 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 |
# File 'lib/runapi/suno/validators.rb', line 8 def validate_text_to_music!(params, resource) resource.send(:validate_contract!, CONTRACT["text-to-music"], params) end |
.validate_text_to_sound!(params, resource) ⇒ Object
99 100 101 102 103 104 105 106 107 |
# File 'lib/runapi/suno/validators.rb', line 99 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
64 65 66 |
# File 'lib/runapi/suno/validators.rb', line 64 def validate_visualize_music!(params, resource) require_all!(resource, params, :task_id, :audio_id) end |
.validate_voice_to_validation_phrase!(params, resource) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/runapi/suno/validators.rb', line 109 def validate_voice_to_validation_phrase!(params, resource) require_all!(resource, params, :voice_url, :vocal_start_seconds, :vocal_end_seconds) validate_optional!(resource, params, :language, Types::VALIDATION_PHRASE_LANGUAGES) start_seconds = param(resource, params, :vocal_start_seconds).to_i end_seconds = param(resource, params, :vocal_end_seconds).to_i return if end_seconds > start_seconds raise Core::ValidationError, "vocal_end_seconds must be greater than vocal_start_seconds" end |