terrimporter 0.7.3 → 0.7.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,52 +1,54 @@
1
1
  module TerrImporter
2
-
3
- class DefaultError < StandardError
4
- end
5
-
6
- class ConfigurationError < StandardError
7
- end
8
-
9
- class ConfigurationMissingError < StandardError
10
- end
11
-
12
2
  class Application
3
+ #todo split importer into css_importer, image_importer, module_importer, js_importer
13
4
  class Importer
14
5
  include ImporterHelper
15
6
  attr_accessor :options, :config
16
7
 
17
8
  def initialize(options = {})
18
9
  self.options = options
19
- self.config = Configuration.new options[:config_file]
20
- self.config.load_configuration
21
- @downloader = Downloader.new config['application_url']
10
+ loader = ConfigurationLoader.new(options[:config_file])
11
+ self.config = loader.load_configuration
12
+ initialize_downloader
13
+ end
14
+
15
+ def initialize_downloader
16
+ @downloader = Downloader.new(config.application_url)
22
17
  end
23
18
 
24
19
  def run
25
20
  if options[:all] != nil and options[:all] == true
26
- LOG.info "Import everything"
27
- import_js
28
- import_css
29
- import_images
30
- import_modules
21
+ run_all_imports
31
22
  else
32
- options.each do |option, value|
33
- if option.to_s =~ /^import_/ and value == true
34
- LOG.info "Import of #{option.to_s.split('_').last} started"
35
- self.send option.to_s
36
- end
23
+ run_specific_imports
24
+ end
25
+ end
26
+
27
+ def run_all_imports
28
+ LOG.info "Import everything"
29
+ import_js
30
+ import_css
31
+ import_images
32
+ import_modules
33
+ end
34
+
35
+ def run_specific_imports
36
+ options.each do |option, value|
37
+ if option.to_s =~ /^import_/ and value == true
38
+ LOG.info "Import of #{option.to_s.split('_').last} started"
39
+ self.send option.to_s
37
40
  end
38
41
  end
39
42
  end
40
43
 
41
44
  def import_css
42
45
  LOG.info("Importing stylesheets")
43
- complete_config!
44
46
 
45
47
  unclean_suffix = "_unclean"
46
48
  stylesheets = config.stylesheets
47
49
 
48
50
  stylesheets.each do |css|
49
- file_path = File.join(config['stylesheets']['destination_path'], css)
51
+ file_path = File.join(config.stylesheets_destination, css)
50
52
  options = {}
51
53
  options[:suffix] = $1 if css =~ /(ie.*).css$/ #add ie option if in array
52
54
  source_url = export_path(:css, options)
@@ -74,7 +76,7 @@ module TerrImporter
74
76
  FileUtils.remove unclean_file_path
75
77
  end
76
78
  else
77
- File.remove(file_path)
79
+ FileUtils.remove(file_path)
78
80
  LOG.debug "Deleting empty"
79
81
  end
80
82
  end
@@ -82,32 +84,44 @@ module TerrImporter
82
84
 
83
85
  def import_js
84
86
  LOG.info("Importing javascripts")
85
- complete_config!
86
- file_path = File.join(config['javascripts']['destination_path'], "base.js")
87
+ file_path = File.join(config.javascripts_destination, "base.js")
87
88
  js_source_url = export_path(:js)
88
89
  LOG.debug "Import base.js from #{js_source_url} to #{file_path}"
89
90
  @downloader.download(js_source_url, file_path)
90
91
 
91
- if config.additional_dynamic_javascripts?
92
- if config['libraries_server_path'].nil?
92
+ if config.has_dynamic_javascripts?
93
+ if config.libraries_server_path.nil?
93
94
  LOG.info "Define 'libraries_server_path' in configuration file"
94
95
  else
95
96
  libraries_file_path = config.libraries_destination_path
96
- LOG.info "Import libraries from #{config['libraries_server_path']} to #{libraries_file_path}"
97
+ LOG.info "Import libraries from #{config.libraries_server_path} to #{libraries_file_path}"
97
98
  js_libraries = config.dynamic_libraries
98
99
  js_libraries.each do |lib|
99
- @downloader.download(File.join(config['libraries_server_path'], lib), File.join(libraries_file_path, lib))
100
+ @downloader.download(File.join(config.libraries_server_path, lib), File.join(libraries_file_path, lib))
100
101
  end
101
102
  end
102
103
  end
104
+
105
+ if config.has_dynamic_plugins?
106
+ if config.plugins_server_path.nil?
107
+ LOG.info "Define 'plugins_server_path' in configuration file"
108
+ else
109
+ plugins_file_path = config.plugins_destination_path
110
+ LOG.info "Import plugins from #{config.plugins_server_path} to #{plugins_file_path}"
111
+ js_plugins = config.dynamic_plugins
112
+ js_plugins.each do |lib|
113
+ @downloader.download(File.join(config.plugins_server_path, lib), File.join(plugins_file_path, lib))
114
+ end
115
+ end
116
+ end
103
117
  end
104
118
 
105
119
  def import_images
106
- complete_config!
107
- if config.images?
120
+
121
+ if config.has_images?
108
122
  LOG.info "Import images"
109
- config['images'].each do |image|
110
- image_source_path = File.join(config['image_server_path'], image['server_path'])
123
+ config.images.each do |image|
124
+ image_source_path = File.join(config.images_server_path, image['server_path'])
111
125
  @downloader.batch_download(image_source_path, image['destination_path'], image['file_types'])
112
126
  end
113
127
  else
@@ -115,17 +129,11 @@ module TerrImporter
115
129
  end
116
130
  end
117
131
 
118
- def complete_config!
119
- unless config.mandatory_present?
120
- config.determine_configuration_values_from_html @downloader.download('')
121
- end
122
- end
123
-
124
132
  def import_modules
125
- complete_config!
126
- if config.modules?
133
+
134
+ if config.has_modules?
127
135
  LOG.info "Module import"
128
- config['modules'].each do |mod|
136
+ config.modules.each do |mod|
129
137
  name = mod['name']
130
138
  skin = mod['skin']
131
139
  module_source_url = module_path(name, mod['module_template'], skin, mod['template_only'])
@@ -142,7 +150,7 @@ module TerrImporter
142
150
  skin = '' if skin.nil?
143
151
  raise ConfigurationError, "Name cannot be empty for template" if name.nil?
144
152
  raise ConfigurationError, "Module template missing in configuration for template #{name}" if module_template.nil?
145
- export_path = config['application_url'].clone
153
+ export_path = config.application_url.clone
146
154
  export_path << "/terrific/module/details/#{name}/#{module_template}/#{skin}/format/module#{"content" if template}"
147
155
  export_path
148
156
  end
@@ -151,17 +159,17 @@ module TerrImporter
151
159
 
152
160
  def export_path(for_what = :js, options={})
153
161
  raise DefaultError, "Specify js or css url" unless for_what == :js or for_what == :css
154
- export_settings = config['export_settings'].clone
162
+ export_settings = config.export_settings.clone
155
163
  export_settings.merge!(options)
156
164
  export_settings['appbaseurl'] = "" if for_what == :css
157
165
 
158
- export_path = config['export_path'][for_what.to_s].clone
166
+ export_path = for_what == :js ? config.js_export_path.clone : config.css_export_path.clone
159
167
  export_path << '?' << export_settings.map { |k, v| "#{URI.escape(k.to_s)}=#{URI.escape(v.to_s)}" }.join("&")
160
168
  export_path
161
169
  end
162
170
 
163
171
  def replace_stylesheet_lines!(line)
164
- config['stylesheets']['replace_strings'].each do |replace|
172
+ config.stylesheet_replace_strings.each do |replace|
165
173
  replace_line!(line, replace['what'], replace['with'])
166
174
  end
167
175
  line
@@ -0,0 +1,37 @@
1
+ class Statistic
2
+ attr_accessor :statistics, :times
3
+
4
+ def initialize
5
+ @header = ["-------------------------------",
6
+ " SUMMARY ",
7
+ "-------------------------------"]
8
+
9
+ self.statistics = {
10
+ :download => {:count => 0, :message => ""},
11
+ :js => {:count => 0, :message => ""},
12
+ :css => {:count => 0, :message => ""},
13
+ :image => {:count => 0, :message => ""},
14
+ :error => {:count => 0, :message => ""}
15
+ }
16
+ end
17
+
18
+ def add_message(type, message)
19
+ self.statistics[type][:message] = message
20
+ end
21
+
22
+ def add(type, count)
23
+ self.statistics[type][:count] += count
24
+ end
25
+
26
+ def print_summary
27
+ @header.each do |h|
28
+ puts h
29
+ end
30
+ self.statistics.each do |key, value|
31
+ puts "#{key.to_s.upcase}: [#{value[:count]}] #{value[:message]}" unless value[:count] == 0
32
+ end
33
+ end
34
+
35
+ end
36
+
37
+ STAT = Statistic.new
@@ -0,0 +1,56 @@
1
+ #major todo!!
2
+ =begin
3
+ module TerrImporter
4
+ class Application
5
+ class StylesheetImporter
6
+ include ImporterHelper
7
+ attr_accessor :config
8
+
9
+ def initialize(configuration)
10
+ self.config = configuration
11
+ end
12
+
13
+ def import!
14
+ LOG.info("Importing stylesheets")
15
+ unclean_suffix = "_unclean"
16
+ stylesheets = config.stylesheets
17
+
18
+ stylesheets.each do |css|
19
+ file_path = File.join(config.stylesheets_destination, css)
20
+ options = {}
21
+ options[:suffix] = $1 if css =~ /(ie.*).css$/ #add ie option if in array
22
+ source_url = export_path(:css, options)
23
+ unclean_file_path = file_path + unclean_suffix;
24
+ constructed_file_path = (config.replace_style_strings? ? unclean_file_path : file_path)
25
+ @downloader.download(source_url, constructed_file_path)
26
+
27
+ if file_contains_valid_css?(constructed_file_path)
28
+ if config.replace_style_strings?
29
+ LOG.info "CSS line replacements"
30
+ File.open(file_path, 'w') do |d|
31
+ File.open(constructed_file_path, 'r') do |s|
32
+ lines = s.readlines
33
+ lines.each do |line|
34
+ d.print replace_stylesheet_lines!(line)
35
+ end
36
+ end
37
+ end
38
+ else
39
+ LOG.debug "Skipping css line replacements"
40
+ end
41
+
42
+ if File.exists?(unclean_file_path)
43
+ LOG.debug "Deleting unclean css files"
44
+ FileUtils.remove unclean_file_path
45
+ end
46
+ else
47
+ File.remove(file_path)
48
+ LOG.debug "Deleting empty"
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
55
+ end
56
+ =end
@@ -1,4 +1,4 @@
1
- #Generated by rake task, last bump: minor7patch3major0
1
+ #Generated by rake task, last bump: minor7patch4major0
2
2
  module TerrImporter
3
- VERSION = "0.7.3"
3
+ VERSION = "0.7.4"
4
4
  end
data/lib/terrimporter.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  require 'shellwords'
2
+ require 'terrimporter/error'
3
+ require 'terrimporter/statistic'
2
4
  require 'terrimporter/version'
3
5
  require 'terrimporter/download_helper'
4
6
  require 'terrimporter/app_logger'
@@ -6,6 +8,7 @@ require 'terrimporter/options'
6
8
  require 'terrimporter/importer_helper'
7
9
  require 'terrimporter/importer'
8
10
  require 'terrimporter/configuration_helper'
11
+ require 'terrimporter/configuration_loader'
9
12
  require 'terrimporter/configuration'
10
13
  require 'terrimporter/downloader'
11
14
  require 'terrimporter/string_monkeypatch'
@@ -22,6 +25,7 @@ module TerrImporter
22
25
  include Shellwords
23
26
  include ConfigurationHelper
24
27
 
28
+ #todo refactor into smaller methods
25
29
  def run!(*arguments)
26
30
  options = build_options(arguments)
27
31
 
@@ -30,7 +34,13 @@ module TerrImporter
30
34
  if config_working_directory_exists? and options[:init] != :backup and options[:init] != :replace
31
35
  raise TerrImporter::ConfigurationError, "Configuration already exists, use the override or backup option"
32
36
  end
33
- create_config_file(options[:init], options[:application_url])
37
+ case options[:init]
38
+ when :backup
39
+ backup_config_file
40
+ when :replace
41
+ remove_config_file
42
+ end
43
+ create_config_file(options[:application_url])
34
44
  return 0
35
45
  end
36
46
 
@@ -41,7 +51,6 @@ module TerrImporter
41
51
  LOG.level = :info
42
52
  end
43
53
 
44
-
45
54
  if options[:invalid_argument]
46
55
  $stderr.puts options[:invalid_argument]
47
56
  options[:show_help] = true
@@ -64,6 +73,7 @@ module TerrImporter
64
73
 
65
74
  importer = TerrImporter::Application::Importer.new(options)
66
75
  importer.run
76
+ STAT.print_summary
67
77
  return 0
68
78
  rescue TerrImporter::ConfigurationError
69
79
  $stderr.puts %Q{Configuration Error #{ $!.message }}
@@ -1,5 +1,6 @@
1
1
  url: http://terrific.url
2
2
  libraries_server_path: /js/libraries/dynamic
3
+ plugins_server_path: /js/plugins/dynamic
3
4
  image_server_path: /img
4
5
  export_settings:
5
6
  layout: project
@@ -0,0 +1 @@
1
+ This file represents a dynamic js library.
@@ -1,5 +1,6 @@
1
1
  application_url: http://terrific.url
2
2
  libraries_server_path: /js/libraries/dynamic
3
+ plugins_server_path: /js/plugins/dynamic
3
4
  image_server_path: /img
4
5
  export_settings:
5
6
  layout: project
@@ -1,5 +1,6 @@
1
1
  application_url: http://terrific.url
2
2
  libraries_server_path: /js/libraries/dynamic
3
+ plugins_server_path: /js/plugins/dynamic
3
4
  image_server_path: /img
4
5
  export_settings:
5
6
  layout: project
@@ -15,6 +16,8 @@
15
16
  destination_path: test/tmp/public/javascripts/
16
17
  dynamic_libraries: dynlib
17
18
  libraries_destination_path: test/tmp/public/javascripts/lib
19
+ dynamic_plugins: dynplugin
20
+ plugins_destination_path: test/tmp/public/javascripts/plugins
18
21
  images:
19
22
  - server_path: /
20
23
  destination_path: test/tmp/public/images/
@@ -5,7 +5,7 @@ class TestArrayMonkeypatch < Test::Unit::TestCase
5
5
  testarray = ["file1.css", "file2", "file3", "file4.css"]
6
6
  expected = ["file1.css", "file2.css", "file3.css", "file4.css"]
7
7
 
8
- assert_equal expected, testarray.add_if_missing!('.css')
8
+ assert_equal expected, testarray.add_missing_extension!('.css')
9
9
  assert_equal expected, expected.join(" ").robust_split
10
10
  end
11
11
 
@@ -5,31 +5,25 @@ class ConfigurationTest < Test::Unit::TestCase
5
5
  include ConfigurationHelper
6
6
 
7
7
  def setup
8
- @configuration = TerrImporter::Application::Configuration.new test_config_file_path
9
- @configuration.load_configuration
10
- end
11
-
12
- should 'find a configuration in the local path and not raise an error' do
13
- assert_nothing_raised do
14
- @configuration.determine_config_file_path
15
- end
8
+ FakeWeb.register_uri(:get, "http://terrific.url", :body => File.expand_path('test/fixtures/html/application_root.html'), :content_type => 'text/plain')
9
+ @configuration = TerrImporter::Application::ConfigurationLoader.new(test_config_file_path).load_configuration
16
10
  end
17
11
 
18
12
  should 'have an image configuration' do
19
- assert @configuration.images?
13
+ assert @configuration.has_images?
20
14
  end
21
15
 
22
16
  should 'have dynamic libraries' do
23
- assert @configuration.additional_dynamic_javascripts?
17
+ assert @configuration.has_dynamic_javascripts?
24
18
  end
25
19
 
26
20
  should 'have modules' do
27
- assert @configuration.modules?
21
+ assert @configuration.has_modules?
28
22
  end
29
23
 
30
24
  should 'use the normal libraries path if no dynamic libraries are specified' do
31
25
  @configuration['javascripts']['libraries_destination_path'] = nil
32
- assert @configuration['javascripts']['destination_path'], @configuration.libraries_destination_path
26
+ assert @configuration['javascripts']['destination_path'], @configuration.libraries_destination_path
33
27
  end
34
28
 
35
29
  should 'have style replacement strings' do
@@ -37,78 +31,27 @@ class ConfigurationTest < Test::Unit::TestCase
37
31
  end
38
32
 
39
33
  should 'have additional stylesheets configured' do
40
- assert @configuration.additional_stylesheets?
41
- end
42
-
43
- context 'no configuration file around' do
44
- setup { @invalid_configuration = TerrImporter::Application::Configuration.new }
45
-
46
- should 'not find a configuration in the local path and raise an error' do
47
- assert_raise TerrImporter::ConfigurationError do
48
- @invalid_configuration.load_configuration
49
- @invalid_configuration
50
- end
51
- end
52
- end
53
-
54
- context 'invalid config file' do
55
- setup do
56
- @configuration = TerrImporter::Application::Configuration.new invalid_test_config_file_path
57
- end
58
-
59
- should 'throw an error on an invalid config file' do
60
- assert_raise TerrImporter::ConfigurationError do
61
- @configuration.load_configuration
62
- end
63
- end
64
- end
65
-
66
- context 'test config file independent functions' do
67
- setup {
68
- @configuration = TerrImporter::Application::Configuration.new
69
- }
70
-
71
- should 'get the current working directory as config file path' do
72
- config_in_cwd = File.join(Dir.pwd, config_default_name)
73
- assert_equal config_in_cwd, @configuration.determine_config_file_path
74
- end
75
-
76
- should 'create a config file in the current directory' do
77
- config_path = File.join(Dir.pwd, config_default_name)
78
- FileUtils.rm_f config_path if File.exists? config_path
79
- @configuration.create_config_file
80
- assert File.exists?(config_path)
81
- end
82
- end
83
-
84
- context 'required configurations' do
85
- should 'test for all the required configurations needed to function properly' do
86
- #these values are set by the downloader
87
- @configuration['export_path'] = 'present'
88
- @configuration['export_settings'] = {'application' => 'present'}
89
- @configuration['application_url'] = 'present'
90
-
91
- assert @configuration.mandatory_present?
92
- end
34
+ assert @configuration.has_stylesheets?
93
35
  end
94
36
 
95
37
  context 'minimal working configuration' do
96
38
  setup do
97
- @configuration = TerrImporter::Application::Configuration.new min_test_config_file_path
39
+ @loader = TerrImporter::Application::ConfigurationLoader.new min_test_config_file_path
40
+ @configuration = @loader.load_configuration
98
41
  end
99
42
 
100
43
  should 'not raise an error when loading the minimal configuration' do
101
44
  assert_nothing_raised do
102
- @configuration.load_configuration
45
+ @loader.load_configuration
103
46
  end
104
47
  end
105
48
 
106
49
  should 'not have an image configuration' do
107
- assert !@configuration.images?
50
+ assert !@configuration.has_images?
108
51
  end
109
52
 
110
53
  should 'not have dynamic libraries' do
111
- assert !@configuration.additional_dynamic_javascripts?
54
+ assert !@configuration.has_dynamic_javascripts?
112
55
  end
113
56
 
114
57
  should 'not have style replacement strings' do
@@ -116,7 +59,7 @@ class ConfigurationTest < Test::Unit::TestCase
116
59
  end
117
60
 
118
61
  should 'not have additional stylesheets configured' do
119
- assert !@configuration.additional_stylesheets?
62
+ assert !@configuration.has_stylesheets?
120
63
  end
121
64
 
122
65
  should 'only get the base.css file' do
@@ -124,43 +67,7 @@ class ConfigurationTest < Test::Unit::TestCase
124
67
  end
125
68
 
126
69
  should 'not have additional modules' do
127
- assert !@configuration.modules?
128
- end
129
-
130
- context 'read additional configuration values from parent page' do
131
-
132
- should 'extract version and app path from parent page' do
133
- raw_html = File.open(File.expand_path('test/fixtures/html/application_root.html')).read
134
- assert_nothing_raised do
135
- @configuration.determine_configuration_values_from_html raw_html
136
- end
137
-
138
- assert !@configuration['version'].nil?
139
- assert !@configuration['export_settings']['application'].nil?
140
- assert !@configuration['export_path']['js'].nil?
141
- assert !@configuration['export_path']['css'].nil?
142
- end
143
-
144
- should 'throw a configuration error if the parent pages js values can\'t be read correctly' do
145
- raw_html = File.open(File.expand_path('test/fixtures/html/application_root_js_error.html')).read
146
- assert_raises TerrImporter::ConfigurationError do
147
- @configuration.determine_configuration_values_from_html raw_html
148
- end
149
- end
150
-
151
- should 'throw a configuration error if the parent pages css values can\'t be read correctly' do
152
- raw_html = File.open(File.expand_path('test/fixtures/html/application_root_css_error.html')).read
153
- assert_raises TerrImporter::ConfigurationError do
154
- @configuration.determine_configuration_values_from_html raw_html
155
- end
156
- end
157
- end
158
-
159
- #todo why is this failing?
160
- =begin
161
- should 'return javascript destination path if libraries destination path is undefined' do
162
- assert_equal @configuration['javascripts']['destination_path'], @configuration.libraries_destination_path
70
+ assert !@configuration.has_modules?
163
71
  end
164
- =end
165
72
  end
166
73
  end
@@ -11,15 +11,16 @@ class ConfigValidatorTest < Test::Unit::TestCase
11
11
 
12
12
  should 'create a configuration file and backup the old one' do
13
13
  create_config_file
14
- create_config_file(:backup)
14
+ backup_config_file
15
15
  assert File.exists?(config_working_directory_path + '.bak')
16
- assert File.exists?(config_working_directory_path)
16
+ assert_same false, File.exists?(config_working_directory_path)
17
17
  end
18
18
 
19
19
  should 'create a configuration file and remove the old one' do
20
- config_working_directory_path
21
- create_config_file(:replace)
22
- assert File.exists?(config_working_directory_path)
20
+ config_working_directory_path #todo whats this?
21
+ create_config_file
22
+ remove_config_file
23
+ assert_same false, File.exists?(config_working_directory_path)
23
24
  end
24
25
 
25
26
  should 'create a configuration file' do
@@ -29,7 +30,7 @@ class ConfigValidatorTest < Test::Unit::TestCase
29
30
 
30
31
  should 'create a configuration file and replace the application url' do
31
32
  application_url = "http://test.url"
32
- create_config_file(nil, application_url)
33
+ create_config_file(application_url)
33
34
  configuration = File.read(config_working_directory_path)
34
35
  assert configuration.include?("application_url: #{application_url}")
35
36
  end