diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e061a69..bffda0c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: @@ -36,7 +36,7 @@ jobs: runs-on: ${{ github.repository == 'stainless-sdks/moderation-api-ruby' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: diff --git a/.github/workflows/publish-gem.yml b/.github/workflows/publish-gem.yml index 7114c2b..ff8587a 100644 --- a/.github/workflows/publish-gem.yml +++ b/.github/workflows/publish-gem.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index 405cac7..9647c9e 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -12,7 +12,7 @@ jobs: if: github.repository == 'moderation-api/sdk-ruby' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 - name: Check release environment run: | diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 75ec52f..b44b287 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "2.3.0" + ".": "2.4.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index bc3bcfa..4169724 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 27 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api%2Fmoderation-api-07681c3b51c92b9d92d71f11e9245c37a37ac1ea6df730cd730e85968064d814.yml -openapi_spec_hash: 48bffabe129598fc41a232cf5469bd4b +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/moderation-api%2Fmoderation-api-4c45cb81092c51edd3affb49ac04582b6416054870f15e8bb30565375cd390eb.yml +openapi_spec_hash: 9ff39aca0794f22638ac710075bf70fe config_hash: 6a52f6ae7d55cf3b4e91538cc7752aeb diff --git a/CHANGELOG.md b/CHANGELOG.md index cd0ffe6..af2290e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Changelog +## 2.4.0 (2026-01-28) + +Full Changelog: [v2.3.0...v2.4.0](https://github.com/moderation-api/sdk-ruby/compare/v2.3.0...v2.4.0) + +### Features + +* **api:** api update ([6f59d50](https://github.com/moderation-api/sdk-ruby/commit/6f59d503d5316ea4989dc7f2826a760599a9cc0d)) + + +### Chores + +* **internal:** update `actions/checkout` version ([6debb55](https://github.com/moderation-api/sdk-ruby/commit/6debb5528f54ceaefc72ffa445a69aa4f30bc4e7)) +* move `cgi` into dependencies for ruby 4 ([6aab585](https://github.com/moderation-api/sdk-ruby/commit/6aab585a91f2ac47f2bae66f1e21d03eb6b5b475)) + ## 2.3.0 (2026-01-02) Full Changelog: [v2.2.1...v2.3.0](https://github.com/moderation-api/sdk-ruby/compare/v2.2.1...v2.3.0) diff --git a/Gemfile.lock b/Gemfile.lock index 13990dc..defbc1d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -11,7 +11,8 @@ GIT PATH remote: . specs: - moderation_api (2.3.0) + moderation_api (2.4.0) + cgi connection_pool GEM @@ -42,6 +43,7 @@ GEM base64 (0.3.0) benchmark (0.5.0) bigdecimal (3.3.1) + cgi (0.5.1) concurrent-ruby (1.3.5) connection_pool (2.5.4) console (1.34.2) diff --git a/README.md b/README.md index 497038b..b247aa6 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ To use this gem, install via Bundler by adding the following to your application ```ruby -gem "moderation_api", "~> 2.3.0" +gem "moderation_api", "~> 2.4.0" ``` diff --git a/lib/moderation_api/models/content_submit_params.rb b/lib/moderation_api/models/content_submit_params.rb index 1753658..7758026 100644 --- a/lib/moderation_api/models/content_submit_params.rb +++ b/lib/moderation_api/models/content_submit_params.rb @@ -59,11 +59,18 @@ class ContentSubmitParams < ModerationAPI::Internal::Type::BaseModel # @!attribute policies # (Enterprise) override the channel policies for this moderation request only. # - # @return [Array, nil] + # @return [Array, nil] optional :policies, -> { ModerationAPI::Internal::Type::ArrayOf[union: ModerationAPI::ContentSubmitParams::Policy] } - # @!method initialize(content:, author_id: nil, channel: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, request_options: {}) + # @!attribute timestamp + # Unix timestamp (in milliseconds) of when the content was created. Use if content + # is not submitted in real-time. + # + # @return [Float, nil] + optional :timestamp, Float + + # @!method initialize(content:, author_id: nil, channel: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, timestamp: nil, request_options: {}) # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ContentSubmitParams} for more details. # @@ -83,7 +90,9 @@ class ContentSubmitParams < ModerationAPI::Internal::Type::BaseModel # # @param meta_type [Symbol, ModerationAPI::Models::ContentSubmitParams::MetaType] The meta type of content being moderated # - # @param policies [Array] (Enterprise) override the channel policies for this moderation request only. + # @param policies [Array] (Enterprise) override the channel policies for this moderation request only. + # + # @param timestamp [Float] Unix timestamp (in milliseconds) of when the content was created. Use if content # # @param request_options [ModerationAPI::RequestOptions, Hash{Symbol=>Object}] @@ -351,6 +360,8 @@ module Policy variant -> { ModerationAPI::ContentSubmitParams::Policy::IllicitGambling } + variant -> { ModerationAPI::ContentSubmitParams::Policy::Cannabis } + variant -> { ModerationAPI::ContentSubmitParams::Policy::Sexual } variant -> { ModerationAPI::ContentSubmitParams::Policy::Flirtation } @@ -597,6 +608,28 @@ class IllicitGambling < ModerationAPI::Internal::Type::BaseModel # @param id [Symbol, :illicit_gambling] end + class Cannabis < ModerationAPI::Internal::Type::BaseModel + # @!attribute id + # + # @return [Symbol, :cannabis] + required :id, const: :cannabis + + # @!attribute flag + # + # @return [Boolean] + required :flag, ModerationAPI::Internal::Type::Boolean + + # @!attribute threshold + # + # @return [Float, nil] + optional :threshold, Float + + # @!method initialize(flag:, threshold: nil, id: :cannabis) + # @param flag [Boolean] + # @param threshold [Float] + # @param id [Symbol, :cannabis] + end + class Sexual < ModerationAPI::Internal::Type::BaseModel # @!attribute id # @@ -942,7 +975,7 @@ class Guideline < ModerationAPI::Internal::Type::BaseModel end # @!method self.variants - # @return [Array(ModerationAPI::Models::ContentSubmitParams::Policy::Toxicity, ModerationAPI::Models::ContentSubmitParams::Policy::PersonalInformation, ModerationAPI::Models::ContentSubmitParams::Policy::ToxicitySevere, ModerationAPI::Models::ContentSubmitParams::Policy::Hate, ModerationAPI::Models::ContentSubmitParams::Policy::Illicit, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitDrugs, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitAlcohol, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitFirearms, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitTobacco, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitGambling, ModerationAPI::Models::ContentSubmitParams::Policy::Sexual, ModerationAPI::Models::ContentSubmitParams::Policy::Flirtation, ModerationAPI::Models::ContentSubmitParams::Policy::Profanity, ModerationAPI::Models::ContentSubmitParams::Policy::Violence, ModerationAPI::Models::ContentSubmitParams::Policy::SelfHarm, ModerationAPI::Models::ContentSubmitParams::Policy::Spam, ModerationAPI::Models::ContentSubmitParams::Policy::SelfPromotion, ModerationAPI::Models::ContentSubmitParams::Policy::Political, ModerationAPI::Models::ContentSubmitParams::Policy::Religion, ModerationAPI::Models::ContentSubmitParams::Policy::CodeAbuse, ModerationAPI::Models::ContentSubmitParams::Policy::PiiMasking, ModerationAPI::Models::ContentSubmitParams::Policy::URLMasking, ModerationAPI::Models::ContentSubmitParams::Policy::Guideline)] + # @return [Array(ModerationAPI::Models::ContentSubmitParams::Policy::Toxicity, ModerationAPI::Models::ContentSubmitParams::Policy::PersonalInformation, ModerationAPI::Models::ContentSubmitParams::Policy::ToxicitySevere, ModerationAPI::Models::ContentSubmitParams::Policy::Hate, ModerationAPI::Models::ContentSubmitParams::Policy::Illicit, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitDrugs, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitAlcohol, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitFirearms, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitTobacco, ModerationAPI::Models::ContentSubmitParams::Policy::IllicitGambling, ModerationAPI::Models::ContentSubmitParams::Policy::Cannabis, ModerationAPI::Models::ContentSubmitParams::Policy::Sexual, ModerationAPI::Models::ContentSubmitParams::Policy::Flirtation, ModerationAPI::Models::ContentSubmitParams::Policy::Profanity, ModerationAPI::Models::ContentSubmitParams::Policy::Violence, ModerationAPI::Models::ContentSubmitParams::Policy::SelfHarm, ModerationAPI::Models::ContentSubmitParams::Policy::Spam, ModerationAPI::Models::ContentSubmitParams::Policy::SelfPromotion, ModerationAPI::Models::ContentSubmitParams::Policy::Political, ModerationAPI::Models::ContentSubmitParams::Policy::Religion, ModerationAPI::Models::ContentSubmitParams::Policy::CodeAbuse, ModerationAPI::Models::ContentSubmitParams::Policy::PiiMasking, ModerationAPI::Models::ContentSubmitParams::Policy::URLMasking, ModerationAPI::Models::ContentSubmitParams::Policy::Guideline)] end end end diff --git a/lib/moderation_api/resources/content.rb b/lib/moderation_api/resources/content.rb index 7b0ecef..d64455f 100644 --- a/lib/moderation_api/resources/content.rb +++ b/lib/moderation_api/resources/content.rb @@ -6,7 +6,7 @@ class Content # Some parameter documentations has been truncated, see # {ModerationAPI::Models::ContentSubmitParams} for more details. # - # @overload submit(content:, author_id: nil, channel: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, request_options: {}) + # @overload submit(content:, author_id: nil, channel: nil, content_id: nil, conversation_id: nil, do_not_store: nil, metadata: nil, meta_type: nil, policies: nil, timestamp: nil, request_options: {}) # # @param content [ModerationAPI::Models::ContentSubmitParams::Content::Text, ModerationAPI::Models::ContentSubmitParams::Content::Image, ModerationAPI::Models::ContentSubmitParams::Content::Video, ModerationAPI::Models::ContentSubmitParams::Content::Audio, ModerationAPI::Models::ContentSubmitParams::Content::Object] The content sent for moderation # @@ -24,7 +24,9 @@ class Content # # @param meta_type [Symbol, ModerationAPI::Models::ContentSubmitParams::MetaType] The meta type of content being moderated # - # @param policies [Array] (Enterprise) override the channel policies for this moderation request only. + # @param policies [Array] (Enterprise) override the channel policies for this moderation request only. + # + # @param timestamp [Float] Unix timestamp (in milliseconds) of when the content was created. Use if content # # @param request_options [ModerationAPI::RequestOptions, Hash{Symbol=>Object}, nil] # diff --git a/lib/moderation_api/version.rb b/lib/moderation_api/version.rb index 5f30aec..93ed6a3 100644 --- a/lib/moderation_api/version.rb +++ b/lib/moderation_api/version.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true module ModerationAPI - VERSION = "2.3.0" + VERSION = "2.4.0" end diff --git a/moderation_api.gemspec b/moderation_api.gemspec index 1a933e6..7def28f 100644 --- a/moderation_api.gemspec +++ b/moderation_api.gemspec @@ -24,5 +24,6 @@ Gem::Specification.new do |s| ".ignore" ] s.extra_rdoc_files = ["README.md"] + s.add_dependency "cgi" s.add_dependency "connection_pool" end diff --git a/rbi/moderation_api/models/content_submit_params.rbi b/rbi/moderation_api/models/content_submit_params.rbi index 3a076ee..bd12a27 100644 --- a/rbi/moderation_api/models/content_submit_params.rbi +++ b/rbi/moderation_api/models/content_submit_params.rbi @@ -102,6 +102,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms, ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco, ModerationAPI::ContentSubmitParams::Policy::IllicitGambling, + ModerationAPI::ContentSubmitParams::Policy::Cannabis, ModerationAPI::ContentSubmitParams::Policy::Sexual, ModerationAPI::ContentSubmitParams::Policy::Flirtation, ModerationAPI::ContentSubmitParams::Policy::Profanity, @@ -137,6 +138,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms::OrHash, ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco::OrHash, ModerationAPI::ContentSubmitParams::Policy::IllicitGambling::OrHash, + ModerationAPI::ContentSubmitParams::Policy::Cannabis::OrHash, ModerationAPI::ContentSubmitParams::Policy::Sexual::OrHash, ModerationAPI::ContentSubmitParams::Policy::Flirtation::OrHash, ModerationAPI::ContentSubmitParams::Policy::Profanity::OrHash, @@ -156,6 +158,14 @@ module ModerationAPI end attr_writer :policies + # Unix timestamp (in milliseconds) of when the content was created. Use if content + # is not submitted in real-time. + sig { returns(T.nilable(Float)) } + attr_reader :timestamp + + sig { params(timestamp: Float).void } + attr_writer :timestamp + sig do params( content: @@ -186,6 +196,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms::OrHash, ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco::OrHash, ModerationAPI::ContentSubmitParams::Policy::IllicitGambling::OrHash, + ModerationAPI::ContentSubmitParams::Policy::Cannabis::OrHash, ModerationAPI::ContentSubmitParams::Policy::Sexual::OrHash, ModerationAPI::ContentSubmitParams::Policy::Flirtation::OrHash, ModerationAPI::ContentSubmitParams::Policy::Profanity::OrHash, @@ -201,6 +212,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::Guideline::OrHash ) ], + timestamp: Float, request_options: ModerationAPI::RequestOptions::OrHash ).returns(T.attached_class) end @@ -224,6 +236,9 @@ module ModerationAPI meta_type: nil, # (Enterprise) override the channel policies for this moderation request only. policies: nil, + # Unix timestamp (in milliseconds) of when the content was created. Use if content + # is not submitted in real-time. + timestamp: nil, request_options: {} ) end @@ -259,6 +274,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms, ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco, ModerationAPI::ContentSubmitParams::Policy::IllicitGambling, + ModerationAPI::ContentSubmitParams::Policy::Cannabis, ModerationAPI::ContentSubmitParams::Policy::Sexual, ModerationAPI::ContentSubmitParams::Policy::Flirtation, ModerationAPI::ContentSubmitParams::Policy::Profanity, @@ -274,6 +290,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::Guideline ) ], + timestamp: Float, request_options: ModerationAPI::RequestOptions } ) @@ -726,6 +743,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms, ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco, ModerationAPI::ContentSubmitParams::Policy::IllicitGambling, + ModerationAPI::ContentSubmitParams::Policy::Cannabis, ModerationAPI::ContentSubmitParams::Policy::Sexual, ModerationAPI::ContentSubmitParams::Policy::Flirtation, ModerationAPI::ContentSubmitParams::Policy::Profanity, @@ -1102,6 +1120,42 @@ module ModerationAPI end end + class Cannabis < ModerationAPI::Internal::Type::BaseModel + OrHash = + T.type_alias do + T.any( + ModerationAPI::ContentSubmitParams::Policy::Cannabis, + ModerationAPI::Internal::AnyHash + ) + end + + sig { returns(Symbol) } + attr_accessor :id + + sig { returns(T::Boolean) } + attr_accessor :flag + + sig { returns(T.nilable(Float)) } + attr_reader :threshold + + sig { params(threshold: Float).void } + attr_writer :threshold + + sig do + params(flag: T::Boolean, threshold: Float, id: Symbol).returns( + T.attached_class + ) + end + def self.new(flag:, threshold: nil, id: :cannabis) + end + + sig do + override.returns({ id: Symbol, flag: T::Boolean, threshold: Float }) + end + def to_hash + end + end + class Sexual < ModerationAPI::Internal::Type::BaseModel OrHash = T.type_alias do diff --git a/rbi/moderation_api/resources/content.rbi b/rbi/moderation_api/resources/content.rbi index 66509d0..f3bd076 100644 --- a/rbi/moderation_api/resources/content.rbi +++ b/rbi/moderation_api/resources/content.rbi @@ -33,6 +33,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms::OrHash, ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco::OrHash, ModerationAPI::ContentSubmitParams::Policy::IllicitGambling::OrHash, + ModerationAPI::ContentSubmitParams::Policy::Cannabis::OrHash, ModerationAPI::ContentSubmitParams::Policy::Sexual::OrHash, ModerationAPI::ContentSubmitParams::Policy::Flirtation::OrHash, ModerationAPI::ContentSubmitParams::Policy::Profanity::OrHash, @@ -48,6 +49,7 @@ module ModerationAPI ModerationAPI::ContentSubmitParams::Policy::Guideline::OrHash ) ], + timestamp: Float, request_options: ModerationAPI::RequestOptions::OrHash ).returns(ModerationAPI::Models::ContentSubmitResponse) end @@ -71,6 +73,9 @@ module ModerationAPI meta_type: nil, # (Enterprise) override the channel policies for this moderation request only. policies: nil, + # Unix timestamp (in milliseconds) of when the content was created. Use if content + # is not submitted in real-time. + timestamp: nil, request_options: {} ) end diff --git a/sig/moderation_api/models/content_submit_params.rbs b/sig/moderation_api/models/content_submit_params.rbs index 3d3a007..ceb8557 100644 --- a/sig/moderation_api/models/content_submit_params.rbs +++ b/sig/moderation_api/models/content_submit_params.rbs @@ -10,7 +10,8 @@ module ModerationAPI do_not_store: bool, metadata: ::Hash[Symbol, top], meta_type: ModerationAPI::Models::ContentSubmitParams::meta_type, - policies: ::Array[ModerationAPI::Models::ContentSubmitParams::policy] + policies: ::Array[ModerationAPI::Models::ContentSubmitParams::policy], + timestamp: Float } & ModerationAPI::Internal::Type::request_parameters @@ -56,6 +57,10 @@ module ModerationAPI ::Array[ModerationAPI::Models::ContentSubmitParams::policy] ) -> ::Array[ModerationAPI::Models::ContentSubmitParams::policy] + attr_reader timestamp: Float? + + def timestamp=: (Float) -> Float + def initialize: ( content: ModerationAPI::Models::ContentSubmitParams::content, ?author_id: String, @@ -66,6 +71,7 @@ module ModerationAPI ?metadata: ::Hash[Symbol, top], ?meta_type: ModerationAPI::Models::ContentSubmitParams::meta_type, ?policies: ::Array[ModerationAPI::Models::ContentSubmitParams::policy], + ?timestamp: Float, ?request_options: ModerationAPI::request_opts ) -> void @@ -79,6 +85,7 @@ module ModerationAPI metadata: ::Hash[Symbol, top], meta_type: ModerationAPI::Models::ContentSubmitParams::meta_type, policies: ::Array[ModerationAPI::Models::ContentSubmitParams::policy], + timestamp: Float, request_options: ModerationAPI::RequestOptions } @@ -261,6 +268,7 @@ module ModerationAPI | ModerationAPI::ContentSubmitParams::Policy::IllicitFirearms | ModerationAPI::ContentSubmitParams::Policy::IllicitTobacco | ModerationAPI::ContentSubmitParams::Policy::IllicitGambling + | ModerationAPI::ContentSubmitParams::Policy::Cannabis | ModerationAPI::ContentSubmitParams::Policy::Sexual | ModerationAPI::ContentSubmitParams::Policy::Flirtation | ModerationAPI::ContentSubmitParams::Policy::Profanity @@ -489,6 +497,26 @@ module ModerationAPI } end + type cannabis = { id: :cannabis, flag: bool, threshold: Float } + + class Cannabis < ModerationAPI::Internal::Type::BaseModel + attr_accessor id: :cannabis + + attr_accessor flag: bool + + attr_reader threshold: Float? + + def threshold=: (Float) -> Float + + def initialize: ( + flag: bool, + ?threshold: Float, + ?id: :cannabis + ) -> void + + def to_hash: -> { id: :cannabis, flag: bool, threshold: Float } + end + type sexual = { id: :sexual, flag: bool, threshold: Float } class Sexual < ModerationAPI::Internal::Type::BaseModel diff --git a/sig/moderation_api/resources/content.rbs b/sig/moderation_api/resources/content.rbs index 82ad8d9..0c18ca8 100644 --- a/sig/moderation_api/resources/content.rbs +++ b/sig/moderation_api/resources/content.rbs @@ -11,6 +11,7 @@ module ModerationAPI ?metadata: ::Hash[Symbol, top], ?meta_type: ModerationAPI::Models::ContentSubmitParams::meta_type, ?policies: ::Array[ModerationAPI::Models::ContentSubmitParams::policy], + ?timestamp: Float, ?request_options: ModerationAPI::request_opts ) -> ModerationAPI::Models::ContentSubmitResponse