git.iko.soy/rowtype-yoga/purescript-uuid
on main help sign in
Added v3 and v5 (#7)

Also updated to new require format: https://www.npmjs.com/package/uuid

commitbd83bf2b292a28e9bb88a0ac1703630ae82e0f32 authorSimon Hafner <hafnersimon@gmail.com> dateThu 6 Dec 2018, 20:04 (8 years ago) parent35e41a6
3 files changed+46−10
src/Data/UUID.js+17−1 src/Data/UUID.purs+16−6 test/Main.purs+13−3
src/Data/UUID.js+17−1
@@ -2,12 +2,28 @@
22
33// module Data.UUID
44
5+var mkV3UUID = null;
6+exports.getUUID3Impl = function (str) {
7+ return function (namespace) {
8+ if (mkV3UUID === null) mkV3UUID = require('uuid/v3');
9+ return mkV3UUID(str, namespace);
10+ };
11+};
12+
513var mkV4UUID = null;
614exports.getUUIDImpl = function () {
7− if (mkV4UUID === null) mkV4UUID = require('uuid').v4;
15+ if (mkV4UUID === null) mkV4UUID = require('uuid/v4');
816 return mkV4UUID();
917};
1018
19+var mkV5UUID = null;
20+exports.getUUID5Impl = function (str) {
21+ return function (namespace) {
22+ if (mkV5UUID === null) mkV5UUID = require('uuid/v5');
23+ return mkV5UUID(str, namespace);
24+ };
25+};
26+
1127var validateV4UUID = null;
1228exports.validateV4UUID = function (str) {
1329 if (validateV4UUID === null) validateV4UUID = require('uuid-validate');
src/Data/UUID.purs+16−6
@@ -2,11 +2,14 @@ module Data.UUID
22 ( UUID()
33 , genUUID
44 , parseUUID
5+ , genv3UUID
6+ , genv5UUID
57 ) where
68
79import Data.Maybe (Maybe(Nothing, Just))
10+import Debug.Trace (spy)
811import Effect (Effect)
9−import Prelude (class Ord, class Eq, class Show, compare, (==), ($), pure, (<<<), (>>=))
12+import Prelude (class Eq, class Ord, class Show, pure, ($), (<<<), (>>=))
1013
1114newtype UUID = UUID String
1215
@@ -24,11 +27,18 @@ parseUUID str = case validateV4UUID str of
2427 true -> Just $ UUID str
2528 _ -> Nothing
2629
30+foreign import getUUID3Impl :: String -> String -> String
31+
32+genv3UUID :: String -> UUID -> UUID
33+genv3UUID s (UUID n) = UUID $ getUUID3Impl s n
34+
35+foreign import getUUID5Impl :: String -> String -> String
36+
37+genv5UUID :: String -> UUID -> UUID
38+genv5UUID s (UUID n) = UUID (getUUID5Impl s n)
39+
2740instance showUUID :: Show UUID where
2841 show (UUID uuid) = uuid
2942
30−instance eqUUID :: Eq UUID where
31− eq (UUID uA) (UUID uB) = uA == uB
32−
33−instance ordUUID :: Ord UUID where
34− compare (UUID uA) (UUID uB) = compare uA uB
43+derive instance eqUUID :: Eq UUID
44+derive instance ordUUID :: Ord UUID
test/Main.purs+13−3
@@ -4,8 +4,9 @@ import Prelude
44
55import Data.Maybe (Maybe(..), fromJust)
66import Data.String (length)
7−import Data.UUID (genUUID, parseUUID)
7+import Data.UUID (genUUID, genv3UUID, genv5UUID, parseUUID)
88import Effect (Effect)
9+import Effect.Class (liftEffect)
910import Effect.Unsafe (unsafePerformEffect)
1011import Partial.Unsafe (unsafePartial)
1112import Test.Spec (it, describe)
@@ -15,13 +16,23 @@ import Test.Spec.Runner (run)
1516
1617main :: Effect Unit
1718main = run [consoleReporter] do
18−
19+
1920 describe "UUID" do
2021
2122 it "`genUUID` returns a uuid" do
2223 let uuid = unsafePerformEffect genUUID
2324 (length <<< show) uuid `shouldEqual` 36
2425
26+ it "`genv3UUID` returns a uuid" do
27+ namespace <- liftEffect genUUID
28+ let uuid = genv3UUID "foo" namespace
29+ (length <<< show) uuid `shouldEqual` 36
30+
31+ it "`genv5UUID` returns a uuid" do
32+ namespace <- liftEffect genUUID
33+ let uuid = genv5UUID "foo" namespace
34+ (length <<< show) uuid `shouldEqual` 36
35+
2536 it "`parseUUID` parses a valid uuid as Just UUID" do
2637 let uuidStr = "d0778cf2-3a4c-42ef-acbd-1269b6bec204"
2738 uuid = parseUUID uuidStr
@@ -31,4 +42,3 @@ main = run [consoleReporter] do
3142 let uuidStr = "foo"
3243 uuid = parseUUID uuidStr
3344 Nothing `shouldEqual` uuid
34−