est 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.
@@ -0,0 +1,57 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'est/estimate'
25
+ require 'nokogiri'
26
+ require 'logger'
27
+ require 'time'
28
+
29
+ # Est main module.
30
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
31
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
32
+ # License:: MIT
33
+ module Est
34
+ # Estimates.
35
+ class Estimates
36
+ # Ctor.
37
+ # +dir+:: Directory with estimates
38
+ def initialize(dir)
39
+ @dir = dir
40
+ end
41
+
42
+ # Get total estimate.
43
+ def total
44
+ estimates = iterate
45
+ fail 'not enough estimates' if estimates.empty?
46
+ estimates.reduce(0) { |a, e| a + e.total } / estimates.size
47
+ end
48
+
49
+ # Iterate them all
50
+ def iterate
51
+ Dir.entries(@dir)
52
+ .reject { |f| f.index('.') == 0 }
53
+ .select { |f| f =~ /^.*\.est$/ }
54
+ .map { |f| Estimate.new(File.join(@dir, f)) }
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'est/version'
25
+ require 'logger'
26
+ require 'yaml'
27
+
28
+ # Single estimate.
29
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
30
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
31
+ # License:: MIT
32
+ module Est
33
+ # Scope Champions.
34
+ class Champions
35
+ # Ctor.
36
+ # +yaml+:: YAML config
37
+ def initialize(yaml)
38
+ @yaml = yaml
39
+ end
40
+
41
+ # Get total estimate.
42
+ def total
43
+ reqs = @yaml['scope']
44
+ champs = @yaml['champions']
45
+ (champs.map do |_, e|
46
+ (e['best-case'].to_i + e['worst'].to_i + e['most-likely'].to_i * 4) / 6
47
+ end.reduce(&:+) * 0.54 * (reqs.size / champs.size)).to_i
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ # Est main module.
25
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
26
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
27
+ # License:: MIT
28
+ module Est
29
+ VERSION = '0.1'
30
+ end
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'simplecov'
25
+ require 'est'
26
+ require 'minitest/autorun'
@@ -0,0 +1,61 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'minitest/autorun'
25
+ require 'est/methods/champions'
26
+ require 'yaml'
27
+
28
+ # Est main module test.
29
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
30
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
31
+ # License:: MIT
32
+ class TestChampions < Minitest::Test
33
+ def test_basic_calculation
34
+ method = Est::Champions.new(
35
+ YAML.load(
36
+ '''
37
+ scope:
38
+ 1: basic Sinatra scaffolding
39
+ 2: front-end HAML files
40
+ 3: SASS stylesheet
41
+ 4: five model classes with unit tests
42
+ 5: PostgreSQL migrations
43
+ 6: Cucumber tests for PostgreSQL
44
+ 7: Capybara tests for HTML front
45
+ 8: CasperJS tests
46
+ 9: achieve 80% test coverage
47
+ champions:
48
+ 7:
49
+ worst-case: 40
50
+ best-case: 10
51
+ most-likely: 18
52
+ 4:
53
+ worst-case: 30
54
+ best-case: 8
55
+ most-likely: 16
56
+ '''
57
+ )
58
+ )
59
+ assert_equal 54, method.total
60
+ end
61
+ end
@@ -0,0 +1,92 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'minitest/autorun'
25
+ require 'nokogiri'
26
+ require 'est'
27
+ require 'tmpdir'
28
+ require 'slop'
29
+
30
+ # Est main module test.
31
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
32
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
33
+ # License:: MIT
34
+ class TestEst < Minitest::Test
35
+ def test_basic
36
+ Dir.mktmpdir 'test' do |dir|
37
+ opts = opts(['-v', '-d', dir])
38
+ File.write(
39
+ File.join(dir, 'sample.est'),
40
+ '''
41
+ id: 5
42
+ date: 12-07-2014
43
+ author: Yegor Bugayenko
44
+ method: champions.pert
45
+ scope:
46
+ 1: basic Sinatra scaffolding
47
+ 2: front-end HAML files
48
+ 3: SASS stylesheet
49
+ 4: five model classes with unit tests
50
+ 5: PostgreSQL migrations
51
+ 6: Cucumber tests for PostgreSQL
52
+ 7: Capybara tests for HTML front
53
+ 8: CasperJS tests
54
+ 9: achieve 80% test coverage
55
+ champions:
56
+ 7:
57
+ worst-case: 40
58
+ best-case: 10
59
+ most-likely: 18
60
+ 4:
61
+ worst-case: 30
62
+ best-case: 8
63
+ most-likely: 16
64
+ '''
65
+ )
66
+ matches(
67
+ Nokogiri::XML(Est::Base.new(opts).xml),
68
+ [
69
+ '/processing-instruction("xml-stylesheet")[contains(.,".xsl")]',
70
+ '/estimate/@version',
71
+ '/estimate/@date',
72
+ '/estimate[total="54"]',
73
+ '/estimate/ests[count(est)=1]',
74
+ '/estimate/ests/est[@id="5"]'
75
+ ]
76
+ )
77
+ end
78
+ end
79
+
80
+ def opts(args)
81
+ Slop.parse args do
82
+ on 'v', 'verbose'
83
+ on 'd', 'dir', argument: :required
84
+ end
85
+ end
86
+
87
+ def matches(xml, xpaths)
88
+ xpaths.each do |xpath|
89
+ fail "doesn't match '#{xpath}': #{xml}" unless xml.xpath(xpath).size == 1
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,71 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'minitest/autorun'
25
+ require 'nokogiri'
26
+ require 'est/estimates'
27
+ require 'tmpdir'
28
+ require 'slop'
29
+
30
+ # Est main module test.
31
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
32
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
33
+ # License:: MIT
34
+ class TestEstimate < Minitest::Test
35
+ def test_basic_calculation
36
+ Dir.mktmpdir 'test' do |dir|
37
+ file = File.join(dir, 'first.est')
38
+ File.write(
39
+ file,
40
+ '''
41
+ date: 18-12-2014
42
+ author: Jeff Lebowski
43
+ method: champions.pert
44
+ scope:
45
+ 1: basic Sinatra scaffolding
46
+ 2: front-end HAML files
47
+ 3: SASS stylesheet
48
+ 4: five model classes with unit tests
49
+ 5: PostgreSQL migrations
50
+ 6: Cucumber tests for PostgreSQL
51
+ 7: Capybara tests for HTML front
52
+ 8: CasperJS tests
53
+ 9: achieve 80% test coverage
54
+ champions:
55
+ 7:
56
+ worst-case: 40
57
+ best-case: 10
58
+ most-likely: 18
59
+ 4:
60
+ worst-case: 30
61
+ best-case: 8
62
+ most-likely: 16
63
+ '''
64
+ )
65
+ estimate = Est::Estimate.new(file)
66
+ assert_equal Date.parse('18-12-2014'), estimate.date
67
+ assert_equal 'Jeff Lebowski', estimate.author
68
+ assert_equal 54, estimate.total
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,68 @@
1
+ # encoding: utf-8
2
+ #
3
+ # Copyright (c) 2014 TechnoPark Corp.
4
+ # Copyright (c) 2014 Yegor Bugayenko
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the 'Software'), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in all
14
+ # copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22
+ # SOFTWARE.
23
+
24
+ require 'minitest/autorun'
25
+ require 'nokogiri'
26
+ require 'est/estimates'
27
+ require 'tmpdir'
28
+ require 'slop'
29
+
30
+ # Est main module test.
31
+ # Author:: Yegor Bugayenko (yegor@teamed.io)
32
+ # Copyright:: Copyright (c) 2014 Yegor Bugayenko
33
+ # License:: MIT
34
+ class TestEstimates < Minitest::Test
35
+ def test_basic_calculation
36
+ Dir.mktmpdir 'test' do |dir|
37
+ File.write(
38
+ File.join(dir, 'first.est'),
39
+ '''
40
+ date: 12-08-2014
41
+ author: Yegor Bugayenko
42
+ method: champions.pert
43
+ scope:
44
+ 1: basic Sinatra scaffolding
45
+ 2: front-end HAML files
46
+ 3: SASS stylesheet
47
+ 4: five model classes with unit tests
48
+ 5: PostgreSQL migrations
49
+ 6: Cucumber tests for PostgreSQL
50
+ 7: Capybara tests for HTML front
51
+ 8: CasperJS tests
52
+ 9: achieve 80% test coverage
53
+ champions:
54
+ 7:
55
+ worst-case: 40
56
+ best-case: 10
57
+ most-likely: 18
58
+ 4:
59
+ worst-case: 30
60
+ best-case: 8
61
+ most-likely: 16
62
+ '''
63
+ )
64
+ estimates = Est::Estimates.new(dir)
65
+ assert_equal 54, estimates.total
66
+ end
67
+ end
68
+ end