Skip to content
This repository was archived by the owner on Oct 11, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 19 additions & 1 deletion .gulp/regeneration.iced
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ rubyAzureMappings = {
'parameter_grouping':['azure-parameter-grouping.json', 'ParameterGroupingModule']
}

rubyAzureAdditionalMappings = {
'azure_resource_inheritance': ['resource_inheritance.json', 'AzureResourceInheritanceModule']
}

swaggerDir = "node_modules/@microsoft.azure/autorest.testserver/swagger"

task 'regenerate-rubyazure', '', (done) ->
Expand All @@ -108,6 +112,20 @@ task 'regenerate-rubyazure', '', (done) ->
},done
return null

testSwaggerDir = "test/swagger"

task 'regenerate-rubyazure-additional', '', (done) ->
regenExpected {
'outputBaseDir': 'test/azure',
'inputBaseDir': testSwaggerDir,
'mappings': rubyAzureAdditionalMappings,
'outputDir': 'RspecTests/Generated',
'language': 'ruby',
'azureArm': true,
'nsPrefix': 'MyNamespace'
},done
return null

task 'regenerate-ruby', '', (done) ->
regenExpected {
'outputBaseDir': 'test/vanilla',
Expand All @@ -119,5 +137,5 @@ task 'regenerate-ruby', '', (done) ->
},done
return null

task 'regenerate', "regenerate expected code for tests", ['regenerate-ruby', 'regenerate-rubyazure'], (done) ->
task 'regenerate', "regenerate expected code for tests", ['regenerate-ruby', 'regenerate-rubyazure', 'regenerate-rubyazure-additional'], (done) ->
done();
7 changes: 2 additions & 5 deletions src/azure/CodeGeneratorRba.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,8 @@ public override async Task Generate(CodeModel cm)
continue;
}

var modelTemplate = new AzureModelTemplate { Model = model };
if (!CompositeTypeRba.resourceOrSubResourceRegEx.IsMatch(model.Name) || !CompositeTypeRba.IsResourceModelMatchingStandardDefinition(model))
{
await Write(modelTemplate, Path.Combine(GeneratorSettingsRb.Instance.modelsPath, CodeNamer.UnderscoreCase(model.Name) + ImplementationFileExtension));
}
var modelTemplate = new ModelTemplate { Model = model };
await Write(modelTemplate, Path.Combine(GeneratorSettingsRb.Instance.modelsPath, CodeNamer.UnderscoreCase(model.Name) + ImplementationFileExtension));
}
// Paged Models
foreach (var pageModel in codeModel.pageModels)
Expand Down
60 changes: 1 addition & 59 deletions src/azure/Model/CompositeTypeRba.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,70 +46,12 @@ public override string GetBaseTypeName()
{
if (this.BaseModelType != null)
{
string typeName = this.BaseModelType.Name;

if (this.BaseModelType.Extensions.ContainsKey(AzureExtensions.ExternalExtension) ||
this.BaseModelType.Extensions.ContainsKey(AzureExtensions.AzureResourceExtension))
{
if (!resourceOrSubResourceRegEx.IsMatch(typeName) || !IsResourceModelMatchingStandardDefinition(this))
{
typeName = "MsRestAzure::" + typeName;
}
}

return " < " + typeName;
}
else if (resourceOrSubResourceRegEx.IsMatch(this.Name))
{
return " < " + "MsRestAzure::" + this.Name;
return " < " + this.BaseModelType.Name;
}

return string.Empty;
}

/// <summary>
/// Checks if the provided definition of models 'Resource'/'SubResource' matches the standard definition,
/// as defined in MsRestAzure. For other models, it returns false.
/// </summary>
/// <param name="model">to be validated</param>
/// <returns></returns>
public static bool IsResourceModelMatchingStandardDefinition(CompositeType model)
{
string modelName = model.Name.ToString();
if (modelName.EqualsIgnoreCase("SubResource") &&
model.Properties.All(property => subResourceRegEx.IsMatch(property.Name.ToString())))
{
return true;
}

if(modelName.EqualsIgnoreCase("Resource") &&
model.Properties.All(property => resourceRegEx.IsMatch(property.Name.ToString())))
{
return true;
}

return false;
}

/// <summary>
/// Determines if the accessor needs to be generated. For Resource/SubResource models, accessors are generated only
/// for properties that are not in the standard definition, as defined in MsRestAzure.
/// </summary>
/// <param name="model"></param>
/// <param name="propertyName"></param>
/// <returns></returns>
public static bool NeedsAccessor(CompositeType model, string propertyName)
{
string modelName = model.Name.ToString();
if((modelName.EqualsIgnoreCase("SubResource") && subResourceRegEx.IsMatch(propertyName)) ||
(modelName.EqualsIgnoreCase("Resource") && resourceRegEx.IsMatch(propertyName)))
{
return false;
}

return true;
}

/// <summary>
/// Gets the list of modules/classes which need to be included.
/// </summary>
Expand Down
3 changes: 1 addition & 2 deletions src/azure/Model/RequirementsRba.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ class RequirementsRba : RequirementsRb
protected override bool ExcludeModel(CompositeType model)
{
return (model.Extensions.ContainsKey(AzureExtensions.ExternalExtension) &&
(bool) model.Extensions[AzureExtensions.ExternalExtension])
||CompositeTypeRba.IsResourceModelMatchingStandardDefinition(model);
(bool) model.Extensions[AzureExtensions.ExternalExtension]);
}

/// <summary>
Expand Down
69 changes: 0 additions & 69 deletions src/azure/Templates/AzureModelTemplate.cshtml

This file was deleted.

58 changes: 58 additions & 0 deletions test/azure/RspecTests/models_generation_and_inheritance_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# encoding: utf-8

$: << 'RspecTests/Generated/azure_resource_inheritance'

require 'rspec'
require 'generated/resource_inheritance'

include AzureResourceInheritanceModule

describe 'ModelsGenerationAndInheritance' do
before(:all) do
@base_url = ENV['StubServerURI']

dummyToken = 'dummy12321343423'
@credentials = MsRest::TokenCredentials.new(dummyToken)

@client = AzureResourceInheritanceTest.new(@credentials, @base_url)
end

it 'should generate expected models' do
modules = Module.const_get('AzureResourceInheritanceModule::Models')

# Should generate AzureResource class
azure_resource = modules.const_get('AzureResource')
expect(azure_resource.is_a?(Class)).to be_truthy

# Should generate LikeAzureResource class
like_azure_resource = modules.const_get('LikeAzureResource')
expect(like_azure_resource.is_a?(Class)).to be_truthy

# Should generate AzureResourceAdditionaProperties class
azure_resource_additional_properties = modules.const_get('AzureResourceAdditionaProperties')
expect(azure_resource_additional_properties.is_a?(Class)).to be_truthy

# Should generate Resource class
resource = modules.const_get('Resource')
expect(resource.is_a?(Class)).to be_truthy
end

it 'should generate models with expected inheritance' do
modules = Module.const_get('AzureResourceInheritanceModule::Models')

# Should generate InheritMsRestAzureResource with super class as AzureResourceInheritanceModule::Models::Resource
inherit_ms_rest_azure_resource = modules.const_get('InheritMsRestAzureResource')
expect(inherit_ms_rest_azure_resource.is_a?(Class)).to be_truthy
expect(inherit_ms_rest_azure_resource.superclass.name).to eq('AzureResourceInheritanceModule::Models::Resource')

# Should generate InheritAzureResource with super class as AzureResource
inherit_azure_resource = modules.const_get('InheritAzureResource')
expect(inherit_azure_resource.is_a?(Class)).to be_truthy
expect(inherit_azure_resource.superclass.name).to eq('AzureResourceInheritanceModule::Models::AzureResource')

# Should generate InheritAzureResourceAdditionaProperties with super class as AzureResourceAdditionaProperties
azure_resource_additional_properties = modules.const_get('InheritAzureResourceAdditionaProperties')
expect(azure_resource_additional_properties.is_a?(Class)).to be_truthy
expect(azure_resource_additional_properties.superclass.name).to eq('AzureResourceInheritanceModule::Models::AzureResourceAdditionaProperties')
end
end
Loading