ruby_odata 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +5 -1
- data/CHANGELOG.rdoc +46 -38
- data/Gemfile +4 -0
- data/LICENSE +24 -24
- data/README.rdoc +179 -153
- data/Rakefile +10 -28
- data/features/basic_auth.feature +24 -0
- data/features/batch_request.feature +94 -94
- data/features/complex_types.feature +52 -52
- data/features/query_builder.feature +153 -153
- data/features/service.feature +49 -49
- data/features/service_manage.feature +54 -44
- data/features/step_definitions/service_steps.rb +255 -243
- data/features/support/env.rb +14 -4
- data/features/support/hooks.rb +3 -3
- data/features/type_conversion.feature +53 -45
- data/lib/ruby_odata.rb +17 -17
- data/lib/ruby_odata/class_builder.rb +117 -109
- data/lib/ruby_odata/operation.rb +17 -17
- data/lib/ruby_odata/query_builder.rb +106 -106
- data/lib/ruby_odata/service.rb +359 -339
- data/lib/ruby_odata/version.rb +3 -0
- data/ruby_odata.gemspec +24 -78
- data/test/SampleService/App_Code/Entities.cs +105 -2
- data/test/SampleService/App_Code/Model.Designer.cs +24 -0
- data/test/SampleService/App_Code/Model.edmx +3 -0
- data/test/SampleService/App_Data/_TestDB.mdf +0 -0
- data/test/SampleService/App_Data/_TestDB_Log.ldf +0 -0
- data/test/SampleService/BasicAuth/Entities.svc +1 -0
- data/test/SampleService/web.config +11 -1
- data/test/blueprints.rb +20 -20
- data/test/iisExpress x64.bat +1 -0
- data/test/iisExpress x86.bat +1 -0
- metadata +88 -14
- data/VERSION +0 -1
    
        data/ruby_odata.gemspec
    CHANGED
    
    | @@ -1,85 +1,31 @@ | |
| 1 | 
            -
            # Generated by jeweler
         | 
| 2 | 
            -
            # DO NOT EDIT THIS FILE DIRECTLY
         | 
| 3 | 
            -
            # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
         | 
| 4 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            +
            $:.push File.expand_path("../lib", __FILE__)
         | 
| 3 | 
            +
            require "ruby_odata/version"
         | 
| 5 4 |  | 
| 6 5 | 
             
            Gem::Specification.new do |s|
         | 
| 7 | 
            -
              s.name | 
| 8 | 
            -
              s.version | 
| 9 | 
            -
             | 
| 10 | 
            -
              s. | 
| 11 | 
            -
              s. | 
| 12 | 
            -
              s. | 
| 6 | 
            +
              s.name        = "ruby_odata"
         | 
| 7 | 
            +
              s.version     = OData::VERSION
         | 
| 8 | 
            +
              s.platform    = Gem::Platform::RUBY
         | 
| 9 | 
            +
              s.authors     = ["Damien White"]
         | 
| 10 | 
            +
              s.email       = ["damien.white@visoftinc.com"]
         | 
| 11 | 
            +
              s.homepage    = %q{http://github.com/visoft/ruby_odata}
         | 
| 12 | 
            +
              s.summary     = %q{Ruby consumer of OData services.}
         | 
| 13 13 | 
             
              s.description = %q{An OData Client Library for Ruby.  Use this to interact with OData services}
         | 
| 14 | 
            -
              s.email = %q{damien.white@visoftinc.com}
         | 
| 15 | 
            -
              s.extra_rdoc_files = [
         | 
| 16 | 
            -
                "CHANGELOG.rdoc",
         | 
| 17 | 
            -
                 "LICENSE",
         | 
| 18 | 
            -
                 "README.rdoc"
         | 
| 19 | 
            -
              ]
         | 
| 20 | 
            -
              s.files = [
         | 
| 21 | 
            -
                ".gitignore",
         | 
| 22 | 
            -
                 "CHANGELOG.rdoc",
         | 
| 23 | 
            -
                 "LICENSE",
         | 
| 24 | 
            -
                 "README.rdoc",
         | 
| 25 | 
            -
                 "Rakefile",
         | 
| 26 | 
            -
                 "VERSION",
         | 
| 27 | 
            -
                 "config/cucumber.yml",
         | 
| 28 | 
            -
                 "features/batch_request.feature",
         | 
| 29 | 
            -
                 "features/complex_types.feature",
         | 
| 30 | 
            -
                 "features/query_builder.feature",
         | 
| 31 | 
            -
                 "features/service.feature",
         | 
| 32 | 
            -
                 "features/service_manage.feature",
         | 
| 33 | 
            -
                 "features/step_definitions/service_steps.rb",
         | 
| 34 | 
            -
                 "features/support/env.rb",
         | 
| 35 | 
            -
                 "features/support/hooks.rb",
         | 
| 36 | 
            -
                 "features/type_conversion.feature",
         | 
| 37 | 
            -
                 "lib/ruby_odata.rb",
         | 
| 38 | 
            -
                 "lib/ruby_odata/class_builder.rb",
         | 
| 39 | 
            -
                 "lib/ruby_odata/operation.rb",
         | 
| 40 | 
            -
                 "lib/ruby_odata/query_builder.rb",
         | 
| 41 | 
            -
                 "lib/ruby_odata/service.rb",
         | 
| 42 | 
            -
                 "ruby_odata.gemspec",
         | 
| 43 | 
            -
                 "test/Cassini x64.bat",
         | 
| 44 | 
            -
                 "test/Cassini x86.bat",
         | 
| 45 | 
            -
                 "test/SampleService/App_Code/AuditFields.cs",
         | 
| 46 | 
            -
                 "test/SampleService/App_Code/Entities.cs",
         | 
| 47 | 
            -
                 "test/SampleService/App_Code/Model.Designer.cs",
         | 
| 48 | 
            -
                 "test/SampleService/App_Code/Model.edmx",
         | 
| 49 | 
            -
                 "test/SampleService/App_Code/ModelContainerExtended.cs",
         | 
| 50 | 
            -
                 "test/SampleService/App_Data/_TestDB.mdf",
         | 
| 51 | 
            -
                 "test/SampleService/App_Data/_TestDB_Log.ldf",
         | 
| 52 | 
            -
                 "test/SampleService/Entities.svc",
         | 
| 53 | 
            -
                 "test/SampleService/web.config",
         | 
| 54 | 
            -
                 "test/blueprints.rb"
         | 
| 55 | 
            -
              ]
         | 
| 56 | 
            -
              s.homepage = %q{http://github.com/visoft/ruby_odata}
         | 
| 57 | 
            -
              s.rdoc_options = ["--charset=UTF-8"]
         | 
| 58 | 
            -
              s.require_paths = ["lib"]
         | 
| 59 | 
            -
              s.rubyforge_project = %q{ruby-odata}
         | 
| 60 | 
            -
              s.rubygems_version = %q{1.3.7}
         | 
| 61 | 
            -
              s.summary = %q{Ruby consumer of OData services.}
         | 
| 62 | 
            -
              s.test_files = [
         | 
| 63 | 
            -
                "test/blueprints.rb"
         | 
| 64 | 
            -
              ]
         | 
| 65 14 |  | 
| 66 | 
            -
               | 
| 67 | 
            -
                current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
         | 
| 68 | 
            -
                s.specification_version = 3
         | 
| 15 | 
            +
              s.rubyforge_project = "ruby-odata"
         | 
| 69 16 |  | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 79 | 
            -
              else
         | 
| 80 | 
            -
                s.add_dependency(%q<activesupport>, [">= 2.3.5"])
         | 
| 81 | 
            -
                s.add_dependency(%q<rest-client>, [">= 1.5.1"])
         | 
| 82 | 
            -
                s.add_dependency(%q<nokogiri>, [">= 1.4.2"])
         | 
| 83 | 
            -
              end
         | 
| 84 | 
            -
            end
         | 
| 17 | 
            +
              s.add_dependency('activesupport', '>= 2.3.5')
         | 
| 18 | 
            +
              s.add_dependency('rest-client', '>= 1.5.1')
         | 
| 19 | 
            +
              s.add_dependency('nokogiri', '>= 1.4.2')
         | 
| 20 | 
            +
              
         | 
| 21 | 
            +
              s.add_development_dependency('rspec')
         | 
| 22 | 
            +
              s.add_development_dependency('cucumber')
         | 
| 23 | 
            +
              s.add_development_dependency('sham')
         | 
| 24 | 
            +
              s.add_development_dependency('faker')
         | 
| 25 | 
            +
              s.add_development_dependency('machinist')
         | 
| 85 26 |  | 
| 27 | 
            +
              s.files         = `git ls-files`.split("\n")
         | 
| 28 | 
            +
              s.test_files    = `git ls-files -- {test,spec,features}/*`.split("\n")
         | 
| 29 | 
            +
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 30 | 
            +
              s.require_paths = ["lib"]
         | 
| 31 | 
            +
            end
         | 
| @@ -3,6 +3,10 @@ using System.Data.Services.Common; | |
| 3 3 | 
             
            using System.ServiceModel;
         | 
| 4 4 | 
             
            using System.ServiceModel.Web;
         | 
| 5 5 | 
             
            using System.Web;
         | 
| 6 | 
            +
            using System;
         | 
| 7 | 
            +
            using System.Linq;   
         | 
| 8 | 
            +
            using System.Security.Principal;
         | 
| 9 | 
            +
            using System.Text;
         | 
| 6 10 | 
             
            using Model;
         | 
| 7 11 |  | 
| 8 12 | 
             
            [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
         | 
| @@ -29,14 +33,113 @@ public class Entities : DataService< ModelContainer > | |
| 29 33 | 
             
                    context.ExecuteStoreCommand("ALTER TABLE [dbo].[Products] ADD CONSTRAINT [FK_CategoryProduct] FOREIGN KEY ([Category_Id]) REFERENCES [dbo].[Categories]([Id])");
         | 
| 30 34 |  | 
| 31 35 | 
             
                }
         | 
| 32 | 
            -
             | 
| 36 | 
            +
                
         | 
| 33 37 | 
             
                protected override void OnStartProcessingRequest(ProcessRequestArgs args)
         | 
| 34 38 | 
             
                {
         | 
| 35 39 | 
             
                    base.OnStartProcessingRequest(args);
         | 
| 36 40 | 
             
                    if (args.RequestUri.AbsoluteUri.ToLower().EndsWith("cleandatabasefortesting"))
         | 
| 37 41 | 
             
                    {
         | 
| 38 | 
            -
                         | 
| 42 | 
            +
                        var hostAddress = HttpContext.Current.Request.UserHostAddress;
         | 
| 43 | 
            +
                        if (hostAddress != "127.0.0.1" && hostAddress != "::1")
         | 
| 39 44 | 
             
                            throw new DataServiceException(401, "Access Denied");
         | 
| 40 45 | 
             
                    }
         | 
| 41 46 | 
             
                }
         | 
| 42 47 | 
             
            }
         | 
| 48 | 
            +
             
         | 
| 49 | 
            +
            public class OurBasicAuthenticationModule: IHttpModule 
         | 
| 50 | 
            +
            { 
         | 
| 51 | 
            +
                public void Init(HttpApplication context) 
         | 
| 52 | 
            +
                { 
         | 
| 53 | 
            +
                    context.AuthenticateRequest 
         | 
| 54 | 
            +
                       += new EventHandler(context_AuthenticateRequest); 
         | 
| 55 | 
            +
                }
         | 
| 56 | 
            +
                 
         | 
| 57 | 
            +
                void context_AuthenticateRequest(object sender, EventArgs e) 
         | 
| 58 | 
            +
                { 
         | 
| 59 | 
            +
                    HttpApplication application = (HttpApplication)sender; 
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                    // Only require authentication if BasicAuth is in the URI path
         | 
| 62 | 
            +
                    if (( application.Context.Request.Url.AbsoluteUri.Contains("BasicAuth")) &&
         | 
| 63 | 
            +
                        (!CustomBasicAuthenticationProvider.Authenticate(application.Context))) 
         | 
| 64 | 
            +
                    { 
         | 
| 65 | 
            +
                        application.Context.Response.Status = "401 Unauthorized"; 
         | 
| 66 | 
            +
                        application.Context.Response.StatusCode = 401; 
         | 
| 67 | 
            +
                        application.Context.Response.AddHeader("WWW-Authenticate", "Basic"); 
         | 
| 68 | 
            +
                        application.CompleteRequest(); 
         | 
| 69 | 
            +
                    } 
         | 
| 70 | 
            +
                }
         | 
| 71 | 
            +
             | 
| 72 | 
            +
                public void Dispose() { }
         | 
| 73 | 
            +
             | 
| 74 | 
            +
            }    // class OurBasicAuthenticationModule: IHttpModule 
         | 
| 75 | 
            +
             | 
| 76 | 
            +
            public class CustomBasicAuthenticationProvider
         | 
| 77 | 
            +
            {
         | 
| 78 | 
            +
                public static bool Authenticate(HttpContext context) 
         | 
| 79 | 
            +
                {      
         | 
| 80 | 
            +
                    if (!HttpContext.Current.Request.Headers.AllKeys.Contains("Authorization")) 
         | 
| 81 | 
            +
                        return false;
         | 
| 82 | 
            +
                
         | 
| 83 | 
            +
                    string authHeader = HttpContext.Current.Request.Headers["Authorization"];
         | 
| 84 | 
            +
                
         | 
| 85 | 
            +
                    IPrincipal principal; 
         | 
| 86 | 
            +
                    if (TryGetPrincipal(authHeader, out principal)) 
         | 
| 87 | 
            +
                    { 
         | 
| 88 | 
            +
                        HttpContext.Current.User = principal; 
         | 
| 89 | 
            +
                        return true; 
         | 
| 90 | 
            +
                    } 
         | 
| 91 | 
            +
                    return false; 
         | 
| 92 | 
            +
                } 
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                private static bool TryGetPrincipal(string authHeader, out IPrincipal principal) 
         | 
| 95 | 
            +
                { 
         | 
| 96 | 
            +
                    var creds = ParseAuthHeader(authHeader); 
         | 
| 97 | 
            +
                    if (creds != null && TryGetPrincipal(creds, out principal)) 
         | 
| 98 | 
            +
                        return true;
         | 
| 99 | 
            +
                
         | 
| 100 | 
            +
                    principal = null; 
         | 
| 101 | 
            +
                    return false; 
         | 
| 102 | 
            +
                }
         | 
| 103 | 
            +
             | 
| 104 | 
            +
                private static bool TryGetPrincipal(string[] creds,out IPrincipal principal) 
         | 
| 105 | 
            +
                { 
         | 
| 106 | 
            +
                    if (creds[0] == "admin" && creds[1] == "passwd") 
         | 
| 107 | 
            +
                    { 
         | 
| 108 | 
            +
                        principal = new GenericPrincipal( 
         | 
| 109 | 
            +
                           new GenericIdentity("Administrator"), 
         | 
| 110 | 
            +
                           new string[] {"Administrator", "User"} 
         | 
| 111 | 
            +
                        ); 
         | 
| 112 | 
            +
                        return true; 
         | 
| 113 | 
            +
                    }         
         | 
| 114 | 
            +
                    else 
         | 
| 115 | 
            +
                    { 
         | 
| 116 | 
            +
                        principal = null; 
         | 
| 117 | 
            +
                        return false; 
         | 
| 118 | 
            +
                    } 
         | 
| 119 | 
            +
                }
         | 
| 120 | 
            +
             | 
| 121 | 
            +
                private static string[] ParseAuthHeader(string authHeader) 
         | 
| 122 | 
            +
                { 
         | 
| 123 | 
            +
                    // Check this is a Basic Auth header 
         | 
| 124 | 
            +
                    if ( 
         | 
| 125 | 
            +
                        authHeader == null || 
         | 
| 126 | 
            +
                        authHeader.Length == 0 || 
         | 
| 127 | 
            +
                        !authHeader.StartsWith("Basic") 
         | 
| 128 | 
            +
                    ) return null;
         | 
| 129 | 
            +
                
         | 
| 130 | 
            +
                    // Pull out the Credentials with are seperated by ':' and Base64 encoded 
         | 
| 131 | 
            +
                    // Won't handle password with : in it, but that's OK for these tests
         | 
| 132 | 
            +
                    string base64Credentials = authHeader.Substring(6); 
         | 
| 133 | 
            +
                    string[] credentials = Encoding.ASCII.GetString( 
         | 
| 134 | 
            +
                          Convert.FromBase64String(base64Credentials) 
         | 
| 135 | 
            +
                    ).Split(new char[] { ':' }); 
         | 
| 136 | 
            +
                
         | 
| 137 | 
            +
                    if (credentials.Length != 2 || 
         | 
| 138 | 
            +
                        string.IsNullOrEmpty(credentials[0]) || 
         | 
| 139 | 
            +
                        string.IsNullOrEmpty(credentials[0]) 
         | 
| 140 | 
            +
                    ) return null;
         | 
| 141 | 
            +
                        
         | 
| 142 | 
            +
                    return credentials; 
         | 
| 143 | 
            +
                }    
         | 
| 144 | 
            +
             | 
| 145 | 
            +
            }    // class CustomBasicAuthenticationProvider
         | 
| @@ -365,6 +365,30 @@ namespace Model | |
| 365 365 | 
             
                    private global::System.Decimal _Price;
         | 
| 366 366 | 
             
                    partial void OnPriceChanging(global::System.Decimal value);
         | 
| 367 367 | 
             
                    partial void OnPriceChanged();
         | 
| 368 | 
            +
                
         | 
| 369 | 
            +
                    /// <summary>
         | 
| 370 | 
            +
                    /// No Metadata Documentation available.
         | 
| 371 | 
            +
                    /// </summary>
         | 
| 372 | 
            +
                    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
         | 
| 373 | 
            +
                    [DataMemberAttribute()]
         | 
| 374 | 
            +
                    public Nullable<global::System.DateTime> DiscontinuedDate
         | 
| 375 | 
            +
                    {
         | 
| 376 | 
            +
                        get
         | 
| 377 | 
            +
                        {
         | 
| 378 | 
            +
                            return _DiscontinuedDate;
         | 
| 379 | 
            +
                        }
         | 
| 380 | 
            +
                        set
         | 
| 381 | 
            +
                        {
         | 
| 382 | 
            +
                            OnDiscontinuedDateChanging(value);
         | 
| 383 | 
            +
                            ReportPropertyChanging("DiscontinuedDate");
         | 
| 384 | 
            +
                            _DiscontinuedDate = StructuralObject.SetValidValue(value);
         | 
| 385 | 
            +
                            ReportPropertyChanged("DiscontinuedDate");
         | 
| 386 | 
            +
                            OnDiscontinuedDateChanged();
         | 
| 387 | 
            +
                        }
         | 
| 388 | 
            +
                    }
         | 
| 389 | 
            +
                    private Nullable<global::System.DateTime> _DiscontinuedDate;
         | 
| 390 | 
            +
                    partial void OnDiscontinuedDateChanging(Nullable<global::System.DateTime> value);
         | 
| 391 | 
            +
                    partial void OnDiscontinuedDateChanged();
         | 
| 368 392 |  | 
| 369 393 | 
             
                    #endregion
         | 
| 370 394 | 
             
                    #region Complex Properties
         | 
| @@ -32,6 +32,7 @@ | |
| 32 32 | 
             
                      <Property Name="CreateDate" Type="datetime" Nullable="false" />
         | 
| 33 33 | 
             
                      <Property Name="ModifiedDate" Type="datetime" Nullable="false" />
         | 
| 34 34 | 
             
                      <Property Name="CreatedBy" Type="nvarchar" MaxLength="50" />
         | 
| 35 | 
            +
                      <Property Name="DiscontinuedDate" Type="datetime" />
         | 
| 35 36 | 
             
                    </EntityType>
         | 
| 36 37 | 
             
                    <Association Name="FK_CategoryProduct">
         | 
| 37 38 | 
             
                      <End Role="Categories" Type="Model.Store.Categories" Multiplicity="1" />
         | 
| @@ -67,6 +68,7 @@ | |
| 67 68 | 
             
                      <Property Type="Decimal" Name="Price" Nullable="false" />
         | 
| 68 69 | 
             
                      <NavigationProperty Name="Category" Relationship="Model.CategoryProduct" FromRole="Product" ToRole="Category" />
         | 
| 69 70 | 
             
                      <Property Name="AuditFields" Type="Model.AuditFields" Nullable="false" />
         | 
| 71 | 
            +
                      <Property Type="DateTime" Name="DiscontinuedDate" Nullable="true" />
         | 
| 70 72 | 
             
                    </EntityType>
         | 
| 71 73 | 
             
                    <EntityType Name="Category">
         | 
| 72 74 | 
             
                      <Key>
         | 
| @@ -94,6 +96,7 @@ | |
| 94 96 | 
             
                <EntitySetMapping Name="Products">
         | 
| 95 97 | 
             
                  <EntityTypeMapping TypeName="IsTypeOf(Model.Product)">
         | 
| 96 98 | 
             
                    <MappingFragment StoreEntitySet="Products">
         | 
| 99 | 
            +
                            <ScalarProperty Name="DiscontinuedDate" ColumnName="DiscontinuedDate" />
         | 
| 97 100 | 
             
                            <ScalarProperty Name="Id" ColumnName="Id" />
         | 
| 98 101 | 
             
                      <ScalarProperty Name="Name" ColumnName="Name" />
         | 
| 99 102 | 
             
                      <ScalarProperty Name="Description" ColumnName="Description" />
         | 
| Binary file | 
| Binary file | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            <%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory" Service="Entities" %>
         | 
| @@ -4,6 +4,14 @@ | |
| 4 4 | 
             
              http://go.microsoft.com/fwlink/?LinkId=169433
         | 
| 5 5 | 
             
              -->
         | 
| 6 6 | 
             
            <configuration>
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              <system.webServer> 
         | 
| 9 | 
            +
                <modules> 
         | 
| 10 | 
            +
                  <add name="OurBasicAuthenticationModule" 
         | 
| 11 | 
            +
                     type="OurBasicAuthenticationModule"/> 
         | 
| 12 | 
            +
                </modules> 
         | 
| 13 | 
            +
              </system.webServer>
         | 
| 14 | 
            +
             | 
| 7 15 | 
             
              <system.web>
         | 
| 8 16 | 
             
                <compilation debug="true" targetFramework="4.0">
         | 
| 9 17 | 
             
                  <assemblies>
         | 
| @@ -24,4 +32,6 @@ | |
| 24 32 | 
             
              <system.serviceModel>
         | 
| 25 33 | 
             
                <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
         | 
| 26 34 | 
             
              </system.serviceModel>
         | 
| 27 | 
            -
            </configuration>
         | 
| 35 | 
            +
            </configuration>
         | 
| 36 | 
            +
             | 
| 37 | 
            +
              
         | 
    
        data/test/blueprints.rb
    CHANGED
    
    | @@ -1,21 +1,21 @@ | |
| 1 | 
            -
            Sham.define do
         | 
| 2 | 
            -
              category_name | 
| 3 | 
            -
              product_name | 
| 4 | 
            -
              price(:unique => false) | 
| 5 | 
            -
            end
         | 
| 6 | 
            -
             | 
| 7 | 
            -
            Product.blueprint do
         | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            end
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            Category.blueprint do
         | 
| 16 | 
            -
             | 
| 17 | 
            -
            end
         | 
| 18 | 
            -
             | 
| 19 | 
            -
            AuditFields.blueprint do
         | 
| 20 | 
            -
              CreatedBy     "Cucumber"
         | 
| 1 | 
            +
            Sham.define do
         | 
| 2 | 
            +
              category_name           { |i| "Category #{i}" }
         | 
| 3 | 
            +
              product_name            { |i| "Widget #{i}" }
         | 
| 4 | 
            +
              price(:unique => false) { ['5.00', '10.00', '20.00', '15.00' , '25.00', '7.50'].rand }
         | 
| 5 | 
            +
            end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            Product.blueprint do
         | 
| 8 | 
            +
              Name          { Sham.product_name }
         | 
| 9 | 
            +
              Description   "Test Widget"
         | 
| 10 | 
            +
              Price         { Sham.price }
         | 
| 11 | 
            +
              Category      { Category.make }
         | 
| 12 | 
            +
              AuditFields   { AuditFields.make }
         | 
| 13 | 
            +
            end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            Category.blueprint do
         | 
| 16 | 
            +
              Name          { Sham.category_name }
         | 
| 17 | 
            +
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            AuditFields.blueprint do
         | 
| 20 | 
            +
              CreatedBy     "Cucumber"
         | 
| 21 21 | 
             
            end
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            "%ProgramFiles(x86)%\iis express\iisexpress" /port:8888 /path:"%~dp0SampleService" /vpath:"/SampleService"
         | 
| @@ -0,0 +1 @@ | |
| 1 | 
            +
            "%ProgramFiles%\iis express\iisexpress" /port:8888 /path:"%~dp0SampleService" /vpath:"/SampleService"
         | 
    
        metadata
    CHANGED
    
    | @@ -1,13 +1,13 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: ruby_odata
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              hash:  | 
| 4 | 
            +
              hash: 15
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 0
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.0. | 
| 9 | 
            +
              - 8
         | 
| 10 | 
            +
              version: 0.0.8
         | 
| 11 11 | 
             
            platform: ruby
         | 
| 12 12 | 
             
            authors: 
         | 
| 13 13 | 
             
            - Damien White
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date:  | 
| 18 | 
            +
            date: 2011-03-12 23:00:00 -05:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: 
         | 
| 21 21 | 
             
            - !ruby/object:Gem::Dependency 
         | 
| @@ -66,24 +66,94 @@ dependencies: | |
| 66 66 | 
             
                    version: 1.4.2
         | 
| 67 67 | 
             
              type: :runtime
         | 
| 68 68 | 
             
              version_requirements: *id003
         | 
| 69 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 70 | 
            +
              name: rspec
         | 
| 71 | 
            +
              prerelease: false
         | 
| 72 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 73 | 
            +
                none: false
         | 
| 74 | 
            +
                requirements: 
         | 
| 75 | 
            +
                - - ">="
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 77 | 
            +
                    hash: 3
         | 
| 78 | 
            +
                    segments: 
         | 
| 79 | 
            +
                    - 0
         | 
| 80 | 
            +
                    version: "0"
         | 
| 81 | 
            +
              type: :development
         | 
| 82 | 
            +
              version_requirements: *id004
         | 
| 83 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 84 | 
            +
              name: cucumber
         | 
| 85 | 
            +
              prerelease: false
         | 
| 86 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 87 | 
            +
                none: false
         | 
| 88 | 
            +
                requirements: 
         | 
| 89 | 
            +
                - - ">="
         | 
| 90 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 91 | 
            +
                    hash: 3
         | 
| 92 | 
            +
                    segments: 
         | 
| 93 | 
            +
                    - 0
         | 
| 94 | 
            +
                    version: "0"
         | 
| 95 | 
            +
              type: :development
         | 
| 96 | 
            +
              version_requirements: *id005
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 98 | 
            +
              name: sham
         | 
| 99 | 
            +
              prerelease: false
         | 
| 100 | 
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 101 | 
            +
                none: false
         | 
| 102 | 
            +
                requirements: 
         | 
| 103 | 
            +
                - - ">="
         | 
| 104 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 105 | 
            +
                    hash: 3
         | 
| 106 | 
            +
                    segments: 
         | 
| 107 | 
            +
                    - 0
         | 
| 108 | 
            +
                    version: "0"
         | 
| 109 | 
            +
              type: :development
         | 
| 110 | 
            +
              version_requirements: *id006
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 112 | 
            +
              name: faker
         | 
| 113 | 
            +
              prerelease: false
         | 
| 114 | 
            +
              requirement: &id007 !ruby/object:Gem::Requirement 
         | 
| 115 | 
            +
                none: false
         | 
| 116 | 
            +
                requirements: 
         | 
| 117 | 
            +
                - - ">="
         | 
| 118 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 119 | 
            +
                    hash: 3
         | 
| 120 | 
            +
                    segments: 
         | 
| 121 | 
            +
                    - 0
         | 
| 122 | 
            +
                    version: "0"
         | 
| 123 | 
            +
              type: :development
         | 
| 124 | 
            +
              version_requirements: *id007
         | 
| 125 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 126 | 
            +
              name: machinist
         | 
| 127 | 
            +
              prerelease: false
         | 
| 128 | 
            +
              requirement: &id008 !ruby/object:Gem::Requirement 
         | 
| 129 | 
            +
                none: false
         | 
| 130 | 
            +
                requirements: 
         | 
| 131 | 
            +
                - - ">="
         | 
| 132 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 133 | 
            +
                    hash: 3
         | 
| 134 | 
            +
                    segments: 
         | 
| 135 | 
            +
                    - 0
         | 
| 136 | 
            +
                    version: "0"
         | 
| 137 | 
            +
              type: :development
         | 
| 138 | 
            +
              version_requirements: *id008
         | 
| 69 139 | 
             
            description: An OData Client Library for Ruby.  Use this to interact with OData services
         | 
| 70 | 
            -
            email:  | 
| 140 | 
            +
            email: 
         | 
| 141 | 
            +
            - damien.white@visoftinc.com
         | 
| 71 142 | 
             
            executables: []
         | 
| 72 143 |  | 
| 73 144 | 
             
            extensions: []
         | 
| 74 145 |  | 
| 75 | 
            -
            extra_rdoc_files: 
         | 
| 76 | 
            -
             | 
| 77 | 
            -
            - LICENSE
         | 
| 78 | 
            -
            - README.rdoc
         | 
| 146 | 
            +
            extra_rdoc_files: []
         | 
| 147 | 
            +
             | 
| 79 148 | 
             
            files: 
         | 
| 80 149 | 
             
            - .gitignore
         | 
| 81 150 | 
             
            - CHANGELOG.rdoc
         | 
| 151 | 
            +
            - Gemfile
         | 
| 82 152 | 
             
            - LICENSE
         | 
| 83 153 | 
             
            - README.rdoc
         | 
| 84 154 | 
             
            - Rakefile
         | 
| 85 | 
            -
            - VERSION
         | 
| 86 155 | 
             
            - config/cucumber.yml
         | 
| 156 | 
            +
            - features/basic_auth.feature
         | 
| 87 157 | 
             
            - features/batch_request.feature
         | 
| 88 158 | 
             
            - features/complex_types.feature
         | 
| 89 159 | 
             
            - features/query_builder.feature
         | 
| @@ -98,6 +168,7 @@ files: | |
| 98 168 | 
             
            - lib/ruby_odata/operation.rb
         | 
| 99 169 | 
             
            - lib/ruby_odata/query_builder.rb
         | 
| 100 170 | 
             
            - lib/ruby_odata/service.rb
         | 
| 171 | 
            +
            - lib/ruby_odata/version.rb
         | 
| 101 172 | 
             
            - ruby_odata.gemspec
         | 
| 102 173 | 
             
            - test/Cassini x64.bat
         | 
| 103 174 | 
             
            - test/Cassini x86.bat
         | 
| @@ -108,16 +179,19 @@ files: | |
| 108 179 | 
             
            - test/SampleService/App_Code/ModelContainerExtended.cs
         | 
| 109 180 | 
             
            - test/SampleService/App_Data/_TestDB.mdf
         | 
| 110 181 | 
             
            - test/SampleService/App_Data/_TestDB_Log.ldf
         | 
| 182 | 
            +
            - test/SampleService/BasicAuth/Entities.svc
         | 
| 111 183 | 
             
            - test/SampleService/Entities.svc
         | 
| 112 184 | 
             
            - test/SampleService/web.config
         | 
| 113 185 | 
             
            - test/blueprints.rb
         | 
| 186 | 
            +
            - test/iisExpress x64.bat
         | 
| 187 | 
            +
            - test/iisExpress x86.bat
         | 
| 114 188 | 
             
            has_rdoc: true
         | 
| 115 189 | 
             
            homepage: http://github.com/visoft/ruby_odata
         | 
| 116 190 | 
             
            licenses: []
         | 
| 117 191 |  | 
| 118 192 | 
             
            post_install_message: 
         | 
| 119 | 
            -
            rdoc_options: 
         | 
| 120 | 
            -
             | 
| 193 | 
            +
            rdoc_options: []
         | 
| 194 | 
            +
             | 
| 121 195 | 
             
            require_paths: 
         | 
| 122 196 | 
             
            - lib
         | 
| 123 197 | 
             
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| @@ -145,5 +219,5 @@ rubygems_version: 1.3.7 | |
| 145 219 | 
             
            signing_key: 
         | 
| 146 220 | 
             
            specification_version: 3
         | 
| 147 221 | 
             
            summary: Ruby consumer of OData services.
         | 
| 148 | 
            -
            test_files: 
         | 
| 149 | 
            -
             | 
| 222 | 
            +
            test_files: []
         | 
| 223 | 
            +
             |