packages feed

Redmine 0.0.6 → 0.0.8

raw patch · 4 files changed

+51/−45 lines, 4 filesdep −old-localedep −old-timedep ~aesonPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependencies removed: old-locale, old-time

Dependency ranges changed: aeson

API changes (from Hackage documentation)

- Redmine.JSON: instance FromJSON Attachement
- Redmine.JSON: instance FromJSON ChangeSet
- Redmine.JSON: instance FromJSON Child
- Redmine.JSON: instance FromJSON CustomField
- Redmine.JSON: instance FromJSON Day
- Redmine.JSON: instance FromJSON Detail
- Redmine.JSON: instance FromJSON Issue
- Redmine.JSON: instance FromJSON IssueRsp
- Redmine.JSON: instance FromJSON IssueStatus
- Redmine.JSON: instance FromJSON IssueStatuses
- Redmine.JSON: instance FromJSON IssuesRsp
- Redmine.JSON: instance FromJSON Journal
- Redmine.JSON: instance FromJSON Membership
- Redmine.JSON: instance FromJSON Memberships
- Redmine.JSON: instance FromJSON ObjID
- Redmine.JSON: instance FromJSON ObjRef
- Redmine.JSON: instance FromJSON Project
- Redmine.JSON: instance FromJSON ProjectsRsp
- Redmine.JSON: instance FromJSON Relation
- Redmine.JSON: instance FromJSON Relations
- Redmine.JSON: instance FromJSON Role
- Redmine.JSON: instance FromJSON Roles
- Redmine.JSON: instance FromJSON TimeEntriesRsp
- Redmine.JSON: instance FromJSON TimeEntry
- Redmine.JSON: instance FromJSON TimeEntryRsp
- Redmine.JSON: instance FromJSON Tracker
- Redmine.JSON: instance FromJSON Trackers
- Redmine.JSON: instance FromJSON User
- Redmine.JSON: instance FromJSON UserRsp
- Redmine.JSON: instance FromJSON UsersRsp
- Redmine.JSON: instance FromJSON Version
- Redmine.JSON: instance FromJSON VersionRsp
- Redmine.JSON: instance FromJSON VersionsRsp
- Redmine.JSON: instance FromJSON Watcher
- Redmine.JSON: instance ToJSON Attachement
- Redmine.JSON: instance ToJSON ChangeSet
- Redmine.JSON: instance ToJSON Child
- Redmine.JSON: instance ToJSON CustomField
- Redmine.JSON: instance ToJSON Day
- Redmine.JSON: instance ToJSON Detail
- Redmine.JSON: instance ToJSON Issue
- Redmine.JSON: instance ToJSON Journal
- Redmine.JSON: instance ToJSON ObjID
- Redmine.JSON: instance ToJSON ObjRef
- Redmine.JSON: instance ToJSON Relation
- Redmine.JSON: instance ToJSON Watcher
- Redmine.Manager: login :: RedmineMng -> ByteString
- Redmine.Manager: passwd :: RedmineMng -> ByteString
- Redmine.Manager: rmhost :: RedmineMng -> ByteString
- Redmine.Manager: rmportProxy :: RedmineMng -> Int
- Redmine.Manager: rmurlProxy :: RedmineMng -> ByteString
- Redmine.Types: activity_TE :: TimeEntry -> Maybe ObjRef
- Redmine.Types: assignedTo_Issue :: Issue -> Maybe ObjRef
- Redmine.Types: attachements_Issue :: Issue -> Maybe [Attachement]
- Redmine.Types: authorName_Attachement :: Attachement -> ObjRef
- Redmine.Types: author_Issue :: Issue -> ObjRef
- Redmine.Types: category_Issue :: Issue -> Maybe ObjRef
- Redmine.Types: changeSets_Issue :: Issue -> Maybe [ChangeSet]
- Redmine.Types: children_Issue :: Issue -> Maybe [Child]
- Redmine.Types: comments_ChangeSet :: ChangeSet -> Text
- Redmine.Types: comments_TE :: TimeEntry -> Text
- Redmine.Types: committedOn_ChangeSet :: ChangeSet -> UTCTime
- Redmine.Types: contentType_Attachement :: Attachement -> Text
- Redmine.Types: contentUrl_Attachement :: Attachement -> Text
- Redmine.Types: createdOn_Attachement :: Attachement -> UTCTime
- Redmine.Types: createdOn_Issue :: Issue -> Maybe UTCTime
- Redmine.Types: createdOn_Journal :: Journal -> Maybe UTCTime
- Redmine.Types: createdOn_Project :: Project -> Maybe UTCTime
- Redmine.Types: createdOn_TE :: TimeEntry -> Maybe UTCTime
- Redmine.Types: createdOn_User :: User -> Maybe UTCTime
- Redmine.Types: createdOn_Version :: Version -> Maybe UTCTime
- Redmine.Types: customFields_Issue :: Issue -> Maybe [CustomField]
- Redmine.Types: customFields_Project :: Project -> Maybe [CustomField]
- Redmine.Types: delay_Relation :: Relation -> Maybe Integer
- Redmine.Types: desc_Project :: Project -> Text
- Redmine.Types: desc_Version :: Version -> Text
- Redmine.Types: description_Attachement :: Attachement -> Text
- Redmine.Types: description_Issue :: Issue -> Text
- Redmine.Types: details_Journal :: Journal -> Maybe [Detail]
- Redmine.Types: doneRatio_Issue :: Issue -> Int
- Redmine.Types: dueDate_Issue :: Issue -> Maybe Day
- Redmine.Types: dueDate_Version :: Version -> Maybe Day
- Redmine.Types: estimatedHours_Issue :: Issue -> Maybe Float
- Redmine.Types: filename_Attachement :: Attachement -> Text
- Redmine.Types: filesize_Attachement :: Attachement -> Integer
- Redmine.Types: firstname :: User -> Text
- Redmine.Types: fixedVersion_Issue :: Issue -> Maybe ObjRef
- Redmine.Types: hours_TE :: TimeEntry -> Maybe Float
- Redmine.Types: id_Attachement :: Attachement -> Integer
- Redmine.Types: id_CF :: CustomField -> Integer
- Redmine.Types: id_Child :: Child -> Integer
- Redmine.Types: id_Issue :: Issue -> Integer
- Redmine.Types: id_IssueStatus :: IssueStatus -> Integer
- Redmine.Types: id_Journal :: Journal -> Integer
- Redmine.Types: id_Membership :: Membership -> Integer
- Redmine.Types: id_ObjID :: ObjID -> Integer
- Redmine.Types: id_ObjRef :: ObjRef -> Integer
- Redmine.Types: id_Project :: Project -> Integer
- Redmine.Types: id_Relation :: Relation -> Integer
- Redmine.Types: id_Role :: Role -> Integer
- Redmine.Types: id_TE :: TimeEntry -> Integer
- Redmine.Types: id_Tracker :: Tracker -> Integer
- Redmine.Types: id_User :: User -> Integer
- Redmine.Types: id_Version :: Version -> Integer
- Redmine.Types: id_Watcher :: Watcher -> Integer
- Redmine.Types: identifier_Project :: Project -> Text
- Redmine.Types: instance Collection IssuesRsp
- Redmine.Types: instance Collection ProjectsRsp
- Redmine.Types: instance Collection TimeEntriesRsp
- Redmine.Types: instance Collection VersionsRsp
- Redmine.Types: instance Eq Attachement
- Redmine.Types: instance Eq ChangeSet
- Redmine.Types: instance Eq Child
- Redmine.Types: instance Eq CustomField
- Redmine.Types: instance Eq Detail
- Redmine.Types: instance Eq Issue
- Redmine.Types: instance Eq IssueRsp
- Redmine.Types: instance Eq IssueStatus
- Redmine.Types: instance Eq IssueStatuses
- Redmine.Types: instance Eq IssuesRsp
- Redmine.Types: instance Eq Journal
- Redmine.Types: instance Eq Membership
- Redmine.Types: instance Eq Memberships
- Redmine.Types: instance Eq ObjID
- Redmine.Types: instance Eq ObjRef
- Redmine.Types: instance Eq Project
- Redmine.Types: instance Eq ProjectRsp
- Redmine.Types: instance Eq ProjectsRsp
- Redmine.Types: instance Eq Relation
- Redmine.Types: instance Eq RelationType
- Redmine.Types: instance Eq Relations
- Redmine.Types: instance Eq Role
- Redmine.Types: instance Eq Roles
- Redmine.Types: instance Eq Status
- Redmine.Types: instance Eq TimeEntriesRsp
- Redmine.Types: instance Eq TimeEntry
- Redmine.Types: instance Eq TimeEntryRsp
- Redmine.Types: instance Eq Tracker
- Redmine.Types: instance Eq Trackers
- Redmine.Types: instance Eq User
- Redmine.Types: instance Eq UserRsp
- Redmine.Types: instance Eq UsersRsp
- Redmine.Types: instance Eq Version
- Redmine.Types: instance Eq VersionRsp
- Redmine.Types: instance Eq VersionsRsp
- Redmine.Types: instance Eq Watcher
- Redmine.Types: instance Monoid IssuesRsp
- Redmine.Types: instance Monoid ProjectsRsp
- Redmine.Types: instance Monoid TimeEntriesRsp
- Redmine.Types: instance Monoid VersionsRsp
- Redmine.Types: instance Show Attachement
- Redmine.Types: instance Show ChangeSet
- Redmine.Types: instance Show Child
- Redmine.Types: instance Show CustomField
- Redmine.Types: instance Show Detail
- Redmine.Types: instance Show Issue
- Redmine.Types: instance Show IssueRsp
- Redmine.Types: instance Show IssueStatus
- Redmine.Types: instance Show IssueStatuses
- Redmine.Types: instance Show IssuesRsp
- Redmine.Types: instance Show Journal
- Redmine.Types: instance Show Membership
- Redmine.Types: instance Show Memberships
- Redmine.Types: instance Show ObjID
- Redmine.Types: instance Show ObjRef
- Redmine.Types: instance Show Project
- Redmine.Types: instance Show ProjectRsp
- Redmine.Types: instance Show ProjectsRsp
- Redmine.Types: instance Show Relation
- Redmine.Types: instance Show RelationType
- Redmine.Types: instance Show Relations
- Redmine.Types: instance Show Role
- Redmine.Types: instance Show Roles
- Redmine.Types: instance Show Status
- Redmine.Types: instance Show TimeEntriesRsp
- Redmine.Types: instance Show TimeEntry
- Redmine.Types: instance Show TimeEntryRsp
- Redmine.Types: instance Show Tracker
- Redmine.Types: instance Show Trackers
- Redmine.Types: instance Show User
- Redmine.Types: instance Show UserRsp
- Redmine.Types: instance Show UsersRsp
- Redmine.Types: instance Show Version
- Redmine.Types: instance Show VersionRsp
- Redmine.Types: instance Show VersionsRsp
- Redmine.Types: instance Show Watcher
- Redmine.Types: isClosed_IssueStatus :: IssueStatus -> Bool
- Redmine.Types: isDefault_IssueStatus :: IssueStatus -> Bool
- Redmine.Types: issue :: IssueRsp -> Issue
- Redmine.Types: issueId_Relation :: Relation -> Integer
- Redmine.Types: issueToId_Relation :: Relation -> Integer
- Redmine.Types: issue_TE :: TimeEntry -> ObjID
- Redmine.Types: issue_statuses :: IssueStatuses -> [IssueStatus]
- Redmine.Types: issues :: IssuesRsp -> [Issue]
- Redmine.Types: journals_Issue :: Issue -> Maybe [Journal]
- Redmine.Types: lastname :: User -> Text
- Redmine.Types: mail :: User -> Text
- Redmine.Types: memberships :: Memberships -> [Membership]
- Redmine.Types: name_CF :: CustomField -> Text
- Redmine.Types: name_Detail :: Detail -> Text
- Redmine.Types: name_IssueStatus :: IssueStatus -> Text
- Redmine.Types: name_ObjRef :: ObjRef -> Text
- Redmine.Types: name_Project :: Project -> Text
- Redmine.Types: name_Role :: Role -> Text
- Redmine.Types: name_Tracker :: Tracker -> Text
- Redmine.Types: name_Version :: Version -> Text
- Redmine.Types: name_Watcher :: Watcher -> Text
- Redmine.Types: new_value_Detail :: Detail -> Text
- Redmine.Types: notes_Journal :: Journal -> Text
- Redmine.Types: old_value_Detail :: Detail -> Maybe Text
- Redmine.Types: parent_Issue :: Issue -> Maybe ObjID
- Redmine.Types: priority_Issue :: Issue -> ObjRef
- Redmine.Types: project :: ProjectRsp -> Project
- Redmine.Types: project_Issue :: Issue -> ObjRef
- Redmine.Types: project_Membership :: Membership -> ObjRef
- Redmine.Types: project_TE :: TimeEntry -> ObjRef
- Redmine.Types: project_Version :: Version -> ObjRef
- Redmine.Types: projects :: ProjectsRsp -> [Project]
- Redmine.Types: property :: Detail -> Text
- Redmine.Types: r :: User -> Maybe UTCTime
- Redmine.Types: relationType_Relation :: Relation -> Text
- Redmine.Types: relations :: Relations -> [Relation]
- Redmine.Types: relations_Issue :: Issue -> Maybe [Relation]
- Redmine.Types: revision_ChangeSet :: ChangeSet -> Text
- Redmine.Types: roles :: Roles -> [Role]
- Redmine.Types: roles_Membership :: Membership -> [Role]
- Redmine.Types: sharing_Version :: Version -> Text
- Redmine.Types: spentHours_Issue :: Issue -> Maybe Float
- Redmine.Types: spentOn_TE :: TimeEntry -> Maybe Day
- Redmine.Types: startDate_Issue :: Issue -> Maybe Day
- Redmine.Types: status_Issue :: Issue -> ObjRef
- Redmine.Types: status_Version :: Version -> Text
- Redmine.Types: subject_Issue :: Issue -> Text
- Redmine.Types: subject_Tracker :: Child -> Text
- Redmine.Types: time_entries :: TimeEntriesRsp -> [TimeEntry]
- Redmine.Types: time_entry :: TimeEntryRsp -> TimeEntry
- Redmine.Types: tracker_Child :: Child -> ObjRef
- Redmine.Types: tracker_Issue :: Issue -> ObjRef
- Redmine.Types: trackers :: Trackers -> [Tracker]
- Redmine.Types: updatedOn_Issue :: Issue -> Maybe UTCTime
- Redmine.Types: updatedOn_Project :: Project -> Maybe UTCTime
- Redmine.Types: updatedOn_TE :: TimeEntry -> Maybe UTCTime
- Redmine.Types: updatedOn_Version :: Version -> Maybe UTCTime
- Redmine.Types: user :: UserRsp -> User
- Redmine.Types: user_ChangeSet :: ChangeSet -> ObjRef
- Redmine.Types: user_Journal :: Journal -> ObjRef
- Redmine.Types: user_Membership :: Membership -> ObjRef
- Redmine.Types: user_TE :: TimeEntry -> ObjRef
- Redmine.Types: users :: UsersRsp -> [User]
- Redmine.Types: value_CF :: CustomField -> Text
- Redmine.Types: version :: VersionRsp -> Version
- Redmine.Types: versions :: VersionsRsp -> [Version]
- Redmine.Types: watchers_Issue :: Issue -> Maybe [Watcher]
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Attachement
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.ChangeSet
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Child
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.CustomField
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Detail
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Issue
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.IssueRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.IssueStatus
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.IssueStatuses
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.IssuesRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Journal
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Membership
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Memberships
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.ObjID
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.ObjRef
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Project
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.ProjectsRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Relation
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Relations
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Role
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Roles
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.TimeEntriesRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.TimeEntry
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.TimeEntryRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Tracker
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Trackers
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.User
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.UserRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.UsersRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Version
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.VersionRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.VersionsRsp
+ Redmine.JSON: instance Data.Aeson.Types.FromJSON.FromJSON Redmine.Types.Watcher
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Attachement
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.ChangeSet
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Child
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.CustomField
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Detail
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Issue
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Journal
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.ObjID
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.ObjRef
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Relation
+ Redmine.JSON: instance Data.Aeson.Types.ToJSON.ToJSON Redmine.Types.Watcher
+ Redmine.Manager: [login] :: RedmineMng -> ByteString
+ Redmine.Manager: [passwd] :: RedmineMng -> ByteString
+ Redmine.Manager: [rmhost] :: RedmineMng -> ByteString
+ Redmine.Manager: [rmportProxy] :: RedmineMng -> Int
+ Redmine.Manager: [rmurlProxy] :: RedmineMng -> ByteString
+ Redmine.Types: [activity_TE] :: TimeEntry -> Maybe ObjRef
+ Redmine.Types: [assignedTo_Issue] :: Issue -> Maybe ObjRef
+ Redmine.Types: [attachements_Issue] :: Issue -> Maybe [Attachement]
+ Redmine.Types: [authorName_Attachement] :: Attachement -> ObjRef
+ Redmine.Types: [author_Issue] :: Issue -> ObjRef
+ Redmine.Types: [category_Issue] :: Issue -> Maybe ObjRef
+ Redmine.Types: [changeSets_Issue] :: Issue -> Maybe [ChangeSet]
+ Redmine.Types: [children_Issue] :: Issue -> Maybe [Child]
+ Redmine.Types: [comments_ChangeSet] :: ChangeSet -> Text
+ Redmine.Types: [comments_TE] :: TimeEntry -> Text
+ Redmine.Types: [committedOn_ChangeSet] :: ChangeSet -> UTCTime
+ Redmine.Types: [contentType_Attachement] :: Attachement -> Text
+ Redmine.Types: [contentUrl_Attachement] :: Attachement -> Text
+ Redmine.Types: [createdOn_Attachement] :: Attachement -> UTCTime
+ Redmine.Types: [createdOn_Issue] :: Issue -> Maybe UTCTime
+ Redmine.Types: [createdOn_Journal] :: Journal -> Maybe UTCTime
+ Redmine.Types: [createdOn_Project] :: Project -> Maybe UTCTime
+ Redmine.Types: [createdOn_TE] :: TimeEntry -> Maybe UTCTime
+ Redmine.Types: [createdOn_User] :: User -> Maybe UTCTime
+ Redmine.Types: [createdOn_Version] :: Version -> Maybe UTCTime
+ Redmine.Types: [customFields_Issue] :: Issue -> Maybe [CustomField]
+ Redmine.Types: [customFields_Project] :: Project -> Maybe [CustomField]
+ Redmine.Types: [delay_Relation] :: Relation -> Maybe Integer
+ Redmine.Types: [desc_Project] :: Project -> Text
+ Redmine.Types: [desc_Version] :: Version -> Text
+ Redmine.Types: [description_Attachement] :: Attachement -> Text
+ Redmine.Types: [description_Issue] :: Issue -> Text
+ Redmine.Types: [details_Journal] :: Journal -> Maybe [Detail]
+ Redmine.Types: [doneRatio_Issue] :: Issue -> Int
+ Redmine.Types: [dueDate_Issue] :: Issue -> Maybe Day
+ Redmine.Types: [dueDate_Version] :: Version -> Maybe Day
+ Redmine.Types: [estimatedHours_Issue] :: Issue -> Maybe Float
+ Redmine.Types: [filename_Attachement] :: Attachement -> Text
+ Redmine.Types: [filesize_Attachement] :: Attachement -> Integer
+ Redmine.Types: [firstname] :: User -> Text
+ Redmine.Types: [fixedVersion_Issue] :: Issue -> Maybe ObjRef
+ Redmine.Types: [hours_TE] :: TimeEntry -> Maybe Float
+ Redmine.Types: [id_Attachement] :: Attachement -> Integer
+ Redmine.Types: [id_CF] :: CustomField -> Integer
+ Redmine.Types: [id_Child] :: Child -> Integer
+ Redmine.Types: [id_IssueStatus] :: IssueStatus -> Integer
+ Redmine.Types: [id_Issue] :: Issue -> Integer
+ Redmine.Types: [id_Journal] :: Journal -> Integer
+ Redmine.Types: [id_Membership] :: Membership -> Integer
+ Redmine.Types: [id_ObjID] :: ObjID -> Integer
+ Redmine.Types: [id_ObjRef] :: ObjRef -> Integer
+ Redmine.Types: [id_Project] :: Project -> Integer
+ Redmine.Types: [id_Relation] :: Relation -> Integer
+ Redmine.Types: [id_Role] :: Role -> Integer
+ Redmine.Types: [id_TE] :: TimeEntry -> Integer
+ Redmine.Types: [id_Tracker] :: Tracker -> Integer
+ Redmine.Types: [id_User] :: User -> Integer
+ Redmine.Types: [id_Version] :: Version -> Integer
+ Redmine.Types: [id_Watcher] :: Watcher -> Integer
+ Redmine.Types: [identifier_Project] :: Project -> Text
+ Redmine.Types: [isClosed_IssueStatus] :: IssueStatus -> Bool
+ Redmine.Types: [isDefault_IssueStatus] :: IssueStatus -> Bool
+ Redmine.Types: [issueId_Relation] :: Relation -> Integer
+ Redmine.Types: [issueToId_Relation] :: Relation -> Integer
+ Redmine.Types: [issue] :: IssueRsp -> Issue
+ Redmine.Types: [issue_TE] :: TimeEntry -> ObjID
+ Redmine.Types: [issue_statuses] :: IssueStatuses -> [IssueStatus]
+ Redmine.Types: [issues] :: IssuesRsp -> [Issue]
+ Redmine.Types: [journals_Issue] :: Issue -> Maybe [Journal]
+ Redmine.Types: [lastname] :: User -> Text
+ Redmine.Types: [mail] :: User -> Text
+ Redmine.Types: [memberships] :: Memberships -> [Membership]
+ Redmine.Types: [name_CF] :: CustomField -> Text
+ Redmine.Types: [name_Detail] :: Detail -> Text
+ Redmine.Types: [name_IssueStatus] :: IssueStatus -> Text
+ Redmine.Types: [name_ObjRef] :: ObjRef -> Text
+ Redmine.Types: [name_Project] :: Project -> Text
+ Redmine.Types: [name_Role] :: Role -> Text
+ Redmine.Types: [name_Tracker] :: Tracker -> Text
+ Redmine.Types: [name_Version] :: Version -> Text
+ Redmine.Types: [name_Watcher] :: Watcher -> Text
+ Redmine.Types: [new_value_Detail] :: Detail -> Text
+ Redmine.Types: [notes_Journal] :: Journal -> Text
+ Redmine.Types: [old_value_Detail] :: Detail -> Maybe Text
+ Redmine.Types: [parent_Issue] :: Issue -> Maybe ObjID
+ Redmine.Types: [priority_Issue] :: Issue -> ObjRef
+ Redmine.Types: [project] :: ProjectRsp -> Project
+ Redmine.Types: [project_Issue] :: Issue -> ObjRef
+ Redmine.Types: [project_Membership] :: Membership -> ObjRef
+ Redmine.Types: [project_TE] :: TimeEntry -> ObjRef
+ Redmine.Types: [project_Version] :: Version -> ObjRef
+ Redmine.Types: [projects] :: ProjectsRsp -> [Project]
+ Redmine.Types: [property] :: Detail -> Text
+ Redmine.Types: [r] :: User -> Maybe UTCTime
+ Redmine.Types: [relationType_Relation] :: Relation -> Text
+ Redmine.Types: [relations] :: Relations -> [Relation]
+ Redmine.Types: [relations_Issue] :: Issue -> Maybe [Relation]
+ Redmine.Types: [revision_ChangeSet] :: ChangeSet -> Text
+ Redmine.Types: [roles] :: Roles -> [Role]
+ Redmine.Types: [roles_Membership] :: Membership -> [Role]
+ Redmine.Types: [sharing_Version] :: Version -> Text
+ Redmine.Types: [spentHours_Issue] :: Issue -> Maybe Float
+ Redmine.Types: [spentOn_TE] :: TimeEntry -> Maybe Day
+ Redmine.Types: [startDate_Issue] :: Issue -> Maybe Day
+ Redmine.Types: [status_Issue] :: Issue -> ObjRef
+ Redmine.Types: [status_Version] :: Version -> Text
+ Redmine.Types: [subject_Issue] :: Issue -> Text
+ Redmine.Types: [subject_Tracker] :: Child -> Text
+ Redmine.Types: [time_entries] :: TimeEntriesRsp -> [TimeEntry]
+ Redmine.Types: [time_entry] :: TimeEntryRsp -> TimeEntry
+ Redmine.Types: [tracker_Child] :: Child -> ObjRef
+ Redmine.Types: [tracker_Issue] :: Issue -> ObjRef
+ Redmine.Types: [trackers] :: Trackers -> [Tracker]
+ Redmine.Types: [updatedOn_Issue] :: Issue -> Maybe UTCTime
+ Redmine.Types: [updatedOn_Project] :: Project -> Maybe UTCTime
+ Redmine.Types: [updatedOn_TE] :: TimeEntry -> Maybe UTCTime
+ Redmine.Types: [updatedOn_Version] :: Version -> Maybe UTCTime
+ Redmine.Types: [user] :: UserRsp -> User
+ Redmine.Types: [user_ChangeSet] :: ChangeSet -> ObjRef
+ Redmine.Types: [user_Journal] :: Journal -> ObjRef
+ Redmine.Types: [user_Membership] :: Membership -> ObjRef
+ Redmine.Types: [user_TE] :: TimeEntry -> ObjRef
+ Redmine.Types: [users] :: UsersRsp -> [User]
+ Redmine.Types: [value_CF] :: CustomField -> Text
+ Redmine.Types: [version] :: VersionRsp -> Version
+ Redmine.Types: [versions] :: VersionsRsp -> [Version]
+ Redmine.Types: [watchers_Issue] :: Issue -> Maybe [Watcher]
+ Redmine.Types: instance GHC.Base.Monoid Redmine.Types.IssuesRsp
+ Redmine.Types: instance GHC.Base.Monoid Redmine.Types.ProjectsRsp
+ Redmine.Types: instance GHC.Base.Monoid Redmine.Types.TimeEntriesRsp
+ Redmine.Types: instance GHC.Base.Monoid Redmine.Types.VersionsRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Attachement
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.ChangeSet
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Child
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.CustomField
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Detail
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Issue
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.IssueRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.IssueStatus
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.IssueStatuses
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.IssuesRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Journal
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Membership
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Memberships
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.ObjID
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.ObjRef
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Project
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.ProjectRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.ProjectsRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Relation
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.RelationType
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Relations
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Role
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Roles
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Status
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.TimeEntriesRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.TimeEntry
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.TimeEntryRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Tracker
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Trackers
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.User
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.UserRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.UsersRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Version
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.VersionRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.VersionsRsp
+ Redmine.Types: instance GHC.Classes.Eq Redmine.Types.Watcher
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Attachement
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.ChangeSet
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Child
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.CustomField
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Detail
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Issue
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.IssueRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.IssueStatus
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.IssueStatuses
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.IssuesRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Journal
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Membership
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Memberships
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.ObjID
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.ObjRef
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Project
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.ProjectRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.ProjectsRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Relation
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.RelationType
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Relations
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Role
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Roles
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Status
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.TimeEntriesRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.TimeEntry
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.TimeEntryRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Tracker
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Trackers
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.User
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.UserRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.UsersRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Version
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.VersionRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.VersionsRsp
+ Redmine.Types: instance GHC.Show.Show Redmine.Types.Watcher
+ Redmine.Types: instance Redmine.Types.Collection Redmine.Types.IssuesRsp
+ Redmine.Types: instance Redmine.Types.Collection Redmine.Types.ProjectsRsp
+ Redmine.Types: instance Redmine.Types.Collection Redmine.Types.TimeEntriesRsp
+ Redmine.Types: instance Redmine.Types.Collection Redmine.Types.VersionsRsp

Files

Redmine.cabal view
@@ -1,5 +1,5 @@ name: Redmine-version: 0.0.6+version: 0.0.8 cabal-version: >=1.10 build-type: Simple license: MIT@@ -18,10 +18,8 @@  Library     default-language: Haskell2010-    build-depends: base >=2 && <5, old-locale -any,-                   time -any, old-time -any, bytestring -any, http-conduit >= 2.1.0, http-types,-                   aeson -any, HTTP -any, network -any, text,-                   transformers, containers, http-client-tls,+    build-depends: base >=2 && <5, time -any, bytestring -any, http-conduit >= 2.1.0, http-types,+                   aeson >= 0.11.0, HTTP -any, network -any, text, transformers, containers, http-client-tls,                    resourcet, connection, MissingH     exposed-modules: Redmine.Types, Redmine.Manager, Redmine.Get, Redmine.JSON, Redmine.Rest, Redmine.Post, Redmine.Put     buildable: True@@ -29,8 +27,9 @@  test-suite test-Redmine     default-language: Haskell2010-    build-depends: base >=2 && <5, HUnit, text, MissingH, resourcet, transformers, old-locale, time,-                   http-conduit >= 2.1.0, http-client-tls, connection, network, bytestring, aeson, containers+    build-depends: base >=2 && <5, HUnit, text, MissingH, resourcet, transformers, time,+                   http-conduit >= 2.1.0, http-client-tls, connection, network, bytestring, aeson >= 0.11.0, containers,+                   HTTP, http-types     type: exitcode-stdio-1.0     main-is: testGet.hs     buildable: True
src/Redmine/JSON.hs view
@@ -7,21 +7,18 @@  import Data.Aeson import Data.Maybe-import Data.Time.Clock      (UTCTime)-import Data.Time.Format (parseTime) import Redmine.Types import Control.Applicative ((<$>), (<*>), pure)-import Control.Monad (liftM)-import Data.Time.Calendar (Day, showGregorian)-import System.Locale        (defaultTimeLocale)+import Data.Time (Day, UTCTime, showGregorian, defaultTimeLocale)+import Data.Time.Format (parseTimeM)  import qualified Data.Text  as T (pack, unpack)  parseRHTime :: String -> Maybe UTCTime-parseRHTime = parseTime defaultTimeLocale "%FT%X%QZ"+parseRHTime = parseTimeM True defaultTimeLocale "%FT%X%QZ"  parseShortTime :: String -> Maybe Day-parseShortTime = parseTime defaultTimeLocale "%F"+parseShortTime = parseTimeM True defaultTimeLocale "%F"  instance FromJSON ObjRef where   parseJSON (Object v) =@@ -51,15 +48,15 @@           <*> (v .:? "category")           <*> (v .:? "fixed_version")           <*> (v .: "subject")-          <*> liftM (fromMaybe "") (v .:? "description")-          <*> liftM (parseShortTime . fromMaybe "") (v .:? "start_date")-          <*> liftM (parseShortTime . fromMaybe "") (v .:? "due_date")+          <*> (v .:? "description" .!= "")+          <*> fmap (parseShortTime . fromMaybe "") (v .:? "start_date")+          <*> fmap (parseShortTime . fromMaybe "") (v .:? "due_date")           <*> (v .: "done_ratio")           <*> (v .:? "estimated_hours")           <*> (v .:? "spent_hours")           <*> (v .:? "custom_fields")-          <*> liftM parseRHTime (v .: "created_on")-          <*> liftM parseRHTime (v .: "updated_on")+          <*> fmap parseRHTime (v .: "created_on")+          <*> fmap parseRHTime (v .: "updated_on")           <*> (v .:? "journals")           <*> (v .:? "attachements")           <*> (v .:? "changesets")@@ -83,14 +80,14 @@                 <*> (v .: "description")                 <*> (v .: "content_url")                 <*> (v .: "author_name")-                <*> liftM (fromJust.parseRHTime) (v .: "created_on")+                <*> fmap (fromJust.parseRHTime) (v .: "created_on")  instance FromJSON ChangeSet where   parseJSON (Object v) =     ChangeSet <$> (v .: "revision")               <*> (v .: "user")               <*> (v .: "comments")-              <*> liftM (fromJust.parseRHTime) (v .: "committed_on")+              <*> fmap (fromJust.parseRHTime) (v .: "committed_on")  instance FromJSON Watcher where   parseJSON (Object v) =@@ -99,14 +96,16 @@  instance FromJSON CustomField where   parseJSON (Object v) =-    CustomField <$> (v .: "id") <*> (v .: "name") <*> (v .: "value")+    CustomField <$> (v .: "id")+                <*> (v .: "name")+                <*> (v .:? "value" .!= "")  instance FromJSON Journal where   parseJSON (Object v) =     Journal <$> (v .: "id")             <*> (v .: "user")             <*> (v .:? "notes" .!= "")-            <*> liftM parseRHTime (v .: "created_on")+            <*> fmap parseRHTime (v .: "created_on")             <*> (v .: "details")  instance FromJSON Detail where@@ -126,8 +125,8 @@             <*> (v .: "identifier")             <*> (v .: "description")             <*> (v .:? "custom_fields")-            <*> liftM parseRHTime (v .: "created_on")-            <*> liftM parseRHTime (v .: "updated_on")+            <*> fmap parseRHTime (v .: "created_on")+            <*> fmap parseRHTime (v .: "updated_on")  instance FromJSON TimeEntriesRsp where   parseJSON (Object v) = TimeEntriesRsp <$> (v .: "time_entries")@@ -144,9 +143,9 @@               <*> (v .:? "activity")               <*> (v .:? "hours")               <*> (v .: "comments")-              <*> liftM parseRHTime (v .: "created_on")-              <*> liftM parseRHTime (v .: "updated_on")-              <*> liftM (parseShortTime . fromMaybe "") (v .:? "spent_on")+              <*> fmap parseRHTime (v .: "created_on")+              <*> fmap parseRHTime (v .: "updated_on")+              <*> fmap (parseShortTime . fromMaybe "") (v .:? "spent_on")  instance FromJSON VersionsRsp where   parseJSON (Object v) = VersionsRsp <$> (v .: "versions")@@ -154,12 +153,6 @@ instance FromJSON VersionRsp where   parseJSON (Object v) = VersionRsp <$> (v .: "version") -instance FromJSON Day where-    parseJSON = withText "Day" $ \t ->-        case parseTime defaultTimeLocale "%F" (T.unpack t) of-          Just d -> pure d-          _      -> fail "could not parse ISO-8601 date"- instance FromJSON Version where   parseJSON (Object v) =     Version <$> (v .: "id")@@ -169,9 +162,9 @@             <*> (v .: "status")             <*> (v .: "sharing")             --FIXME avoid parsing an empty string-            <*> liftM (parseShortTime . fromMaybe "") (v .:? "due_date")-            <*> liftM parseRHTime (v .: "created_on")-            <*> liftM parseRHTime (v .: "updated_on")+            <*> fmap (parseShortTime . fromMaybe "") (v .:? "due_date")+            <*> fmap parseRHTime (v .: "created_on")+            <*> fmap parseRHTime (v .: "updated_on")  instance FromJSON Relations where   parseJSON (Object v) = Relations <$> (v .: "relations")@@ -210,9 +203,9 @@ instance FromJSON User where   parseJSON (Object v) =     User <$> (v .: "lastname")-         <*> liftM parseRHTime (v .: "created_on")+         <*> fmap parseRHTime (v .: "created_on")          <*> (v .: "mail")-         <*> liftM parseRHTime (v .: "last_login_on")+         <*> fmap parseRHTime (v .: "last_login_on")          <*> (v .: "firstname")          <*> (v .: "id") @@ -232,9 +225,6 @@                 <*> (v .: "name")                 <*> (v .: "is_default")                 <*> (v .: "is_closed")--instance ToJSON Day where-  toJSON = String . T.pack . showGregorian  instance ToJSON ObjRef where   toJSON (ObjRef id name) = object [ "id" .= id, "name" .= name]
src/Redmine/Types.hs view
@@ -2,8 +2,7 @@  module Redmine.Types where -import Data.Time.Clock      (UTCTime)-import Data.Time.Calendar (Day)+import Data.Time      (Day, UTCTime) import Network.HTTP.Conduit import Data.Monoid import Data.Typeable
testsuite/testGet.hs view
@@ -1,8 +1,13 @@ {-# LANGUAGE OverloadedStrings #-}  import Test.HUnit+import Data.Aeson import Data.Map+import Data.Time (Day, fromGregorian)++ import Redmine.Get+import Redmine.Types  test1 = TestCase (do let m   = fromList [("toto","a"),("offset","20"), ("limit","100")]                          ref = "?toto=a&offset=20&limit=100&"@@ -12,7 +17,20 @@                          ref = fromList [("offset","120"), ("limit","100")]                      assertEqual "increaseQueryRange a échouée" ref (increaseQueryRange m)) +test3 = TestCase $ assertEqual "Test de parsing d'un Day" (Just $ fromGregorian 1999 01 12) (decode "\"1999-01-12\"") +test4 = TestCase $ assertEqual "Test de parsing d'un Day" "\"1999-01-12\"" (encode $ fromGregorian 1999 01 12)++refCustomField = Just $ CustomField 1 "name" ""++customFieldWithValue = "{\"id\":1,\"name\":\"name\",\"value\":\"\"}"+testCustomFieldWithValue = TestCase $ assertEqual "Parse CustomField with value failed" refCustomField (decode customFieldWithValue)++customFieldWithOutValue = "{\"id\":1,\"name\":\"name\"}"+testCustomFieldWithOutValue = TestCase $ assertEqual "Parse CustomField without value failed" refCustomField (decode customFieldWithOutValue)+ --decodeIssue+tests = TestList [TestLabel "test1" test1, TestLabel "test2" test2, TestLabel "test3" test3, TestLabel "test4" test4+                 , TestLabel "testCustomFieldWithValue" testCustomFieldWithValue, TestLabel "testCustomFieldWithOutValue" testCustomFieldWithOutValue] -main = runTestTT test2 --[test1,test2]+main = runTestTT tests