gyunyu 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +5 -3
- data/VERSION +1 -1
- data/gyunyu.gemspec +3 -1
- data/lib/gyunyu/command/export/app.rb +7 -4
- data/lib/gyunyu/command/export/format/csv.rb +12 -0
- data/lib/gyunyu/command/export/total_estimate.rb +41 -0
- data/spec/app/command/export/total_estimate_spec.rb +59 -0
- data/spec/spec_helper.rb +12 -4
- metadata +4 -2
data/Rakefile
CHANGED
@@ -31,9 +31,11 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
31
31
|
spec.pattern = FileList['spec/**/*_spec.rb']
|
32
32
|
end
|
33
33
|
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
namespace :spec do
|
35
|
+
desc 'Run Rspec & Create Coverage'
|
36
|
+
RSpec::Core::RakeTask.new(:coverage) do
|
37
|
+
ENV['COVERAGE'] = "true"
|
38
|
+
end
|
37
39
|
end
|
38
40
|
|
39
41
|
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/gyunyu.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "gyunyu"
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["wtnabe"]
|
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
|
|
36
36
|
"lib/gyunyu/command/export/format/json.rb",
|
37
37
|
"lib/gyunyu/command/export/format/yaml.rb",
|
38
38
|
"lib/gyunyu/command/export/option.rb",
|
39
|
+
"lib/gyunyu/command/export/total_estimate.rb",
|
39
40
|
"lib/gyunyu/expander.rb",
|
40
41
|
"lib/gyunyu/token.rb",
|
41
42
|
"spec/app/.gitkeep",
|
@@ -43,6 +44,7 @@ Gem::Specification.new do |s|
|
|
43
44
|
"spec/app/command/export/custom_filter_spec.rb",
|
44
45
|
"spec/app/command/export/format/csv_spec.rb",
|
45
46
|
"spec/app/command/export/option_spec.rb",
|
47
|
+
"spec/app/command/export/total_estimate_spec.rb",
|
46
48
|
"spec/app/command_spec.rb",
|
47
49
|
"spec/app/expander_spec.rb",
|
48
50
|
"spec/spec_helper.rb",
|
@@ -5,6 +5,9 @@ module Gyunyu
|
|
5
5
|
module Export
|
6
6
|
class App
|
7
7
|
TIME_FIELDS = %w( created modified due added completed deleted )
|
8
|
+
ESTIMATE_DAY = 'estimate(d)'
|
9
|
+
ESTIMATE_HOUR = 'estimate(h)'
|
10
|
+
ESTIMATE_MIN = 'estimate(m)'
|
8
11
|
|
9
12
|
def initialize
|
10
13
|
@argv ||= ARGV
|
@@ -21,7 +24,7 @@ module Gyunyu
|
|
21
24
|
def fields
|
22
25
|
['list'] + option.fields.map { |f|
|
23
26
|
if f == 'estimate'
|
24
|
-
|
27
|
+
[ESTIMATE_DAY, ESTIMATE_HOUR, ESTIMATE_MIN]
|
25
28
|
else
|
26
29
|
f
|
27
30
|
end
|
@@ -121,9 +124,9 @@ module Gyunyu
|
|
121
124
|
end
|
122
125
|
if f == 'estimate'
|
123
126
|
e = split_estimate( t[f] )
|
124
|
-
record[
|
125
|
-
record[
|
126
|
-
record[
|
127
|
+
record[ESTIMATE_DAY] = e.day
|
128
|
+
record[ESTIMATE_HOUR] = e.hour
|
129
|
+
record[ESTIMATE_MIN] = e.min
|
127
130
|
else
|
128
131
|
record[f] = val
|
129
132
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/../total_estimate'
|
3
|
+
|
2
4
|
if RUBY_VERSION < '1.9'
|
3
5
|
require 'fastercsv'
|
4
6
|
else
|
@@ -16,7 +18,11 @@ module Gyunyu
|
|
16
18
|
@num_notes = nil
|
17
19
|
|
18
20
|
class << self
|
21
|
+
include Export::TotalEstimate
|
22
|
+
|
19
23
|
def export( tasks, fields )
|
24
|
+
sum_estimate( tasks, fields )
|
25
|
+
|
20
26
|
FasterCSV.generate { |csv|
|
21
27
|
tasks, fields = parse( tasks, fields )
|
22
28
|
csv << fields
|
@@ -35,6 +41,12 @@ module Gyunyu
|
|
35
41
|
t[f]
|
36
42
|
}.flatten
|
37
43
|
}
|
44
|
+
|
45
|
+
if @total_estimate
|
46
|
+
csv << fields.map { |f|
|
47
|
+
@total_estimate.has_key?(f) ? @total_estimate[f] : ''
|
48
|
+
}
|
49
|
+
end
|
38
50
|
}
|
39
51
|
end
|
40
52
|
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Gyunyu
|
2
|
+
module Command
|
3
|
+
module Export
|
4
|
+
module TotalEstimate
|
5
|
+
def sum_estimate( tasks, fields )
|
6
|
+
if have_estimate_fields?( fields )
|
7
|
+
sum = {}; estimate_fields.map { |f| sum[f] = 0 }
|
8
|
+
|
9
|
+
tasks.each { |t|
|
10
|
+
fields.grep(/\Aestimate/).each { |f|
|
11
|
+
sum[f] += t[f].to_i
|
12
|
+
}
|
13
|
+
}
|
14
|
+
@total_estimate = moveup_minute( sum )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
# [param] Hash sum
|
20
|
+
# [return] Hash
|
21
|
+
#
|
22
|
+
def moveup_minute( sum )
|
23
|
+
movedup_hour = sum[App::ESTIMATE_MIN] / 60
|
24
|
+
sum[App::ESTIMATE_HOUR] += movedup_hour
|
25
|
+
sum[App::ESTIMATE_MIN] = sum[App::ESTIMATE_MIN] - movedup_hour * 60
|
26
|
+
sum
|
27
|
+
end
|
28
|
+
|
29
|
+
def have_estimate_fields?( fields )
|
30
|
+
estimate_fields & fields == estimate_fields
|
31
|
+
end
|
32
|
+
|
33
|
+
def estimate_fields
|
34
|
+
App.constants.map(&:to_s).grep(/\AESTIMATE/).map { |e|
|
35
|
+
App.const_get(e)
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require File.dirname(__FILE__) + '/../../../spec_helper'
|
3
|
+
|
4
|
+
describe Gyunyu::Command::Export::TotalEstimate do
|
5
|
+
include Gyunyu::Command::Export::TotalEstimate
|
6
|
+
|
7
|
+
let(:tasks) {
|
8
|
+
[
|
9
|
+
{ "list" => "個人",
|
10
|
+
"name" => "gyunyu開発",
|
11
|
+
"estimate(d)" => 0,
|
12
|
+
"estimate(h)" => 2,
|
13
|
+
"estimate(m)" => 45},
|
14
|
+
{ "list" => "家",
|
15
|
+
"name" => "小さな整理",
|
16
|
+
"estimate(d)" => 0,
|
17
|
+
"estimate(h)" => 0,
|
18
|
+
"estimate(m)" => 25},
|
19
|
+
{ "list" => "個人",
|
20
|
+
"name" => "ありがちanalyticsコード改善",
|
21
|
+
"estimate(d)" => 0,
|
22
|
+
"estimate(h)" => 0,
|
23
|
+
"estimate(m)" => 60}
|
24
|
+
]
|
25
|
+
}
|
26
|
+
|
27
|
+
describe 'sum_estimate' do
|
28
|
+
subject {
|
29
|
+
sum_estimate( tasks, %w{list name estimate(d) estimate(h) estimate(m)} )
|
30
|
+
}
|
31
|
+
it {
|
32
|
+
should == {
|
33
|
+
'estimate(d)' => 0,
|
34
|
+
'estimate(h)' => 4,
|
35
|
+
'estimate(m)' => 10
|
36
|
+
}
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
describe 'have_estimate_fields?' do
|
41
|
+
context 'name, due' do
|
42
|
+
subject {
|
43
|
+
have_estimate_fields?( %w( name due ) )
|
44
|
+
}
|
45
|
+
it {
|
46
|
+
should be_false
|
47
|
+
}
|
48
|
+
end
|
49
|
+
context 'name, estimate' do
|
50
|
+
subject {
|
51
|
+
have_estimate_fields?(%w{ name estimate(d) estimate(h) estimate(m) })
|
52
|
+
}
|
53
|
+
it {
|
54
|
+
should be_true
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
data/spec/spec_helper.rb
CHANGED
@@ -1,12 +1,20 @@
|
|
1
1
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
3
|
require 'rspec'
|
4
|
+
|
5
|
+
RSpec.configure do |config|
|
6
|
+
config.mock_with :rr
|
7
|
+
end
|
8
|
+
|
9
|
+
if ENV['COVERAGE']
|
10
|
+
require 'simplecov'
|
11
|
+
SimpleCov.start do
|
12
|
+
add_filter 'spec'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
4
16
|
require 'gyunyu'
|
5
17
|
|
6
18
|
# Requires supporting files with custom matchers and macros, etc,
|
7
19
|
# in ./support/ and its subdirectories.
|
8
20
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
9
|
-
|
10
|
-
RSpec.configure do |config|
|
11
|
-
config.mock_with :rr
|
12
|
-
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gyunyu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -182,6 +182,7 @@ files:
|
|
182
182
|
- lib/gyunyu/command/export/format/json.rb
|
183
183
|
- lib/gyunyu/command/export/format/yaml.rb
|
184
184
|
- lib/gyunyu/command/export/option.rb
|
185
|
+
- lib/gyunyu/command/export/total_estimate.rb
|
185
186
|
- lib/gyunyu/expander.rb
|
186
187
|
- lib/gyunyu/token.rb
|
187
188
|
- spec/app/.gitkeep
|
@@ -189,6 +190,7 @@ files:
|
|
189
190
|
- spec/app/command/export/custom_filter_spec.rb
|
190
191
|
- spec/app/command/export/format/csv_spec.rb
|
191
192
|
- spec/app/command/export/option_spec.rb
|
193
|
+
- spec/app/command/export/total_estimate_spec.rb
|
192
194
|
- spec/app/command_spec.rb
|
193
195
|
- spec/app/expander_spec.rb
|
194
196
|
- spec/spec_helper.rb
|
@@ -213,7 +215,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
213
215
|
version: '0'
|
214
216
|
segments:
|
215
217
|
- 0
|
216
|
-
hash:
|
218
|
+
hash: 328607615784605612
|
217
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
218
220
|
none: false
|
219
221
|
requirements:
|