easy_html_generator 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +6 -0
  3. data/.gitignore +12 -0
  4. data/.rubocop.yml +18 -0
  5. data/.travis.yml +14 -0
  6. data/Gemfile +3 -0
  7. data/README.md +51 -337
  8. data/Rakefile +42 -0
  9. data/config.ru +4 -0
  10. data/docs/CONFIGURATION.md +84 -0
  11. data/{CONTRIBUTING.md → docs/CONTRIBUTING.md} +2 -0
  12. data/docs/GENERATORS.md +210 -0
  13. data/docs/GETSTARTED.md +92 -0
  14. data/easy_html_generator.gemspec +54 -0
  15. data/lib/easy_html_generator/checksum.rb +4 -0
  16. data/lib/easy_html_generator/config.rb +0 -77
  17. data/lib/easy_html_generator/generator/base.rb +20 -58
  18. data/lib/easy_html_generator/generator/combine.rb +9 -19
  19. data/lib/easy_html_generator/generator/compile/base.rb +51 -0
  20. data/lib/easy_html_generator/generator/compile/coffee.rb +6 -13
  21. data/lib/easy_html_generator/generator/compile/haml/helper/activesupport_override.rb +1 -6
  22. data/lib/easy_html_generator/generator/compile/haml/helper/asset_helper.rb +7 -7
  23. data/lib/easy_html_generator/generator/compile/haml.rb +20 -45
  24. data/lib/easy_html_generator/generator/compile/sass.rb +9 -13
  25. data/lib/easy_html_generator/generator/copy.rb +7 -14
  26. data/lib/easy_html_generator/generator/delete.rb +4 -13
  27. data/lib/easy_html_generator/generator/minimize/css.rb +5 -12
  28. data/lib/easy_html_generator/generator/minimize/html.rb +5 -12
  29. data/lib/easy_html_generator/generator/minimize/images.rb +6 -20
  30. data/lib/easy_html_generator/generator/minimize/js.rb +5 -12
  31. data/lib/easy_html_generator/generator/service/analytics.rb +19 -19
  32. data/lib/easy_html_generator/generator/service/bower.rb +21 -17
  33. data/lib/easy_html_generator/generator/service/grunt.rb +12 -11
  34. data/lib/easy_html_generator/generator/service/sitemap.rb +33 -0
  35. data/lib/easy_html_generator/generator/structure.rb +2 -6
  36. data/lib/easy_html_generator/generator.rb +6 -6
  37. data/lib/easy_html_generator/project.rb +5 -0
  38. data/lib/easy_html_generator/project_path_resolver.rb +57 -0
  39. data/lib/easy_html_generator/rack_dispatcher.rb +1 -1
  40. data/lib/easy_html_generator/version.rb +4 -0
  41. data/lib/easy_html_generator/workspace.rb +1 -1
  42. data/lib/easy_html_generator.rb +19 -18
  43. data/src/demo/assets/styles/app.css.sass +47 -2
  44. data/src/demo/lib/helper/projecthelper.rb +3 -0
  45. data/src/demo/project.yml +142 -0
  46. data/src/demo/views/index/_bower_and_grunt.haml +7 -0
  47. data/src/demo/views/index/_dry.haml +16 -0
  48. data/src/demo/views/index/_haml_sass_coffee.haml +11 -0
  49. data/src/demo/views/index/_inline_coffee_and_sass.haml +43 -0
  50. data/src/demo/views/index/_sass_mixins.haml +76 -0
  51. data/src/demo/views/index.html.haml +13 -1
  52. data/src/demo/views/layout/_assets.javascripts.haml +7 -0
  53. data/src/demo/views/layout/_assets.metadata.haml +12 -0
  54. data/src/demo/views/layout/_assets.stylesheets.haml +9 -0
  55. data/src/demo/views/layout/_footer.haml +3 -0
  56. data/src/demo/views/layout/_header.haml +1 -0
  57. data/src/demo/views/layout.haml +8 -4
  58. data/src/demo/views/plain.html +1 -0
  59. data/src/shared/assets/styles/mixins/_bootstrap-fixes.sass +12 -0
  60. data/src/shared/assets/styles/mixins/_headjs-bootstrap-mediaqueries.sass +30 -0
  61. data/src/shared/project.yml +56 -35
  62. data/src/template/project.yml +57 -43
  63. metadata +75 -7
  64. data/src/demo/views/index/_lore_ipsum.haml +0 -1
@@ -0,0 +1,210 @@
1
+ # Basic-Generators
2
+ ### Structure
3
+ * creates necessary dist folders
4
+
5
+ ```
6
+ - structure:
7
+ enabled: true
8
+ ```
9
+
10
+ ### Copy
11
+ * copies folder or files
12
+ * `selector` is optional, default selector: `**/*`
13
+
14
+ ```
15
+ - copy:
16
+ enabled: true
17
+ repetitive:
18
+ -
19
+ source: 'src.styles://'
20
+ target: 'dist.styles://'
21
+ selector: '**/*.css'
22
+ -
23
+ source: 'src://assets/scripts'
24
+ target: 'dist://scripts'
25
+ selector: '**/*.js'
26
+ ```
27
+
28
+ ### Combine
29
+ * combines multiple files
30
+
31
+ ```
32
+ - combine:
33
+ enabled: true
34
+ repetitive:
35
+ -
36
+ target: 'dist.scripts://app.combined.js'
37
+ sources:
38
+ - 'dist.scripts://*.js'
39
+ ```
40
+
41
+ ### Delete
42
+ * deletes files or folders
43
+
44
+ ```
45
+ - delete:
46
+ enabled: false
47
+ source: 'dist://**/*'
48
+ ```
49
+
50
+ # Compile-Generators
51
+ ### Compile::Haml
52
+ * compiles haml files to html files
53
+ * supports partials and minimizing
54
+ * supports [ActionView](https://github.com/rails/rails/tree/master/actionview) syntax and view helper
55
+ * supports layouts, the layout can bespezified in the first line of a haml file with `-# ehg layout: layout.blank`, default layout is `my_project/views/layout.haml`
56
+
57
+ ```
58
+ - compile_haml:
59
+ enabled: true
60
+ minimize: true
61
+ source: 'src.views://'
62
+ target: 'dist.views://'
63
+ selector: '**/*.html.haml'
64
+ default_layout: 'views/layout.haml'
65
+ renderer:
66
+ attr_wrapper: '"'
67
+ format: :html5
68
+ shared_helper_path: 'shared/lib'
69
+ ```
70
+
71
+ ### Compile::Sass
72
+ * compiles sass files to css files
73
+ * supports shared mixins and minimizing
74
+
75
+ ```
76
+ - compile_sass:
77
+ enabled: true
78
+ minimize: true
79
+ source: 'src.styles://'
80
+ target: 'dist.styles://'
81
+ selector: '**/*.css.sass'
82
+ ```
83
+
84
+ ### Compile::Coffee
85
+ * compiles coffee files to js files
86
+ * supports minimizing
87
+
88
+ ```
89
+ - compile_coffee:
90
+ enabled: true
91
+ minimize: true
92
+ source: 'src.scripts://'
93
+ target: 'dist.scripts://'
94
+ selector: '**/*.js.coffee'
95
+ ```
96
+
97
+ # Minimize-Generators
98
+ ### Minimize::Html
99
+ * minimizes html files and copies to `target`
100
+ * `prefix_extension='.min'` stores athe minimized content from `foo.html` to `foo.min.html`
101
+
102
+ ```
103
+ - minimize_html:
104
+ enabled: true
105
+ source: 'src.public://'
106
+ target: 'dist.public://'
107
+ selector: '**/*.html'
108
+ prefix_extension: ''
109
+ ```
110
+
111
+ ### Minimize::Css
112
+ * minimizes css files and copies to `target`
113
+
114
+ ```
115
+ - minimize_css:
116
+ enabled: true
117
+ source: 'src.styles://'
118
+ target: 'dist.styles://'
119
+ selector: '**/*.css'
120
+ prefix_extension: '.min'
121
+ ```
122
+
123
+ #### Minimize::Js
124
+ * minimizes js files and copies to `target`
125
+
126
+ ```
127
+ - minimize_js:
128
+ enabled: true
129
+ source: 'src.scripts://'
130
+ target: 'dist.scripts://'
131
+ selector: '**/*.js'
132
+ prefix_extension: '.min'
133
+ ```
134
+
135
+ ### Minimize::Images
136
+ * minimizes image files and copies to `target`
137
+ * uses [Piet](https://github.com/albertbellonch/piet) for image processing
138
+
139
+ ```
140
+ - minimize_images:
141
+ enabled: true
142
+ source: 'src.images://'
143
+ target: 'dist.images://'
144
+ selector: '**/*.{jpg,png}'
145
+ options:
146
+ quality: 90
147
+ level: 3
148
+ verbose: true
149
+ ```
150
+
151
+ ## Service-Generators
152
+ #### Service::Bower
153
+ * resolves `src://bower.json` and copies bower_components to target folder
154
+
155
+ ```
156
+ - service_bower:
157
+ enabled: true
158
+ source: 'src://'
159
+ target: 'dist://lib'
160
+ ```
161
+
162
+ ### Service::Grunt
163
+ * resolves `src://Gruntfile.coffee` and runs a `task`
164
+
165
+ ```
166
+ - service_grunt:
167
+ enabled: false
168
+ source: 'src://Gruntfile.coffee'
169
+ task: 'default'
170
+ ```
171
+
172
+ ### Service::Analytics
173
+ * appends tracking codes to the end of head tag to selected html files
174
+
175
+ ```
176
+ - service_analytics:
177
+ enabled: true
178
+ source: 'dist.views://'
179
+ target: 'dist.views://'
180
+ selector: '*.html'
181
+ repetitive:
182
+ -
183
+ enabled: true
184
+ name: 'google'
185
+ code: "<script>[...] _gaq.push(['_setAccount', '{GOOGLE_UA_ID}']); [...]</script>"
186
+ params:
187
+ GOOGLE_UA_ID: 'UA-65996211-1'
188
+ ```
189
+ ### Service::Sitemap
190
+ * generates a sitemap xml file based on selected files
191
+ * `blacklist` can be used to exclude files
192
+
193
+ ```
194
+ - service_sitemap:
195
+ domain: 'beta.creative-workflow.berlin'
196
+ enabled: true
197
+ source: 'dist.views://*.html'
198
+ target: 'dist.views://sitemap.xml'
199
+ selector: '**/*.html'
200
+ blacklist:
201
+ ```
202
+
203
+
204
+ # Resources
205
+
206
+ > "[Getting started](https://github.com/creative-workflow/easy-html-generator/blob/master/docs/GETSTARTED.md)"
207
+
208
+ > "[Configuration](https://github.com/creative-workflow/easy-html-generator/blob/master/docs/CONFIGURATION.md)"
209
+
210
+ >"[Contributing](https://github.com/creative-workflow/easy-html-generator/blob/master/docs/CONTRIBUTING.md)"
@@ -0,0 +1,92 @@
1
+ # Get started
2
+ At first you need [Ruby](https://www.ruby-lang.org/de/) and [Bundler](http://bundler.io/).
3
+
4
+ For specific generators install:
5
+ * [OptiPng](http://optipng.sourceforge.net/) for png image minimizing
6
+ * [JpegOptim](https://github.com/tjko/jpegoptim) for jpg image minimizing
7
+ * [NodeJs](https://nodejs.org/download/) to use bower and grunt https://www.npmjs.com/
8
+ * [Bower](http://bower.io/) to use bower `npm install -g bower`
9
+ * [Grunt](http://gruntjs.com/getting-started) to use grunt `npm install -g grunt-cli`
10
+
11
+ Create a new workspace folder
12
+
13
+ mkdir my_workspace
14
+ cd my_workspace
15
+
16
+ Create a ruby `Gemfile`
17
+
18
+ touch Gemfile
19
+
20
+ Paste this into the `Gemfile`
21
+
22
+ source 'https://rubygems.org'
23
+
24
+ gem 'easy_html_generator'
25
+
26
+ For the latest development version use
27
+
28
+ gem 'easy_html_generator', git: 'git@github.com:creative-workflow/easy-html-generator.git', branch: 'development-master'
29
+
30
+ Run in terminal
31
+
32
+ bundle install
33
+ ehg --init
34
+ ehg --create my_project
35
+
36
+ Now you should see the following folder structure with `ls -alR`
37
+
38
+ my_workspace
39
+ ├── dist # the generated result will be stored here
40
+ └── src # the generation input is stored here
41
+ ├── demo
42
+ ├── my_project # this is a project and will be available via http://localhost:9292/my_project
43
+ │   ├── assets
44
+ │   │   ├── images # content will be copied to `dist/my_project/images`
45
+ │   │   ├── public # public content gets directly copied to `dist/my_project/`
46
+ │   │   ├── scripts # content will be copied to `dist/my_project/scripts`
47
+ │   │   └── styles # content will be copied to `dist/my_project/styles`
48
+ │   ├── lib
49
+ │   │   ├── generators # project specific generators
50
+ │   │   └── helper # project specific view helpers you can use in haml files
51
+ │   ├── project.yml # project specific generators config
52
+ │   └── views
53
+ │   ├── index.html.haml # the haml file for index.html
54
+ │   └── layout.haml # the layout file index.html will use
55
+ |
56
+ └── shared # shared content over all projects
57
+ ├── assets # shared assets over all projects
58
+ │   ├── images
59
+ │   ├── public
60
+ │   ├── scripts
61
+ │   └── styles
62
+ │   └── mixins # here are css helpers for bootstrap and head js
63
+ ├── lib
64
+ │   ├── generators # generators shared over all projects
65
+ │   └── helper # view helpers you can use in haml files
66
+ └── project.yml # if a project doesnt have a `project.yml` this config will be used
67
+
68
+ Now run
69
+
70
+ ehg --server
71
+
72
+ ...and navigate your web browser to `http://localhost:9292`
73
+
74
+ After a short time of generating you should see a directory listening in your browser.
75
+
76
+ ## Usage Terminal
77
+ Usage: ehg [options]
78
+ -s, --server [HOST_AND_PORT] start the rack server, default: 0.0.0.0:9292
79
+ -g, --generate [PROJECT] generate one or all projects, default: all
80
+ -i, --init initialize ehg workspace
81
+ -c, --create [PROJECT] create a new project from template, default: demo
82
+ -h, --help Show this message
83
+
84
+
85
+
86
+ # Resources
87
+
88
+ > "[Configuration](https://github.com/creative-workflow/easy-html-generator/blob/master/docs/CONFIGURATION.md)"
89
+
90
+ > "[Generators](https://github.com/creative-workflow/easy-html-generator/blob/master/docs/GENERATORS.md)"
91
+
92
+ >"[Contributing](https://github.com/creative-workflow/easy-html-generator/blob/master/docs/CONTRIBUTING.md)"
@@ -0,0 +1,54 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'easy_html_generator/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'easy_html_generator'
9
+ spec.version = EasyHtmlGenerator::VERSION
10
+ spec.licenses = 'MIT'
11
+ spec.authors = ["Tom Hanoldt", "Alex Illmayer"]
12
+
13
+ spec.summary = "This gem is a powerful and easy to use web development tool that helps developing modern web sites by generating static html pagespec."
14
+ spec.description = "This gem is a powerful and easy to use web development tool that helps developing modern web sites by generating static html pagespec.
15
+ It uses CoffeScript, Sass, Haml, Bootstrap, HeadJs, Bower, Grunt, Google Anlaytics and minimizes coffee-, javascript-, sass-, css-, png- and image-filespec."
16
+
17
+ spec.email = ['monotom@gmail.com']
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
19
+ spec.homepage = 'https://github.com/creative-workflow/easy-html-generator'
20
+
21
+ spec.executables = ["ehg"]
22
+
23
+ spec.required_ruby_version = '>= 2.0.0'
24
+
25
+ spec.bindir = "bin"
26
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
27
+
28
+ spec.require_paths = ["lib", "src/shared/lib"]
29
+
30
+ spec.add_runtime_dependency 'rack'
31
+ spec.add_runtime_dependency 'thin'
32
+ spec.add_runtime_dependency 'rack-contrib'
33
+ spec.add_runtime_dependency 'shotgun'
34
+ spec.add_runtime_dependency 'haml'
35
+ spec.add_runtime_dependency 'sass'
36
+ spec.add_runtime_dependency 'coffee-script'
37
+ spec.add_runtime_dependency 'bootstrap-sass'
38
+ spec.add_runtime_dependency 'actionview'
39
+ spec.add_runtime_dependency 'cssminify'
40
+ spec.add_runtime_dependency 'uglifier'
41
+ spec.add_runtime_dependency 'htmlcompressor'
42
+ spec.add_runtime_dependency 'colorize'
43
+ spec.add_runtime_dependency 'piet'
44
+ spec.add_runtime_dependency 'piet-binary'
45
+ spec.add_runtime_dependency 'xml-sitemap'
46
+
47
+ spec.add_development_dependency 'rake'
48
+ spec.add_development_dependency 'rspec'
49
+ spec.add_development_dependency 'simplecov'
50
+ spec.add_development_dependency 'rack-test'
51
+ spec.add_development_dependency 'rubocop'
52
+ spec.add_development_dependency 'bundler'
53
+ #spec.add_development_dependency 'ruby-prof'
54
+ end
@@ -33,6 +33,10 @@ class EasyHtmlGenerator::Checksum
33
33
  @file_checksums.delete(key)
34
34
  end
35
35
 
36
+ def self.invalidate_all()
37
+ @file_checksums = {}
38
+ end
39
+
36
40
  def self.build_key(file, context = '')
37
41
  "#{context}.#{file}"
38
42
  end
@@ -68,80 +68,3 @@ class EasyHtmlGenerator::Config
68
68
  end
69
69
  end
70
70
  end
71
-
72
- # class EasyHtmlGenerator::Config
73
- # def self.from_file(path)
74
- # return unless File.exist? path
75
- #
76
- # ConfigHash.new YAML.load(File.open(path))
77
- # end
78
- #
79
- # # symbolizes the keys and makes the hash accessable via object attributes
80
- # class ConfigHash < Hash
81
- # def initialize(hash = nil)
82
- # super
83
- # return unless hash
84
- #
85
- # hash = self.class.symbolize_keys hash
86
- # hash.each { |k, v| self[k] = v }
87
- # end
88
- #
89
- # def method_missing(name, *args)
90
- # # setter
91
- # if /^(\w+)=$/ =~ name
92
- # self[Regexp.last_match(1).to_sym] = args[0]
93
- # # getter
94
- # else
95
- # return super.method_missing name unless key? name
96
- # end
97
- #
98
- # self[name]
99
- # end
100
- #
101
- # def self.symbolize_keys(obj)
102
- # case obj
103
- # when Array
104
- # inject_array(obj)
105
- # when Hash
106
- # inject_hash(obj)
107
- # else
108
- # obj
109
- # end
110
- # end
111
- #
112
- # def self.inject_array(obj)
113
- # obj.each_with_object([]) do |res, val|
114
- # res << case val
115
- # when Hash, Array
116
- # symbolize_keys(val)
117
- # else
118
- # val
119
- # end
120
- # res
121
- # end
122
- # end
123
- #
124
- # def self.inject_hash(obj)
125
- # obj.each_with_object(ConfigHash.new) do |res, (key, val)|
126
- # nkey = inject_hash_key key
127
- # nval = inject_hash_value val
128
- # res[nkey] = nval
129
- # res
130
- # end
131
- # end
132
- #
133
- # def self.inject_hash_key(key)
134
- # case key
135
- # when String then return key.to_sym
136
- # else return key
137
- # end
138
- # end
139
- #
140
- # def self.inject_hash_value(val)
141
- # case val
142
- # when Hash, Array then symbolize_keys(val)
143
- # else val
144
- # end
145
- # end
146
- # end
147
- # end
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require 'colorize'
3
- require 'fileutils'
4
- require 'easy_html_generator/generators'
5
3
 
6
4
  # this is the generator base class
7
5
  class EasyHtmlGenerator::Generator::Base
@@ -12,68 +10,36 @@ class EasyHtmlGenerator::Generator::Base
12
10
  @config = config
13
11
  end
14
12
 
15
- def src_path
16
- "#{@project.src_path}/#{@config.src}"
17
- end
18
-
19
- def dest_path
20
- "#{@project.dist_path}/#{@config.dest}"
21
- end
22
-
23
- def log_running
24
- log "#{self.class.name.yellow}"
13
+ def enabled?
14
+ !!@config[:enabled]
25
15
  end
26
16
 
27
17
  def generate
28
- return unless @config.enabled
18
+ return unless enabled?
29
19
 
30
20
  log_running
31
21
 
32
- selector = File.join(src_path, @config.selector)
33
-
34
- FileUtils.mkdir_p dest_path
35
-
36
- walk_files(selector) do |i, o|
37
- next unless should_do_file? i
38
-
39
- do_file(i, o)
22
+ tasks.each do |task|
23
+ generate! @config.merge(task)
40
24
  end
41
25
  end
42
26
 
43
- def walk_files(selector)
44
- Dir[selector].each do |input_file|
45
- output_file = input_to_output_file(input_file)
46
-
47
- yield(input_file, output_file)
48
- end
27
+ def generate!(_config)
28
+ fail NotImplementedError.new "#{self.class.name} is an abstract class."
49
29
  end
50
30
 
51
- def should_do_file?(i)
52
- EasyHtmlGenerator::Checksum.file_changed? i
31
+ def repetitive?
32
+ @config.key? :repetitive
53
33
  end
54
34
 
55
- def input_to_output_file(input_file)
56
- input_file.sub(src_path, dest_path)
57
- end
35
+ def tasks
36
+ return [@config] unless repetitive?
58
37
 
59
- def do_input(input, *_args)
60
- input
38
+ @config[:repetitive]
61
39
  end
62
40
 
63
- def do_file(src, target, *args)
64
- return unless File.exist?(src) && File.file?(src)
65
-
66
- log "-> do_file #{src.sub(@project.src_path, '').green}"
67
-
68
- FileUtils.mkdir_p File.dirname(target)
69
-
70
- args.push target
71
- i = File.read(src)
72
- o = do_input(i, *args)
73
-
74
- File.write(target, o)
75
-
76
- EasyHtmlGenerator::Checksum.store_file(src)
41
+ def log_running
42
+ log "#{self.class.name.yellow}"
77
43
  end
78
44
 
79
45
  def log(msg)
@@ -81,15 +47,11 @@ class EasyHtmlGenerator::Generator::Base
81
47
  .sub('EasyHtmlGenerator::', '')}"
82
48
  end
83
49
 
84
- def resolve_path_prefix(path, default_prefix = '')
85
- if path.include? 'src://'
86
- default_prefix = @project.src_path
87
- path.sub!('src://', '')
88
- end
89
- if path.include? 'dist://'
90
- default_prefix = @project.dist_path
91
- path.sub!('dist://', '')
92
- end
93
- File.join(default_prefix, path)
50
+ def file_changed?(file)
51
+ EasyHtmlGenerator::Checksum.file_changed? file
52
+ end
53
+
54
+ def store_file_hash(file)
55
+ EasyHtmlGenerator::Checksum.store_file(file)
94
56
  end
95
57
  end
@@ -6,26 +6,16 @@ require 'easy_html_generator/generator/base'
6
6
  class EasyHtmlGenerator::Generator::Combine <
7
7
  EasyHtmlGenerator::Generator::Base
8
8
 
9
- def generate
10
- return unless @config.enabled
11
-
12
- log_running
13
-
14
- @config.packages.each do |config|
15
- do_config config
16
- end
17
- end
18
-
19
- def do_config(config)
20
- target_file = resolve_path_prefix(config.file, @project.dist_path)
21
- o = ''
22
- config.files.each do |file_pattern|
23
- resolved_pattern = resolve_path_prefix(file_pattern, @project.dist_path)
24
- Dir[resolved_pattern].each do |file|
25
- next if target_file == file
26
- o += File.read(file) + "\n"
9
+ def generate!(config)
10
+ result = ''
11
+ config.sources.each do |file_pattern|
12
+ Dir[file_pattern].each do |file|
13
+ next if config.target == file
14
+ result += File.read(file) + "\n"
27
15
  end
28
16
  end
29
- File.write(target_file, o)
17
+ FileUtils.mkdir_p File.dirname(config.target)
18
+
19
+ File.write(config.target, result)
30
20
  end
31
21
  end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+ require 'colorize'
3
+
4
+ # this is the generator base class
5
+ class EasyHtmlGenerator::Generator::Compile::Base <
6
+ EasyHtmlGenerator::Generator::Base
7
+
8
+ def generate!(config)
9
+ walk_files(config) do |input_file, output_file|
10
+ next unless file_changed? input_file
11
+
12
+ do_file(input_file, output_file, config)
13
+ end
14
+ end
15
+
16
+ def walk_files(config)
17
+ selector = File.join(config.source, config.selector)
18
+
19
+ Dir[selector].each do |input_file|
20
+ output_file = input_to_output_file(input_file, config)
21
+
22
+ yield(input_file, output_file)
23
+ end
24
+ end
25
+
26
+ def input_to_output_file(input_file, config)
27
+ input_file.sub(config.source, config.target)
28
+ end
29
+
30
+ def do_input!(_input, _input_file)
31
+ fail NotImplementedError.new "#{self.class.name} is an abstract class."
32
+ end
33
+
34
+ def do_file(input_file, output_file, config)
35
+ return unless File.exist?(input_file) && File.file?(input_file)
36
+
37
+ log "-> do_file #{input_file.sub(@project.src_path, '').green}"
38
+
39
+ FileUtils.mkdir_p File.dirname(output_file)
40
+
41
+ input_content = File.read(input_file)
42
+
43
+ output_content = do_input!(input_content, input_file, output_file, config)
44
+
45
+ store_file_hash(input_file)
46
+
47
+ return unless output_content
48
+
49
+ File.write(output_file, output_content)
50
+ end
51
+ end
@@ -1,30 +1,23 @@
1
1
  # encoding: utf-8
2
2
  require 'coffee_script'
3
- require 'easy_html_generator/generator/base'
3
+ require 'easy_html_generator/generator/compile/base'
4
4
 
5
5
  # this generator coffee sass files from src folder and copies them
6
6
  # to the dist folder
7
7
  class EasyHtmlGenerator::Generator::Compile::Coffee <
8
- EasyHtmlGenerator::Generator::Base
8
+ EasyHtmlGenerator::Generator::Compile::Base
9
9
 
10
- def initialize(project, config)
11
- super(project, config)
12
-
13
- @config.src = project.config.paths.src.scripts
14
- @config.dest = project.config.paths.dist.scripts
15
- end
16
-
17
- def do_input(input, src = 'inline')
10
+ def do_input!(input, input_file = 'inline', *_args)
18
11
  result = CoffeeScript.compile input
19
12
 
20
13
  return result unless @config.minimize
21
14
 
22
15
  EasyHtmlGenerator::Generator::Minimize::Js.compress result
23
16
  rescue StandardError => e
24
- raise e, "#{e.message} in #{src} ", e.backtrace
17
+ raise e, "#{e.message} in #{input_file} ", e.backtrace
25
18
  end
26
19
 
27
- def input_to_output_file(i)
28
- super(i).gsub('.js.coffee', '.js')
20
+ def input_to_output_file(input_file, config)
21
+ super(input_file, config).gsub('.js.coffee', '.js')
29
22
  end
30
23
  end