redmine_rest 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/redmine_rest/models/collections/base.rb +18 -0
- data/lib/redmine_rest/models/group.rb +15 -0
- data/lib/redmine_rest/models/issue_priority.rb +21 -0
- data/lib/redmine_rest/models/issue_status.rb +3 -5
- data/lib/redmine_rest/models/membership.rb +29 -0
- data/lib/redmine_rest/models/project.rb +40 -2
- data/lib/redmine_rest/models/relation.rb +7 -15
- data/lib/redmine_rest/models/time_entry_activity.rb +21 -0
- data/lib/redmine_rest/models/tracker.rb +3 -5
- data/lib/redmine_rest/models/version.rb +11 -2
- data/lib/redmine_rest/models.rb +19 -1
- data/lib/redmine_rest/version.rb +1 -1
- data/lib/redmine_rest.rb +0 -1
- metadata +6 -6
- data/lib/redmine_rest/helpers/collection.rb +0 -16
- data/lib/redmine_rest/models/collections/issue_status.rb +0 -14
- data/lib/redmine_rest/models/collections/project.rb +0 -14
- data/lib/redmine_rest/models/collections/tracker.rb +0 -14
- data/lib/redmine_rest/models/collections/version.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c650caea3e5f25a8dd23a954d48a9c12e0837c4d
|
4
|
+
data.tar.gz: c7e03f5bb55417b07afca18e2cb45dce898b17b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9a67c5f368edab616da3de28b6f0a0bdce2fce1d0a66f253f856d43993c75b654c7f36f7b1bfa05a29e504a8a2868fb3f992ee976102e0d16b9fb49eb01c0e2f
|
7
|
+
data.tar.gz: 7f5745029e7de897d4bb84864563d127e254edd97f64583a7689f06ccefe22676acddd27b3051ab306ff349398390eff304532aa55054e4a8f38a5380a5290f9
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
require 'unicode'
|
3
|
+
|
4
|
+
module RedmineRest
|
5
|
+
module Models
|
6
|
+
module Collections
|
7
|
+
#
|
8
|
+
# Base class for most custom collections
|
9
|
+
#
|
10
|
+
class Base < ActiveResource::Collection
|
11
|
+
def filter_by_name_substring(str)
|
12
|
+
str = Unicode.downcase(str)
|
13
|
+
self.class.new @elements.find_all { |e| Unicode.downcase(e.name).include? str }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
|
3
|
+
require_relative 'collections/base'
|
4
|
+
|
5
|
+
module RedmineRest
|
6
|
+
module Models
|
7
|
+
#
|
8
|
+
# Group model. Right now it cant work with user lists (add, delete and so on)
|
9
|
+
#
|
10
|
+
class Group < ActiveResource::Base
|
11
|
+
self.format = :xml
|
12
|
+
self.collection_parser = Collections::Base
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
|
3
|
+
require_relative 'collections/base'
|
4
|
+
|
5
|
+
module RedmineRest
|
6
|
+
module Models
|
7
|
+
#
|
8
|
+
# issue priority model
|
9
|
+
#
|
10
|
+
class IssuePriority < ActiveResource::Base
|
11
|
+
self.format = :xml
|
12
|
+
self.collection_parser = Collections::Base
|
13
|
+
self.prefix = '/enumerations/'
|
14
|
+
|
15
|
+
def self.find(*args)
|
16
|
+
fail('Issue priorities can be loaded as :all only') unless args.size == 1 && args.first == :all
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'active_resource'
|
2
2
|
|
3
|
-
require_relative 'collections/
|
3
|
+
require_relative 'collections/base'
|
4
4
|
|
5
5
|
module RedmineRest
|
6
6
|
module Models
|
@@ -9,13 +9,11 @@ module RedmineRest
|
|
9
9
|
#
|
10
10
|
class IssueStatus < ActiveResource::Base
|
11
11
|
self.format = :xml
|
12
|
-
self.collection_parser = Collections::
|
12
|
+
self.collection_parser = Collections::Base
|
13
13
|
|
14
14
|
def self.find(*args)
|
15
15
|
fail('Issue statuses can be loaded as :all only') unless args.size == 1 && args.first == :all
|
16
|
-
|
17
|
-
return @statuses if @statuses
|
18
|
-
@statuses = super
|
16
|
+
super
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
|
3
|
+
require_relative 'collections/base'
|
4
|
+
require_relative 'user'
|
5
|
+
require_relative 'group'
|
6
|
+
|
7
|
+
module RedmineRest
|
8
|
+
module Models
|
9
|
+
#
|
10
|
+
# Membership model
|
11
|
+
#
|
12
|
+
class Membership < ActiveResource::Base
|
13
|
+
self.format = :xml
|
14
|
+
self.collection_parser = Collections::Base
|
15
|
+
self.prefix = '/projects/:project_id/'
|
16
|
+
|
17
|
+
has_one :user, class_name: User
|
18
|
+
has_one :group, class_name: Group
|
19
|
+
|
20
|
+
#
|
21
|
+
# Overrides parent method.
|
22
|
+
# When we want to fetch one membership, we need not to use prefix
|
23
|
+
#
|
24
|
+
def self.element_path(id, _prefix_options = {}, query_options = nil)
|
25
|
+
"/memberships/#{URI.parser.escape id.to_s}#{format_extension}#{query_string(query_options)}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,6 +1,9 @@
|
|
1
1
|
require 'active_resource'
|
2
2
|
|
3
|
-
require_relative '
|
3
|
+
require_relative 'tracker'
|
4
|
+
require_relative 'collections/base'
|
5
|
+
require_relative 'version'
|
6
|
+
require_relative 'membership'
|
4
7
|
|
5
8
|
module RedmineRest
|
6
9
|
module Models
|
@@ -9,7 +12,42 @@ module RedmineRest
|
|
9
12
|
#
|
10
13
|
class Project < ActiveResource::Base
|
11
14
|
self.format = :xml
|
12
|
-
self.collection_parser = Collections::
|
15
|
+
self.collection_parser = Collections::Base
|
16
|
+
|
17
|
+
has_many :trackers, class_name: Tracker
|
18
|
+
|
19
|
+
#
|
20
|
+
# Adds trackers to request.
|
21
|
+
#
|
22
|
+
def self.find(scope, options = {})
|
23
|
+
options[:params] = {} unless options[:params]
|
24
|
+
params = options[:params]
|
25
|
+
|
26
|
+
if params[:include]
|
27
|
+
params[:include] += ',trackers'
|
28
|
+
else # doubling is not bad
|
29
|
+
params[:include] = 'trackers'
|
30
|
+
end
|
31
|
+
|
32
|
+
super(scope, options)
|
33
|
+
end
|
34
|
+
|
35
|
+
def versions
|
36
|
+
Version.all params: { project_id: id }
|
37
|
+
end
|
38
|
+
|
39
|
+
def memberships
|
40
|
+
Membership.all params: { project_id: id }
|
41
|
+
end
|
42
|
+
|
43
|
+
def members(options = {})
|
44
|
+
users = memberships
|
45
|
+
.map { |m| m.user? ? m.user : m.group.reload.users }
|
46
|
+
.flatten
|
47
|
+
users.map(&:reload) if options[:reload]
|
48
|
+
|
49
|
+
Collections::Base.new(users)
|
50
|
+
end
|
13
51
|
end
|
14
52
|
end
|
15
53
|
end
|
@@ -9,26 +9,18 @@ module RedmineRest
|
|
9
9
|
TYPES = %w(relates duplicates duplicated blocks blocked precedes follows copied_to copied_from).freeze
|
10
10
|
|
11
11
|
self.format = :xml
|
12
|
+
self.prefix = '/issues/:issue_id/'
|
12
13
|
|
13
14
|
validate :validate_relation_type,
|
14
15
|
:validate_issue_id,
|
15
16
|
:validate_issue_to_id
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
def self.find(what, options = {})
|
24
|
-
if what == :all
|
25
|
-
super
|
26
|
-
else
|
27
|
-
self.prefix = '/'
|
28
|
-
result = super
|
29
|
-
set_prefix
|
30
|
-
result
|
31
|
-
end
|
18
|
+
#
|
19
|
+
# Overrides parent method.
|
20
|
+
# When we want to fetch one relation, we need not to use prefix
|
21
|
+
#
|
22
|
+
def self.element_path(id, _prefix_options = {}, query_options = nil)
|
23
|
+
"/relations/#{URI.parser.escape id.to_s}#{format_extension}#{query_string(query_options)}"
|
32
24
|
end
|
33
25
|
|
34
26
|
private
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
|
3
|
+
require_relative 'collections/base'
|
4
|
+
|
5
|
+
module RedmineRest
|
6
|
+
module Models
|
7
|
+
#
|
8
|
+
# time entry activity model
|
9
|
+
#
|
10
|
+
class TimeEntryActivity < ActiveResource::Base
|
11
|
+
self.format = :xml
|
12
|
+
self.collection_parser = Collections::Base
|
13
|
+
self.prefix = '/enumerations/'
|
14
|
+
|
15
|
+
def self.find(*args)
|
16
|
+
fail('Issue priorities can be loaded as :all only') unless args.size == 1 && args.first == :all
|
17
|
+
super
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'active_resource'
|
2
2
|
|
3
|
-
require_relative 'collections/
|
3
|
+
require_relative 'collections/base'
|
4
4
|
|
5
5
|
module RedmineRest
|
6
6
|
module Models
|
@@ -9,13 +9,11 @@ module RedmineRest
|
|
9
9
|
#
|
10
10
|
class Tracker < ActiveResource::Base
|
11
11
|
self.format = :xml
|
12
|
-
self.collection_parser = Collections::
|
12
|
+
self.collection_parser = Collections::Base
|
13
13
|
|
14
14
|
def self.find(*args)
|
15
15
|
fail('Trackers can be loaded as :all only') unless args.size == 1 && args.first == :all
|
16
|
-
|
17
|
-
return @trackers if @trackers
|
18
|
-
@trackers = super
|
16
|
+
super
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'active_resource'
|
2
2
|
|
3
|
-
require_relative 'collections/
|
3
|
+
require_relative 'collections/base'
|
4
4
|
|
5
5
|
module RedmineRest
|
6
6
|
module Models
|
@@ -9,7 +9,16 @@ module RedmineRest
|
|
9
9
|
#
|
10
10
|
class Version < ActiveResource::Base
|
11
11
|
self.format = :xml
|
12
|
-
self.collection_parser = Collections::
|
12
|
+
self.collection_parser = Collections::Base
|
13
|
+
self.prefix = '/projects/:project_id/'
|
14
|
+
|
15
|
+
#
|
16
|
+
# Overrides parent method.
|
17
|
+
# When we want to fetch one version, we need not to use prefix
|
18
|
+
#
|
19
|
+
def self.element_path(id, _prefix_options = {}, query_options = nil)
|
20
|
+
"/versions/#{URI.parser.escape id.to_s}#{format_extension}#{query_string(query_options)}"
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
15
24
|
end
|
data/lib/redmine_rest/models.rb
CHANGED
@@ -1,11 +1,29 @@
|
|
1
|
+
require 'active_resource'
|
2
|
+
|
1
3
|
Dir[File.expand_path('../models/*.rb', __FILE__)].each { |f| require f }
|
2
4
|
|
5
|
+
module ActiveResource
|
6
|
+
#
|
7
|
+
# some monkey-patching
|
8
|
+
#
|
9
|
+
class Base
|
10
|
+
def self.find_by_id(id)
|
11
|
+
find(id)
|
12
|
+
rescue ActiveResource::ResourceNotFound
|
13
|
+
nil
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
3
18
|
module RedmineRest
|
4
19
|
#
|
5
20
|
# Namespace for models + some self-methods
|
6
21
|
#
|
7
22
|
module Models
|
8
|
-
LIST =
|
23
|
+
LIST = constants
|
24
|
+
.map { |symbol| const_get(symbol) }
|
25
|
+
.find_all { |const| const.is_a?(Class) && const < ActiveResource::Base }
|
26
|
+
.freeze
|
9
27
|
|
10
28
|
def self.configure_models(params)
|
11
29
|
ModelConfigurator.new.configure_models(params)
|
data/lib/redmine_rest/version.rb
CHANGED
data/lib/redmine_rest.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redmine_rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitriy Non
|
@@ -111,18 +111,18 @@ files:
|
|
111
111
|
- bin/console
|
112
112
|
- bin/setup
|
113
113
|
- lib/redmine_rest.rb
|
114
|
-
- lib/redmine_rest/helpers/collection.rb
|
115
114
|
- lib/redmine_rest/models.rb
|
115
|
+
- lib/redmine_rest/models/collections/base.rb
|
116
116
|
- lib/redmine_rest/models/collections/issue.rb
|
117
|
-
- lib/redmine_rest/models/
|
118
|
-
- lib/redmine_rest/models/collections/project.rb
|
119
|
-
- lib/redmine_rest/models/collections/tracker.rb
|
120
|
-
- lib/redmine_rest/models/collections/version.rb
|
117
|
+
- lib/redmine_rest/models/group.rb
|
121
118
|
- lib/redmine_rest/models/issue.rb
|
119
|
+
- lib/redmine_rest/models/issue_priority.rb
|
122
120
|
- lib/redmine_rest/models/issue_status.rb
|
121
|
+
- lib/redmine_rest/models/membership.rb
|
123
122
|
- lib/redmine_rest/models/project.rb
|
124
123
|
- lib/redmine_rest/models/relation.rb
|
125
124
|
- lib/redmine_rest/models/time_entry.rb
|
125
|
+
- lib/redmine_rest/models/time_entry_activity.rb
|
126
126
|
- lib/redmine_rest/models/tracker.rb
|
127
127
|
- lib/redmine_rest/models/user.rb
|
128
128
|
- lib/redmine_rest/models/version.rb
|
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'active_resource'
|
2
|
-
require 'unicode'
|
3
|
-
|
4
|
-
module RedmineRest
|
5
|
-
module Helpers
|
6
|
-
#
|
7
|
-
# some methods for ActiveResource collections
|
8
|
-
#
|
9
|
-
module Collection
|
10
|
-
def filter_by_name_substring(str)
|
11
|
-
str = Unicode.downcase(str)
|
12
|
-
self.class.new @elements.find_all { |e| Unicode.downcase(e.name).include? str }
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|