ruby_odata 0.0.10 → 0.1.0

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.
Files changed (173) hide show
  1. data/.gitignore +9 -3
  2. data/.travis.yml +4 -0
  3. data/CHANGELOG.rdoc +18 -1
  4. data/README.rdoc +77 -19
  5. data/config/cucumber.yml +4 -3
  6. data/features/basic_auth.feature +5 -7
  7. data/features/batch_request.feature +11 -11
  8. data/features/complex_types.feature +11 -11
  9. data/features/query_builder.feature +27 -18
  10. data/features/service.feature +8 -8
  11. data/features/service_manage.feature +27 -12
  12. data/features/service_methods.feature +37 -0
  13. data/features/ssl.feature +4 -4
  14. data/features/step_definitions/pickle_steps.rb +100 -0
  15. data/features/step_definitions/service_steps.rb +99 -65
  16. data/features/support/constants.rb +3 -0
  17. data/features/support/custom_helpers.rb +54 -0
  18. data/features/support/env.rb +0 -10
  19. data/features/support/hooks.rb +1 -1
  20. data/features/support/pickle.rb +82 -0
  21. data/features/type_conversion.feature +10 -10
  22. data/lib/ruby_odata.rb +4 -1
  23. data/lib/ruby_odata/association.rb +36 -0
  24. data/lib/ruby_odata/class_builder.rb +96 -16
  25. data/lib/ruby_odata/helpers.rb +10 -0
  26. data/lib/ruby_odata/operation.rb +7 -5
  27. data/lib/ruby_odata/property_metadata.rb +11 -6
  28. data/lib/ruby_odata/query_builder.rb +20 -1
  29. data/lib/ruby_odata/service.rb +407 -94
  30. data/lib/ruby_odata/version.rb +1 -1
  31. data/ruby_odata.gemspec +2 -0
  32. data/spec/association_spec.rb +48 -0
  33. data/spec/class_builder_spec.rb +11 -2
  34. data/spec/fixtures/inheritance/edmx_pluralsight.xml +111 -0
  35. data/spec/fixtures/inheritance/result_pluralsight_courses.xml +229 -0
  36. data/spec/fixtures/links/result_links_query.xml +6 -0
  37. data/spec/fixtures/partial/partial_feed_metadata.xml +25 -0
  38. data/spec/fixtures/partial/partial_feed_part_1.xml +42 -0
  39. data/spec/fixtures/partial/partial_feed_part_2.xml +42 -0
  40. data/spec/fixtures/partial/partial_feed_part_3.xml +40 -0
  41. data/spec/fixtures/sample_service/edmx_categories_products.xml +1 -0
  42. data/spec/fixtures/sample_service/result_category_names.xml +5 -0
  43. data/spec/fixtures/sample_service/result_entity_category_web_get.xml +29 -0
  44. data/spec/fixtures/sample_service/result_entity_single_category_web_get.xml +23 -0
  45. data/spec/fixtures/sample_service/result_first_category_id.xml +2 -0
  46. data/spec/fixtures/sample_service/result_multiple_category_products.xml +57 -0
  47. data/spec/fixtures/sample_service/result_single_category.xml +18 -0
  48. data/spec/fixtures/sample_service/result_single_product.xml +26 -0
  49. data/spec/fixtures/sample_service/result_single_product_not_found.xml +4 -0
  50. data/spec/fixtures/sap/edmx_sap_demo_flight.xml +62 -58
  51. data/spec/property_metadata_spec.rb +9 -2
  52. data/spec/query_builder_spec.rb +11 -0
  53. data/spec/revised_service_spec.rb +197 -0
  54. data/spec/service_spec.rb +463 -4
  55. data/test/RubyODataService/RubyODataService.sln +20 -0
  56. data/test/RubyODataService/RubyODataService/App_Start/EntityFramework.SqlServerCompact.cs +12 -0
  57. data/test/RubyODataService/RubyODataService/BasicAuth/RubyOData.svc +3 -0
  58. data/test/RubyODataService/RubyODataService/BasicAuth/RubyOData.svc.cs +107 -0
  59. data/test/RubyODataService/RubyODataService/Global.asax +1 -0
  60. data/test/RubyODataService/RubyODataService/Global.asax.cs +49 -0
  61. data/test/RubyODataService/RubyODataService/Models/AuditFields.cs +16 -0
  62. data/test/RubyODataService/RubyODataService/Models/Category.cs +16 -0
  63. data/test/RubyODataService/RubyODataService/Models/Product.cs +20 -0
  64. data/test/RubyODataService/RubyODataService/Properties/AssemblyInfo.cs +35 -0
  65. data/test/RubyODataService/RubyODataService/RubyOData.svc +3 -0
  66. data/test/RubyODataService/RubyODataService/RubyOData.svc.cs +57 -0
  67. data/test/RubyODataService/RubyODataService/RubyODataContext.cs +16 -0
  68. data/test/RubyODataService/RubyODataService/RubyODataService.csproj +159 -0
  69. data/test/RubyODataService/RubyODataService/RubyODataService.csproj.user +31 -0
  70. data/test/RubyODataService/RubyODataService/Web.Debug.config +30 -0
  71. data/test/RubyODataService/RubyODataService/Web.Release.config +31 -0
  72. data/test/RubyODataService/RubyODataService/Web.config +27 -0
  73. data/test/RubyODataService/RubyODataService/bin/EntityFramework.dll +0 -0
  74. data/test/RubyODataService/RubyODataService/bin/Microsoft.Data.Edm.dll +0 -0
  75. data/test/RubyODataService/RubyODataService/bin/Microsoft.Data.OData.dll +0 -0
  76. data/test/RubyODataService/RubyODataService/bin/Microsoft.Data.Services.Client.dll +0 -0
  77. data/test/RubyODataService/RubyODataService/bin/Microsoft.Data.Services.dll +0 -0
  78. data/test/RubyODataService/RubyODataService/bin/Microsoft.Data.Spatial.dll +0 -0
  79. data/test/RubyODataService/RubyODataService/bin/RubyODataService.dll +0 -0
  80. data/test/RubyODataService/RubyODataService/bin/System.Data.SqlServerCe.Entity.dll +0 -0
  81. data/test/RubyODataService/RubyODataService/bin/System.Data.SqlServerCe.dll +0 -0
  82. data/test/RubyODataService/RubyODataService/bin/System.Spatial.dll +0 -0
  83. data/test/RubyODataService/RubyODataService/bin/WebActivator.dll +0 -0
  84. data/test/RubyODataService/RubyODataService/bin/amd64/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest +6 -0
  85. data/test/RubyODataService/RubyODataService/bin/amd64/Microsoft.VC90.CRT/README_ENU.txt +0 -0
  86. data/test/RubyODataService/RubyODataService/bin/amd64/Microsoft.VC90.CRT/msvcr90.dll +0 -0
  87. data/test/RubyODataService/RubyODataService/bin/amd64/sqlcecompact40.dll +0 -0
  88. data/test/RubyODataService/RubyODataService/bin/amd64/sqlceer40EN.dll +0 -0
  89. data/test/RubyODataService/RubyODataService/bin/amd64/sqlceme40.dll +0 -0
  90. data/test/RubyODataService/RubyODataService/bin/amd64/sqlceqp40.dll +0 -0
  91. data/test/RubyODataService/RubyODataService/bin/amd64/sqlcese40.dll +0 -0
  92. data/test/RubyODataService/RubyODataService/bin/x86/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest +6 -0
  93. data/test/RubyODataService/RubyODataService/bin/x86/Microsoft.VC90.CRT/README_ENU.txt +0 -0
  94. data/test/RubyODataService/RubyODataService/bin/x86/Microsoft.VC90.CRT/msvcr90.dll +0 -0
  95. data/test/RubyODataService/RubyODataService/bin/x86/sqlcecompact40.dll +0 -0
  96. data/test/RubyODataService/RubyODataService/bin/x86/sqlceer40EN.dll +0 -0
  97. data/test/RubyODataService/RubyODataService/bin/x86/sqlceme40.dll +0 -0
  98. data/test/RubyODataService/RubyODataService/bin/x86/sqlceqp40.dll +0 -0
  99. data/test/RubyODataService/RubyODataService/bin/x86/sqlcese40.dll +0 -0
  100. data/test/RubyODataService/RubyODataService/packages.config +7 -0
  101. data/test/RubyODataService/packages/EntityFramework.4.2.0.0/EntityFramework.4.2.0.0.nupkg +0 -0
  102. data/test/RubyODataService/packages/EntityFramework.4.2.0.0/lib/net40/EntityFramework.dll +0 -0
  103. data/test/RubyODataService/packages/EntityFramework.4.2.0.0/lib/net40/EntityFramework.xml +13488 -0
  104. data/test/RubyODataService/packages/EntityFramework.SqlServerCompact.4.1.8482.2/Content/App_Start/EntityFramework.SqlServerCompact.cs.pp +12 -0
  105. data/test/RubyODataService/packages/EntityFramework.SqlServerCompact.4.1.8482.2/EULA_ENU.rtf +969 -0
  106. data/test/RubyODataService/packages/EntityFramework.SqlServerCompact.4.1.8482.2/EntityFramework.SqlServerCompact.4.1.8482.2.nupkg +0 -0
  107. data/test/RubyODataService/packages/EntityFramework.SqlServerCompact.4.1.8482.2/lib/System.Data.SqlServerCe.Entity.dll +0 -0
  108. data/test/RubyODataService/packages/EntityFramework.SqlServerCompact.4.1.8482.2/tools/install.ps1 +3 -0
  109. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/Content/web.config.transform +8 -0
  110. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest +6 -0
  111. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/Microsoft.VC90.CRT/README_ENU.txt +0 -0
  112. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/Microsoft.VC90.CRT/msvcr90.dll +0 -0
  113. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/sqlcecompact40.dll +0 -0
  114. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/sqlceer40EN.dll +0 -0
  115. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/sqlceme40.dll +0 -0
  116. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/sqlceqp40.dll +0 -0
  117. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/amd64/sqlcese40.dll +0 -0
  118. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/Microsoft.VC90.CRT/Microsoft.VC90.CRT.manifest +6 -0
  119. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/Microsoft.VC90.CRT/README_ENU.txt +0 -0
  120. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/Microsoft.VC90.CRT/msvcr90.dll +0 -0
  121. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/sqlcecompact40.dll +0 -0
  122. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/sqlceer40EN.dll +0 -0
  123. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/sqlceme40.dll +0 -0
  124. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/sqlceqp40.dll +0 -0
  125. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/NativeBinaries/x86/sqlcese40.dll +0 -0
  126. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/SQLCE_EULA_ENU.rtf +778 -0
  127. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/SqlServerCompact.4.0.8482.1.nupkg +0 -0
  128. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/Tools/GetSqlCEPostBuildCmd.ps1 +12 -0
  129. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/Tools/install.ps1 +11 -0
  130. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/Tools/uninstall.ps1 +9 -0
  131. data/test/RubyODataService/packages/SqlServerCompact.4.0.8482.1/lib/System.Data.SqlServerCe.dll +0 -0
  132. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/DataSvcUtil.exe +0 -0
  133. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/License.rtf +708 -0
  134. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Edm.dll +0 -0
  135. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Edm.xml +4150 -0
  136. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.OData.dll +0 -0
  137. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.OData.xml +1969 -0
  138. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Services.Client.dll +0 -0
  139. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Services.Client.xml +1442 -0
  140. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Services.Design.dll +0 -0
  141. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Services.Design.xml +191 -0
  142. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Services.dll +0 -0
  143. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Services.xml +2559 -0
  144. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Spatial.dll +0 -0
  145. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.Data.Spatial.xml +15 -0
  146. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/Microsoft.VsDesigner.DataServices.Adapter.dll +0 -0
  147. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/README.txt +6 -0
  148. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/System.Spatial.dll +0 -0
  149. data/test/RubyODataService/packages/WCF DataServices October 2011 CTP/System.Spatial.xml +2276 -0
  150. data/test/RubyODataService/packages/WebActivator.1.0.0.0/WebActivator.1.0.0.0.nupkg +0 -0
  151. data/test/RubyODataService/packages/WebActivator.1.0.0.0/lib/WebActivator.dll +0 -0
  152. data/test/RubyODataService/packages/repositories.config +4 -0
  153. data/test/applicationhost.config.template +2 -2
  154. data/test/blueprints.rb +5 -4
  155. data/test/iisExpress x64.bat b/data/test/iisExpress → x64.bat +0 -0
  156. data/test/iisExpress x86.bat b/data/test/iisExpress → x86.bat +0 -0
  157. data/test/setpath.rb +13 -3
  158. data/test/usage_samples/querying.rb +45 -0
  159. data/test/usage_samples/reflection.rb +16 -0
  160. data/test/usage_samples/sample_data.rb +30 -0
  161. metadata +327 -36
  162. data/test/Cassini x64.bat +0 -1
  163. data/test/Cassini x86.bat +0 -1
  164. data/test/SampleService/App_Code/AuditFields.cs +0 -13
  165. data/test/SampleService/App_Code/Entities.cs +0 -145
  166. data/test/SampleService/App_Code/Model.Designer.cs +0 -578
  167. data/test/SampleService/App_Code/Model.edmx +0 -157
  168. data/test/SampleService/App_Code/ModelContainerExtended.cs +0 -32
  169. data/test/SampleService/App_Data/_TestDB.mdf +0 -0
  170. data/test/SampleService/App_Data/_TestDB_Log.ldf +0 -0
  171. data/test/SampleService/BasicAuth/Entities.svc +0 -1
  172. data/test/SampleService/Entities.svc +0 -1
  173. data/test/SampleService/web.config +0 -37
@@ -0,0 +1,20 @@
1
+ 
2
+ Microsoft Visual Studio Solution File, Format Version 11.00
3
+ # Visual Studio 2010
4
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RubyODataService", "RubyODataService\RubyODataService.csproj", "{C84F8120-25A8-4874-BAC2-9A19E114CFB2}"
5
+ EndProject
6
+ Global
7
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
8
+ Debug|Any CPU = Debug|Any CPU
9
+ Release|Any CPU = Release|Any CPU
10
+ EndGlobalSection
11
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
12
+ {C84F8120-25A8-4874-BAC2-9A19E114CFB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
13
+ {C84F8120-25A8-4874-BAC2-9A19E114CFB2}.Debug|Any CPU.Build.0 = Debug|Any CPU
14
+ {C84F8120-25A8-4874-BAC2-9A19E114CFB2}.Release|Any CPU.ActiveCfg = Release|Any CPU
15
+ {C84F8120-25A8-4874-BAC2-9A19E114CFB2}.Release|Any CPU.Build.0 = Release|Any CPU
16
+ EndGlobalSection
17
+ GlobalSection(SolutionProperties) = preSolution
18
+ HideSolutionNode = FALSE
19
+ EndGlobalSection
20
+ EndGlobal
@@ -0,0 +1,12 @@
1
+ using System.Data.Entity;
2
+ using System.Data.Entity.Infrastructure;
3
+
4
+ [assembly: WebActivator.PreApplicationStartMethod(typeof(RubyODataService.App_Start.EntityFramework_SqlServerCompact), "Start")]
5
+
6
+ namespace RubyODataService.App_Start {
7
+ public static class EntityFramework_SqlServerCompact {
8
+ public static void Start() {
9
+ Database.DefaultConnectionFactory = new SqlCeConnectionFactory("System.Data.SqlServerCe.4.0");
10
+ }
11
+ }
12
+ }
@@ -0,0 +1,3 @@
1
+ 
2
+
3
+ <%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, Microsoft.Data.Services, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Service="RubyODataService.RubyOData" %>
@@ -0,0 +1,107 @@
1
+ using System;
2
+ using System.Linq;
3
+ using System.Security.Principal;
4
+ using System.Text;
5
+ using System.Web;
6
+
7
+ // ReSharper disable CheckNamespace
8
+ namespace RubyODataService
9
+ // ReSharper restore CheckNamespace
10
+ {
11
+ public class OurBasicAuthenticationModule : IHttpModule
12
+ {
13
+ public void Init(HttpApplication context)
14
+ {
15
+ context.AuthenticateRequest += context_AuthenticateRequest;
16
+ }
17
+
18
+ private void context_AuthenticateRequest(object sender, EventArgs e)
19
+ {
20
+ HttpApplication application = (HttpApplication)sender;
21
+
22
+ // Only require authentication if BasicAuth is in the URI path
23
+ if ((application.Context.Request.Url.AbsoluteUri.Contains("BasicAuth")) &&
24
+ (!CustomBasicAuthenticationProvider.Authenticate(application.Context)))
25
+ {
26
+ application.Context.Response.Status = "401 Unauthorized";
27
+ application.Context.Response.StatusCode = 401;
28
+ application.Context.Response.AddHeader("WWW-Authenticate", "Basic");
29
+ application.CompleteRequest();
30
+ }
31
+ }
32
+
33
+ public void Dispose()
34
+ {
35
+ }
36
+
37
+ }
38
+
39
+ // class OurBasicAuthenticationModule: IHttpModule
40
+
41
+ public class CustomBasicAuthenticationProvider
42
+ {
43
+ public static bool Authenticate(HttpContext context)
44
+ {
45
+ if (!HttpContext.Current.Request.Headers.AllKeys.Contains("Authorization"))
46
+ return false;
47
+
48
+ string authHeader = HttpContext.Current.Request.Headers["Authorization"];
49
+
50
+ IPrincipal principal;
51
+ if (TryGetPrincipal(authHeader, out principal))
52
+ {
53
+ HttpContext.Current.User = principal;
54
+ return true;
55
+ }
56
+ return false;
57
+ }
58
+
59
+ private static bool TryGetPrincipal(string authHeader, out IPrincipal principal)
60
+ {
61
+ var creds = ParseAuthHeader(authHeader);
62
+ if (creds != null && TryGetPrincipal(creds, out principal))
63
+ return true;
64
+
65
+ principal = null;
66
+ return false;
67
+ }
68
+
69
+ private static bool TryGetPrincipal(string[] creds, out IPrincipal principal)
70
+ {
71
+ if (creds[0] == "admin" && creds[1] == "passwd")
72
+ {
73
+ principal = new GenericPrincipal(
74
+ new GenericIdentity("Administrator"),
75
+ new[] { "Administrator", "User" }
76
+ );
77
+ return true;
78
+ }
79
+ principal = null;
80
+ return false;
81
+ }
82
+
83
+ private static string[] ParseAuthHeader(string authHeader)
84
+ {
85
+ // Check this is a Basic Auth header
86
+ if (
87
+ string.IsNullOrEmpty(authHeader) ||
88
+ !authHeader.StartsWith("Basic")
89
+ ) return null;
90
+
91
+ // Pull out the Credentials with are seperated by ':' and Base64 encoded
92
+ // Won't handle password with : in it, but that's OK for these tests
93
+ var base64Credentials = authHeader.Substring(6);
94
+ var credentials = Encoding.ASCII.GetString(Convert.FromBase64String(base64Credentials)).Split(new[] { ':' });
95
+
96
+ if (credentials.Length != 2 ||
97
+ string.IsNullOrEmpty(credentials[0]) ||
98
+ string.IsNullOrEmpty(credentials[0])
99
+ ) return null;
100
+
101
+ return credentials;
102
+ }
103
+
104
+ }
105
+
106
+ // class CustomBasicAuthenticationProvider
107
+ }
@@ -0,0 +1 @@
1
+ <%@ Application Codebehind="Global.asax.cs" Inherits="RubyODataService.Global" Language="C#" %>
@@ -0,0 +1,49 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Data.Entity;
4
+ using System.Linq;
5
+ using System.Web;
6
+ using System.Web.Security;
7
+ using System.Web.SessionState;
8
+
9
+ namespace RubyODataService
10
+ {
11
+ public class Global : System.Web.HttpApplication
12
+ {
13
+
14
+ protected void Application_Start(object sender, EventArgs e)
15
+ {
16
+ Database.SetInitializer(new DropCreateDatabaseAlways<RubyODataContext>());
17
+ }
18
+
19
+ protected void Session_Start(object sender, EventArgs e)
20
+ {
21
+
22
+ }
23
+
24
+ protected void Application_BeginRequest(object sender, EventArgs e)
25
+ {
26
+
27
+ }
28
+
29
+ protected void Application_AuthenticateRequest(object sender, EventArgs e)
30
+ {
31
+
32
+ }
33
+
34
+ protected void Application_Error(object sender, EventArgs e)
35
+ {
36
+
37
+ }
38
+
39
+ protected void Session_End(object sender, EventArgs e)
40
+ {
41
+
42
+ }
43
+
44
+ protected void Application_End(object sender, EventArgs e)
45
+ {
46
+
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,16 @@
1
+ using System;
2
+
3
+ namespace RubyODataService.Models
4
+ {
5
+ public class AuditFields
6
+ {
7
+ public AuditFields()
8
+ {
9
+ CreateDate = DateTime.UtcNow;
10
+ ModifiedDate = DateTime.UtcNow;
11
+ }
12
+ public DateTime CreateDate { get; set; }
13
+ public DateTime ModifiedDate { get; set; }
14
+ public string CreatedBy { get; set; }
15
+ }
16
+ }
@@ -0,0 +1,16 @@
1
+ using System.Collections.Generic;
2
+
3
+ namespace RubyODataService.Models
4
+ {
5
+ public class Category
6
+ {
7
+ public Category()
8
+ {
9
+ AuditFields = new AuditFields();
10
+ }
11
+ public int Id { get; set; }
12
+ public string Name { get; set; }
13
+ public virtual ICollection<Product> Products { get; set; }
14
+ public AuditFields AuditFields { get; set; }
15
+ }
16
+ }
@@ -0,0 +1,20 @@
1
+ using System;
2
+
3
+ namespace RubyODataService.Models
4
+ {
5
+ public class Product
6
+ {
7
+ public Product()
8
+ {
9
+ AuditFields = new AuditFields();
10
+ }
11
+ public int Id { get; set; }
12
+ public string Name { get; set; }
13
+ public string Description { get; set; }
14
+ public decimal Price { get; set; }
15
+ public DateTime? DiscontinuedDate { get; set; }
16
+ public int CategoryId { get; set; }
17
+ public Category Category { get; set; }
18
+ public AuditFields AuditFields { get; set; }
19
+ }
20
+ }
@@ -0,0 +1,35 @@
1
+ using System.Reflection;
2
+ using System.Runtime.CompilerServices;
3
+ using System.Runtime.InteropServices;
4
+
5
+ // General Information about an assembly is controlled through the following
6
+ // set of attributes. Change these attribute values to modify the information
7
+ // associated with an assembly.
8
+ [assembly: AssemblyTitle("RubyODataService")]
9
+ [assembly: AssemblyDescription("")]
10
+ [assembly: AssemblyConfiguration("")]
11
+ [assembly: AssemblyCompany("")]
12
+ [assembly: AssemblyProduct("RubyODataService")]
13
+ [assembly: AssemblyCopyright("Copyright © 2011")]
14
+ [assembly: AssemblyTrademark("")]
15
+ [assembly: AssemblyCulture("")]
16
+
17
+ // Setting ComVisible to false makes the types in this assembly not visible
18
+ // to COM components. If you need to access a type in this assembly from
19
+ // COM, set the ComVisible attribute to true on that type.
20
+ [assembly: ComVisible(false)]
21
+
22
+ // The following GUID is for the ID of the typelib if this project is exposed to COM
23
+ [assembly: Guid("6fc9bddf-fa99-4dc4-a66f-b8f15d3efb00")]
24
+
25
+ // Version information for an assembly consists of the following four values:
26
+ //
27
+ // Major Version
28
+ // Minor Version
29
+ // Build Number
30
+ // Revision
31
+ //
32
+ // You can specify all the values or you can default the Revision and Build Numbers
33
+ // by using the '*' as shown below:
34
+ [assembly: AssemblyVersion("1.0.0.0")]
35
+ [assembly: AssemblyFileVersion("1.0.0.0")]
@@ -0,0 +1,3 @@
1
+ 
2
+
3
+ <%@ ServiceHost Language="C#" Factory="System.Data.Services.DataServiceHostFactory, Microsoft.Data.Services, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Service="RubyODataService.RubyOData" %>
@@ -0,0 +1,57 @@
1
+ using System.Data.Services;
2
+ using System.Data.Services.Common;
3
+ using System.Linq;
4
+ using System.ServiceModel;
5
+ using System.ServiceModel.Web;
6
+ using RubyODataService.Models;
7
+ using System.Collections.Generic;
8
+
9
+ namespace RubyODataService
10
+ {
11
+ [ServiceBehavior(IncludeExceptionDetailInFaults = true)]
12
+ public class RubyOData : DataService<RubyODataContext>
13
+ {
14
+ // This method is called only once to initialize service-wide policies.
15
+ public static void InitializeService(DataServiceConfiguration config)
16
+ {
17
+ config.SetEntitySetAccessRule("*", EntitySetRights.All);
18
+ config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
19
+ config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3;
20
+ config.UseVerboseErrors = true;
21
+ }
22
+
23
+ /// <summary>
24
+ /// Cleans the database for testing.
25
+ /// </summary>
26
+ [WebInvoke]
27
+ public void CleanDatabaseForTesting()
28
+ {
29
+ CurrentDataSource.Database.Delete();
30
+ CurrentDataSource.Database.CreateIfNotExists();
31
+ }
32
+
33
+ [WebGet]
34
+ public IQueryable<Category> EntityCategoryWebGet()
35
+ {
36
+ return CurrentDataSource.Categories;
37
+ }
38
+
39
+ [WebGet]
40
+ public IQueryable<string> CategoryNames()
41
+ {
42
+ return CurrentDataSource.Categories.Select(c => c.Name);
43
+ }
44
+
45
+ [WebGet]
46
+ public int? FirstCategoryId()
47
+ {
48
+ return CurrentDataSource.Categories.Select(c => c.Id).FirstOrDefault();
49
+ }
50
+
51
+ [WebGet]
52
+ public Category EntitySingleCategoryWebGet(int id)
53
+ {
54
+ return CurrentDataSource.Categories.FirstOrDefault(c => c.Id == id);
55
+ }
56
+ }
57
+ }
@@ -0,0 +1,16 @@
1
+ using System.Data.Entity;
2
+ using RubyODataService.Models;
3
+
4
+ namespace RubyODataService
5
+ {
6
+ public class RubyODataContext : DbContext
7
+ {
8
+ public RubyODataContext()
9
+ {
10
+ // Disable proxy creation, which doesn’t work well with data services.
11
+ this.Configuration.ProxyCreationEnabled = false;
12
+ }
13
+ public DbSet<Product> Products { get; set; }
14
+ public DbSet<Category> Categories { get; set; }
15
+ }
16
+ }
@@ -0,0 +1,159 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
3
+ <PropertyGroup>
4
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
5
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
6
+ <ProductVersion>
7
+ </ProductVersion>
8
+ <SchemaVersion>2.0</SchemaVersion>
9
+ <ProjectGuid>{C84F8120-25A8-4874-BAC2-9A19E114CFB2}</ProjectGuid>
10
+ <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
11
+ <OutputType>Library</OutputType>
12
+ <AppDesignerFolder>Properties</AppDesignerFolder>
13
+ <RootNamespace>RubyODataService</RootNamespace>
14
+ <AssemblyName>RubyODataService</AssemblyName>
15
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
16
+ <UseIISExpress>true</UseIISExpress>
17
+ </PropertyGroup>
18
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
19
+ <DebugSymbols>true</DebugSymbols>
20
+ <DebugType>full</DebugType>
21
+ <Optimize>false</Optimize>
22
+ <OutputPath>bin\</OutputPath>
23
+ <DefineConstants>DEBUG;TRACE</DefineConstants>
24
+ <ErrorReport>prompt</ErrorReport>
25
+ <WarningLevel>4</WarningLevel>
26
+ </PropertyGroup>
27
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
28
+ <DebugType>pdbonly</DebugType>
29
+ <Optimize>true</Optimize>
30
+ <OutputPath>bin\</OutputPath>
31
+ <DefineConstants>TRACE</DefineConstants>
32
+ <ErrorReport>prompt</ErrorReport>
33
+ <WarningLevel>4</WarningLevel>
34
+ </PropertyGroup>
35
+ <ItemGroup>
36
+ <Reference Include="EntityFramework">
37
+ <HintPath>..\packages\EntityFramework.4.2.0.0\lib\net40\EntityFramework.dll</HintPath>
38
+ </Reference>
39
+ <Reference Include="Microsoft.CSharp" />
40
+ <Reference Include="Microsoft.Data.Edm, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
41
+ <Private>True</Private>
42
+ </Reference>
43
+ <Reference Include="Microsoft.Data.OData, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
44
+ <Private>True</Private>
45
+ </Reference>
46
+ <Reference Include="Microsoft.Data.Services, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
47
+ <SpecificVersion>False</SpecificVersion>
48
+ <HintPath>C:\Program Files (x86)\Microsoft WCF Data Services October 2011 CTP\bin\.NETFramework\Microsoft.Data.Services.dll</HintPath>
49
+ <Private>True</Private>
50
+ </Reference>
51
+ <Reference Include="Microsoft.Data.Services.Client, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
52
+ <SpecificVersion>False</SpecificVersion>
53
+ <HintPath>C:\Program Files (x86)\Microsoft WCF Data Services October 2011 CTP\bin\.NETFramework\Microsoft.Data.Services.Client.dll</HintPath>
54
+ <Private>True</Private>
55
+ </Reference>
56
+ <Reference Include="Microsoft.Data.Spatial, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
57
+ <Reference Include="System.ComponentModel.DataAnnotations" />
58
+ <Reference Include="System.Data.Entity" />
59
+ <Reference Include="System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
60
+ <SpecificVersion>False</SpecificVersion>
61
+ <HintPath>..\packages\SqlServerCompact.4.0.8482.1\lib\System.Data.SqlServerCe.dll</HintPath>
62
+ </Reference>
63
+ <Reference Include="System.Data.SqlServerCe.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
64
+ <SpecificVersion>False</SpecificVersion>
65
+ <HintPath>..\packages\EntityFramework.SqlServerCompact.4.1.8482.2\lib\System.Data.SqlServerCe.Entity.dll</HintPath>
66
+ </Reference>
67
+ <Reference Include="System.ServiceModel" />
68
+ <Reference Include="System.ServiceModel.Web" />
69
+ <Reference Include="System.Spatial, Version=4.99.2.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
70
+ <Reference Include="System.Transactions" />
71
+ <Reference Include="System.Web.DynamicData" />
72
+ <Reference Include="System.Web.Entity" />
73
+ <Reference Include="System.Web.ApplicationServices" />
74
+ <Reference Include="System" />
75
+ <Reference Include="System.Data" />
76
+ <Reference Include="System.Core" />
77
+ <Reference Include="System.Data.DataSetExtensions" />
78
+ <Reference Include="System.Web.Extensions" />
79
+ <Reference Include="System.Xml.Linq" />
80
+ <Reference Include="System.Drawing" />
81
+ <Reference Include="System.Web" />
82
+ <Reference Include="System.Xml" />
83
+ <Reference Include="System.Configuration" />
84
+ <Reference Include="System.Web.Services" />
85
+ <Reference Include="System.EnterpriseServices" />
86
+ <Reference Include="WebActivator">
87
+ <HintPath>..\packages\WebActivator.1.0.0.0\lib\WebActivator.dll</HintPath>
88
+ </Reference>
89
+ </ItemGroup>
90
+ <ItemGroup>
91
+ <Content Include="BasicAuth\RubyOData.svc" />
92
+ <Content Include="Global.asax" />
93
+ <Content Include="RubyOData.svc" />
94
+ <Content Include="Web.config" />
95
+ <Content Include="Web.Debug.config">
96
+ <DependentUpon>Web.config</DependentUpon>
97
+ </Content>
98
+ <Content Include="Web.Release.config">
99
+ <DependentUpon>Web.config</DependentUpon>
100
+ </Content>
101
+ </ItemGroup>
102
+ <ItemGroup>
103
+ <Compile Include="App_Start\EntityFramework.SqlServerCompact.cs" />
104
+ <Compile Include="BasicAuth\RubyOData.svc.cs">
105
+ <DependentUpon>RubyOData.svc</DependentUpon>
106
+ </Compile>
107
+ <Compile Include="Global.asax.cs">
108
+ <DependentUpon>Global.asax</DependentUpon>
109
+ </Compile>
110
+ <Compile Include="Models\AuditFields.cs" />
111
+ <Compile Include="Models\Category.cs" />
112
+ <Compile Include="Models\Product.cs" />
113
+ <Compile Include="Properties\AssemblyInfo.cs" />
114
+ <Compile Include="RubyOData.svc.cs">
115
+ <DependentUpon>RubyOData.svc</DependentUpon>
116
+ </Compile>
117
+ <Compile Include="RubyODataContext.cs" />
118
+ </ItemGroup>
119
+ <ItemGroup>
120
+ <Content Include="packages.config" />
121
+ </ItemGroup>
122
+ <ItemGroup>
123
+ <Folder Include="App_Data\" />
124
+ </ItemGroup>
125
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
126
+ <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
127
+ <ProjectExtensions>
128
+ <VisualStudio>
129
+ <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
130
+ <WebProjectProperties>
131
+ <UseIIS>True</UseIIS>
132
+ <AutoAssignPort>True</AutoAssignPort>
133
+ <DevelopmentServerPort>0</DevelopmentServerPort>
134
+ <DevelopmentServerVPath>/</DevelopmentServerVPath>
135
+ <IISUrl>http://localhost:6680/</IISUrl>
136
+ <NTLMAuthentication>False</NTLMAuthentication>
137
+ <UseCustomServer>False</UseCustomServer>
138
+ <CustomServerUrl>
139
+ </CustomServerUrl>
140
+ <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
141
+ </WebProjectProperties>
142
+ </FlavorProperties>
143
+ </VisualStudio>
144
+ </ProjectExtensions>
145
+ <PropertyGroup>
146
+ <PostBuildEvent>
147
+ if not exist "$(TargetDir)x86" md "$(TargetDir)x86"
148
+ xcopy /s /y "$(SolutionDir)packages\SqlServerCompact.4.0.8482.1\NativeBinaries\x86\*.*" "$(TargetDir)x86"
149
+ if not exist "$(TargetDir)amd64" md "$(TargetDir)amd64"
150
+ xcopy /s /y "$(SolutionDir)packages\SqlServerCompact.4.0.8482.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64"</PostBuildEvent>
151
+ </PropertyGroup>
152
+ <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
153
+ Other similar extension points exist, see Microsoft.Common.targets.
154
+ <Target Name="BeforeBuild">
155
+ </Target>
156
+ <Target Name="AfterBuild">
157
+ </Target>
158
+ -->
159
+ </Project>