예제 #1
0
        public static VocabTerm <ApisJson> Create()
        {
            var vocab = new VocabTerm <ApisJson>();

            vocab.MapProperty <string>("name", (s, o) => s.Name = o);
            vocab.MapProperty <string>("description", (s, o) => s.Description = o);
            vocab.MapProperty <string>("url", (s, o) => s.Url           = new Uri(o));
            vocab.MapProperty <string>("image", (s, o) => s.Image       = new Uri(o));
            vocab.MapProperty <string>("modified", (s, o) => s.Modified = DateTime.Parse(o));
            vocab.MapProperty <string>("created", (s, o) => s.Created   = DateTime.Parse(o));
            vocab.MapProperty <string>("tags", (s, o) =>
            {
                if (s.Tags == null)
                {
                    s.Tags = new List <string>();
                }
                s.Tags.Add(o);
            });

            vocab.MapProperty <string>("specificationVersion", (s, o) => s.SpecificationVersion = o);

            var apivocab = new VocabTerm <ApisJsonApi>("apis");

            apivocab.MapProperty <string>("name", (s, o) => s.Name         = o);
            apivocab.MapProperty <string>("description", (s, o) => s.Name  = o);
            apivocab.MapProperty <string>("humanUrl", (s, o) => s.HumanUrl = new Uri(o));
            apivocab.MapProperty <string>("baseUrl", (s, o) => s.BaseUrl   = new Uri(o));
            apivocab.MapProperty <string>("version", (s, o) => s.Version   = o);
            apivocab.MapProperty <string>("image", (s, o) => s.Image       = new Uri(o));

            apivocab.MapProperty <string>("tags", (s, o) =>
            {
                if (s.Tags == null)
                {
                    s.Tags = new List <string>();
                }
                s.Tags.Add(o);
            }

                                          );
            vocab.MapObject <ApisJsonApi>(apivocab, (s) =>
            {
                var api = new ApisJsonApi();
                s.Apis.Add(api);
                return(api);
            }

                                          );
            // Properties
            var propertyTerm = new VocabTerm <ApisJsonProperty>("properties");

            propertyTerm.MapProperty <string>("url", (s, o) => s.Url   = new Uri(o));
            propertyTerm.MapProperty <string>("type", (s, o) => s.Type = o);
            apivocab.MapObject <ApisJsonProperty>(propertyTerm, (s) =>
            {
                var property = new ApisJsonProperty();
                s.Properties.Add(property);
                return(property);
            }

                                                  );
            // Contact
            var contactTerm = new VocabTerm <ApisJsonContact>("contact");

            contactTerm.MapProperty <string>("fn", (s, o) => s.Url            = new Uri(o));
            contactTerm.MapProperty <string>("email", (s, o) => s.Email       = o);
            contactTerm.MapProperty <string>("url", (s, o) => s.Url           = new Uri(o));
            contactTerm.MapProperty <string>("org", (s, o) => s.Org           = o);
            contactTerm.MapProperty <string>("adr", (s, o) => s.Adr           = o);
            contactTerm.MapProperty <string>("tel", (s, o) => s.Tel           = o);
            contactTerm.MapProperty <string>("x-twitter", (s, o) => s.Twitter = o);
            contactTerm.MapProperty <string>("x-github", (s, o) => s.Github   = o);
            contactTerm.MapProperty <string>("photo", (s, o) => s.Photo       = new Uri(o));
            contactTerm.MapProperty <string>("vcard", (s, o) => s.VCard       = new Uri(o));
            apivocab.MapObject <ApisJsonContact>(contactTerm, (s) =>
            {
                s.Contact = new ApisJsonContact();
                return(s.Contact);
            }

                                                 );
            // Include
            var includeTerm = new VocabTerm <ApisJsonInclude>("include");

            includeTerm.MapProperty <string>("name", (s, o) => s.Name = o);
            includeTerm.MapProperty <string>("url", (s, o) => s.Url   = new Uri(o));
            vocab.MapObject <ApisJsonInclude>(includeTerm, (s) =>
            {
                var include = new ApisJsonInclude();
                s.Includes.Add(include);
                return(include);
            }

                                              );
            //Maintainers
            var maintainers = contactTerm.Clone <ApisJson>("maintainers");

            vocab.MapObject <ApisJsonContact>(maintainers, (s) =>
            {
                var contact = new ApisJsonContact();
                s.Maintainers.Add(contact);
                return(contact);
            }

                                              );
            return(vocab);
        }
예제 #2
0
        public void ParseAPIsJsonDocumentMinimal()
        {
            var stream = this.GetType().Assembly.GetManifestResourceStream(this.GetType(), "apis.json");

            var rootMap = new VocabTerm<ApisJson>(null);
            rootMap.MapProperty<string>("name",         (s, o) => s.Name = o );
            rootMap.MapProperty<string>("url",          (s, o) => s.Url = new Uri(o));

            var apiMap = new VocabTerm<ApisJsonApi>("apis");
            apiMap.MapProperty<string>("name",          (s, o) => s.Name = o);
            apiMap.MapProperty<string>("description",   (s, o) => s.Name = o);
            apiMap.MapProperty<string>("baseUrl",       (s, o) => s.BaseUrl = new Uri(o));

            rootMap.MapObject<ApisJsonApi>(apiMap, (s) =>
            {
                if (s.Apis == null)
                {
                    s.Apis = new List<ApisJsonApi>();
                }
                var api = new ApisJsonApi();
                s.Apis.Add(api);
                return api;
            });

            var apis = new ApisJson();
            JsonStreamingParser.ParseStream(stream, apis, rootMap);

            Assert.Equal("API Evangelist", apis.Name);
            Assert.Equal(2, apis.Apis.Count());
        }