assembla_cli 0.0.1

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.
File without changes
@@ -0,0 +1,7 @@
1
+ init.rb
2
+ *.gem
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
6
+ .rvmrc
7
+
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "http://rubygems.org"
2
+ # Specify your gem's dependencies in assembla_cli.gemspec
3
+ gemspec
@@ -0,0 +1,38 @@
1
+ ## use cases
2
+
3
+ > assembla
4
+
5
+ > tickets //returns a table with my tickets
6
+
7
+ #number priority status title
8
+ 123 high new just another bug
9
+ 321 low test an easy fix
10
+
11
+ > select(123) //sets ticket 123 as the current ticket
12
+ > open(123) //opens the ticket 123 in the browser for analysis
13
+
14
+ > status //lists the possible statusses for the ticket
15
+ # label
16
+ 0 invalid
17
+ 1 new
18
+ 2 test
19
+ 3 fixed
20
+
21
+ > status 2 //sets the current ticket to test
22
+ > ticket //shows the current ticket summary
23
+ > comment "some comment or reason i already fixed this before ...."
24
+
25
+ > exit //well it exits :P
26
+
27
+ ## Install
28
+
29
+ bundle
30
+ gem build assembla_cli.gemspec
31
+ gem i assembla_cli-0.0.1.gem
32
+
33
+ # Use
34
+
35
+ $ assembla
36
+ $ assempla Space?> space-name
37
+ $ assembla> milestones
38
+ $ assembla> exit
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "assembla_cli/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "assembla_cli"
7
+ s.version = AssemblaCli::VERSION
8
+ s.authors = ["azendal", "ktlacaelel", "edgarjs"]
9
+ s.email = ["azendal@gmail.com", "ktlacaelel@gmail.com", "edgar.js@gmail.com"]
10
+ s.homepage = "https://github.com/azendal/assembla_cli/"
11
+ s.summary = %q{A CLI to use Assembla for easy usage}
12
+ s.description = %q{A CLI to use Assembla for easy usage}
13
+
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+
19
+ # specify any dependencies here; for example:
20
+ s.add_development_dependency "ruby-debug"
21
+ s.add_runtime_dependency "hirb"
22
+ s.add_runtime_dependency "hashie"
23
+ s.add_runtime_dependency "httparty"
24
+ s.add_runtime_dependency "isna"
25
+ end
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # $:.unshift File.expand_path('../..', __FILE__)
4
+ require 'assembla_cli'
5
+
6
+ # TODO: Prompt for credentials and create this file if not exists
7
+ # TODO: Move authentication to another class or module
8
+ username, password = File.read("#{ENV['HOME']}/.assembla_cli").split
9
+ Assembla.login(username, password)
10
+ # Assembla.space('space name')
11
+ # Assembla.my_report('personal report id')
12
+
13
+ extend Hirb::Console
14
+
15
+ # Statuses dont change a log, so keep them cached to make ticket
16
+ # listing faster.
17
+ def status_translations
18
+ @status_translations ||= Assembla.statuses['ticket_statuses']
19
+ end
20
+
21
+ def milestone_translation
22
+ @milestone_translation ||= Assembla.milestones['milestones']
23
+ end
24
+
25
+ def clean_cache
26
+ @milestone_translation
27
+ @status_translations
28
+ end
29
+
30
+ def priority_string number
31
+ ['', 'Highest (1)', 'High (2)', 'Normal (3)', 'Low (4)', 'Lowest (5)'][number]
32
+ end
33
+
34
+ # Translates a status-id into its status-name equivalent.
35
+ def status_string number
36
+ status_translations.each do |hash|
37
+ if hash['list_order'] == number
38
+ return hash['name']
39
+ end
40
+ end
41
+ 'Unknown'
42
+ end
43
+
44
+ # Translates a milestone-id into its milestone-name equivalent.
45
+ def milestone_string number
46
+ milestone_translation.each do |hash|
47
+ if hash['id'] == number
48
+ return hash['title']
49
+ end
50
+ end
51
+ 'Unknown'
52
+ end
53
+
54
+ def tickets
55
+ # Prepare table data.
56
+ headers = ['number', 'priority', 'milestone_id', 'status_name', 'summary']
57
+ hash = Assembla.my_tickets['tickets']
58
+
59
+ # Replace status numbers for status strings
60
+ # TODO: we might need to send data so overriding is not cool.
61
+ # So maybe we should manage translations differently.
62
+ hash.each { |row| row['priority'] = priority_string(row['priority']) }
63
+ hash.each { |row| row['milestone_id'] = milestone_string(row['milestone_id']) }
64
+
65
+ # Print data
66
+ table = Hirb::Helpers::AutoTable.render(hash, :fields => headers)
67
+ c = :green
68
+ table.each_line do |line|
69
+ c = c == :green ? :yellow : :green
70
+ puts line.chomp.to_ansi.send(c)
71
+ end
72
+ # TODO: Think on how this can be handled better.
73
+ # clean_cache
74
+ nil
75
+ end
76
+
77
+ def milestones
78
+ table Assembla.milestones['milestones'], :fields => ['id', 'title']
79
+ end
80
+
81
+ def open (ticket_id)
82
+ `open https://www.assembla.com/spaces/breezi/tickets/#{ticket_id}`
83
+ nil
84
+ end
85
+
86
+ # TODO: Fix this
87
+ print "assembla Space?> "
88
+ cmd = gets.chomp
89
+ Assembla.space(cmd)
90
+ while cmd != 'exit' do
91
+ print "assembla> "
92
+ cmd = gets.chomp
93
+ send(cmd)
94
+ end
95
+
@@ -0,0 +1,63 @@
1
+ require 'rubygems'
2
+ require 'hirb'
3
+ require 'hashie'
4
+ require 'httparty'
5
+ require 'isna'
6
+ require "assembla_cli/version"
7
+
8
+ module Assembla
9
+ include HTTParty
10
+ format :xml
11
+ base_uri 'assembla.com'
12
+
13
+ def self.xml_headers
14
+ {:headers => {'Accept' => 'application/xml'}}
15
+ end
16
+
17
+ def self.login (login_name, password)
18
+ @login_name = login_name
19
+ @password = password
20
+
21
+ basic_auth(login_name, password)
22
+ end
23
+
24
+ def self.spaces
25
+ self.get('/spaces/my_spaces', xml_headers)
26
+ end
27
+
28
+ def self.space (space_name)
29
+ @current_space = self.get("/spaces/#{space_name}", xml_headers)['space']
30
+ end
31
+
32
+ def self.my_report (report_id)
33
+ @my_report_id = report_id
34
+ end
35
+
36
+ def self.statuses
37
+ self.get("/spaces/#{@current_space['id']}/tickets/custom_statuses", xml_headers)
38
+ end
39
+
40
+ def self.users
41
+ self.get("/spaces/#{@current_space['id']}/users", xml_headers)
42
+ end
43
+
44
+ def self.milestones
45
+ @statusses ||= get("/spaces/#{@current_space['id']}/milestones/", xml_headers)
46
+ end
47
+
48
+ def self.tickets
49
+ self.get("/spaces/#{@current_space['id']}/tickets/report/9", xml_headers)
50
+ end
51
+
52
+ def self.my_tickets
53
+ get("/spaces/#{@current_space['id']}/tickets/custom_report/#{@my_report_id}", xml_headers)
54
+ end
55
+
56
+ def self.custom_reports
57
+ get("/spaces/#{@current_space['id']}/custom_reports", xml_headers)
58
+ end
59
+
60
+ def self.custom_report (report_id)
61
+ get("/spaces/#{@current_space['id']}/tickets/custom_report/#{report_id}", xml_headers)
62
+ end
63
+ end
@@ -0,0 +1,3 @@
1
+ module AssemblaCli
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,147 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: assembla_cli
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - azendal
14
+ - ktlacaelel
15
+ - edgarjs
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2012-01-06 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: ruby-debug
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ type: :development
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: hirb
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 3
45
+ segments:
46
+ - 0
47
+ version: "0"
48
+ type: :runtime
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: hashie
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
60
+ - 0
61
+ version: "0"
62
+ type: :runtime
63
+ version_requirements: *id003
64
+ - !ruby/object:Gem::Dependency
65
+ name: httparty
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ type: :runtime
77
+ version_requirements: *id004
78
+ - !ruby/object:Gem::Dependency
79
+ name: isna
80
+ prerelease: false
81
+ requirement: &id005 !ruby/object:Gem::Requirement
82
+ none: false
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ hash: 3
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ type: :runtime
91
+ version_requirements: *id005
92
+ description: A CLI to use Assembla for easy usage
93
+ email:
94
+ - azendal@gmail.com
95
+ - ktlacaelel@gmail.com
96
+ - edgar.js@gmail.com
97
+ executables:
98
+ - assembla
99
+ extensions: []
100
+
101
+ extra_rdoc_files: []
102
+
103
+ files:
104
+ - .assemblarc
105
+ - .gitignore
106
+ - Gemfile
107
+ - README.md
108
+ - Rakefile
109
+ - assembla_cli.gemspec
110
+ - bin/assembla
111
+ - lib/assembla_cli.rb
112
+ - lib/assembla_cli/version.rb
113
+ homepage: https://github.com/azendal/assembla_cli/
114
+ licenses: []
115
+
116
+ post_install_message:
117
+ rdoc_options: []
118
+
119
+ require_paths:
120
+ - lib
121
+ required_ruby_version: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ hash: 3
127
+ segments:
128
+ - 0
129
+ version: "0"
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ none: false
132
+ requirements:
133
+ - - ">="
134
+ - !ruby/object:Gem::Version
135
+ hash: 3
136
+ segments:
137
+ - 0
138
+ version: "0"
139
+ requirements: []
140
+
141
+ rubyforge_project:
142
+ rubygems_version: 1.8.10
143
+ signing_key:
144
+ specification_version: 3
145
+ summary: A CLI to use Assembla for easy usage
146
+ test_files: []
147
+