redmine_cli 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6460e7f53da4dceb7b43731f529786fdf8bf3f12
4
- data.tar.gz: 11d050c82ac7c83ed5c532385f1227f3b8d7806a
3
+ metadata.gz: fb748681ca9ea8043684f2d1303c3a07213f8f37
4
+ data.tar.gz: 47732fcbbfe328a62388924ed3914eadefe7002c
5
5
  SHA512:
6
- metadata.gz: 7f5faff1b733c07e576eecaa888dae6af1cf123858d280aeff3c0d0bb6e865294ce310cf5d5590d072cf3341371fc009bfe6ab0e00feb9c734d6dce3f3a6eb82
7
- data.tar.gz: fab1f14cd304d16f5e4c9b1f33007c68d6e258f245ce94f5187088a4daad5a79a15b9f9fd8250ee7a1f1b0fc32d428825043a86080d2aaa584eab7aef45c0540
6
+ metadata.gz: 85d7b6cd4a30467746f6d90d813c798f0b49156a409384dedec7e0b995807cbda43d8708d157335a1b2dd8902b3a87d9e59e931617cfd2699660a101a814b892
7
+ data.tar.gz: 0d8547f7b68d1d92aa18f6d6a0c960ca232ffcfa03f4f9487ccb649629b1a21ec83a3b8f31383518eafb35c5d8e1bbf0f71bd92eb184bebae608f36e96ea4931
data/README.md CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  Command-Line Interface for Redmine.
5
5
 
6
- Why? Because web-browser + mouse sucks
6
+ Why? 'cause web-browser + mouse sucks
7
7
 
8
8
  ## Installation
9
9
 
@@ -16,6 +16,7 @@ Why? Because web-browser + mouse sucks
16
16
  redmine issue list [user id]
17
17
  redmine issue show <issue id>
18
18
  redmine issue update <issue id> --comment --done 80 --status progress --time 00:30
19
+ redmine issue create
19
20
 
20
21
  redmine user find vasya
21
22
  redmine user find 123
@@ -1,5 +1,5 @@
1
1
  ---
2
- user: nil
3
- password: nil
4
- site: nil
2
+ user:
3
+ password:
4
+ site:
5
5
  locale: en
@@ -8,6 +8,7 @@ en:
8
8
  list: 'Lists issues of user. By default it is you'
9
9
  show: 'More info about issue'
10
10
  update: 'Change some issue params, add time entry, comment'
11
+ create: 'Create issue'
11
12
  options:
12
13
  show:
13
14
  limit: 'Amount of comments (last journals).'
@@ -32,6 +33,10 @@ en:
32
33
  issue:
33
34
  update:
34
35
  type_comment_here: 'Type your comment here, save file and close'
36
+ create:
37
+ enter_subject: 'Enter subject: '
38
+ write_description: 'Write issue description here.'
39
+ assign_to: 'ASSIGN TO:'
35
40
 
36
41
  thank_you: 'Thank you!'
37
42
  error_try_again: 'Error! Try again.'
@@ -41,4 +46,7 @@ en:
41
46
  error: 'error'
42
47
  wrong_format: 'Wrong format'
43
48
  creation_error: 'Creation error'
44
- enter_object_number: 'Enter object number: '
49
+ select_item_from_list: 'Select item from list: '
50
+ trackers: 'trackers'
51
+ projects: 'projects'
52
+
@@ -3,17 +3,33 @@ There're no issues assigned to you
3
3
  % end
4
4
  %
5
5
  % #
6
- % # It's ok, it won't print anything
6
+ % # It's ok, it won't print anything if there's no issues
7
7
  % #
8
- % max_id_len = issues.map { |i| i.id.size }.max
9
- % subject_limit = 60
10
- %
8
+
11
9
  % issues.group_by_project.each do |project, project_issues|
10
+ % max_id_len = project_issues.map { |i| i.id.size }.max
11
+ % max_id_len = ['(id)'.size, max_id_len].max
12
+ % head_id = '(id)'.center(max_id_len).yellow
13
+ %
14
+ % max_priority_len = project_issues.map { |i| i.priority.name.size }.max
15
+ % max_priority_len = ['(priority)'.size, max_priority_len].max
16
+ % head_priority = '(priority)'.center(max_priority_len).yellow
17
+ %
18
+ % subject_limit = 70
19
+ % max_subject_len = project_issues.map { |i| i.subject.size }.max
20
+ % max_subject_len = [max_subject_len, subject_limit].min
21
+ % head_subject = '(subject)'.center(max_subject_len).yellow
22
+ %
23
+ % max_status_len = project_issues.map { |i| i.status.name.size }.max
24
+ % max_status_len = [max_status_len, '(status)'.size].max
25
+ % head_status = '(status)'.center(max_status_len).yellow
26
+ %
27
+ <%= "[ #{project.name} ]".center(max_id_len + 3 + max_priority_len + 3 + max_status_len + 3 + max_subject_len).red + "\n" %>
28
+ <%= head_id %> | <%= head_priority %> | <%= head_status %> | <%= head_subject %>
29
+
30
+ % project_issues.each do |i|
31
+ <%= i.id.ljust(max_id_len) %> <%= i.priority.name.center(max_priority_len) %> <%= i.status.name.center(max_status_len) %> <%= i.subject.cut(max_subject_len) + "\n" %>
32
+ % end
12
33
 
13
- <%= "[ #{project.name} ]".center(max_id_len + 3 + subject_limit + 3 + 8).red + "\n" %>
14
- <%= '(id)'.center(max_id_len).yellow %> | <%= '(subject)'.center(subject_limit).yellow %> | <%= "(status)\n".yellow %>
15
- <% project_issues.each do |i| %>
16
- <%= i.id.ljust(max_id_len) %> <%= i.subject.cut(subject_limit).ljust(subject_limit) %> <%= i.status.name %><%= "\n" %>
17
- <% end %>
18
34
 
19
35
  % end
@@ -12,13 +12,19 @@ module RedmineCLI
12
12
  RedmineRest::Models.configure_models user: user,
13
13
  password: password,
14
14
  site: site
15
+ rescue
16
+ puts '!!!'
17
+ puts 'Looks like your config file is corrupted or it was just created.'
18
+ puts 'Please, use `redmine conf init`'
19
+ puts '!!!'
20
+ puts
15
21
  end
16
22
 
17
23
  def self.create_config
18
24
  defaults = { 'just_created' => true,
19
- 'user' => 'login',
20
- 'password' => 'password',
21
- 'site' => 'URL to Redmine' }
25
+ 'user' => nil,
26
+ 'password' => nil,
27
+ 'site' => nil }
22
28
  File.open(@path_to_config, 'w') { |f| f.write defaults.to_yaml }
23
29
  end
24
30
 
@@ -11,6 +11,19 @@ module RedmineCLI
11
11
  module Input
12
12
  include Helpers::Output
13
13
 
14
+ def ask_for_user(message, params = {})
15
+ params[:limited_to] = proc do |input|
16
+ begin
17
+ @ask_for_user_cache = RedmineRest::Models::User.find(input) # save record
18
+ rescue
19
+ nil
20
+ end
21
+ end
22
+
23
+ ask(message, params)
24
+ @ask_for_user_cache
25
+ end
26
+
14
27
  def ask_from_text_editor(welcome_message = '')
15
28
  file = Tempfile.open('redmine_cli') do |f|
16
29
  f.write welcome_message
@@ -38,7 +51,7 @@ module RedmineCLI
38
51
 
39
52
  print_object_list(object_list)
40
53
  puts
41
- input = ask m(:enter_object_number),
54
+ input = ask m(:select_item_from_list),
42
55
  default: '1',
43
56
  limited_to: ->(str) { (1..i).cover? str.to_i }
44
57
 
@@ -70,7 +83,10 @@ module RedmineCLI
70
83
  #
71
84
  def ask_url(text, params = {})
72
85
  params[:limited_to] = /\S*/
73
- ask(text, params)
86
+ url = ask(text, params).strip
87
+ url = "http://#{url}" unless url =~ %r{\Ahttps?://}
88
+
89
+ url
74
90
  end
75
91
 
76
92
  #
@@ -0,0 +1,53 @@
1
+ require 'unicode'
2
+
3
+ module RedmineCLI
4
+ module Helpers
5
+ module Issue
6
+ #
7
+ # some methods for `issue create`
8
+ #
9
+ module Create
10
+ include RedmineRest
11
+ include Helpers::Input
12
+
13
+ private
14
+
15
+ def set_attributes
16
+ set_project
17
+ set_tracker
18
+ set_subject
19
+ set_description
20
+ set_assignee
21
+ end
22
+
23
+ def set_project
24
+ puts Unicode.upcase(m(:projects)) + ':'
25
+ @project = ask_for_object(Models::Project.all)
26
+ @issue.project_id = @project.id
27
+ end
28
+
29
+ def set_tracker
30
+ puts Unicode.upcase(m(:trackers)) + ':'
31
+ @issue.tracker_id = ask_for_object(@project.trackers).id
32
+ end
33
+
34
+ def set_subject
35
+ @issue.subject = ask m('commands.issue.create.enter_subject'),
36
+ required: true
37
+ end
38
+
39
+ def set_description
40
+ message = m('commands.issue.create.write_description')
41
+ input = ask_from_text_editor(message)
42
+ @issue.description = input if input.present? && input != message
43
+ end
44
+
45
+ def set_assignee
46
+ puts m('commands.issue.create.assign_to')
47
+ @assignee = ask_for_object(@project.members)
48
+ @issue.assigned_to_id = @assignee.id
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -59,6 +59,17 @@ module RedmineCLI
59
59
  rescue ActiveResource::ResourceNotFound
60
60
  puts m(:not_found)
61
61
  end
62
+
63
+ desc 'create', m('desc.issue.create')
64
+ def create
65
+ self.class.include Helpers::Issue::Create
66
+
67
+ @issue = Models::Issue.new
68
+ set_attributes
69
+
70
+ @issue.save
71
+ puts 'Done.'
72
+ end
62
73
  end
63
74
  end
64
75
  end
@@ -1,3 +1,3 @@
1
1
  module RedmineCLI
2
- VERSION = '0.3.1'.freeze
2
+ VERSION = '0.4.0'.freeze
3
3
  end
data/redmine_cli.gemspec CHANGED
@@ -27,7 +27,8 @@ Gem::Specification.new do |spec|
27
27
 
28
28
  spec.add_dependency 'thor', '~> 0.19'
29
29
  spec.add_dependency 'i18n', '~> 0.7'
30
- spec.add_dependency 'redmine_rest', '0.4.0'
30
+ spec.add_dependency 'redmine_rest', '0.6.1'
31
31
  spec.add_dependency 'non_config', '0.1.2'
32
32
  spec.add_dependency 'colorize', '~> 0.7'
33
+ spec.add_dependency 'unicode', '~> 0.4'
33
34
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmine_cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitriy Non
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-03-19 00:00:00.000000000 Z
11
+ date: 2016-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.4.0
103
+ version: 0.6.1
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 0.4.0
110
+ version: 0.6.1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: non_config
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0.7'
139
+ - !ruby/object:Gem::Dependency
140
+ name: unicode
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '0.4'
146
+ type: :runtime
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '0.4'
139
153
  description:
140
154
  email:
141
155
  - non.dmitriy@gmail.com
@@ -164,6 +178,7 @@ files:
164
178
  - lib/redmine_cli/config.rb
165
179
  - lib/redmine_cli/exceptions.rb
166
180
  - lib/redmine_cli/helpers/input.rb
181
+ - lib/redmine_cli/helpers/issue/create.rb
167
182
  - lib/redmine_cli/helpers/issue/update.rb
168
183
  - lib/redmine_cli/helpers/monkey_patching.rb
169
184
  - lib/redmine_cli/helpers/output.rb