コード例 #1
0
ファイル: CardViewFactory.cs プロジェクト: drunkcod/CardWall
        public CardView MakeCardForStory(PivotalStory story)
        {
            var card = new CardView {
                Type = story.Type.ToString().ToLower(),
                CurrentState = TranslateState(story.CurrentState),
                Size = story.Estimate,
                Title = story.Name,
                Owner = GetOwner(story),
                AvatarUrl = GetAvatarUrl(story),
                Url = story.Url,
                ProjectName = GetProjectName(story),
                Id = story.Id
            };

            CardBadge badge;
            foreach(var item in story.Labels) {
                if(TryGetBadge(item, out badge))
                    card.AddBadge(badge);
                else
                    card.AddLabel(item);
            }

            if(TryGetBadge("type:" + story.Type, out badge))
                card.AddBadge(badge);

            foreach(var item in story.Tasks)
                card.AddTask(new CardTask
                {
                    Name = item.Description,
                    IsComplete = item.IsComplete,
                    ImageUrl = item.IsComplete ? TaskCompleteUrl : TaskPendingUrl
                });

            return card;
        }
コード例 #2
0
        /// <summary>
        /// Creates a new comment on a story with from a pre-defined <see cref="PivotalStory"/>
        /// </summary>
        /// <param name="pivotalStory">The pre-defined <see cref="PivotalStory"/> to add the comment to.</param>
        /// <param name="bodyText">The main descrtiption text of the comment.</param>
        /// <returns></returns>
        public async Task <PivotalComment> CreateNewCommentAsync(PivotalStory pivotalStory, string bodyText)
        {
            // Attempts to get the story for our pivotalStory object
            var storyFromPivotal = await GetStoryByIdAsync(pivotalStory.ProjectId, pivotalStory.Id.GetValueOrDefault());

            // Make sure our story actually exists, throws exception if false.
            if (storyFromPivotal != null)
            {
                // Setup a new comment to send to Pivotal
                var newComment = new PivotalComment
                {
                    ProjectId       = storyFromPivotal.ProjectId,
                    StoryId         = storyFromPivotal.Id.Value,
                    Text            = bodyText,
                    FileAttachments = new List <PivotalAttachment>()
                };

                // Try and add the comment to our story
                var response =
                    await HttpService.PostAsync(
                        StringUtil.PivotalCommentsUrl(storyFromPivotal.ProjectId, storyFromPivotal.Id.Value), newComment);

                return(HandleResponse <PivotalComment>(response));
            }

            // Failure, our story does not exist on this project.
            throw new PivotalNotFoundException($"Story with Id {pivotalStory.Id} does not exist on project with Id {pivotalStory.ProjectId}");
        }
コード例 #3
0
        /// <summary>
        /// Creates a new story in a project.
        /// </summary>
        /// <param name="projectId">Id of the project to create a story in.</param>
        /// <param name="pivotalStory">Pre-created story to create in the project.</param>
        /// <returns>Returns a completed PivotalStory.</returns>
        public async Task <PivotalStory> CreateNewStoryAsync(int?projectId, PivotalStory pivotalStory)
        {
            int properProjectId = GetProjectIdToUse(projectId);
            // Try and create a new PivotalStory
            var response = await HttpService.PostAsync(StringUtil.PivotalStoriesUrl(properProjectId), pivotalStory);

            return(HandleResponse <PivotalStory>(response));
        }
コード例 #4
0
        /// <summary>
        /// Creates a new story in a project.
        /// </summary>
        /// <param name="projectId">Id of the project to create a story in.</param>
        /// <param name="name">The name you wish to give to the story.</param>
        /// <param name="storyType">Type of the story, eg feature, bug.</param>
        /// <param name="labels">Any labels you wish to give to the story.</param>
        /// <param name="description">(optional) Description of the story. Use this for additional info.</param>
        /// <returns>Returns a completed PivotalStory</returns>
        public async Task <PivotalStory> CreateNewStoryAsync(int?projectId, string name, StoryType storyType, List <string> labels = null, string description = null)
        {
            int properProjectId = GetProjectIdToUse(projectId);
            var story           = new PivotalStory
            {
                Name        = name,
                Description = description,
                StoryType   = storyType.ToString()
            };
            var response = await HttpService.PostAsync(StringUtil.PivotalStoriesUrl(properProjectId), story);

            return(HandleResponse <PivotalStory>(response));
        }
コード例 #5
0
ファイル: CardViewFactory.cs プロジェクト: drunkcod/CardWall
 string GetAvatarUrl(PivotalStory story)
 {
     if (string.IsNullOrEmpty(story.OwnedBy))
         return "";
     try
     {
         return Gravatar.FromEmail(members[story.OwnedBy].EmailAddress);
     }
     catch (Exception)
     {
         return "http://www.southparkgames.org/games/images/hulk_hogan.gif";
     }
 }
コード例 #6
0
            public void multiple_stories()
            {
                var xml = new XPathDocument(GetType().Assembly.GetManifestResourceStream("CardWall.Specs.SampleStories.xml"));
                var storyNodes = xml.CreateNavigator().Select("//story");
                var stories = new List<PivotalStory>();
                while(storyNodes.MoveNext()) {
                    Console.WriteLine(storyNodes.Current.OuterXml);
                    var item = new PivotalStory();
                    (item as IXmlSerializable).ReadXml(storyNodes.Current.ReadSubtree());
                    stories.Add(item);
                }

                Verify.That(() => stories.Count == 2);
                Verify.That(() => stories[0].Id == 1);
                Verify.That(() => stories[1].Id == 2);
                Verify.That(() => stories[0].ProjectId == 12345);
                Verify.That(() => stories[1].ProjectId == 12345);
            }
コード例 #7
0
ファイル: Pivotal.cs プロジェクト: cheezburger/pivotal-poker
 public void LoadNotes(PivotalStory story)
 {
     story.LoadNotes(_user);
 }
コード例 #8
0
ファイル: Pivotal.cs プロジェクト: cheezburger/pivotal-poker
 public void LoadTasks(PivotalStory story)
 {
     story.LoadTasks(_user);
 }
コード例 #9
0
ファイル: Pivotal.cs プロジェクト: cheezburger/pivotal-poker
 // internal
 public PivotalStory GetStory(int projectId, int storyId)
 {
     return(PivotalStory.FetchStory(_user, projectId, storyId.ToString()));
 }
コード例 #10
0
ファイル: Pivotal.cs プロジェクト: cheezburger/pivotal-poker
 public PivotalStory GetUnestimatedStory(int projectId)
 {
     return(PivotalStory.FetchStories(_user, projectId).FirstOrDefault(ps => ps.Estimate == Unestimated));
 }
コード例 #11
0
ファイル: CardViewFactory.cs プロジェクト: drunkcod/CardWall
 string GetProjectName(PivotalStory story)
 {
     return projects[story.ProjectId].Name;
 }
コード例 #12
0
ファイル: CardViewFactory.cs プロジェクト: drunkcod/CardWall
 string GetOwner(PivotalStory story)
 {
     if(string.IsNullOrEmpty(story.OwnedBy))
         return "";
     return story.OwnedBy;
 }
コード例 #13
0
 public void ReadSampleStory()
 {
     Story = new PivotalStory();
     using(var xml = XmlReader.Create(GetType().Assembly.GetManifestResourceStream("CardWall.Specs.SampleStory.xml")))
     (Story as IXmlSerializable).ReadXml(xml);
 }