climine 0.0.2 → 0.0.3

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