[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param - #10673

Closed
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args
Closed

[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one param#10673
cyangle wants to merge 8 commits into
OpenAPITools:masterfrom
cyangle:nil_as_default_for_optional_args

Conversation

@cyangle

Copy link
Copy Markdown
Contributor

@wing328 This PR mainly refactored how it handles nillable and nullable types and default values. I got some ideas from the kotlin-client sample code
The breaking change is the requirement of keyword argument invoking style of methods which is needed to support setting default values
last in order is required for setting default values to positional params but it's not required in keyword args

There are other minor fixes. Check the details listed below, and you should also check the commit messages.

  • Refactor methods to use keyword args if the method has more than one param
  • Add default values to method definitions and model initializers
  • Add boolean flag hasOnlyOneParam - sets to true when the method has only one param
  • Handle empty collection param
  • Handle conversion to string from non file and non string types
  • Refactor model with nilable types - Inspiration from kotlin-client code samples
  • Refactor model initializers to support only keyword args
  • Add profile crystal-client to pom.xml
  • Clean up gitignore.mustache
  • Change deprecated URI.encode to URI.encode_path
  • Fix tests in file samples/client/petstore/crystal/spec/api/pet_api_spec.cr

PR checklist

  • Read the contribution guidelines.
  • Pull Request title clearly describes the work in the pull request and Pull Request description provides details about how to validate the work. Missing information here may result in delayed response from the community.
  • Run the following to build the project and update samples:
    ./mvnw clean package ./bin/generate-samples.sh
    ./bin/utils/export_docs_generators.sh
    
    Commit all changed files.
    This is important, as CI jobs will verify all generator outputs of your HEAD commit as it would merge with master.
    These must match the expectations made by your contribution.
    You may regenerate an individual generator by passing the relevant config(s) as an argument to the script, for example ./bin/generate-samples.sh bin/configs/java*.
    For Windows users, please run the script in Git BASH.
  • File the PR against the correct branch: master (5.3.0), 6.0.x
  • If your PR is targeting a particular programming language, @mention the technical committee members, so they are more likely to review the pull request.

@cyanglecyangle changed the title [crystal][client] Add default values to method definitions and refactor methods to use keyword args if the method has more than one param[crystal][client] Add param default values to method definitions and refactor methods to use only keyword args if the method has more than one paramOct 24, 2021
@cyangle

cyangle commented Oct 26, 2021

Copy link
Copy Markdown
ContributorAuthor

I'm breaking this PR into smaller ones

You can put keyword argument with default value before ones without default values
So that this compiles:
class Pet
property name : String
property id : Int64?
def initialize(*, @name : String = "pet", @id : Int64?)
end
end
pp Pet.new(id: 1)
It would be convenient to allow calling a method using keyward arg and also positional arg when there is only one paramter
def one_param_method(name : String)
puts name
end
one_param_method(name: "Pet")
one_param_method("Pet")
When there are more than one param, the methond only supports invoking with keyword arguments:
def two_param_method(*, name : String = "Pet", age : Int32)
puts "#{name} is #{age} years old"
end
two_param_method(age: 3) # => Pet is 3 years old
two_param_method("Pet", 3) # => Compilation Error: missing arguments: name, age
only nullable properties should emit_null
all optional and nullable required properties are nilable: They should have type {{dataType}}?
nullable required should also emit nulls in json format as the json field key is required
Handle file param separately to simplify to make it more readable
@cyangle
cyangleforce-pushed the nil_as_default_for_optional_args branch from 8b98d55 to 09f63eaCompareOctober 28, 2021 01:37
@cyangle

Copy link
Copy Markdown
ContributorAuthor

#10721 is extracted from this PR

@cyangle
cyangle marked this pull request as draft October 30, 2021 14:55
@wing328

Copy link
Copy Markdown
Member

@cyangle closing this one for the time being. Please file a new one if needed. Thanks.

@wing328wing328 closed this May 4, 2022
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

@cyangle@wing328