-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #77 from mexx/StringReaderProvider
Add StringReader provider
- Loading branch information
Showing
6 changed files
with
73 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
module internal FSharp.Management.StringReaderProvider | ||
|
||
open ProviderImplementation.ProvidedTypes | ||
open FSharp.Management.Helper | ||
open System.IO | ||
|
||
let createType typeName filePath = | ||
let typedStringReader = erasedType<obj> thisAssembly rootNamespace typeName | ||
|
||
let content = File.ReadAllText(filePath) | ||
|
||
let contentField = ProvidedLiteralField("Content", typeof<string>, content) | ||
contentField.AddXmlDoc(sprintf "Content of '%s'" filePath) | ||
typedStringReader.AddMember contentField | ||
|
||
typedStringReader | ||
|
||
let createTypedStringReader (resolutionFolder: string) = | ||
let typedStringReader = erasedType<obj> thisAssembly rootNamespace "StringReader" | ||
|
||
typedStringReader.DefineStaticParameters( | ||
parameters = | ||
[ ProvidedStaticParameter("path", typeof<string>) ], | ||
instantiationFunction = (fun typeName parameterValues -> | ||
match parameterValues with | ||
| [| :? string as path |] -> | ||
let filePath = | ||
match Path.IsPathRooted(path) with | ||
| false -> Path.Combine(resolutionFolder, path) | ||
| true -> path | ||
if not <| File.Exists(filePath) then | ||
failwithf "Specified file [%s] could not be found" path | ||
createType typeName filePath | ||
| _ -> failwith "Wrong static parameters to type provider")) | ||
|
||
typedStringReader |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 9 additions & 0 deletions
9
tests/FSharp.Management.Tests/StringReaderProvider.Tests.data
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam scelerisque leo ut mauris ullamcorper posuere. Aliquam quis nulla dolor. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque leo ipsum, imperdiet vehicula quam nec, egestas condimentum purus. Donec rutrum lacus ac turpis lacinia blandit. Cras sollicitudin dapibus interdum. Sed dapibus elementum turpis, at feugiat lectus interdum sed. Integer faucibus non turpis nec ullamcorper. Nam eget tincidunt ex. | ||
|
||
Quisque vitae nulla leo. Nunc ultricies facilisis tellus, et placerat libero pulvinar et. Phasellus mollis consectetur orci in vestibulum. Integer ultricies tortor vitae condimentum dictum. Mauris id mi ante. Ut congue dolor erat, pretium aliquam neque iaculis at. Sed dictum dolor vel tellus finibus, eget tempus ligula dignissim. Ut cursus nibh magna, a feugiat risus maximus eu. | ||
|
||
Cras accumsan vulputate neque, eu euismod tellus congue vitae. Donec at nunc est. Ut libero sapien, imperdiet nec sem vel, tincidunt feugiat turpis. Vestibulum lectus nunc, rhoncus eu tellus sed, egestas congue ex. Phasellus sed interdum lacus. Curabitur rutrum, lectus in mattis sodales, augue ex tristique enim, sit amet elementum est sem non erat. Integer sit amet libero augue. Nulla in suscipit dolor. Mauris ac porta orci, vitae varius tellus. Nunc nec consectetur dui. | ||
|
||
Vivamus rhoncus porta nibh, quis auctor sapien fermentum quis. Maecenas nunc lectus, efficitur vitae arcu sit amet, volutpat efficitur eros. Aenean pellentesque tellus et placerat mollis. Nullam nisl lectus, bibendum sit amet varius at, scelerisque in augue. Phasellus vehicula erat sed felis iaculis rutrum. Aenean elementum ullamcorper mauris, vel aliquam diam suscipit ac. Duis eget congue felis. Proin placerat lorem odio, luctus bibendum justo dapibus et. Sed in ornare mauris. Nulla facilisi. Fusce ultricies purus id augue cursus viverra. Donec maximus risus id metus suscipit volutpat. Duis eu lacinia odio. Nullam sit amet nunc arcu. | ||
|
||
Etiam pulvinar dui a eros ullamcorper luctus. Nam lobortis urna vitae lorem maximus, ac rhoncus felis ultricies. Morbi vestibulum ultricies urna, sed suscipit velit vehicula in. Sed iaculis velit nec ligula cursus semper. Nam sed felis vitae dui aliquet interdum sed sed eros. Donec porta ex a dolor blandit, non tempor purus molestie. Pellentesque viverra diam quis fringilla commodo. Praesent ut enim ac massa imperdiet pellentesque in eget nunc. Curabitur imperdiet erat sit amet condimentum maximus. Proin tincidunt sem sed lorem congue, nec scelerisque libero viverra. |
20 changes: 20 additions & 0 deletions
20
tests/FSharp.Management.Tests/StringReaderProvider.Tests.fs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
module FSharp.Management.Tests.StringReaderProviderTests | ||
|
||
open FSharp.Management | ||
open NUnit.Framework | ||
open FsUnitTyped | ||
|
||
type LoremIpsum = StringReader<"StringReaderProvider.Tests.data"> | ||
|
||
[<Test>] | ||
let ``StringReader provider reads the file correctly``() = | ||
LoremIpsum.Content | ||
|> shouldEqual <| """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam scelerisque leo ut mauris ullamcorper posuere. Aliquam quis nulla dolor. Aliquam erat volutpat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Pellentesque leo ipsum, imperdiet vehicula quam nec, egestas condimentum purus. Donec rutrum lacus ac turpis lacinia blandit. Cras sollicitudin dapibus interdum. Sed dapibus elementum turpis, at feugiat lectus interdum sed. Integer faucibus non turpis nec ullamcorper. Nam eget tincidunt ex. | ||
Quisque vitae nulla leo. Nunc ultricies facilisis tellus, et placerat libero pulvinar et. Phasellus mollis consectetur orci in vestibulum. Integer ultricies tortor vitae condimentum dictum. Mauris id mi ante. Ut congue dolor erat, pretium aliquam neque iaculis at. Sed dictum dolor vel tellus finibus, eget tempus ligula dignissim. Ut cursus nibh magna, a feugiat risus maximus eu. | ||
Cras accumsan vulputate neque, eu euismod tellus congue vitae. Donec at nunc est. Ut libero sapien, imperdiet nec sem vel, tincidunt feugiat turpis. Vestibulum lectus nunc, rhoncus eu tellus sed, egestas congue ex. Phasellus sed interdum lacus. Curabitur rutrum, lectus in mattis sodales, augue ex tristique enim, sit amet elementum est sem non erat. Integer sit amet libero augue. Nulla in suscipit dolor. Mauris ac porta orci, vitae varius tellus. Nunc nec consectetur dui. | ||
Vivamus rhoncus porta nibh, quis auctor sapien fermentum quis. Maecenas nunc lectus, efficitur vitae arcu sit amet, volutpat efficitur eros. Aenean pellentesque tellus et placerat mollis. Nullam nisl lectus, bibendum sit amet varius at, scelerisque in augue. Phasellus vehicula erat sed felis iaculis rutrum. Aenean elementum ullamcorper mauris, vel aliquam diam suscipit ac. Duis eget congue felis. Proin placerat lorem odio, luctus bibendum justo dapibus et. Sed in ornare mauris. Nulla facilisi. Fusce ultricies purus id augue cursus viverra. Donec maximus risus id metus suscipit volutpat. Duis eu lacinia odio. Nullam sit amet nunc arcu. | ||
Etiam pulvinar dui a eros ullamcorper luctus. Nam lobortis urna vitae lorem maximus, ac rhoncus felis ultricies. Morbi vestibulum ultricies urna, sed suscipit velit vehicula in. Sed iaculis velit nec ligula cursus semper. Nam sed felis vitae dui aliquet interdum sed sed eros. Donec porta ex a dolor blandit, non tempor purus molestie. Pellentesque viverra diam quis fringilla commodo. Praesent ut enim ac massa imperdiet pellentesque in eget nunc. Curabitur imperdiet erat sit amet condimentum maximus. Proin tincidunt sem sed lorem congue, nec scelerisque libero viverra.""" |