') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ', 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); })(); Fix issue #537 - Step 2 - Add support Extended Record Function + Attribute from support used current record definitions by DocSvartz · Pull Request #646 · MapsterMapper/Mapster · GitHub
Skip to content

Fix issue #537 - Step 2 - Add support Extended Record Function + Attribute from support used current record definitions - #646

Merged
andrerav merged 16 commits into
MapsterMapper:developmentfrom
DocSvartz:add-asRecord-Attribute
Jan 2, 2025
Merged

Fix issue #537 - Step 2 - Add support Extended Record Function + Attribute from support used current record definitions#646
andrerav merged 16 commits into
MapsterMapper:developmentfrom
DocSvartz:add-asRecord-Attribute

Conversation

@DocSvartz

@DocSvartzDocSvartz commented Oct 23, 2023

Copy link
Copy Markdown
Contributor

Fix Issue:
#501 - test named OnlyInlineRecordWorked (regarding not filling the record with data in the given case)

Add

  1. (InlineExpression is Worked) Field Activation passing Field values not specified in the constructor when creating a new record instance
  2. Record Creation on Default Passing Field values not specified in the constructor when creating a new record instance (Activation)
  3. A special attribute to support custom classes (structures) that use the current record definition. description of spec record at the end of the page -
    [AdaptWith(AdaptDirectives.DestinationAsRecord)] - to be confirmed

Example:

 [TestMethod]
public void MultiCtorAndInlineRecordWorked()
{
var _sourcePoco = new MultiCtorAndInlinePoco() { MyInt = 1, MyString = "Hello", MyEmail = "123@gmail.com", InitData="Test"};
var _sourceMultiCtorAndInline = new MultiCtorAndInlineRecord(2, "Hello World") { InitData = "Worked", MyEmail = "243@gmail.com" };
var _resultMultiCtorAndInline = _sourcePoco.Adapt<MultiCtorAndInlineRecord>(); // Activation var _updateResult = _sourceMultiCtorAndInline.Adapt(_resultMultiCtorAndInline); // Update
_resultMultiCtorAndInline.MyInt.ShouldBe(1);
_resultMultiCtorAndInline.MyString.ShouldBe("Hello");
_resultMultiCtorAndInline.MyEmail.ShouldBe("123@gmail.com");
_resultMultiCtorAndInline.InitData.ShouldBe("Test");
_updateResult.MyInt.ShouldBe(2);
_updateResult.MyString.ShouldBe("Hello World");
_updateResult.MyEmail.ShouldBe("243@gmail.com");
_updateResult.InitData.ShouldBe("Worked");
}
record MultiCtorAndInlineRecord
{
public MultiCtorAndInlineRecord(int myInt)
{
MyInt = myInt;
}
public MultiCtorAndInlineRecord(int myInt, string myString) : this(myInt) // default have been using this constructor
{
MyString = myString;
}
public int MyInt { get; private set; } // private set only constructor or using init public string MyString { get; private set; } // private set only constructor or using init public string MyEmail { get; set; } public string InitData { get; init; } // init in Constructor or inline activation
}

@DocSvartzDocSvartz changed the title FIx Issue #537 - Step 2 - Add Support Extended Record Function + Attibute from support used legasy record definitionsFIx Issue #537 - Step 2 - Add Support Extended Record Function + Attribute from support used legasy record definitionsOct 23, 2023
@DocSvartz

DocSvartz commented Oct 23, 2023

Copy link
Copy Markdown
ContributorAuthor

Explanations regarding tests marked Ignore
I don’t understand what exactly wanted to check in them?

  1. If it is possible to map non-public fields to the record constructor, then the Source should have had them
  2. If mapping fields from the Source to hidden fields in the record, then this should not work at all. The record is always activated through the constructor and they would have gotten there anyway. Because the sources are public.

Tests have been rewritten to test what the test name states

@DocSvartzDocSvartz changed the title FIx Issue #537 - Step 2 - Add Support Extended Record Function + Attribute from support used legasy record definitionsFIx Issue #537 - Step 2 - Add Support Extended Record Function + Attribute from support used legacy record definitionsOct 23, 2023
@DocSvartzDocSvartz changed the title FIx Issue #537 - Step 2 - Add Support Extended Record Function + Attribute from support used legacy record definitionsFIx Issue #537 - Step 2 - Add Support Extended Record Function + Attribute from support used current record definitionsOct 23, 2023
@andrerav

Copy link
Copy Markdown
Member

Closed and reopened to re-run the workflow.

@andreravandrerav closed this Jan 2, 2025
@andreravandrerav reopened this Jan 2, 2025
@andreravandrerav changed the title FIx Issue #537 - Step 2 - Add Support Extended Record Function + Attribute from support used current record definitionsFix issue #537 - Step 2 - Add support Extended Record Function + Attribute from support used current record definitionsJan 2, 2025
@andrerav
andrerav merged commit bdfe266 into MapsterMapper:developmentJan 2, 2025
@andrerav

Copy link
Copy Markdown
Member

Thank you @DocSvartz!

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@DocSvartz@andrerav