fresnel 0.5.4 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- Fresnel
1
+ Fresnel
2
2
  --------------
3
3
 
4
4
  A console manager to LighthouseApp.com using the official lighthouse api
@@ -20,7 +20,13 @@ Current features :
20
20
  How to install
21
21
  ==============
22
22
 
23
- Use 'rake gem' to build the gem or 'rake install' to build and install the gem.
23
+ Fresnel is available from gemcutter.org, so a 'gem install fresnel' should just work.
24
+
25
+ When you want to help develop Fresnel, look at the following rake tasks:
26
+
27
+ * rake gem
28
+ * rake install
29
+ * rake reinstall
24
30
 
25
31
  Cache
26
32
  =====
@@ -69,36 +75,36 @@ Problems, Comments and Suggestions
69
75
  Please post them on https://govannon.lighthouseapp.com/projects/42260-fresnel/
70
76
  or mail it to : ticket+govannon.42260-7vwej7yr@lighthouseapp.com
71
77
 
72
-
73
-
74
78
  Examples
75
79
  ========
76
80
 
77
81
  fresnel help
78
82
 
79
- +-----------------------------------------------------------------------------+
80
- | Fresnel - A lighthouseapp console manager - help |
81
- +-----------------------------------------------------------------------------+
82
- | |
83
- | Fresnel is a Console App that helps manage Lighthouse (LH). |
84
- | You can find LH at http://lighthouseapp.com |
85
- | |
86
- | fresnel help This screen |
87
- | fresnel bins Show all ticket bins |
88
- | fresnel bin <id> Show ticket in bin <id> |
89
- | fresnel projects Show all projects |
90
- | fresnel <id> comment Show comments for ticket |
91
- | fresnel <id> Show ticket details |
92
- | fresnel <id> assign Assign ticket to user |
93
- | fresnel <id> claim Assign ticket to self |
94
- | fresnel <id> online Open browser for ticket |
95
- | fresnel <id> [open|closed|hold|resolved|invalid] Change ticket state |
96
- | fresnel tickets Show all tickets |
97
- | fresnel create Create a ticket |
98
- | |
99
- +-----------------------------------------------------------------------------+
100
- | Created by Narnach & Smeevil - licence : mit |
101
- +-----------------------------------------------------------------------------+
83
+ +---------------------------------------------------------------------------------------------------+
84
+ | Fresnel - A lighthouseapp console manager - help |
85
+ +---------------------------------------------------------------------------------------------------+
86
+ | |
87
+ | Fresnel is a Console App that helps manage Lighthouse (LH). |
88
+ | You can find LH at http://lighthouseapp.com |
89
+ | |
90
+ | fresnel help This screen |
91
+ | fresnel bins Show all ticket bins |
92
+ | fresnel bin <id> Show ticket in bin <id> |
93
+ | fresnel projects Show all projects |
94
+ | fresnel <id> comment Show comments for ticket |
95
+ | fresnel <id> Show ticket details |
96
+ | fresnel <id> assign Assign ticket to user |
97
+ | fresnel <id> claim Assign ticket to self |
98
+ | fresnel <id> links Extract all links from the ticket and its |
99
+ | comment and open one in your browser. |
100
+ | fresnel <id> online Open browser for ticket |
101
+ | fresnel <id> [open|closed|hold|resolved|invalid] Change ticket state |
102
+ | fresnel tickets Show all tickets |
103
+ | fresnel create Create a ticket |
104
+ | |
105
+ +---------------------------------------------------------------------------------------------------+
106
+ | Created by Narnach & Smeevil - licence : mit |
107
+ +---------------------------------------------------------------------------------------------------+
102
108
 
103
109
  fresnel projects
104
110
 
@@ -149,3 +155,18 @@ fresnel 6
149
155
  Assignment changed 02-12-09 22:10 => Smeevil by Smeevil
150
156
 
151
157
  Current state : open
158
+
159
+ fresnel 10 links
160
+
161
+ +---+------------------------------------------------------------------------------------------------------+
162
+ | # | link |
163
+ +---+------------------------------------------------------------------------------------------------------+
164
+ | 0 | http://upnextinsports.com/wp-content/uploads/2009/11/sports-pictures-baseball-tractor-beam.jpg |
165
+ | 1 | http://upnextinsports.com/wp-content/uploads/2009/10/sports-pictures-HHH-orton-miracle-superglue.jpg |
166
+ | 2 | http://www2.printshop.co.uk/Weebl/Shop/Plushies/Magical_Trevor_Plushie/Product.html |
167
+ | 3 | http://bit.ly/4wZKb |
168
+ | 4 | http://media.photobucket.com/image/fail/penguinking3/fail.jpg |
169
+ | 5 | http://www.realfreewebsites.com/blog/img/fail.jpg |
170
+ | 6 | www.illwillpress.com |
171
+ | 7 | www.govannon.nl/portfolio |
172
+ +---+------------------------------------------------------------------------------------------------------+
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
  s.name = 'fresnel'
4
4
  s.summary = "Fresnel is a console manager to LighthouseApp.com using the official lighthouse api."
5
5
  s.description = s.summary
6
- s.version = '0.5.4'
7
- s.date = '2009-12-04'
6
+ s.version = '0.5.5'
7
+ s.date = '2009-12-07'
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Gerard de Brieder", "Wes Oldenbeuving"]
10
10
  s.email = "smeevil@gmail.com"
@@ -13,7 +13,7 @@ Gem::Specification.new do |s|
13
13
  # Files
14
14
  root_files = %w[README.markdown Rakefile fresnel.gemspec]
15
15
  bin_files = %w[fresnel]
16
- fresnel_files = %w[cache cli date_parser frame lighthouse setup_wizard]
16
+ fresnel_files = %w[cache cli date_parser frame lighthouse setup_wizard string input_detector]
17
17
  lib_files = %w[fresnel] + fresnel_files.map {|f| "fresnel/#{f}"}
18
18
  s.bindir = "bin"
19
19
  s.require_path = "lib"
@@ -7,20 +7,11 @@ require "fresnel/date_parser"
7
7
  require "fresnel/cache"
8
8
  require "fresnel/setup_wizard"
9
9
  require "fresnel/frame"
10
+ require "fresnel/string"
11
+ require "fresnel/input_detector"
10
12
 
11
13
  HighLine.track_eof = false
12
14
 
13
- class String
14
- def wrap(col = 80)
15
- self.gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/,
16
- "\\1\\3\n")
17
- end
18
-
19
- def truncate(size)
20
- "#{self.strip[0..size]}#{"..." if self.size>size}"
21
- end
22
- end
23
-
24
15
  class Fresnel
25
16
  attr_reader :global_config_file, :project_config_file, :app_description
26
17
  attr_accessor :lighthouse, :current_project_id, :cache, :cache_timeout, :current_user_id
@@ -82,19 +73,6 @@ class Fresnel
82
73
  lighthouse.token
83
74
  end
84
75
 
85
- def ask_for_action(actions_available="")
86
- if actions_available.present?
87
- puts actions_available.wrap
88
- regexp="^(#{actions_available.scan(/\[(.*?)\]/).flatten.join("|")}|[0-9]+)$"
89
- else
90
- regexp="^(q|[0-9]+)$"
91
- end
92
- ask("Action : ") do |q|
93
- q.default="q"
94
- q.validate=/#{regexp}/
95
- end
96
- end
97
-
98
76
  def create_project
99
77
  puts "create project is not implemented yet"
100
78
  end
@@ -123,11 +101,13 @@ class Fresnel
123
101
  else
124
102
  puts(project_table)
125
103
  unless options[:setup]
126
- action=ask_for_action("[q]uit, [c]reate or project #")
104
+ action=InputDetector.new("[q]uit, [c]reate or project #",(0..(projects_data.size-1)).to_a).answer
105
+ puts "action is #{action.inspect}"
127
106
  case action
128
107
  when "c" then create_project
129
108
  when /\d+/ then tickets(:project_id=>projects_data[action.to_i].id)
130
109
  else
110
+ puts "dont know what to do with #{action.inspect} class #{action.class}"
131
111
  exit(0)
132
112
  end
133
113
  end
@@ -172,7 +152,7 @@ class Fresnel
172
152
  end
173
153
  end
174
154
  puts tickets_table
175
- action=ask_for_action("[q]uit, [b]ins, [p]rojects, #{options[:all] ? "[u]nresolved" : "[a]ll"}, [c]reate or ticket #")
155
+ action=InputDetector.new("[q]uit, [b]ins, [p]rojects, #{options[:all] ? "[u]nresolved" : "[a]ll"}, [c]reate or ticket #",tickets.map(&:number)).answer
176
156
  case action
177
157
  when "b" then get_bins
178
158
  when "c" then create
@@ -185,7 +165,7 @@ class Fresnel
185
165
  end
186
166
  else
187
167
  puts Frame.new(:header=>"Notice",:body=>"no #{"unresolved " unless options[:all]}tickets #{"in bin #{options[:bin_name]}"}...")
188
- action=ask_for_action("[q]uit, [b]ins, [p]rojects, [u]nresolved, [a]ll, [c]reate")
168
+ action=InputDetector.new("[q]uit, [b]ins, [p]rojects, [u]nresolved, [a]ll, [c]reate").answer
189
169
  case action
190
170
  when "b" then get_bins
191
171
  when "c" then create
@@ -214,12 +194,21 @@ class Fresnel
214
194
  end
215
195
  end
216
196
  puts bins_table
217
- bin_id=ask_for_action
197
+ bin_id=InputDetector.new("[q]uit or Bin #: ",(0..(bins.size-1)).to_a).answer
218
198
  if bin_id=="q"
219
199
  exit(0)
220
200
  else
221
201
  puts "Fetching tickets in bin : #{bins[bin_id.to_i].name}"
222
- tickets(:tickets=>bins[bin_id.to_i].tickets)
202
+ data=bins[bin_id.to_i].tickets
203
+
204
+ def data.age=(seconds)
205
+ @age_in_seconds=seconds
206
+ end
207
+ def data.age
208
+ @age_in_seconds
209
+ end
210
+ data.age=0
211
+ tickets(:tickets=>data)
223
212
  def tickets.age=(seconds)
224
213
  @age_in_seconds=seconds
225
214
  end
@@ -289,7 +278,7 @@ class Fresnel
289
278
  end
290
279
  end
291
280
  puts "Current state : #{ticket.versions.last.state}"
292
- action=ask_for_action("[q]uit, [t]ickets, [b]ins, [c]omment, [a]ssign, [r]esolve, [s]elf, [o]pen, [h]old, [w]eb, [l]inks")
281
+ action=InputDetector.new("[q]uit, [t]ickets, [b]ins, [c]omment, [a]ssign, [r]esolve, [s]elf, [o]pen, [h]old, [w]eb, [l]inks").answer
293
282
  case action
294
283
  when "t" then tickets
295
284
  when "b" then get_bins
@@ -308,11 +297,7 @@ class Fresnel
308
297
 
309
298
  def links(number)
310
299
  ticket = get_ticket(number)
311
- links = ticket.versions.map{ |version|
312
- version.body.to_s.scan(/(http|https)(:\/\/)([a-zA-Z0-9.\/_-]+)| (www\.[a-zA-Z0-9.\/_-]+)/).map{ |url|
313
- url.join
314
- }
315
- }.flatten.uniq
300
+ links = ticket.versions.map{ |version| version.body.to_s.scrape_urls }.flatten.uniq
316
301
  if links.size == 0
317
302
  puts "No links found"
318
303
  sleep 1
@@ -0,0 +1,50 @@
1
+ class InputDetector
2
+ attr_accessor :question, :possible_answers, :collection, :answer
3
+
4
+ def initialize(question,*answers)
5
+ @question=question
6
+ @possible_answers=Array.new
7
+ @possible_answers+=question.scan(/\[(.*?)\]/).flatten
8
+ @possible_answers+=answers.flatten
9
+ @collection=""
10
+ @answer=""
11
+ print question
12
+ detect_answer
13
+ end
14
+
15
+ def detect_answer
16
+ loop do
17
+ begin
18
+ system("stty raw -echo")
19
+ str = STDIN.getc
20
+ ensure
21
+ system("stty -raw echo")
22
+ end
23
+ print str.chr
24
+ if str == 13
25
+ possible_options = possible_answers.select{|option| option == collection}
26
+ else
27
+ self.collection+=str.chr
28
+ possible_options = possible_answers.select{|option| option.to_s =~ /^#{collection}/}
29
+ end
30
+ if possible_options.size == 0
31
+ if str==3
32
+ puts
33
+ puts "exiting due to ^c"
34
+ exit
35
+ end
36
+ puts
37
+ puts "Invalid choice: #{collection}, choises are #{possible_answers.inspect}"
38
+ print question
39
+ self.collection=""
40
+ elsif possible_options.size == 1
41
+ collection = possible_options.first
42
+ self.answer=collection.to_s
43
+ puts
44
+ break
45
+ else
46
+ next
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,14 @@
1
+ class String
2
+ def wrap(col = 80)
3
+ self.gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/,
4
+ "\\1\\3\n")
5
+ end
6
+
7
+ def truncate(size)
8
+ "#{self.strip[0..size]}#{"..." if self.size>size}"
9
+ end
10
+
11
+ def scrape_urls
12
+ scan(/(http|https)(:\/\/)([a-zA-Z0-9.\/_-]+)| (www\.[a-zA-Z0-9.\/_-]+)/).map{ |url| url.join}
13
+ end
14
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fresnel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerard de Brieder
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-12-04 00:00:00 +01:00
13
+ date: 2009-12-07 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -63,6 +63,8 @@ files:
63
63
  - lib/fresnel/frame.rb
64
64
  - lib/fresnel/lighthouse.rb
65
65
  - lib/fresnel/setup_wizard.rb
66
+ - lib/fresnel/string.rb
67
+ - lib/fresnel/input_detector.rb
66
68
  has_rdoc: true
67
69
  homepage: http://www.github.com/smeevil/fresnel
68
70
  licenses: []