redpomo 0.0.5 → 0.0.6

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.
@@ -0,0 +1,75 @@
1
+ require 'stringio'
2
+
3
+ module Spec
4
+ module CLIHelpers
5
+
6
+ attr_reader :out, :err, :exitstatus
7
+
8
+ def capture(*streams)
9
+ streams.map! { |stream| stream.to_s }
10
+ begin
11
+ result = StringIO.new
12
+ streams.each { |stream| eval "$#{stream} = result" }
13
+ yield
14
+ ensure
15
+ streams.each { |stream| eval("$#{stream} = #{stream.upcase}") }
16
+ end
17
+ result.string
18
+ end
19
+
20
+ def cli_redpomo(cmd)
21
+ @out = capture(:stdout) do
22
+ cmd = cmd.kind_of?(Array) ? cmd : cmd.split
23
+ cmd += "--config #{config_path}".split
24
+ Redpomo::CLI.start(cmd)
25
+ end
26
+ end
27
+
28
+ def redpomo(cmd, options = {})
29
+ expect_err = options.delete(:expect_err)
30
+ exitstatus = options.delete(:exitstatus)
31
+ options["no-color"] = true unless options.key?("no-color")
32
+
33
+ redpomo_bin = File.expand_path('../../../bin/redpomo', __FILE__)
34
+
35
+ env = (options.delete(:env) || {}).map{|k,v| "#{k}='#{v}' "}.join
36
+ args = options.map do |k,v|
37
+ v == true ? " --#{k}" : " --#{k} #{v}" if v
38
+ end.join
39
+
40
+ cmd = "#{env}#{Gem.ruby} -I#{lib} #{redpomo_bin} #{cmd}#{args}"
41
+
42
+ if exitstatus
43
+ sys_status(cmd)
44
+ else
45
+ sys_exec(cmd, expect_err){|i| yield i if block_given? }
46
+ end
47
+ end
48
+
49
+ def sys_exec(cmd, expect_err = false)
50
+ Open3.popen3(cmd.to_s) do |stdin, stdout, stderr|
51
+ @in_p, @out_p, @err_p = stdin, stdout, stderr
52
+
53
+ yield @in_p if block_given?
54
+ @in_p.close
55
+
56
+ @out = @out_p.read_available_bytes.strip
57
+ @err = @err_p.read_available_bytes.strip
58
+ end
59
+
60
+ puts @err if !expect_err && @err.present?
61
+ @out
62
+ end
63
+
64
+ def sys_status(cmd)
65
+ @err = nil
66
+ @out = %x{#{cmd}}.strip
67
+ @exitstatus = $?.exitstatus
68
+ end
69
+
70
+ def lib
71
+ File.expand_path('../../../lib', __FILE__)
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,17 @@
1
+ module Spec
2
+ module Fixtures
3
+
4
+ def tmp(path)
5
+ File.expand_path("../../tmp/#{path}", __FILE__)
6
+ end
7
+
8
+ def fixture(path)
9
+ File.expand_path("../../fixtures/#{path}", __FILE__)
10
+ end
11
+
12
+ def read_fixture(path)
13
+ File.read fixture(path)
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,20 @@
1
+ class IO
2
+ def read_available_bytes(chunk_size = 16384, select_timeout = 0.02)
3
+ buffer = []
4
+
5
+ return "" if closed? || eof?
6
+ # IO.select cannot be used here due to the fact that it
7
+ # just does not work on windows
8
+ while true
9
+ begin
10
+ IO.select([self], nil, nil, select_timeout)
11
+ break if eof? # stop raising :-(
12
+ buffer << self.readpartial(chunk_size)
13
+ rescue(EOFError)
14
+ break
15
+ end
16
+ end
17
+
18
+ return buffer.join
19
+ end
20
+ end
data/spec/tmp/REDME.md ADDED
File without changes
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redpomo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-10 00:00:00.000000000 Z
12
+ date: 2012-05-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
16
- requirement: &70300407282060 !ruby/object:Gem::Requirement
16
+ requirement: &70342270308260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70300407282060
24
+ version_requirements: *70342270308260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &70300407281640 !ruby/object:Gem::Requirement
27
+ requirement: &70342270307840 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70300407281640
35
+ version_requirements: *70342270307840
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: todo-txt
38
- requirement: &70300407281220 !ruby/object:Gem::Requirement
38
+ requirement: &70342270307420 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70300407281220
46
+ version_requirements: *70342270307420
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rest-client
49
- requirement: &70300407280800 !ruby/object:Gem::Requirement
49
+ requirement: &70342270307000 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70300407280800
57
+ version_requirements: *70342270307000
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: launchy
60
- requirement: &70300407280380 !ruby/object:Gem::Requirement
60
+ requirement: &70342270306580 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70300407280380
68
+ version_requirements: *70342270306580
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: applescript
71
- requirement: &70300407279960 !ruby/object:Gem::Requirement
71
+ requirement: &70342270306160 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70300407279960
79
+ version_requirements: *70342270306160
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: terminal-table
82
- requirement: &70300407279540 !ruby/object:Gem::Requirement
82
+ requirement: &70342270305740 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '0'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70300407279540
90
+ version_requirements: *70342270305740
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: rspec
93
- requirement: &70300407279120 !ruby/object:Gem::Requirement
93
+ requirement: &70342270305320 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ! '>='
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: '0'
99
99
  type: :development
100
100
  prerelease: false
101
- version_requirements: *70300407279120
101
+ version_requirements: *70342270305320
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: vcr
104
- requirement: &70300407278700 !ruby/object:Gem::Requirement
104
+ requirement: &70342270304900 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ! '>='
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: '0'
110
110
  type: :development
111
111
  prerelease: false
112
- version_requirements: *70300407278700
112
+ version_requirements: *70342270304900
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: webmock
115
- requirement: &70300407278280 !ruby/object:Gem::Requirement
115
+ requirement: &70342270304480 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - ! '>='
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: '0'
121
121
  type: :development
122
122
  prerelease: false
123
- version_requirements: *70300407278280
123
+ version_requirements: *70342270304480
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: mocha
126
- requirement: &70300407277860 !ruby/object:Gem::Requirement
126
+ requirement: &70342270320440 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -131,10 +131,10 @@ dependencies:
131
131
  version: '0'
132
132
  type: :development
133
133
  prerelease: false
134
- version_requirements: *70300407277860
134
+ version_requirements: *70342270320440
135
135
  - !ruby/object:Gem::Dependency
136
136
  name: simplecov
137
- requirement: &70300407277440 !ruby/object:Gem::Requirement
137
+ requirement: &70342270320020 !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
140
  - - ! '>='
@@ -142,10 +142,10 @@ dependencies:
142
142
  version: '0'
143
143
  type: :development
144
144
  prerelease: false
145
- version_requirements: *70300407277440
145
+ version_requirements: *70342270320020
146
146
  - !ruby/object:Gem::Dependency
147
147
  name: rake
148
- requirement: &70300407277020 !ruby/object:Gem::Requirement
148
+ requirement: &70342270319600 !ruby/object:Gem::Requirement
149
149
  none: false
150
150
  requirements:
151
151
  - - ! '>='
@@ -153,7 +153,7 @@ dependencies:
153
153
  version: '0'
154
154
  type: :development
155
155
  prerelease: false
156
- version_requirements: *70300407277020
156
+ version_requirements: *70342270319600
157
157
  description: A nice little gem that integrates Redmine, Todo.txt and Pomodoro.app
158
158
  email:
159
159
  - stefano.verna@welaika.com
@@ -173,7 +173,6 @@ files:
173
173
  - lib/redpomo.rb
174
174
  - lib/redpomo/cli.rb
175
175
  - lib/redpomo/config.rb
176
- - lib/redpomo/config_generator.rb
177
176
  - lib/redpomo/entries_printer.rb
178
177
  - lib/redpomo/entry.rb
179
178
  - lib/redpomo/file_cache.rb
@@ -181,30 +180,40 @@ files:
181
180
  - lib/redpomo/issue.rb
182
181
  - lib/redpomo/null_cache.rb
183
182
  - lib/redpomo/numeric_ext.rb
184
- - lib/redpomo/puller.rb
185
- - lib/redpomo/pusher.rb
186
183
  - lib/redpomo/task.rb
187
184
  - lib/redpomo/task_list.rb
188
185
  - lib/redpomo/templates/config.yml
186
+ - lib/redpomo/templates/issue_stub.textile
189
187
  - lib/redpomo/tracker.rb
188
+ - lib/redpomo/ui.rb
190
189
  - lib/redpomo/version.rb
191
190
  - redpomo.gemspec
192
191
  - spec/file_cache_spec.rb
192
+ - spec/fixtures/add_results.txt
193
+ - spec/fixtures/cassettes/cli_add.yml
193
194
  - spec/fixtures/cassettes/cli_close.yml
194
195
  - spec/fixtures/cassettes/cli_pull.yml
195
196
  - spec/fixtures/cassettes/cli_push.yml
196
197
  - spec/fixtures/cassettes/close_issue.yml
198
+ - spec/fixtures/cassettes/create_issue.yml
197
199
  - spec/fixtures/cassettes/issues.yml
200
+ - spec/fixtures/cassettes/push_entry.yml
198
201
  - spec/fixtures/close_results.txt
202
+ - spec/fixtures/config.yml
199
203
  - spec/fixtures/printer_output.txt
200
204
  - spec/fixtures/pull_results.txt
205
+ - spec/fixtures/tasks.txt
201
206
  - spec/fixtures/timelog.csv
207
+ - spec/integration/init_spec.rb
202
208
  - spec/lib/redpomo/cli_spec.rb
203
209
  - spec/lib/redpomo/fuzzy_converter_spec.rb
204
210
  - spec/lib/redpomo/task_spec.rb
205
211
  - spec/lib/redpomo/tracker_spec.rb
206
212
  - spec/spec_helper.rb
207
- - spec/support/capture.rb
213
+ - spec/support/cli_helpers.rb
214
+ - spec/support/fixtures.rb
215
+ - spec/support/ruby_ext.rb
216
+ - spec/tmp/REDME.md
208
217
  homepage: ''
209
218
  licenses: []
210
219
  post_install_message:
@@ -231,19 +240,29 @@ specification_version: 3
231
240
  summary: A nice little gem that integrates Redmine, Todo.txt and Pomodoro.app
232
241
  test_files:
233
242
  - spec/file_cache_spec.rb
243
+ - spec/fixtures/add_results.txt
244
+ - spec/fixtures/cassettes/cli_add.yml
234
245
  - spec/fixtures/cassettes/cli_close.yml
235
246
  - spec/fixtures/cassettes/cli_pull.yml
236
247
  - spec/fixtures/cassettes/cli_push.yml
237
248
  - spec/fixtures/cassettes/close_issue.yml
249
+ - spec/fixtures/cassettes/create_issue.yml
238
250
  - spec/fixtures/cassettes/issues.yml
251
+ - spec/fixtures/cassettes/push_entry.yml
239
252
  - spec/fixtures/close_results.txt
253
+ - spec/fixtures/config.yml
240
254
  - spec/fixtures/printer_output.txt
241
255
  - spec/fixtures/pull_results.txt
256
+ - spec/fixtures/tasks.txt
242
257
  - spec/fixtures/timelog.csv
258
+ - spec/integration/init_spec.rb
243
259
  - spec/lib/redpomo/cli_spec.rb
244
260
  - spec/lib/redpomo/fuzzy_converter_spec.rb
245
261
  - spec/lib/redpomo/task_spec.rb
246
262
  - spec/lib/redpomo/tracker_spec.rb
247
263
  - spec/spec_helper.rb
248
- - spec/support/capture.rb
264
+ - spec/support/cli_helpers.rb
265
+ - spec/support/fixtures.rb
266
+ - spec/support/ruby_ext.rb
267
+ - spec/tmp/REDME.md
249
268
  has_rdoc:
@@ -1,17 +0,0 @@
1
- require 'thor/group'
2
-
3
- module Redpomo
4
- class ConfigGenerator < Thor::Group
5
- include Thor::Actions
6
- argument :path, :type => :string
7
-
8
- def copy_config
9
- template("config.yml", File.expand_path(path))
10
- end
11
-
12
- def self.source_root
13
- File.dirname(__FILE__) + "/templates"
14
- end
15
-
16
- end
17
- end
@@ -1,35 +0,0 @@
1
- require 'redpomo/config'
2
-
3
- module Redpomo
4
- class Puller
5
-
6
- def initialize(options = {})
7
- @options = options
8
- end
9
-
10
- def execute
11
- list = Todo::List.new(
12
- config.issues.map(&:to_task) +
13
- unrelated_tasks
14
- )
15
- list.write_to(config.todo_path)
16
- end
17
-
18
- private
19
-
20
- def config
21
- @config ||= Redpomo::Config.new(@options[:config])
22
- end
23
-
24
- def trackers_contexts
25
- @trackers_context ||= config.trackers.map(&:context)
26
- end
27
-
28
- def unrelated_tasks
29
- config.tasks.select do |task|
30
- ! task.include_contexts?(trackers_contexts)
31
- end
32
- end
33
-
34
- end
35
- end
@@ -1,59 +0,0 @@
1
- require 'terminal-table'
2
-
3
- require 'redpomo/entry'
4
- require 'redpomo/config'
5
-
6
- module Redpomo
7
- class Pusher
8
-
9
- def initialize(log_path, options = {})
10
- @options = options
11
- @log_path = File.expand_path(log_path)
12
- end
13
-
14
- def execute
15
- entries_to_push = @options[:fuzzy] ? fuzzy_entries : entries
16
-
17
- unless @options[:dry_run]
18
- entries_to_push.each do |entry|
19
- tracker = config.tracker_for_task(entry.to_task)
20
- tracker.push_entry(entry)
21
- end
22
- end
23
-
24
- entries_to_push.group_by(&:date).each do |date, entries|
25
- duration = 0
26
- rows = entries.map do |entry|
27
- task = entry.to_task
28
- duration += entry.duration
29
- [ task.contexts.first, task.projects.first, task.issues.first, task.text, entry.duration.seconds_in_words, I18n.l(entry.time, format: "%H:%M"), I18n.l(entry.end_time, :format => "%H:%M") ]
30
- end
31
- puts Terminal::Table.new(
32
- title: "#{ I18n.l(date, format: "%A %x") } - #{ duration.seconds_in_words }",
33
- headings: [ "Context", "Project", "Issue #", "Description", "Duration", "From", "To" ],
34
- rows: rows
35
- )
36
- puts
37
- end
38
-
39
- end
40
-
41
- private
42
-
43
- def config
44
- @config ||= Redpomo::Config.new(@options[:config])
45
- end
46
-
47
- def entries
48
- @entries ||= raw_log.map do |line_data|
49
- Entry.from_csv(line_data)
50
- end.sort_by { |entry| entry.datetime }
51
- end
52
-
53
- def raw_log
54
- CSV.parse File.read(@log_path).split("\n")[4..-1].join("\n")
55
- end
56
-
57
-
58
- end
59
- end
@@ -1,13 +0,0 @@
1
- require 'stringio'
2
-
3
- def capture(*streams)
4
- streams.map! { |stream| stream.to_s }
5
- begin
6
- result = StringIO.new
7
- streams.each { |stream| eval "$#{stream} = result" }
8
- yield
9
- ensure
10
- streams.each { |stream| eval("$#{stream} = #{stream.upcase}") }
11
- end
12
- result.string
13
- end