सहायक और स्थिरांक
क्लाइंट के अलावा gem और क्या परिभाषित करता है।
मॉड्यूल मेथड
| मेथड | यह क्या है |
|---|---|
| OpenEmail.init, OpenEmail.client | साझा क्लाइंट को एक बार कॉन्फ़िगर करें, फिर उस तक कहीं से भी पहुँचें। अगर init कभी नहीं चला तो यह ख़ुद को OPENEMAIL_API_KEY से बना लेता है। |
| OpenEmail.emails, OpenEmail.threads और हर दूसरा namespace | साझा क्लाइंट के namespaces के शॉर्टकट। |
| OpenEmail.reset_client | साझा क्लाइंट को हटा देता है, ताकि अगली कॉल नया बनाए, जो टेस्ट को मामलों के बीच चाहिए। |
| OpenEmail.create_client, OpenEmail::Client.new, OpenEmail.new | एक अलग क्लाइंट। create_client जो कुछ आप छोड़ते हैं उसके लिए एनवायरनमेंट पढ़ता है, और Client.new (या OpenEmail.new) सिर्फ़ वही लेता है जो आप पास करते हैं। |
| OpenEmail.create_temp_mail | डिस्पोज़ेबल इनबॉक्स का क्लाइंट जो कोई API कुंजी नहीं रखता। |
| OpenEmail.verify_webhook_signature | किसी डिलीवरी का सिग्नेचर constant time में, replay विंडो के साथ जाँचता है। पार्स किया गया इवेंट लौटाता है, और किसी भी विफलता पर OpenEmail::WebhookSignatureError raise करता है। |
| OpenEmail.to_base64 | अटैचमेंट के बाइट्स के लिए Base64, binary String, IO या Pathname से। |
| OpenEmail.api_key? | क्या किसी String का आकार oe_live_ या oe_test_ वाला है। यह आकार की जाँच है, इस बात का सबूत नहीं कि कुंजी अब भी काम करती है। |
| OpenEmail.access_token? | क्या किसी String का आकार OAuth एक्सेस टोकन जैसा है: 1 से 512 वर्ण, oe_ से शुरू नहीं। |
| OpenEmail.sealed? | क्या संदेश की बॉडी ciphertext है। दो हस्ताक्षरित फ़ॉर्मेट के लिए यह false है, जिनकी बॉडी खुले रूप में आई। |
| OpenEmail.resolve_language, OpenEmail.language_by_code, OpenEmail.rtl_language? | भाषा picker को जिन खोजों की ज़रूरत होती है, साथ आई OpenEmail::LANGUAGES तालिका पर। |
स्थिरांक
TypeScript SDK जो भी मान-सेट export करता है वह OpenEmail पर एक frozen Hash है, उन्हीं नामों की कुंजियों के साथ, इसलिए OpenEmail::WEBHOOK_EVENTS[:EMAIL_DELIVERED] "email.delivered" है। जहाँ सूची चाहिए वहाँ .values इस्तेमाल करें, और बाहर से आए किसी मान को जाँचने के लिए .value?।
events = OpenEmail::WEBHOOK_EVENTS.values scopes = [OpenEmail::API_SCOPES[:EMAILS_SEND], OpenEmail::API_SCOPES[:THREADS_READ]] puts events.size, scopes.join(","), OpenEmail::PAGE_LIMITS[:MAX_LIMIT]| स्थिरांक | इसमें क्या है |
|---|---|
| OpenEmail::VERSION | gem का वर्शन। |
| OpenEmail::API_SCOPES | scope की शब्दावली, key बनाने वाली स्क्रीन के लिए। |
| OpenEmail::WEBHOOK_EVENTS, OpenEmail::WEBHOOK_SIGNATURE_HEADERS | वे events जिनकी कोई endpoint सदस्यता ले सकता है, और उन header के नाम जो हर delivery लिए चलती है। |
| OpenEmail::ERROR_TYPES | error शब्दावली जो ApiError#type लेता है। |
| OpenEmail::PAGE_LIMITS | ज़्यादातर पेज वाली सूचियों पर सबसे बड़ा और डिफ़ॉल्ट limit:: 100 और 25। कुछ सूचियाँ ज़्यादा लेती हैं, और हर मेथड का संदर्भ यह बताता है। |
| OpenEmail::RULE_FIELDS, OpenEmail::RULE_OPERATORS, OpenEmail::RULE_ACTIONS | वह शब्दावली जिससे किसी rule की शर्तें और actions बनते हैं। |
| OpenEmail::MESSAGE_ENCRYPTION_FORMATS | वे पाँच envelopes जिनके नाम ingest ले सकता है। इनमें से तीन sealed हैं। |
| OpenEmail::CREDENTIAL_KINDS, OpenEmail::STEP_UP_METHODS, OpenEmail::STEP_UP_ERROR_CODES | me.get और me.ping किस क्रेडेंशियल का वर्णन करते हैं, सत्यापन कोड कैसे जाँचा जाता है, और वे कोड जिनसे सत्यापन विफल हो सकता है। |
| OpenEmail::THREAD_SORTS, OpenEmail::PEOPLE_SORTS, OpenEmail::FILE_SORTS और बाक़ी *_SORTS | वे क्रम जिनमें किसी सूची को लगाया जा सकता है। |
| OpenEmail::FORM_STATUSES, OpenEmail::BROADCAST_STATUSES, OpenEmail::SUPPRESSION_REASONS और बाक़ी सेट | वे मान जो किसी resource का फ़ील्ड ले सकता है। हर सेट का नाम उस पर रखा गया है जो उसमें है। |
ऑब्जेक्ट
जवाब Symbol कुंजियों वाले Hash के रूप में पार्स किया गया JSON है। gem अपना ऑब्जेक्ट सिर्फ़ वहीं बनाता है जहाँ वह जवाब को आकार देता है, और हर एक अपरिवर्तनीय Data है।
| क्लास | इसमें क्या होता है |
|---|---|
| OpenEmail::Page | items, has_more? और next_cursor, हर पेज वाले list से। |
| OpenEmail::PeoplePage | वही, साथ में seen, contacts.list_people से। |
| OpenEmail::TempMessagesPage | वही, साथ में expires_at, temp_mail.list_messages से। |
| OpenEmail::AddressBookPage, OpenEmail::AddressBook | unrestricted, addresses और domains, addresses.list (has_more? और next_cursor के साथ) और addresses.list_all से। |
| OpenEmail::BatchResult | items, sent और failed, emails.send_batch से। |
| OpenEmail::TemplateSends | items, total, page और page_size, templates.list_sends से। |
| OpenEmail::HttpRequest, OpenEmail::HttpResponse | एक adapter: क्या पाता और लौटाता है। रिक्वेस्ट अपना Authorization हेडर [redacted] के रूप में प्रिंट करती है। |
gem जानबूझकर जो भी error raise करता है वह OpenEmail::Error से inherit करती है: ApiError और उसकी subclasses, NetworkError और WebhookSignatureError। ग़लत argument इसकी जगह ArgumentError है, क्योंकि यह rescue करने की चीज़ नहीं, बल्कि कॉल करने वाले कोड की ग़लती है।
ऐसा endpoint जिसे यह अभी नहीं लपेटता
gem की कोई रिलीज़ कभी आपके और पहले से काम कर रहे endpoint के बीच नहीं आनी चाहिए। client.raw.request एक path और keyword विकल्प लेता है और पार्स की गई बॉडी लौटाता है, क्लाइंट के क्रेडेंशियल, बेस URL, टाइमआउट और पुनः प्रयास नीति को लागू करते हुए।
result = client.raw.request( "/something-new", method: :post, query: {dryRun: true}, body: {name: "Invoices"}, repeatable: true) p resultGET पर किसी भी दूसरे read की तरह पुनः प्रयास होता है। कोई भी दूसरा मेथड एक बार भेजा जाता है जब तक आप repeatable: true पास न करें, जो आपका दावा है कि इसे दो बार भेजा जा सकता है। query: nil या ख़ाली मान छोड़ देता है, और api_key: वैसे ही काम करता है जैसे हर दूसरे मेथड पर।
यह जानबूझकर क्या नहीं करता
- यह किसी रिक्वेस्ट बॉडी को सत्यापित नहीं करता। सर्वर का schema नियमों की इकलौती प्रति है, और यहाँ दूसरी प्रति आख़िरकार ऐसे पते को अस्वीकार कर देती जिसे नया सर्वर स्वीकार करता है, किसी ऐसे वर्शन में जिसे किसी ने दो साल पहले pin किया था।
- इसकी कोई रनटाइम निर्भरता नहीं है, मानक लाइब्रेरी से आगे कोई JSON या HTTP gem भी नहीं।
- यह जवाब को सिर्फ़ एक तरह से बदलता है: किसी collection की
dataArray को उसके envelope से निकालकर ऊपर के ऑब्जेक्ट में से एक में रखा जाता है। हर दूसरा जवाब वैसा ही लौटता है जैसा API ने भेजा, API की camelCase कुंजियों के साथ।
gem की समानता जाँच इसे ईमानदार रखती है। जब किसी TypeScript मेथड का Ruby जुड़वाँ न हो, वह अलग विकल्प ले, या अलग रिक्वेस्ट भेजे, तो यह build विफल कर देती है।