redmine_cli 0.3.1 → 0.4.0

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 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