climine 0.0.2 → 0.0.3

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: 6bdd50672bc4cd84f1b904572a5facfc03a93455
4
- data.tar.gz: d37bf3596619b492d59b98f1596c6e446ed6b809
3
+ metadata.gz: 73c2ae7d410ea2c4f64734edc0c725702318fdc7
4
+ data.tar.gz: 6e7f7504d53ad53eab3d742f007c61271bb3b3cb
5
5
  SHA512:
6
- metadata.gz: 599b15edb99b14d5d5a54ce60b9a9f4d94e8237ace5a36fd41a02e090c4575c67cabf428443d851d7a2f65acd646c88a22f34c69eec2d6c8622705edb79f1915
7
- data.tar.gz: 18b84b5473a3e78f3ba68890469c244dfa5f004c4f3f2592527b1245df12e33d12c4a6a804c0d1cce74f2dd2824457c96a2794f01122b1aa0fa5dd35805b7cfb
6
+ metadata.gz: 2544c127566dd18abffcca99ee972591a57a595f6dcc3d36964bf1be3c48e95f821e9e7d1307541b81ac0bbe598f0d046e1763a2e59effbd027daa65d4e418ef
7
+ data.tar.gz: 6b8351506800c2f4eed1cd50690811fba4fa617e81e8cb0abf3bea56c4c395d2965420c7c11b5aa99f11b2d2717fb2489fcd1a3d1c64b56e0c561110af9266e9
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- climine (0.0.2)
4
+ climine (0.0.3)
5
5
  hashie (~> 2.0.5)
6
6
  hirb (~> 0.7)
7
7
  hirb-unicode (~> 0.0.5)
data/README.md CHANGED
@@ -23,12 +23,13 @@ Or install it yourself as:
23
23
  create `config.yml`
24
24
 
25
25
  ```
26
- $ climine init -k xxxx -u http://xxxx.xxx.xx/
26
+ $ climine init -k xxxx -u http://xxxx.xxx.xx/ -e `which emacs`
27
27
  ```
28
28
 
29
29
  ```config.yml
30
30
  url: http://xxxx.xxx.xx/
31
31
  apikey: xxxx
32
+ editor: /path/to/emacs
32
33
  ```
33
34
 
34
35
  ### Help
@@ -53,17 +54,19 @@ $ climine help [COMMAND]
53
54
 
54
55
  ### Issues
55
56
 
56
- #### get issues
57
+ #### get issue list
57
58
 
58
59
  ```
59
60
  Usage:
60
- climine issue get [TICKET_NO]
61
+ climine list [TICKET_NO]
61
62
 
62
63
  Options:
63
64
  -s, [--sort=SORT_KEYS] # default asc. ex) 'id,category:desc,updated_on'
64
65
  -l, [--limit=LIMIT] # limit of search result (default: 25)
65
66
  -o, [--offset=OFFSET] # page of seach result(0 origin) (default: 0)
66
67
  -p, [--project-id=PROJECT_ID] # id of RedmineProject ( Please search by `climine project` ) (default: all project)
68
+ [--status-id=STATUS_ID] # id of issue status. ( Please search by `climine status` ) (default: all status)
69
+ # Default: *
67
70
  -u, [--assigned-to-id=USER_ID] # ID of the user being assigned ( Please search by `climine user` )
68
71
  -c, [--created-on=CREATED_DATE] # ex) >=2013-10-01, >2013-10-01, <2013-10-01, 2013-10-01
69
72
  -r, [--updated-on=LAST_UPDATED_DATE] # ex) >=2013-10-01, >2013-10-01, <2013-10-01, 2013-10-01
@@ -73,10 +76,22 @@ Options:
73
76
  get Redmine Issues. see) http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues
74
77
  ```
75
78
 
79
+ #### get issue
80
+
81
+ ```
82
+ Usage:
83
+ climine get [TICKET_NO]
84
+
85
+ Options:
86
+ -t, [--template=TEMPLATE_PATH] # rendering by given template
87
+
88
+ get Redmine Issues. see) http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues
89
+ ```
90
+
76
91
  You can be rendered using the your own ERB template file.
77
92
 
78
93
  ```
79
- $ climine issue get -t [template_path]
94
+ $ climine issue (get|issue) -t [template_path]
80
95
  ```
81
96
 
82
97
  #### create issue
@@ -100,38 +115,61 @@ create Issue
100
115
 
101
116
  ```
102
117
  Usage:
103
- climine user [ID]
118
+ climine user list
104
119
 
105
120
  Options:
106
121
  -n, [--name=NAME] # filter users on their login, firstname, lastname and mail
107
122
  ```
108
123
 
124
+ ```
125
+ Usage:
126
+ climine user get [ID]
127
+
128
+ get Redmine User
129
+ ```
130
+
109
131
  ### Projects
110
132
 
111
133
  ```
112
134
  Usage:
113
- climine project [PROJECT_ID]
135
+ climine project list
136
+
137
+ get Redmine Projects.
138
+ ```
139
+
140
+ ```
141
+ Usage:
142
+ climine project get [PROJECT_ID]
143
+
144
+ get Redmine Project.
114
145
  ```
115
146
 
116
147
  ### Ticket Statauses
117
148
 
118
149
  ```
119
150
  Usage:
120
- climine status
151
+ climine status list
152
+
153
+ Options:
154
+ -t, [--table] # default asc. ex) 'id,category:desc,updated_on'
155
+
156
+ get Redmine IssueStatuses.
121
157
  ```
122
158
 
123
159
  ### Ticket Trackers
124
160
 
125
161
  ```
126
162
  Usage:
127
- climine tracker
163
+ climine tracker list
164
+
165
+ get Redmine Trackers.
128
166
  ```
129
167
 
130
168
  ### Project Members
131
169
 
132
170
  ```
133
171
  Usage:
134
- climine get -p, --project-id=PROJECT_ID
172
+ climine member list -p, --project-id=PROJECT_ID
135
173
 
136
174
  Options:
137
175
  -p, --project-id=PROJECT_ID # see) http://www.redmine.org/projects/redmine/wiki/Rest_Memberships#GET
data/config.yml CHANGED
@@ -1,2 +1,3 @@
1
- url: http://www21124ue.sakura.ne.jp/redmine
1
+ url: http://www21124ue.sakura.ne.jp/redmine/
2
2
  apikey: 7cf7f32a9b0a0e1667157a5f3de05813be13ed54
3
+ editor: /usr/bin/emacs
@@ -2,8 +2,11 @@ module Climine::Command
2
2
  class Base < Thor
3
3
 
4
4
  no_commands {
5
+ def config
6
+ @config ||= Climine::Config.new
7
+ end
5
8
  def redmine
6
- @redmine ||= Climine::Redmine.new(Climine::Config.new)
9
+ @redmine ||= Climine::Redmine.new(config)
7
10
  end
8
11
  def render template_name, response
9
12
  unless response.error
@@ -6,6 +6,9 @@ module Climine::Command
6
6
  TEMPLATE = <<-ERB
7
7
  url: <%= options[:url] %>
8
8
  apikey: <%= options[:key] %>
9
+ <% if options[:editor] -%>
10
+ editor: <%= options[:editor] %>
11
+ <% end -%>
9
12
  ERB
10
13
 
11
14
  default_command :init
@@ -13,22 +16,11 @@ apikey: <%= options[:key] %>
13
16
  desc "init ", "initialize config.yml"
14
17
  option :url, required: true, type: :string, aliases: '-u', banner: "RedmineURL", desc: "Your Redmine's URL"
15
18
  option :key, required: true, type: :string, aliases: '-k', banner: "API-Access-Key", desc: "Your API Access Key"
19
+ option :editor, required: false, type: :string, aliases: '-e', banner: "Editor command or path", desc: "Your favorite editor ex) emacs or vim or /usr/bin/emacs etc..."
16
20
  def init
17
- open(CONFIG, 'w'){|file| file.write(ERB.new(TEMPLATE).result(binding)) }
21
+ open(CONFIG, 'w'){|file| file.write(ERB.new(TEMPLATE, nil, "-").result(binding)) }
18
22
  puts "create [ #{File.expand_path(CONFIG)} ]"
19
23
  end
20
- # def self.included base
21
- # base.class_eval do
22
24
 
23
- # desc "init ", "initialize config.yml"
24
- # option :url, required: true, type: :string, aliases: '-u', banner: "RedmineURL", desc: "Your Redmine's URL"
25
- # option :key, required: true, type: :string, aliases: '-k', banner: "API-Access-Key", desc: "Your API Access Key"
26
- # def init
27
- # open(CONFIG, 'w'){|file| file.write(ERB.new(TEMPLATE).result(binding)) }
28
- # puts "create [ #{File.expand_path(CONFIG)} ]"
29
- # end
30
-
31
- # end
32
- # end
33
25
  end
34
26
  end
@@ -1,9 +1,10 @@
1
1
  require "date"
2
+ require 'tempfile'
2
3
 
3
4
  module Climine::Command
4
5
  class Issue < Base
5
6
 
6
- desc "get [TICKET_NO]", "get Redmine Issues. see) http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues"
7
+ desc "list [TICKET_NO]", "get Redmine Issues. see) http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues"
7
8
  option :sort, type: :string, aliases: '-s', banner: "SORT_KEYS", desc: "default asc. ex) 'id,category:desc,updated_on'"
8
9
  option :limit, type: :numeric, aliases: '-l', banner: "LIMIT", desc: "limit of search result (default: 25)", deafult: 25
9
10
  option :offset, type: :numeric, aliases: '-o', banner: "OFFSET", desc: "page of seach result(0 origin) (default: 0)"
@@ -14,12 +15,15 @@ module Climine::Command
14
15
  option :updated_on, type: :string, aliases: '-r', banner: "LAST_UPDATED_DATE", desc: "ex) >=2013-10-01, >2013-10-01, <2013-10-01, 2013-10-01"
15
16
  option :before_week, type: :numeric, aliases: '-w', banner: "WEEKS", desc: "search tickets that has been updated in the last X weeks"
16
17
  option :template, type: :string, aliases: '-t', banner: "TEMPLATE_PATH", desc: "rendering by given template"
18
+ def list
19
+ render (options["template"] || :issues), redmine.issues(before_weeek_to_update_date(options.to_hash))
20
+ end
21
+
22
+ desc "get [TICKET_NO]", "get Redmine Issues. see) http://www.redmine.org/projects/redmine/wiki/Rest_Issues#Listing-issues"
23
+ option :template, type: :string, aliases: '-t', banner: "TEMPLATE_PATH", desc: "rendering by given template"
17
24
  def get(id=nil)
18
- if id
19
- render (options["template"] || :issue), redmine.issue(id)
20
- else
21
- render (options["template"] || :issues), redmine.issues(before_weeek_to_update_date(options.to_hash))
22
- end
25
+ say("required ticket number!", :red) unless id
26
+ render (options["template"] || :issue), redmine.issue(id)
23
27
  end
24
28
 
25
29
  desc "new", "create Issue"
@@ -58,18 +62,13 @@ module Climine::Command
58
62
  user_id = ask("Who do you assigned?")
59
63
  end
60
64
 
61
- # subject
62
- subject = ask_not_empty("subject > ")
63
- # description
64
- description = ask_not_empty("description > ")
65
-
66
65
  res = redmine.create_issue(
67
66
  project_id: project_id,
68
67
  tracker_id: tracker_id,
69
68
  status_id: status_id,
70
69
  assigned_to_id: user_id,
71
- subject: subject,
72
- description: description
70
+ subject: ask_not_empty("subject > ").force_encoding('utf-8'),
71
+ description: ask_description
73
72
  )
74
73
 
75
74
  unless res.error
@@ -97,6 +96,19 @@ module Climine::Command
97
96
  end
98
97
  answer
99
98
  end
99
+
100
+ def ask_description
101
+ editor = config.editor
102
+ if editor.nil? or editor.empty?
103
+ description = ask_not_empty("description > ")
104
+ else
105
+ tmp = Tempfile.new('description_tmp')
106
+ system "#{editor} #{tmp.path}"
107
+ description = open(tmp.path){|f| f.read.force_encoding('utf-8') }
108
+ tmp.unlink
109
+ end
110
+ description
111
+ end
100
112
  }
101
113
  end
102
114
  end
@@ -1,10 +1,8 @@
1
1
  module Climine::Command
2
2
  class Member < Base
3
- default_command :get
4
-
5
- desc "get", "get Project Members"
3
+ desc "list", "get Project Members"
6
4
  option :project_id, type: :numeric, aliases: '-p', banner: "PROJECT_ID", required: true, desc: "see) http://www.redmine.org/projects/redmine/wiki/Rest_Memberships#GET"
7
- def get
5
+ def list
8
6
  render :members, redmine.members(options["project_id"])
9
7
  end
10
8
  end
@@ -1,14 +1,15 @@
1
1
  module Climine::Command
2
2
  class Project < Base
3
- default_command :project
4
3
 
5
- desc "project [PROJECT_ID]", "get Redmine Projects."
6
- def project(id=nil)
7
- if id
8
- render :project, redmine.project(id)
9
- else
10
- render :projects, redmine.projects(options.to_hash)
11
- end
4
+ desc "get [PROJECT_ID]", "get Redmine Project."
5
+ def get id
6
+ say("required project id!", :red) unless id
7
+ render :project, redmine.project(id)
8
+ end
9
+
10
+ desc "list", "get Redmine Projects."
11
+ def list
12
+ render :projects, redmine.projects(options.to_hash)
12
13
  end
13
14
  end
14
15
  end
@@ -2,11 +2,10 @@ require "hashie"
2
2
 
3
3
  module Climine::Command
4
4
  class Status < Base
5
- default_command :status
6
5
 
7
- desc "status", "get Redmine IssueStatuses."
6
+ desc "list", "get Redmine IssueStatuses."
8
7
  option :table, type: :boolean, aliases: '-t', desc: "default asc. ex) 'id,category:desc,updated_on'", default: false
9
- def status
8
+ def list
10
9
  unless options[:table]
11
10
  render :statuses, redmine.statuses
12
11
  else
@@ -1,9 +1,7 @@
1
1
  module Climine::Command
2
2
  class Tracker < Base
3
- default_command :tracker
4
-
5
- desc "tracker", "get Redmine Trackers."
6
- def tracker
3
+ desc "list", "get Redmine Trackers."
4
+ def list
7
5
  render :trackers, redmine.trackers
8
6
  end
9
7
  end
@@ -1,15 +1,15 @@
1
1
  module Climine::Command
2
2
  class User < Base
3
- default_command :user
3
+ desc "get [ID]", "get Redmine User"
4
+ def get(id=nil)
5
+ say("required user id!", :red) unless id
6
+ render :user, redmine.user(id)
7
+ end
4
8
 
5
- desc "user [ID]", "get Redmine Users"
9
+ desc "list", "get Redmine Users"
6
10
  option :name, type: :string, aliases: '-n', banner: "NAME", desc: "filter users on their login, firstname, lastname and mail"
7
- def user(id=nil)
8
- if id
9
- render :user, redmine.user(id)
10
- else
11
- render :users, redmine.users(options.to_hash)
12
- end
11
+ def list
12
+ render :users, redmine.users(options.to_hash)
13
13
  end
14
14
  end
15
15
  end
@@ -1,3 +1,3 @@
1
1
  module Climine
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -165,13 +165,13 @@ class Thor
165
165
  # shell<Thor::Shell>
166
166
  # command_name<String>
167
167
  #
168
- def command_help(shell, command_name)
168
+ def command_help(shell, command_name, subcommand = false)
169
169
  meth = normalize_command_name(command_name)
170
170
  command = all_commands[meth]
171
171
  handle_no_command_error(meth) unless command
172
172
 
173
173
  shell.say "Usage:"
174
- shell.say " #{banner(command)}"
174
+ shell.say " #{banner(command, command_name, subcommand)}"
175
175
  shell.say
176
176
  class_options_help(shell, nil => command.options.map { |_, o| o })
177
177
  if command.long_description
@@ -468,6 +468,6 @@ class Thor
468
468
 
469
469
  desc "help [COMMAND]", "Describe available commands or one specific command"
470
470
  def help(command = nil, subcommand = false)
471
- command ? self.class.command_help(shell, command) : self.class.help(shell, subcommand)
471
+ command ? self.class.command_help(shell, command, subcommand) : self.class.help(shell, subcommand)
472
472
  end
473
473
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: climine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - yagince
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-15 00:00:00.000000000 Z
11
+ date: 2014-01-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -162,7 +162,6 @@ files:
162
162
  - LICENSE.txt
163
163
  - Rakefile
164
164
  - README.md
165
- - templates/#issue.erb#
166
165
  - templates/issue.erb
167
166
  - vendor/bundle/ruby/2.0.0/bin/climine
168
167
  - vendor/bundle/ruby/2.0.0/bin/httpclient
@@ -1,4 +0,0 @@
1
- <% res.issues.each{|issue| -%>
2
- * <%= issue.tracker.name %> [<%= issue.status.name %>] #<%= issue.id %> <%= issue.subject %>
3
- <% } -%>
4
-