Module: Crystalline::MetadataFields

Included in:
XapiScraper::Models::Components::AccountVerifyModel, XapiScraper::Models::Components::AccountVerifyResponse, XapiScraper::Models::Components::AdvancedSearchCursorQuery, XapiScraper::Models::Components::AdvancedSearchCursorResponse, XapiScraper::Models::Components::ArticleBlock, XapiScraper::Models::Components::ArticleBlockRange, XapiScraper::Models::Components::BlockUserResponse, XapiScraper::Models::Components::BookmarkBody, XapiScraper::Models::Components::CashtagsQuery, XapiScraper::Models::Components::CommunityModel, XapiScraper::Models::Components::CommunityTweetsResponse, XapiScraper::Models::Components::Context, XapiScraper::Models::Components::ConversationV3Model, XapiScraper::Models::Components::CreateThreadData, XapiScraper::Models::Components::CreateThreadQuery, XapiScraper::Models::Components::CreateThreadResponse, XapiScraper::Models::Components::CreateThreadTweetItem, XapiScraper::Models::Components::DMStatusModelV2, XapiScraper::Models::Components::DMStatusResponseV2, XapiScraper::Models::Components::DeleteBookmarkQuery, XapiScraper::Models::Components::DeleteRetweetQuery, XapiScraper::Models::Components::DeleteTweetQuery, XapiScraper::Models::Components::DeleteTweetResponse, XapiScraper::Models::Components::DmHistoryV3Data, XapiScraper::Models::Components::FollowUserQuery, XapiScraper::Models::Components::FollowersFollowingV3Query, XapiScraper::Models::Components::GetAllTweetsRepliesCursorQuery, XapiScraper::Models::Components::GetAllTweetsRepliesCursorResponse, XapiScraper::Models::Components::GetCommunityMembersCursorQuery, XapiScraper::Models::Components::GetCommunityMembersCursorResponse, XapiScraper::Models::Components::GetCommunityResponse, XapiScraper::Models::Components::GetCommunityTweetsCursorQuery, XapiScraper::Models::Components::GetCommunityTweetsCursorResponse, XapiScraper::Models::Components::GetConversationsV3Query, XapiScraper::Models::Components::GetConversationsV3Response, XapiScraper::Models::Components::GetDmHistoryV3Query, XapiScraper::Models::Components::GetDmHistoryV3Response, XapiScraper::Models::Components::GetDmMediaV3Data, XapiScraper::Models::Components::GetDmMediaV3Query, XapiScraper::Models::Components::GetDmMediaV3Response, XapiScraper::Models::Components::GetListMembersCursorQuery, XapiScraper::Models::Components::GetListMembersCursorResponse, XapiScraper::Models::Components::GetListTweetsCursorQuery, XapiScraper::Models::Components::GetListTweetsCursorResponse, XapiScraper::Models::Components::GetQuotesCursorQuery, XapiScraper::Models::Components::GetQuotesCursorResponse, XapiScraper::Models::Components::GetQuotesQuery, XapiScraper::Models::Components::GetQuotesResponse, XapiScraper::Models::Components::GetRepliesPageQuery, XapiScraper::Models::Components::GetRepliesPageResponse, XapiScraper::Models::Components::GetRetweetersCursorQuery, XapiScraper::Models::Components::GetRetweetersCursorResponse, XapiScraper::Models::Components::GetTweetsByIdResponse, XapiScraper::Models::Components::HashtagsQuery, XapiScraper::Models::Components::LikeActionBody, XapiScraper::Models::Components::ListMembersResponse, XapiScraper::Models::Components::ListModel, XapiScraper::Models::Components::ListSubscribersResponse, XapiScraper::Models::Components::ListTweetsResponse, XapiScraper::Models::Components::Loc, XapiScraper::Models::Components::MediaModel, XapiScraper::Models::Components::MessageModel, XapiScraper::Models::Components::PostTweetData, XapiScraper::Models::Components::PostTweetQuery, XapiScraper::Models::Components::PostTweetResponse, XapiScraper::Models::Components::PostTweetWithoutCookieQuery, XapiScraper::Models::Components::QuoteTweetQuery, XapiScraper::Models::Components::RetweetActionBody, XapiScraper::Models::Components::SearchCommunityQuery, XapiScraper::Models::Components::SearchCommunityResponse, XapiScraper::Models::Components::SearchCommunityTweetsQuery, XapiScraper::Models::Components::SearchListQuery, XapiScraper::Models::Components::SearchListResponse, XapiScraper::Models::Components::SearchResponse, XapiScraper::Models::Components::SearchUserResponse, XapiScraper::Models::Components::Security, XapiScraper::Models::Components::SendDmResponse, XapiScraper::Models::Components::SendDmV3Query, XapiScraper::Models::Components::SentimentAnalysisModel, XapiScraper::Models::Components::SentimentAnalysisQuery, XapiScraper::Models::Components::SentimentAnalysisResponse, XapiScraper::Models::Components::StandardResponse, XapiScraper::Models::Components::StreamModel, XapiScraper::Models::Components::TweetActionResponse, XapiScraper::Models::Components::TweetModel, XapiScraper::Models::Components::TweetThreadByIdBody, XapiScraper::Models::Components::TwitterAccountBasedStandardResponse, XapiScraper::Models::Components::TwitterUserAboutResponse, XapiScraper::Models::Components::TwitterUserAboutStandardResponse, XapiScraper::Models::Components::UnfavoriteTweetQuery, XapiScraper::Models::Components::UnfollowUserQuery, XapiScraper::Models::Components::UnfollowUserResponse, XapiScraper::Models::Components::UrlModel, XapiScraper::Models::Components::UserInfo, XapiScraper::Models::Components::UserModel, XapiScraper::Models::Components::UserTimelineFillQuery, XapiScraper::Models::Components::UserTimelinePageQuery, XapiScraper::Models::Components::UserTimelinePageResponse, XapiScraper::Models::Components::UserTimelineResponse, XapiScraper::Models::Components::UserTweetItem, XapiScraper::Models::Components::UsersDetailsResponse, XapiScraper::Models::Components::ValidationError, XapiScraper::Models::Components::VerifiedFollowersData, XapiScraper::Models::Components::VerifiedFollowersResponse, XapiScraper::Models::Components::XArticleModel, XapiScraper::Models::Components::XArticleResponse, XapiScraper::Models::Errors::APIError, XapiScraper::Models::Errors::HTTPValidationError, XapiScraper::Models::Operations::AccountGetBalanceResponse, XapiScraper::Models::Operations::AnalysisSentimentResponse, XapiScraper::Models::Operations::ArticlesFetchResponse, XapiScraper::Models::Operations::ArticlesMarkdownRequest, XapiScraper::Models::Operations::ArticlesMarkdownResponse, XapiScraper::Models::Operations::CommunitiesGetRequest, XapiScraper::Models::Operations::CommunitiesGetResponse, XapiScraper::Models::Operations::CommunitiesMembersPageResponse, XapiScraper::Models::Operations::CommunitiesMembersRequest, XapiScraper::Models::Operations::CommunitiesMembersResponse, XapiScraper::Models::Operations::CommunitiesSearchResponse, XapiScraper::Models::Operations::CommunitiesSearchTweetsResponse, XapiScraper::Models::Operations::CommunitiesTweetsPageResponse, XapiScraper::Models::Operations::CommunitiesTweetsRequest, XapiScraper::Models::Operations::CommunitiesTweetsResponse, XapiScraper::Models::Operations::DmConversationsResponse, XapiScraper::Models::Operations::DmHistoryResponse, XapiScraper::Models::Operations::DmMediaResponse, XapiScraper::Models::Operations::DmSendResponse, XapiScraper::Models::Operations::DmStatusResponse, XapiScraper::Models::Operations::ListsMembersPageResponse, XapiScraper::Models::Operations::ListsMembersRequest, XapiScraper::Models::Operations::ListsMembersResponse, XapiScraper::Models::Operations::ListsSearchResponse, XapiScraper::Models::Operations::ListsSubscribersRequest, XapiScraper::Models::Operations::ListsSubscribersResponse, XapiScraper::Models::Operations::ListsTweetsPageResponse, XapiScraper::Models::Operations::ListsTweetsRequest, XapiScraper::Models::Operations::ListsTweetsResponse, XapiScraper::Models::Operations::SearchAdvancedResponse, XapiScraper::Models::Operations::SearchCashtagsResponse, XapiScraper::Models::Operations::SearchHashtagsResponse, XapiScraper::Models::Operations::TimelinesTweetsAndRepliesPageResponse, XapiScraper::Models::Operations::TimelinesTweetsAndRepliesRequest, XapiScraper::Models::Operations::TimelinesTweetsAndRepliesResponse, XapiScraper::Models::Operations::TimelinesUserPageRequest, XapiScraper::Models::Operations::TimelinesUserPageResponse, XapiScraper::Models::Operations::TimelinesUserRequest, XapiScraper::Models::Operations::TimelinesUserResponse, XapiScraper::Models::Operations::TrendingByCountryRequest, XapiScraper::Models::Operations::TrendingByCountryResponse, XapiScraper::Models::Operations::TrendingContentsRequest, XapiScraper::Models::Operations::TrendingContentsResponse, XapiScraper::Models::Operations::TrendingCountriesResponse, XapiScraper::Models::Operations::TrendingTopicsResponse, XapiScraper::Models::Operations::TrendingTweetsRequest, XapiScraper::Models::Operations::TrendingTweetsResponse, XapiScraper::Models::Operations::TweetsActionsBookmarkRequest, XapiScraper::Models::Operations::TweetsActionsBookmarkResponse, XapiScraper::Models::Operations::TweetsActionsCreateResponse, XapiScraper::Models::Operations::TweetsActionsCreateThreadResponse, XapiScraper::Models::Operations::TweetsActionsCreateWithoutCookieResponse, XapiScraper::Models::Operations::TweetsActionsDeleteBatchResponse, XapiScraper::Models::Operations::TweetsActionsLikeRequest, XapiScraper::Models::Operations::TweetsActionsLikeResponse, XapiScraper::Models::Operations::TweetsActionsQuoteResponse, XapiScraper::Models::Operations::TweetsActionsRetweetRequest, XapiScraper::Models::Operations::TweetsActionsRetweetResponse, XapiScraper::Models::Operations::TweetsActionsUnbookmarkRequest, XapiScraper::Models::Operations::TweetsActionsUnbookmarkResponse, XapiScraper::Models::Operations::TweetsActionsUnlikeRequest, XapiScraper::Models::Operations::TweetsActionsUnlikeResponse, XapiScraper::Models::Operations::TweetsActionsUnretweetRequest, XapiScraper::Models::Operations::TweetsActionsUnretweetResponse, XapiScraper::Models::Operations::TweetsDetailResponse, XapiScraper::Models::Operations::TweetsEngagementQuotesPageResponse, XapiScraper::Models::Operations::TweetsEngagementQuotesResponse, XapiScraper::Models::Operations::TweetsEngagementRetweetersPageResponse, XapiScraper::Models::Operations::TweetsEngagementRetweetersRequest, XapiScraper::Models::Operations::TweetsEngagementRetweetersResponse, XapiScraper::Models::Operations::TweetsLookupResponse, XapiScraper::Models::Operations::TweetsRepliesPageRequest, XapiScraper::Models::Operations::TweetsRepliesPageResponse, XapiScraper::Models::Operations::TweetsSimilarRequest, XapiScraper::Models::Operations::TweetsSimilarResponse, XapiScraper::Models::Operations::TweetsThreadResponse, XapiScraper::Models::Operations::UsersFollowResponse, XapiScraper::Models::Operations::UsersFollowersListResponse, XapiScraper::Models::Operations::UsersFollowersVerifiedResponse, XapiScraper::Models::Operations::UsersFollowingListResponse, XapiScraper::Models::Operations::UsersGetAboutRequest, XapiScraper::Models::Operations::UsersGetAboutResponse, XapiScraper::Models::Operations::UsersGetAccountBasedResponse, XapiScraper::Models::Operations::UsersGetByIdsResponse, XapiScraper::Models::Operations::UsersGetByUsernamesResponse, XapiScraper::Models::Operations::UsersGetStatusesResponse, XapiScraper::Models::Operations::UsersSearchRequest, XapiScraper::Models::Operations::UsersSearchResponse, XapiScraper::Models::Operations::UsersUnfollowResponse, XapiScraper::Models::Operations::UsersVerifyAccountResponse
Defined in:
lib/crystalline/metadata_fields.rb

Defined Under Namespace

Modules: ClassMethods Classes: Field

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



202
203
204
# File 'lib/crystalline/metadata_fields.rb', line 202

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#field(field_name) ⇒ Object



210
211
212
213
214
# File 'lib/crystalline/metadata_fields.rb', line 210

def field(field_name)
  fields.each do |f|
    return f if f.name == field_name
  end
end

#fieldsObject



206
207
208
# File 'lib/crystalline/metadata_fields.rb', line 206

def fields
  self.class.fields
end

#initializeObject



196
197
198
199
200
# File 'lib/crystalline/metadata_fields.rb', line 196

def initialize
  instance = allocate
  fields.each { |mod| instance.singleton_class.include(mod) }
  instance.send(:initialize)
end

#marshal_single(field) ⇒ Object



216
217
218
219
220
221
222
223
224
225
226
# File 'lib/crystalline/metadata_fields.rb', line 216

def marshal_single(field)
  if field.class.include? ::Crystalline::MetadataFields
    field.to_dict
  else
    if ::Crystalline.needs_string_conversion field
      ::Crystalline.json_encode field
    else
      field
    end
  end
end

#to_dictObject



228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
# File 'lib/crystalline/metadata_fields.rb', line 228

def to_dict
  result = {}
  fields.sort_by(&:name).each do |field|
    format_json_meta = field.[:format_json]
    required = !format_json_meta.nil? && format_json_meta.include?(:required)
    is_additional_props = !format_json_meta.nil? && format_json_meta.fetch(:additional_properties, false)

    if !format_json_meta.nil? && format_json_meta.include?(:letter_case)
      key = format_json_meta[:letter_case].call(field.name)
    else
      key = field.name
    end

    f = send(field.name)
    next if f.nil? && !required
    result[key] = nil if f.nil? && required

    # Flatten additional properties into the parent object
    if is_additional_props && f.is_a?(::Hash)
      f.each { |k, v| result[k] = marshal_single(v) }
    elsif f.is_a? ::Array
      result[key] = f.map { |o| marshal_single(o) }
    elsif f.is_a? ::Hash
      result[key] = f.transform_values { |v| marshal_single(v) }
    else
      result[key] = marshal_single(f)
    end
  end
  result
end

#to_json(*args) ⇒ Object



259
260
261
# File 'lib/crystalline/metadata_fields.rb', line 259

def to_json(*args)
  JSON.generate(to_dict, *args)
end