ehpt 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ehpt/base.rb +16 -1
- data/lib/ehpt/create_stories.rb +16 -23
- data/lib/ehpt/create_story.rb +3 -6
- data/lib/ehpt/create_story_attributes.rb +63 -0
- data/lib/ehpt/get_project.rb +0 -3
- data/lib/ehpt/get_user_id_from_initial.rb +49 -0
- data/lib/ehpt.rb +21 -3
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bee523dd1511046a8f0aeb28f6587c5489c4d7b674b0fdd71eb178cc1576da86
|
4
|
+
data.tar.gz: dc47c8db8fe50b4d672261be2106a6c0b5f64e71321528b14d0116bafd5b2af4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b404e4aa579b442dabda86c2f4654796f24e92715043d6643f39bc16ea045d379c7941520fad7b06263be4aedd245ede884b6b172eba8868125dd61da72948b1
|
7
|
+
data.tar.gz: 8c73fd0d71dc064f8673526998d23d8b4bed5828f9d6cd263a94cffe27b18a07d029ebec2f4c8eca4df1c52554ef339e4358763e8b6607401ca77b03ddf70a65
|
data/lib/ehpt/base.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Ehpt
|
2
2
|
class Base
|
3
|
-
attr_reader :data, :errors
|
3
|
+
attr_reader :data, :errors, :warnings
|
4
4
|
|
5
5
|
def self.call(*args)
|
6
6
|
new(*args).call
|
@@ -9,6 +9,7 @@ module Ehpt
|
|
9
9
|
def initialize(*args)
|
10
10
|
@data = nil
|
11
11
|
@errors = []
|
12
|
+
@warnings = []
|
12
13
|
end
|
13
14
|
|
14
15
|
def success?
|
@@ -19,6 +20,10 @@ module Ehpt
|
|
19
20
|
!success?
|
20
21
|
end
|
21
22
|
|
23
|
+
def warning?
|
24
|
+
!warnings.empty?
|
25
|
+
end
|
26
|
+
|
22
27
|
def add_error(error)
|
23
28
|
if error.is_a?(Array)
|
24
29
|
error.each do |err|
|
@@ -28,5 +33,15 @@ module Ehpt
|
|
28
33
|
@errors << error
|
29
34
|
end
|
30
35
|
end
|
36
|
+
|
37
|
+
def add_warning(warning)
|
38
|
+
if warning.is_a?(Array)
|
39
|
+
warning.each do |err|
|
40
|
+
add_warning(err)
|
41
|
+
end
|
42
|
+
else
|
43
|
+
@warnings << warning
|
44
|
+
end
|
45
|
+
end
|
31
46
|
end
|
32
47
|
end
|
data/lib/ehpt/create_stories.rb
CHANGED
@@ -1,22 +1,9 @@
|
|
1
|
-
require 'csv'
|
2
|
-
require 'ehpt/base'
|
3
|
-
require 'ehpt/create_story'
|
4
|
-
|
5
1
|
module Ehpt
|
6
2
|
class CreateStories < Base
|
7
|
-
attr_reader :csv_file
|
8
|
-
|
9
|
-
ARRAY_TYPE_ATTRIBUTES = %w[ labels tasks pull_requests branches blockers comments reviews ]
|
10
|
-
|
11
|
-
INT_ARRAY_TYPE_ATTRIBUTES = %w[ owner_ids label_ids follower_ids ]
|
12
|
-
|
13
|
-
INT_TYPE_ATTRIBUTES = %w[ project_id requested_by_id before_id after_id integration_id ]
|
14
|
-
|
15
|
-
FLOAT_TYPE_ATTRIBUES = %w[ estimate ]
|
3
|
+
attr_reader :csv_file
|
16
4
|
|
17
|
-
def initialize(csv_file
|
5
|
+
def initialize(csv_file)
|
18
6
|
@csv_file = csv_file
|
19
|
-
@project = project
|
20
7
|
super
|
21
8
|
end
|
22
9
|
|
@@ -39,7 +26,10 @@ module Ehpt
|
|
39
26
|
def create_stories
|
40
27
|
CSV.foreach(csv_file, headers: true) do |row|
|
41
28
|
story_attrs = create_story_attributes(row)
|
42
|
-
|
29
|
+
|
30
|
+
next if error?
|
31
|
+
|
32
|
+
story_creator = Ehpt::CreateStory.new(story_attrs)
|
43
33
|
story_creator.call
|
44
34
|
|
45
35
|
if story_creator.success?
|
@@ -54,14 +44,17 @@ module Ehpt
|
|
54
44
|
end
|
55
45
|
|
56
46
|
def create_story_attributes(row)
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
47
|
+
attr_creator = Ehpt::CreateStoryAttributes.new(row)
|
48
|
+
attr_creator.call
|
49
|
+
|
50
|
+
add_warning(attr_creator.warnings) if attr_creator.warning?
|
51
|
+
|
52
|
+
if attr_creator.error?
|
53
|
+
add_error(attr_creator.errors)
|
54
|
+
return
|
63
55
|
end
|
64
|
-
|
56
|
+
|
57
|
+
attr_creator.data
|
65
58
|
end
|
66
59
|
end
|
67
60
|
end
|
data/lib/ehpt/create_story.rb
CHANGED
@@ -1,11 +1,8 @@
|
|
1
|
-
require 'ehpt/base'
|
2
|
-
|
3
1
|
module Ehpt
|
4
2
|
class CreateStory < Base
|
5
|
-
attr_reader :
|
3
|
+
attr_reader :story_attrs
|
6
4
|
|
7
|
-
def initialize(
|
8
|
-
@project = project
|
5
|
+
def initialize(story_attrs)
|
9
6
|
@story_attrs = story_attrs
|
10
7
|
super
|
11
8
|
end
|
@@ -20,7 +17,7 @@ module Ehpt
|
|
20
17
|
private
|
21
18
|
|
22
19
|
def create_story
|
23
|
-
@data = project.create_story(story_attrs)
|
20
|
+
@data = Ehpt.project.create_story(story_attrs)
|
24
21
|
end
|
25
22
|
|
26
23
|
def prefix_story_name_with_id
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Ehpt
|
2
|
+
class CreateStoryAttributes < Base
|
3
|
+
attr_reader :row
|
4
|
+
|
5
|
+
ARRAY_TYPE_ATTRIBUTES = %w[ labels tasks pull_requests branches blockers comments reviews ]
|
6
|
+
|
7
|
+
INT_ARRAY_TYPE_ATTRIBUTES = %w[ owner_ids label_ids follower_ids ]
|
8
|
+
|
9
|
+
INT_TYPE_ATTRIBUTES = %w[ project_id requested_by_id before_id after_id integration_id ]
|
10
|
+
|
11
|
+
FLOAT_TYPE_ATTRIBUES = %w[ estimate ]
|
12
|
+
|
13
|
+
def initialize(row)
|
14
|
+
@row = row
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def call
|
19
|
+
story_attrs = row.to_h.compact
|
20
|
+
story_attrs.each do |key, value|
|
21
|
+
story_attrs[key] = value.to_i if INT_TYPE_ATTRIBUTES.include?(key)
|
22
|
+
story_attrs[key] = value.to_f if FLOAT_TYPE_ATTRIBUES.include?(key)
|
23
|
+
story_attrs[key] = value.split(',') if ARRAY_TYPE_ATTRIBUTES.include?(key)
|
24
|
+
story_attrs[key] = value.split(',').map(&:to_i) if INT_ARRAY_TYPE_ATTRIBUTES.include?(key)
|
25
|
+
end
|
26
|
+
|
27
|
+
if story_attrs.has_key?('requested_by')
|
28
|
+
user_id = get_user_id_from(story_attrs.delete('requested_by'))
|
29
|
+
story_attrs['requested_by_id'] = user_id unless user_id.nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
if story_attrs.has_key?('owners')
|
33
|
+
owners = story_attrs.delete('owners').split(',')
|
34
|
+
owner_ids = owners.map { |owner| get_user_id_from(owner.strip) }.compact
|
35
|
+
story_attrs['owner_ids'] = owner_ids unless owner_ids.empty?
|
36
|
+
end
|
37
|
+
|
38
|
+
@data = story_attrs
|
39
|
+
rescue StandardError => e
|
40
|
+
add_error({
|
41
|
+
row: row.to_h,
|
42
|
+
warnings: e.message
|
43
|
+
})
|
44
|
+
end
|
45
|
+
|
46
|
+
private
|
47
|
+
|
48
|
+
def get_user_id_from(initial)
|
49
|
+
user_id_getter = Ehpt::GetUserIdFromInitial.new(initial)
|
50
|
+
user_id_getter.call
|
51
|
+
|
52
|
+
if user_id_getter.error?
|
53
|
+
add_warning({
|
54
|
+
row: row.to_h,
|
55
|
+
warnings: user_id_getter.errors
|
56
|
+
})
|
57
|
+
return
|
58
|
+
end
|
59
|
+
|
60
|
+
user_id_getter.data
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
data/lib/ehpt/get_project.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
module Ehpt
|
2
|
+
class GetUserIdFromInitial < Base
|
3
|
+
@@memberships = nil
|
4
|
+
|
5
|
+
attr_reader :initial
|
6
|
+
|
7
|
+
def self.memberships
|
8
|
+
@@memberships
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.memberships=(memberships)
|
12
|
+
@@memberships = memberships
|
13
|
+
end
|
14
|
+
|
15
|
+
def initialize(initial)
|
16
|
+
@initial = initial
|
17
|
+
super
|
18
|
+
end
|
19
|
+
|
20
|
+
def call
|
21
|
+
fetch_memberships_from_pt!
|
22
|
+
|
23
|
+
if user.nil?
|
24
|
+
add_error("Not found any user with initial #{initial}")
|
25
|
+
else
|
26
|
+
@data = user.id
|
27
|
+
end
|
28
|
+
rescue StandardError => e
|
29
|
+
add_error(eval(e.message)[:body])
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def memberships
|
35
|
+
self.class.memberships
|
36
|
+
end
|
37
|
+
|
38
|
+
def fetch_memberships_from_pt!
|
39
|
+
self.class.memberships ||= Ehpt.project.memberships
|
40
|
+
end
|
41
|
+
|
42
|
+
def user
|
43
|
+
member = memberships.find do |membership|
|
44
|
+
membership.person.initials.downcase == initial.downcase
|
45
|
+
end
|
46
|
+
member && member.person
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/ehpt.rb
CHANGED
@@ -1,9 +1,22 @@
|
|
1
|
+
require 'tracker_api'
|
1
2
|
require 'pp'
|
2
3
|
require 'csv'
|
3
|
-
require 'ehpt/
|
4
|
+
require 'ehpt/base'
|
4
5
|
require 'ehpt/create_stories'
|
6
|
+
require 'ehpt/create_story'
|
7
|
+
require 'ehpt/create_story_attributes'
|
8
|
+
require 'ehpt/get_project'
|
9
|
+
require 'ehpt/get_user_id_from_initial'
|
5
10
|
|
6
11
|
module Ehpt
|
12
|
+
def self.project=(project)
|
13
|
+
@@project = project
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.project
|
17
|
+
@@project
|
18
|
+
end
|
19
|
+
|
7
20
|
def self.call(csv_file, token, project_id)
|
8
21
|
project_getter = Ehpt::GetProject.new(token, project_id)
|
9
22
|
project_getter.call
|
@@ -14,10 +27,10 @@ module Ehpt
|
|
14
27
|
return
|
15
28
|
end
|
16
29
|
|
30
|
+
self.project = project_getter.data
|
17
31
|
puts "Found project: #{project_getter.data.name}"
|
18
|
-
project = project_getter.data
|
19
32
|
|
20
|
-
stories_creator = Ehpt::CreateStories.new(csv_file
|
33
|
+
stories_creator = Ehpt::CreateStories.new(csv_file)
|
21
34
|
stories_creator.call
|
22
35
|
|
23
36
|
puts "Done"
|
@@ -26,5 +39,10 @@ module Ehpt
|
|
26
39
|
puts "===== Errors ====="
|
27
40
|
pp stories_creator.errors
|
28
41
|
end
|
42
|
+
|
43
|
+
if stories_creator.warning?
|
44
|
+
puts "===== Warnings ====="
|
45
|
+
pp stories_creator.warnings
|
46
|
+
end
|
29
47
|
end
|
30
48
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ehpt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- phamhoaivu911
|
@@ -104,7 +104,9 @@ files:
|
|
104
104
|
- lib/ehpt/base.rb
|
105
105
|
- lib/ehpt/create_stories.rb
|
106
106
|
- lib/ehpt/create_story.rb
|
107
|
+
- lib/ehpt/create_story_attributes.rb
|
107
108
|
- lib/ehpt/get_project.rb
|
109
|
+
- lib/ehpt/get_user_id_from_initial.rb
|
108
110
|
homepage: https://github.com/phamhoaivu911/ehpt
|
109
111
|
licenses:
|
110
112
|
- MIT
|