redmine-cli 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ pkg/*
2
2
  *.gem
3
3
  .bundle
4
4
  .rvmrc
5
+ /tmp/aruba/*
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- redmine-cli (0.0.1)
4
+ redmine-cli (0.1.0)
5
5
  activeresource (~> 3.0.0)
6
6
  thor
7
7
 
@@ -16,15 +16,41 @@ GEM
16
16
  activemodel (= 3.0.1)
17
17
  activesupport (= 3.0.1)
18
18
  activesupport (3.0.1)
19
+ aruba (0.2.3)
20
+ background_process
21
+ cucumber (~> 0.9.0)
22
+ background_process (1.2)
19
23
  builder (2.1.2)
20
24
  columnize (0.3.1)
25
+ cucumber (0.9.3)
26
+ builder (~> 2.1.2)
27
+ diff-lcs (~> 1.1.2)
28
+ gherkin (~> 2.2.9)
29
+ json (~> 1.4.6)
30
+ term-ansicolor (~> 1.0.5)
31
+ diff-lcs (1.1.2)
32
+ gherkin (2.2.9)
33
+ json (~> 1.4.6)
34
+ term-ansicolor (~> 1.0.5)
21
35
  i18n (0.4.2)
36
+ json (1.4.6)
22
37
  linecache (0.43)
38
+ rspec (2.0.1)
39
+ rspec-core (~> 2.0.1)
40
+ rspec-expectations (~> 2.0.1)
41
+ rspec-mocks (~> 2.0.1)
42
+ rspec-core (2.0.1)
43
+ rspec-expectations (2.0.1)
44
+ diff-lcs (>= 1.1.2)
45
+ rspec-mocks (2.0.1)
46
+ rspec-core (~> 2.0.1)
47
+ rspec-expectations (~> 2.0.1)
23
48
  ruby-debug (0.10.3)
24
49
  columnize (>= 0.1)
25
50
  ruby-debug-base (~> 0.10.3.0)
26
51
  ruby-debug-base (0.10.3)
27
52
  linecache (>= 0.3)
53
+ term-ansicolor (1.0.5)
28
54
  thor (0.14.3)
29
55
 
30
56
  PLATFORMS
@@ -32,6 +58,9 @@ PLATFORMS
32
58
 
33
59
  DEPENDENCIES
34
60
  activeresource (~> 3.0.0)
61
+ aruba
62
+ cucumber
35
63
  redmine-cli!
64
+ rspec
36
65
  ruby-debug
37
66
  thor
@@ -36,7 +36,7 @@
36
36
 
37
37
  - Updating multiple tickets
38
38
 
39
- redmine update 2,3,4 --assigned_to johndoe
39
+ redmine update 2 3 4 --assigned_to johndoe
40
40
 
41
41
  - Updating all tickets for a list
42
42
 
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'pathname'
4
+ lib = Pathname.new(__FILE__).dirname.join('..', 'lib').expand_path
5
+ $LOAD_PATH.unshift lib.to_s
6
+
7
+ require 'redmine-cli/git'
8
+
9
+ Redmine::Cli::Git.start
@@ -4,6 +4,6 @@ require 'pathname'
4
4
  lib = Pathname.new(__FILE__).dirname.join('..', 'lib').expand_path
5
5
  $LOAD_PATH.unshift lib.to_s
6
6
 
7
- require 'redmine-cli'
7
+ require 'redmine-cli/cli'
8
8
 
9
9
  Redmine::Cli::CLI.start
@@ -0,0 +1,28 @@
1
+ Feature: Install configuration file
2
+ In order to use the command line interface
3
+ Users need to be able to setup their config file
4
+
5
+ @announce
6
+ Scenario: Generate config file
7
+ When I run "redmine install example.com user --test" interactively
8
+ And I type "pass"
9
+
10
+ Then the output should match /create.*\.redmine/
11
+ And the following files should exist:
12
+ | .redmine |
13
+ And the file ".redmine" should contain:
14
+ """
15
+ url: "http://example.com"
16
+ username: "user"
17
+ password: "pass"
18
+ default_project_id: 1
19
+ user_mappings:
20
+ "admin": 1
21
+ status_mappings:
22
+ "new": 1
23
+ "in-progress": 2
24
+ "resolved": 3
25
+ "feedback": 4
26
+ "closed": 5
27
+ "rejected": 6
28
+ """
@@ -0,0 +1,3 @@
1
+ Then /^the file "([^"]*)" should contain:$/ do |file, content|
2
+ check_file_content(file, content, true)
3
+ end
@@ -0,0 +1 @@
1
+ require 'aruba'
@@ -1,5 +1,7 @@
1
1
  require 'thor'
2
2
  require 'active_resource'
3
3
  require 'redmine-cli/issue'
4
- require 'redmine-cli/cli'
5
4
  require 'redmine-cli/generators/install'
5
+ require 'redmine-cli/cli'
6
+ require 'redmine-cli/git'
7
+
@@ -1,3 +1,7 @@
1
+ require 'thor'
2
+ require 'redmine-cli/issue'
3
+ require 'redmine-cli/generators/install'
4
+
1
5
  module Redmine
2
6
  module Cli
3
7
  class CLI < Thor
@@ -23,7 +27,7 @@ module Redmine
23
27
  print_table(issues)
24
28
  end
25
29
  else
26
- say collection.collect(&:id).join(",")
30
+ say collection.collect(&:id).join(" ")
27
31
  end
28
32
  end
29
33
 
@@ -60,17 +64,15 @@ module Redmine
60
64
  say e.message, :red
61
65
  end
62
66
 
63
- method_option :tickets, :aliases => "-l", :desc => "list of tickets"
67
+ method_option :tickets, :aliases => "-l", :desc => "list of tickets", :type => :array
64
68
  method_option :status, :aliases => "-s", :desc => "id or name of status for ticket"
65
69
  method_option :subject, :aliases => "-t", :desc => "subject for ticket (title)"
66
70
  method_option :description, :aliases => "-d", :desc => "description for ticket"
67
71
  method_option :assigned_to, :aliases => "-a", :desc => "id or user name of person the ticket is assigned to"
68
72
  desc "update [TICKETS]", "Update tickets"
69
- def update(tickets = "")
73
+ def update(*tickets)
70
74
  tickets = options.tickets if tickets.blank? && options.tickets.present?
71
75
 
72
- tickets = tickets.split(",")
73
-
74
76
  if tickets.empty?
75
77
  say "No tickets to update", :red
76
78
  exit 1
@@ -79,10 +81,21 @@ module Redmine
79
81
  tickets.collect { |ticket| Thread.new { update_ticket(ticket, options) } }.each(&:join)
80
82
  end
81
83
 
82
- desc "install [URL][USERNAME][PASSWORD]", "Generates a recipe scaffold"
83
- def install(url = "localhost:3000", username = "admin", password = "admin")
84
+ desc "install [URL][USERNAME]", "Generates a default configuration file"
85
+ method_option :test, :type => :boolean
86
+ def install(url = "localhost:3000", username = "")
84
87
  url = "http://#{url}" unless url =~ /\Ahttp/
85
- Redmine::Cli::Generators::Install.start([url, username, password])
88
+
89
+ if username.blank?
90
+ username = ask("Username?")
91
+ end
92
+
93
+ password = ask_password("Password?")
94
+
95
+ arguments = [url, username, password]
96
+ arguments.concat(["--test"]) if options.test
97
+
98
+ Redmine::Cli::Generators::Install.start(arguments)
86
99
  end
87
100
 
88
101
  no_tasks do
@@ -141,6 +154,12 @@ module Redmine
141
154
  say "Could not find ticket: #{ticket}", :red
142
155
  end
143
156
 
157
+ def ask_password(prompt)
158
+ system "stty -echo"
159
+ password = ask(prompt)
160
+ system "stty echo"
161
+ password
162
+ end
144
163
  end
145
164
  end
146
165
  end
@@ -1,6 +1,7 @@
1
1
  url: "<%= url %>"
2
2
  username: "<%= username %>"
3
3
  password: "<%= password %>"
4
+ default_project_id: 1
4
5
  user_mappings:
5
6
  "admin": 1
6
7
  status_mappings:
@@ -9,4 +10,4 @@ status_mappings:
9
10
  "resolved": 3
10
11
  "feedback": 4
11
12
  "closed": 5
12
- "rejected": 6
13
+ "rejected": 6
@@ -9,11 +9,12 @@ module Redmine::Cli::Generators
9
9
  File.dirname(__FILE__)
10
10
  end
11
11
 
12
- argument :url, :type => :string
13
- argument :username, :type => :string
14
- argument :password, :type => :string
12
+ argument :url, :type => :string
13
+ argument :username, :type => :string
14
+ argument :password, :type => :string
15
+ class_option :test, :type => :boolean
15
16
  def copy_configuration_file
16
- self.destination_root = File.expand_path("~")
17
+ self.destination_root = File.expand_path("~") unless options.test
17
18
  template(".redmine")
18
19
  end
19
20
  end
@@ -0,0 +1,19 @@
1
+ require 'thor'
2
+ require 'redmine-cli/issue'
3
+
4
+ module Redmine
5
+ module Cli
6
+ class Git < Thor
7
+
8
+ desc "new TICKET", "Generate branch from ticket's information"
9
+ def new(ticket)
10
+ issue = Issue.find(ticket)
11
+ subject = issue.subject.gsub(/[^a-z0-9\-]+/i, "-").gsub(/-{1,}/,'-').gsub(/-$|^-/, '').downcase
12
+ `git checkout -b #{ticket}-#{subject}`
13
+ rescue ActiveResource::ResourceNotFound
14
+ say "No ticket with number: #{ticket}", :red
15
+ end
16
+
17
+ end
18
+ end
19
+ end
@@ -1,11 +1,17 @@
1
+ require 'thor'
2
+ require 'active_resource'
3
+
1
4
  module Redmine
2
5
  module Cli
3
6
  class Issue < ActiveResource::Base
4
7
  def self.config
5
- @config ||= Thor::CoreExt::HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("~/.redmine")))
6
- rescue Errno::ENOENT
7
- puts "You need to create the file .redmine in your home with your username, password and url"
8
- exit(1)
8
+ @config ||=
9
+ begin
10
+ Thor::CoreExt::HashWithIndifferentAccess.new(YAML.load_file(File.expand_path("~/.redmine")))
11
+ rescue Errno::ENOENT
12
+ puts "You need to create the file .redmine in your home with your username, password and url"
13
+ Thor::CoreExt::HashWithIndifferentAccess.new
14
+ end
9
15
  end
10
16
 
11
17
  self.site = config.url
@@ -1,5 +1,5 @@
1
1
  module Redmine
2
2
  module Cli
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
5
  end
@@ -22,4 +22,7 @@ Gem::Specification.new do |s|
22
22
  s.add_dependency "activeresource", "~>3.0.0"
23
23
  s.add_dependency "thor"
24
24
  s.add_development_dependency "ruby-debug"
25
+ s.add_development_dependency "rspec"
26
+ s.add_development_dependency "cucumber"
27
+ s.add_development_dependency "aruba"
25
28
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redmine-cli
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jorge Dias
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-30 00:00:00 +02:00
18
+ date: 2010-11-01 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -62,10 +62,53 @@ dependencies:
62
62
  version: "0"
63
63
  type: :development
64
64
  version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: rspec
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ type: :development
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: cucumber
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ type: :development
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: aruba
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :development
106
+ version_requirements: *id006
65
107
  description: A simple command line interface for redmine for easy scripting
66
108
  email:
67
109
  - jorge@mrdias.com
68
110
  executables:
111
+ - git-redmine
69
112
  - redmine
70
113
  extensions: []
71
114
 
@@ -77,11 +120,16 @@ files:
77
120
  - Gemfile.lock
78
121
  - README.markdown
79
122
  - Rakefile
123
+ - bin/git-redmine
80
124
  - bin/redmine
125
+ - features/install.feature
126
+ - features/step_definitions/install_steps.rb
127
+ - features/support/setup.rb
81
128
  - lib/redmine-cli.rb
82
129
  - lib/redmine-cli/cli.rb
83
130
  - lib/redmine-cli/generators/.redmine
84
131
  - lib/redmine-cli/generators/install.rb
132
+ - lib/redmine-cli/git.rb
85
133
  - lib/redmine-cli/issue.rb
86
134
  - lib/redmine-cli/version.rb
87
135
  - redmine-cli.gemspec