fedux_org-stdlib 0.0.33 → 0.0.35

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,6 +2,9 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
+ gem 'launchy'
6
+ gem 'command_exec'
7
+
5
8
  group :test do
6
9
  gem 'rake'
7
10
  gem 'rspec'
@@ -7,5 +7,9 @@ require 'fedux_org/stdlib/models'
7
7
  require 'fedux_org/stdlib/version'
8
8
 
9
9
  module FeduxOrg
10
- module Stdlib; end
10
+ module Stdlib
11
+ def self.root_directory
12
+ File.expand_path( '../../..', __FILE__ )
13
+ end
14
+ end
11
15
  end
@@ -4,25 +4,27 @@ module FeduxOrg
4
4
 
5
5
  # Set environment variable for code block
6
6
  #
7
- # @param [Hash] variables
7
+ # @param [Hash] new_environment_variables
8
8
  # the variables which should be set for that environment
9
9
  #
10
+ # @param [Hash] options
11
+ # options for environment manipulation
12
+ #
13
+ # @option options [True,False] :clear
14
+ # Should the environment clear before merge?
15
+ #
10
16
  # @yield
11
17
  # the block which should be run which the change environment
12
- def isolated_environment(variables, &block)
13
- #backup
14
- old_env = ENV.to_hash
15
- #change env
16
- ENV.update variables
18
+ def isolated_environment(new_environment_variables, options={}, &block)
19
+ old_environment = ENV.to_hash
17
20
 
18
- block_result = block.call
21
+ ENV.clear if options[:clear] == true
22
+ ENV.update new_environment_variables
19
23
 
20
- #cleanup
24
+ block.call
25
+ ensure
21
26
  ENV.clear
22
- #install backuped information
23
- ENV.update old_env
24
-
25
- block_result
27
+ ENV.update old_environment
26
28
  end
27
29
  end
28
30
  end
@@ -0,0 +1,5 @@
1
+ require 'fedux_org/stdlib/project/logger'
2
+ require 'fedux_org/stdlib/project/plan'
3
+ require 'fedux_org/stdlib/project/report'
4
+ require 'fedux_org/stdlib/project/generators/taskjuggler'
5
+
@@ -0,0 +1,28 @@
1
+ require 'fedux_org/stdlib/logging/logger'
2
+
3
+ begin
4
+ require 'command_exec'
5
+ rescue LoadError => e
6
+ $stderr.puts "You need to install the following gems to make it work: \"command_exec\"."
7
+ exit 1
8
+ end
9
+
10
+ module FeduxOrg
11
+ module Stdlib
12
+ module Project
13
+ module Generators
14
+
15
+ class Taskjuggler
16
+ def generate_report( directory, plan_file )
17
+ FeduxOrg::Stdlib::Project.logger.debug "Start generating report."
18
+ CommandExec::Command.new( :tj3 , :parameter => "-o #{directory} #{plan_file}" ).run
19
+ FeduxOrg::Stdlib::Project.logger.info "Generating report succeeded."
20
+ rescue Exception => e
21
+ FeduxOrg::Stdlib::Project.logger.fatal "Generating report failed. Maybe you forgot to install \"the taskjuggler\"-gem or it is not available in PATH? The error message was: #{e.message}"
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,13 @@
1
+ require 'fedux_org/stdlib/logging/logger'
2
+
3
+ module FeduxOrg
4
+ module Stdlib
5
+ module Project
6
+ class << self
7
+ def logger
8
+ @logger ||= FeduxOrg::Stdlib::Logging::Logger.new
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ module FeduxOrg
2
+ module Stdlib
3
+
4
+ module Project
5
+ class Plan
6
+ attr_reader :file
7
+
8
+ def initialize(file = File.expand_path( '../plan.tjp', __FILE__ ) )
9
+ @file = file
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,67 @@
1
+ require 'fedux_org/stdlib/logging/logger'
2
+ require 'fedux_org/stdlib/project/logger'
3
+ require 'fedux_org/stdlib/project/generators/taskjuggler'
4
+
5
+ require 'fileutils'
6
+
7
+ begin
8
+ require 'launchy'
9
+ rescue LoadError => e
10
+ $stderr.puts "You need to install the following gems to make it work: \"launchy\"."
11
+ exit 1
12
+ end
13
+
14
+ module FeduxOrg
15
+ module Stdlib
16
+ module Project
17
+
18
+ class Report
19
+ attr_reader :directory, :file
20
+
21
+ def initialize( plan, generator = FeduxOrg::Stdlib::Project::Generators::Taskjuggler.new,
22
+ output_directory = File.join( Dir.getwd, 'reports' ),
23
+ output_file = nil
24
+ )
25
+ @plan = plan
26
+ @output_directory = output_directory
27
+ @output_file = case output_file
28
+ when nil
29
+ File.join( @output_directory, 'Overview.html' )
30
+ else
31
+ output_file
32
+ end
33
+ @generator = generator
34
+ end
35
+
36
+ def generate
37
+ prepare_environment
38
+
39
+ if output_file_exists? and plan_is_newer_than_output_file?
40
+ FeduxOrg::Stdlib::Project.logger.warn "No need to re-generate report. The plan file \"#{@plan.file}\" is NOT newer than output \"#{@output_file}\"."
41
+ else
42
+ @generator.generate_report( @output_directory, @plan.file )
43
+ end
44
+ end
45
+
46
+ def open
47
+ Launchy.open( @output_file )
48
+ end
49
+
50
+ private
51
+
52
+ def prepare_environment
53
+ FileUtils.mkdir_p @output_directory
54
+ end
55
+
56
+ def output_file_exists?
57
+ File.exists? @output_file
58
+ end
59
+
60
+ def plan_is_newer_than_output_file?
61
+ File.mtime( @output_file ) > File.mtime( @plan.file)
62
+ end
63
+ end
64
+
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,18 @@
1
+ require 'fedux_org/stdlib/project'
2
+
3
+ namespace :report do
4
+
5
+ plan = FeduxOrg::Stdlib::Project::Plan.new
6
+ report = FeduxOrg::Stdlib::Project::Report.new( plan )
7
+
8
+ desc "Generate report"
9
+ task :generate do
10
+ report.generate
11
+ end
12
+
13
+ desc "Show report"
14
+ task :show => :generate do
15
+ report.open
16
+ end
17
+
18
+ end
@@ -1,6 +1,6 @@
1
1
  #main FeduxOrg
2
2
  module FeduxOrg
3
3
  module Stdlib
4
- VERSION = '0.0.33'
4
+ VERSION = '0.0.35'
5
5
  end
6
6
  end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe FeduxOrg::Stdlib::Environment do
4
+ context '#isolated_environment' do
5
+ it 'runs command in isolated environment' do
6
+ klass = Class.new do
7
+ include FeduxOrg::Stdlib::Environment
8
+
9
+ def test_env
10
+ isolated_environment 'TEST_VAR' => 'this is a test' do
11
+ ENV['TEST_VAR']
12
+ end
13
+ end
14
+ end
15
+
16
+ expect( klass.new.test_env ).to eq( 'this is a test' )
17
+ end
18
+
19
+ it 'let you define an environment before running a command' do
20
+ klass = Class.new do
21
+ include FeduxOrg::Stdlib::Environment
22
+
23
+ def test_env
24
+ isolated_environment( {}, { clear: true } ) do
25
+
26
+ #are set by the terminal and can hardly be cleared
27
+ ENV.delete( 'COLUMNS' )
28
+ ENV.delete( 'LINES' )
29
+
30
+ ENV.to_hash
31
+ end
32
+ end
33
+ end
34
+
35
+ expect( klass.new.test_env ).to eq( {} )
36
+ end
37
+
38
+ it 'restores environment although an exception occured' do
39
+ klass = Class.new do
40
+ include FeduxOrg::Stdlib::Environment
41
+
42
+ def test_env
43
+ ENV['TEST_VAR'] = 'TEST'
44
+
45
+ begin
46
+ isolated_environment( {}, { clear: true } ) do
47
+ raise
48
+ end
49
+ rescue
50
+ end
51
+
52
+ ENV['TEST_VAR']
53
+ end
54
+ end
55
+
56
+ expect( klass.new.test_env ).to eq( 'TEST' )
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+ require 'fedux_org/stdlib/project/plan'
3
+
4
+ describe FeduxOrg::Stdlib::Project::Plan do
5
+ end
@@ -0,0 +1,68 @@
1
+ require 'spec_helper'
2
+ require 'fedux_org/stdlib/project/report'
3
+ require 'fedux_org/stdlib/filesystem'
4
+
5
+ describe FeduxOrg::Stdlib::Project::Report do
6
+ context '#generate' do
7
+
8
+ it 'generates report' do
9
+ plan = double( 'Plan' )
10
+ allow( plan ).to receive( :file ).and_return { create_file( 'plan.tjp' ) }
11
+
12
+ generator = double( 'Generator' )
13
+ expect( generator ).to receive( :generate_report )
14
+
15
+ report = FeduxOrg::Stdlib::Project::Report.new( plan, generator )
16
+ report.generate
17
+ end
18
+
19
+ it 'generates report only if plan file is newer than output file' do
20
+ plan_file = create_file( 'plan.tjp' )
21
+ report_file = create_file( 'reports/Overview.html' )
22
+
23
+ FileUtils.touch report_file, :mtime => Time.now - 2.hours
24
+
25
+ plan = double( 'Plan' )
26
+ allow( plan ).to receive( :file ).and_return {plan_file }
27
+
28
+ generator = double( 'Generator' )
29
+ expect( generator ).to receive( :generate_report ).once
30
+
31
+ switch_to_working_directory do
32
+ report = FeduxOrg::Stdlib::Project::Report.new( plan, generator )
33
+ report.generate
34
+ end
35
+ end
36
+
37
+ it 'does not generate report if plan file is older or of eqal age than output file' do
38
+ plan_file = create_file( 'plan.tjp' )
39
+ report_file = create_file( 'reports/Overview.html' )
40
+
41
+ FileUtils.touch plan_file, :mtime => Time.now - 2.hours
42
+
43
+ plan = double( 'Plan' )
44
+ allow( plan ).to receive( :file ).and_return { plan_file }
45
+
46
+ generator = double( 'Generator' )
47
+
48
+ switch_to_working_directory do
49
+ report = FeduxOrg::Stdlib::Project::Report.new( plan, generator )
50
+ silence( :stderr ) do
51
+ report.generate
52
+ end
53
+ end
54
+ end
55
+ end
56
+
57
+ context '#open' do
58
+ it 'can open a report in a browser' do
59
+ plan = double( 'Plan' )
60
+ generator = double( 'Generator' )
61
+ report = FeduxOrg::Stdlib::Project::Report.new( plan, generator )
62
+
63
+ expect(
64
+ report.respond_to? :open
65
+ ).to be_true
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,5 @@
1
+ require 'spec_helper'
2
+ require 'fedux_org/stdlib/project/generators/taskjuggler'
3
+
4
+ describe FeduxOrg::Stdlib::Project::Generators::Taskjuggler do
5
+ end
data/spec/spec_helper.rb CHANGED
@@ -27,4 +27,18 @@ def examples_dir
27
27
  File.expand_path( '../examples', __FILE__ )
28
28
  end
29
29
 
30
+
31
+ require 'fedux_org/stdlib/filesystem'
32
+ include FeduxOrg::Stdlib::Filesystem
33
+
34
+ def root_directory
35
+ FeduxOrg::Stdlib.root_directory
36
+ end
37
+
38
+ RSpec.configure do |c|
39
+ c.before( :each ) do
40
+ cleanup_working_directory
41
+ end
42
+ end
43
+
30
44
  require 'active_support/core_ext/kernel/reporting'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fedux_org-stdlib
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.33
4
+ version: 0.0.35
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-11-08 00:00:00.000000000 Z
12
+ date: 2013-11-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -102,6 +102,11 @@ files:
102
102
  - lib/fedux_org/stdlib/models/class_based_model.rb
103
103
  - lib/fedux_org/stdlib/models/exceptions.rb
104
104
  - lib/fedux_org/stdlib/models/filesystem_based_model.rb
105
+ - lib/fedux_org/stdlib/project.rb
106
+ - lib/fedux_org/stdlib/project/generators/taskjuggler.rb
107
+ - lib/fedux_org/stdlib/project/logger.rb
108
+ - lib/fedux_org/stdlib/project/plan.rb
109
+ - lib/fedux_org/stdlib/project/report.rb
105
110
  - lib/fedux_org/stdlib/rake.rb
106
111
  - lib/fedux_org/stdlib/rake/console.rb
107
112
  - lib/fedux_org/stdlib/rake/documentation.rb
@@ -110,6 +115,7 @@ files:
110
115
  - lib/fedux_org/stdlib/rake/gems/bundler.rb
111
116
  - lib/fedux_org/stdlib/rake/gems/package.rb
112
117
  - lib/fedux_org/stdlib/rake/library.rb
118
+ - lib/fedux_org/stdlib/rake/project.rb
113
119
  - lib/fedux_org/stdlib/rake/terminal.rb
114
120
  - lib/fedux_org/stdlib/rake/tests.rb
115
121
  - lib/fedux_org/stdlib/rake/tests/cucumber.rb
@@ -129,6 +135,7 @@ files:
129
135
  - script/terminal
130
136
  - spec/colors/html_color_spec.rb
131
137
  - spec/command_spec.rb
138
+ - spec/environment_spec.rb
132
139
  - spec/examples/models/class_based/forbidden_keyword.rb
133
140
  - spec/examples/models/class_based/ignore/ignored.rb
134
141
  - spec/examples/models/class_based/ignore/valid_1.rb
@@ -147,6 +154,9 @@ files:
147
154
  - spec/models/base_model_spec.rb
148
155
  - spec/models/class_based_model_spec.rb
149
156
  - spec/models/filesystem_based_model_spec.rb
157
+ - spec/project/plan_spec.rb
158
+ - spec/project/report_spec.rb
159
+ - spec/project/taskjuggler_spec.rb
150
160
  - spec/spec_helper.rb
151
161
  homepage: ''
152
162
  licenses:
@@ -176,6 +186,7 @@ summary: collection of useful libraries
176
186
  test_files:
177
187
  - spec/colors/html_color_spec.rb
178
188
  - spec/command_spec.rb
189
+ - spec/environment_spec.rb
179
190
  - spec/examples/models/class_based/forbidden_keyword.rb
180
191
  - spec/examples/models/class_based/ignore/ignored.rb
181
192
  - spec/examples/models/class_based/ignore/valid_1.rb
@@ -194,5 +205,8 @@ test_files:
194
205
  - spec/models/base_model_spec.rb
195
206
  - spec/models/class_based_model_spec.rb
196
207
  - spec/models/filesystem_based_model_spec.rb
208
+ - spec/project/plan_spec.rb
209
+ - spec/project/report_spec.rb
210
+ - spec/project/taskjuggler_spec.rb
197
211
  - spec/spec_helper.rb
198
212
  has_rdoc: