nimbu 0.1.2 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,8 @@
1
1
  require "nimbu/command/base"
2
2
  require "nimbu/server/base"
3
3
  require 'term/ansicolor'
4
+ require 'compass'
5
+ require 'compass/exec'
4
6
 
5
7
  # running a local server to speed up designing Nimbu themes
6
8
  #
@@ -15,8 +17,128 @@ class Nimbu::Command::Server < Nimbu::Command::Base
15
17
  if !Nimbu::Auth.read_configuration && !Nimbu::Auth.read_credentials
16
18
  print red(bold("ERROR")), ": this directory does not seem to contain any Nimbu theme or your credentials are not set. \n ==> Run \"", bold { "nimbu init"}, "\" to initialize this directory."
17
19
  else
18
- puts "Starting the server..."
19
- Nimbu::Server::Base.run!
20
+ server_pid = fork do
21
+ puts "Starting the server..."
22
+ Nimbu::Server::Base.run!
23
+ end
24
+ haml_pid = fork do
25
+ puts "Watching haml files..."
26
+ HamlWatcher.watch
27
+ end
28
+ compass_pid = fork do
29
+ puts "Watching compass files..."
30
+ Compass::Exec::SubCommandUI.new(["watch","."]).run!
31
+ end
32
+
33
+ Process.wait(server_pid)
34
+ Process.wait(haml_pid)
35
+ Process.wait(compass_pid)
36
+
37
+ end
38
+ end
39
+ end
40
+
41
+ require 'rubygems'
42
+ require 'fssm'
43
+ require 'haml'
44
+
45
+ class HamlWatcher
46
+ class << self
47
+ include Term::ANSIColor
48
+
49
+ def watch
50
+ refresh
51
+ puts ">>> HamlWatcher is watching for changes. Press Ctrl-C to Stop."
52
+ FSSM.monitor('haml', '**/*.haml') do
53
+ update do |base, relative|
54
+ puts ">>> Change detected to: #{relative}"
55
+ HamlWatcher.compile(relative)
56
+ end
57
+ create do |base, relative|
58
+ puts ">>> File created: #{relative}"
59
+ HamlWatcher.compile(relative)
60
+ end
61
+ delete do |base, relative|
62
+ puts ">>> File deleted: #{relative}"
63
+ HamlWatcher.remove(relative)
64
+ end
65
+ end
66
+ end
67
+
68
+ def output_file(filename)
69
+ # './haml' retains the base directory structure
70
+ filename.gsub(/\.html\.haml$/,'.html').gsub(/\.liquid\.haml$/,'.liquid')
71
+ end
72
+
73
+ def remove(file)
74
+ output = output_file(file)
75
+ File.delete output
76
+ puts "\033[0;31m remove\033[0m #{output}"
77
+ end
78
+
79
+ def compile(file)
80
+ begin
81
+ output_file_name = output_file(file)
82
+ origin = File.open(File.join('haml', file)).read
83
+ result = Haml::Engine.new(origin).render
84
+ raise "Nothing rendered!" if result.empty?
85
+ # Write rendered HTML to file
86
+ color, action = File.exist?(output_file_name) ? [33, 'overwrite'] : [32, ' create']
87
+ puts "\033[0;#{color}m#{action}\033[0m #{output_file_name}"
88
+ FileUtils.mkdir_p(File.dirname(output_file_name))
89
+ File.open(output_file_name,'w') {|f| f.write(result)}
90
+ rescue Exception => e
91
+ print red("#{plainError e, file}\n")
92
+ output_file_name = output_file(file)
93
+ result = goHere(e, file)
94
+ File.open(output_file_name,'w') {|f| f.write(result)} if File::exists?(output_file_name)
95
+ end
96
+ end
97
+
98
+ # Check that all haml templates have been rendered.
99
+ def refresh
100
+ Dir.glob('haml/**/*.haml').each do |file|
101
+ file.gsub!(/^haml\//, '')
102
+ compile(file) unless File.exist?(output_file(file))
103
+ end
104
+ end
105
+
106
+ def goHere(message, nameoffile)
107
+ @messag = ""
108
+ #@messag += "<html><head><title>ERROR IN CODE</title>"
109
+ #CSS for error styling.
110
+ @messag += "<style type = \"text/css\">"
111
+ @messag +="body { background-color: #fff; margin: 40px; font-family: Lucida Grande, Verdana, Sans-serif; font-size: 12px; color: #000;}"
112
+ @messag +="#content { border: #999 1px solid; background-color: #fff; padding: 20px 20px 12px 20px;}"
113
+ @messag +="h1 { font-weight: normal; font-size: 14px; color: #990000; margin: 0 0 4px 0; }"
114
+ @messag += "</style>"
115
+ @messag += "<div id=\"content\">"
116
+ @messag += "<h1>You have an Error in your HAML code </h1>"
117
+ @messag += "<p>#{message} </p>"
118
+ @messag += "<p>On Line : #{get_line message}.</p>"
119
+ @messag += "<p>In file location: <strong>#{nameoffile}</strong></p>"
120
+ @messag += "</div>"
121
+ return @messag
122
+ end
123
+
124
+ def get_line(exception)
125
+ # SyntaxErrors have weird line reporting
126
+ # when there's trailing whitespace,
127
+ # which there is for Haml documents.
128
+ return (exception.message.scan(/:(\d+)/).first || ["??"]).first if exception.is_a?(::SyntaxError)
129
+ (exception.backtrace[0].scan(/:(\d+)/).first || ["??"]).first
130
+ end
131
+
132
+ def plainError(message, nameoffile)
133
+ @plainMessage = ""
134
+ @plainMessage += "Error: #{message} \n"
135
+ @plainMessage += "Line number #{get_line message} "
136
+ @plainMessage += "File error detected: #{nameoffile}"
137
+ return @plainMessage
138
+ end
139
+
140
+ def sassErrorLine message
141
+ return message
20
142
  end
21
143
  end
22
144
  end
@@ -1,3 +1,3 @@
1
1
  module Nimbu
2
- VERSION = "0.1.2"
2
+ VERSION = "0.2"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nimbu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-02-24 00:00:00.000000000 Z
12
+ date: 2012-02-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &70322002873140 !ruby/object:Gem::Requirement
16
+ requirement: &70143971766620 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.5
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70322002873140
24
+ version_requirements: *70143971766620
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rest-client
27
- requirement: &70322003251940 !ruby/object:Gem::Requirement
27
+ requirement: &70143971766080 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.6.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70322003251940
35
+ version_requirements: *70143971766080
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: launchy
38
- requirement: &70322003229180 !ruby/object:Gem::Requirement
38
+ requirement: &70143971765600 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.3.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70322003229180
46
+ version_requirements: *70143971765600
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rubyzip
49
- requirement: &70322003217740 !ruby/object:Gem::Requirement
49
+ requirement: &70143971765140 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70322003217740
57
+ version_requirements: *70143971765140
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: sinatra
60
- requirement: &70322003208920 !ruby/object:Gem::Requirement
60
+ requirement: &70143971764540 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,40 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70322003208920
68
+ version_requirements: *70143971764540
69
+ - !ruby/object:Gem::Dependency
70
+ name: compass
71
+ requirement: &70143971763980 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *70143971763980
80
+ - !ruby/object:Gem::Dependency
81
+ name: haml
82
+ requirement: &70143971762860 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :runtime
89
+ prerelease: false
90
+ version_requirements: *70143971762860
91
+ - !ruby/object:Gem::Dependency
92
+ name: fssm
93
+ requirement: &70143971762380 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :runtime
100
+ prerelease: false
101
+ version_requirements: *70143971762380
69
102
  description: Client library and command-line tool to design and manage websites on
70
103
  the Nimbu platform.
71
104
  email: