capucine 0.1.7 → 0.2.0

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.
@@ -1,44 +1,35 @@
1
- Capucine - <%= config %>
1
+ Capucine - <%= config %>
2
2
  Usage:
3
3
 
4
4
  Configure your preferences in capucine.yaml
5
5
 
6
- $ capucine [option]
7
-
8
- Options:
6
+ $ capucine [command]
9
7
 
10
- new [name] - Create a new project
11
- If not name specified, this will create the folder : capucine/
8
+ Commands:
12
9
 
10
+ new [name] - Create a new project
11
+ If not name specified, this will create the folder : capucine/
13
12
  init - Initialize a project in current folder (simply add a capucine.yaml file)
14
-
15
13
  compile [path/to/config] - Compile .sass, .coffee, .erb files (just once)
16
-
17
14
  watch [path/to/config] - Compile .sass, .coffee, .erb files (run the watcher).
18
-
19
15
  help - Print this message
20
16
 
21
17
  Shortcuts:
22
18
 
23
19
  n = new
24
-
25
20
  i = init
26
-
27
21
  c = compile
28
-
29
22
  w = watch
30
-
31
23
  h = help
32
24
 
33
25
  Informations:
34
-
26
+
35
27
  Github - https://github.com/damln/Capucine
36
28
  Documentation - http://capucine.dln.name
37
- Twitter - @wearecapucine ( http://twitter.com/wearecapucine )
38
-
29
+
39
30
  Author:
40
31
 
41
32
  Name - Damian Le Nouaillle
42
33
  Site - http://dln.name
43
34
  Twitter - @damln ( http://twitter.com/damln )
44
-
35
+
data/lib/capucine.rb CHANGED
@@ -1,14 +1,73 @@
1
- require 'settings.rb'
1
+ %w{settings coffeescript compass-sass incloudr tools}.each {|lib| require "#{lib}.rb"}
2
2
 
3
3
  module Capucine
4
-
5
- def new
6
- @settings = Capucine::Settings.new
7
- end
8
-
9
- def settings
10
- @settings
4
+ class Main
5
+
6
+ attr_accessor :settings
7
+ attr_accessor :coffee
8
+ attr_accessor :sass
9
+ attr_accessor :incloudr
10
+ attr_accessor :tools
11
+
12
+ def initialize
13
+ self.settings = Capucine::Settings.new
14
+ self.tools = Capucine::Tools.new(self)
15
+ self.sass = Capucine::CompassSass.new(self)
16
+ self.coffee = Capucine::CoffeeScript.new(self)
17
+ self.incloudr = Capucine::Incloudr.new(self)
18
+ return self
19
+ end
20
+
21
+ def run_command(command)
22
+ # command = ['c', '/path/to/file.yaml']
23
+ # command = ['c:sass', '/path/to/file.yaml']
24
+ # ...
25
+
26
+ run = command[0].to_s.split(':') # Rake like capucine compile:sass
27
+ config_or_name = command[1] # second part (the capucine.yaml file or template name/url)
28
+
29
+ main = run[0] # c, w, compile, watch, new, init
30
+ run.shift # all, coffee, sass or incloudr | sinatra, wordpress, etc ...
31
+ scope = run # all, coffee, sass or incloudr | sinatra, wordpress, etc ...
32
+
33
+ if %w{i init}.include?(main)
34
+ self.tools.init(scope[0], config_or_name)
35
+
36
+ elsif %w{n new}.include?(main)
37
+ self.tools.new_project(scope[0], config_or_name)
38
+ self.tools.compile
39
+
40
+ elsif %w{c compile}.include?(main)
41
+ self.settings.set_user_config_file(config_or_name)
42
+ self.tools.compile(scope[0])
43
+
44
+ elsif %w{j js}.include?(main)
45
+ self.settings.set_user_config_file(config_or_name)
46
+ self.tools.js(scope, config_or_name)
47
+
48
+ elsif %w{w watch}.include?(main)
49
+ self.settings.set_user_config_file(config_or_name)
50
+ self.tools.watch(scope[0])
51
+
52
+ elsif %w{cl clean}.include?(main)
53
+ self.settings.set_user_config_file(config_or_name)
54
+ self.tools.clean
55
+
56
+ elsif %w{u update}.include?(main)
57
+ self.settings.set_user_config_file(config_or_name)
58
+ self.tools.update
59
+
60
+ else
61
+ self.help
62
+ end
63
+
64
+ return self
65
+ end
66
+
67
+ def help
68
+ puts 'HELP'
69
+ end
70
+
11
71
  end
12
72
 
13
- module_function :new, :settings
14
73
  end
data/lib/cdnjs.rb ADDED
@@ -0,0 +1,71 @@
1
+ require 'open-uri'
2
+ require 'json'
3
+
4
+ module Capucine
5
+ class CDNJS
6
+ attr_accessor :result
7
+
8
+ @@cdnjsroot_github = 'https://raw.github.com/cdnjs/cdnjs/master/ajax/libs/'
9
+ @@cdnjsroot = 'http://cdnjs.cloudflare.com/ajax/libs/'
10
+ @@cdnjs = 'http://www.cdnjs.com/packages.json'
11
+
12
+
13
+ def initialize(lib_name, version = nil, content = true)
14
+
15
+ return false unless lib_name
16
+ @result = {}
17
+
18
+ cdnjs_url_pkg = "#{@@cdnjsroot_github}#{lib_name}/package.json"
19
+ raw_content = nil
20
+
21
+ begin
22
+ distant = open(cdnjs_url_pkg).read
23
+ rescue => e
24
+ @result[:error] = e; return
25
+ end
26
+ content = JSON.parse(distant)
27
+
28
+ version = version || content['version']
29
+ version = version.to_s
30
+
31
+ filename = content['filename']
32
+
33
+ raw_file_url = "#{@@cdnjsroot}#{lib_name}/#{version}/#{filename}"
34
+
35
+ if content
36
+ begin
37
+ raw_content = open(raw_file_url).read
38
+ rescue => e
39
+ @result[:error] = e; return
40
+ end
41
+ end
42
+
43
+ @result = {
44
+ :lib => lib_name,
45
+ :version => version,
46
+ :file_url => raw_file_url,
47
+ :content => raw_content,
48
+ :response => content,
49
+ }
50
+
51
+ end
52
+
53
+ def self.get_all
54
+ content = JSON.parse open(@@cdnjs).read
55
+ return content['packages']
56
+ end
57
+
58
+ def self.search(query)
59
+ results = []
60
+
61
+ self.get_all.each do |lib|
62
+ if lib['name'] =~ /#{query}/
63
+ results.push(lib)
64
+ end
65
+ end
66
+ return results
67
+ end
68
+
69
+
70
+ end
71
+ end
data/lib/coffeescript.rb CHANGED
@@ -1,38 +1,54 @@
1
1
  module Capucine
2
- class Coffee
2
+ class CoffeeScript
3
3
  require 'packr'
4
4
  require 'coffee-script'
5
- require 'fssm'
6
5
 
7
- def self.compile_dir input, output
8
- settings = Capucine.settings
6
+ def initialize(capucine)
7
+ @cap = capucine
8
+ end
9
+
10
+ def run_once(file = nil)
11
+
12
+ unless file
13
+ files = Dir.glob(File.join @cap.settings.working_dir, @cap.settings.conf['coffeescript_output_dir'], '*')
14
+ FileUtils.rm_r files
15
+ self.compile_dir @cap.settings.conf['coffeescript_files_dir'], @cap.settings.conf['coffeescript_output_dir']
16
+ else
17
+ self.compile_dir file, @cap.settings.conf['coffeescript_output_dir']
18
+ end
19
+
20
+ puts "[coffee] - Compiled"
21
+ end
22
+
23
+ def compile_dir(input, output)
9
24
 
10
25
  if File.extname(input) == '.coffee'
11
26
  coffee_files = input
12
27
  else
13
- coffee_files = File.join settings.working_dir, input, "**/**.coffee"
28
+ coffee_files = File.join @cap.settings.working_dir, input, "**/**.coffee"
14
29
  end
15
30
 
16
31
  Dir.glob(coffee_files).each do |file_coffee_o|
17
32
 
18
33
  file_coffee = File.expand_path file_coffee_o
19
- base_in_dir = File.join settings.working_dir, input
34
+ base_in_dir = File.join @cap.settings.working_dir, input
35
+
36
+ relative_path = file_coffee.gsub(File.join(@cap.settings.working_dir, @cap.settings.conf['coffeescript_files_dir'] ),'')
20
37
 
21
- relative_path = file_coffee.gsub(File.join(Capucine.settings.working_dir, Capucine.settings.config['coffeescript_files_dir'] ),'')
22
38
  relative_path = relative_path.gsub(/\.coffee$/, '.js')
23
39
  relative_path_min = relative_path.gsub(/\.js$/, '.min.js')
24
40
 
25
- file_out = File.join settings.working_dir, output, relative_path
26
- file_out_min = File.join settings.working_dir, output, relative_path_min
41
+ file_out = File.join @cap.settings.working_dir, output, relative_path
42
+ file_out_min = File.join @cap.settings.working_dir, output, relative_path_min
27
43
 
28
44
  relative_coffee_file = file_coffee.gsub(base_in_dir, '')
29
45
 
30
- opts = {:bare => settings.config['coffeescript_bare']}
46
+ opts = {:bare => @cap.settings.conf['coffeescript_bare']}
31
47
  coffee_output_min = ""
32
48
 
33
49
  error = false
34
50
  begin
35
- coffee_output = CoffeeScript.compile(File.read(file_coffee), opts)
51
+ coffee_output = ::CoffeeScript.compile(File.read(file_coffee), opts)
36
52
  rescue Exception => e
37
53
  error = true
38
54
  message = "#{e.message}"
@@ -57,37 +73,26 @@ module Capucine
57
73
 
58
74
  end
59
75
 
60
- def self.run_once file = nil
61
- settings = Capucine.settings
62
76
 
63
- unless file
64
- files = Dir.glob(File.join settings.working_dir, settings.config['coffeescript_output_dir'], '*')
65
- FileUtils.rm_r files
66
- self.compile_dir settings.config['coffeescript_files_dir'], settings.config['coffeescript_output_dir']
77
+ def run_watch
78
+ require 'fssm'
67
79
 
68
- else
69
- self.compile_dir file, settings.config['coffeescript_output_dir']
70
- end
80
+ files_to_lookat = File.join @cap.settings.working_dir, @cap.settings.conf['coffeescript_files_dir']
81
+ js_generated_dir = File.join @cap.settings.working_dir, @cap.settings.conf['coffeescript_output_dir']
71
82
 
72
- puts "[coffee] - Compiled"
73
- end
74
-
75
- def self.proc_watch
76
- settings = Capucine.settings
77
-
78
- files_to_lookat = File.join settings.working_dir, settings.config['coffeescript_files_dir']
79
- js_generated_dir = File.join settings.working_dir, settings.config['coffeescript_output_dir']
83
+ coffee = @cap.coffee
80
84
 
81
85
  coffee_thread = Thread.new {
86
+
82
87
  FSSM.monitor(files_to_lookat, :directories => true) do
83
88
  update do |b, r|
84
89
  file = File.join b, r
85
- Capucine::Coffee.run_once file if File.extname(r) == '.coffee'
90
+ coffee.run_once file if File.extname(r) == '.coffee' # COFFEE
86
91
  end
87
92
 
88
93
  create do |b, r|
89
94
  file = File.join b, r
90
- Capucine::Coffee.run_once file if File.extname(r) == '.coffee'
95
+ coffee.run_once file if File.extname(r) == '.coffee' # COFFEE
91
96
  end
92
97
 
93
98
  delete do |b, r|
@@ -116,6 +121,7 @@ module Capucine
116
121
 
117
122
  return coffee_thread
118
123
 
124
+
119
125
  end
120
126
 
121
127
  end
data/lib/compass-sass.rb CHANGED
@@ -1,7 +1,21 @@
1
1
  module Capucine
2
2
  class CompassSass
3
+ attr_accessor :tmp_config
3
4
 
4
- def self.update_plugins gems
5
+ def initialize(capucine)
6
+ @cap = capucine
7
+ end
8
+
9
+ def run_once
10
+ self.update_config
11
+ self.import_css if @cap.settings.conf['sass_import_css']
12
+
13
+ command = "compile --quiet --config \"#{@tmp_config}\" \"#{@cap.settings.working_dir}\""
14
+ self.exec_compass(command)
15
+ puts "[compass] - Compiled"
16
+ end
17
+
18
+ def update_plugins gems
5
19
  return if not gems
6
20
  gems.each do |plugin|
7
21
  begin
@@ -12,20 +26,25 @@ module Capucine
12
26
  end
13
27
  end
14
28
 
15
- def self.update_config
16
- settings = Capucine.settings
17
- template_file = File.join settings.gem_content_dir, 'templates', 'compass_config.erb'
18
- output_file = File.join settings.working_dir, '.compass.rb'
29
+ def update_config
30
+ require 'tempfile'
31
+ require 'digest/md5'
32
+
33
+ template_file = File.join @cap.settings.content_dir, 'templates', 'compass_config.erb'
19
34
 
20
- settings.config['compass_plugins_list'] = []
35
+ md5 = Digest::MD5.hexdigest(@cap.settings.working_dir.to_s)
36
+ tmp = Tempfile.new('capucine_'+md5)
37
+ @tmp_config = tmp.path
38
+
39
+ @cap.settings.conf['compass_plugins_list'] = []
21
40
  plugins_gems = []
22
41
 
23
- plugins = settings.config['compass_plugins']
42
+ plugins = @cap.settings.conf['compass_plugins']
24
43
 
25
44
  if plugins.size > 0
26
45
  plugins.each do |p|
27
46
  p = p.split('|')
28
- settings.config['compass_plugins_list'].push p[0]
47
+ @cap.settings.conf['compass_plugins_list'].push p[0]
29
48
  if p[1]
30
49
  plugins_gems.push p[1]
31
50
  else
@@ -35,75 +54,54 @@ module Capucine
35
54
  end
36
55
  end
37
56
 
38
- config_ = settings.config
39
- result = Capucine::Tools.render_template template_file, config_
57
+ result = @cap.tools.render_template template_file, @cap.settings.conf
40
58
 
41
- f = File.open(output_file, 'w')
59
+ f = File.open(@tmp_config, 'w')
42
60
  f.write(result)
43
61
  f.close
44
62
 
45
63
  self.update_plugins plugins_gems
46
- end
47
64
 
48
- # def self.load_my_functions
49
- # rb_files = Dir.glob "#{Capucine.settings.working_dir}/#{Capucine.settings.config['compass_compass_files_dir']}/**/**.rb"
50
- #
51
- # rb_files.each do |file|
52
- # require "#{file}"
53
- # end
54
- #
55
- # end
65
+ return tmp.path
66
+ end
56
67
 
57
- def self.import_css
68
+ def import_css
58
69
 
59
- s = Capucine.settings
60
- import_dir = File.join s.working_dir, s.config['sass_import_css_dir']
61
- output_dir= File.join s.working_dir, s.config['sass_import_output_dir']
70
+ import_dir = File.join @cap.settings.working_dir, @cap.settings.conf['sass_import_css_dir']
71
+ output_dir= File.join @cap.settings.working_dir, @cap.settings.conf['sass_import_output_dir']
62
72
 
63
73
  Dir.mkdir(import_dir) if not File.directory?(import_dir)
64
74
  Dir.mkdir(output_dir) if not File.directory?(output_dir)
65
75
 
66
- formats = s.config['sass_import_formats'].split
76
+ formats = @cap.settings.conf['sass_import_formats'].split
67
77
  from_format = formats[0]
68
78
  to_format = formats[2]
69
79
 
70
80
  command = "sass-convert -R --from #{from_format} --to #{to_format} \"#{import_dir}\" \"#{output_dir}\""
71
81
  system(command)
72
- Capucine::Tools.archive_file import_dir
82
+ @cap.tools.archive_file import_dir
73
83
 
74
84
  end
75
85
 
76
- def self.run_once
77
- self.update_config
78
- # self.load_my_functions
79
- self.import_css if Capucine.settings.config['sass_import_css']
80
- config = File.join Capucine.settings.working_dir, '.compass.rb'
81
- command = "compass compile --quiet --config \"#{config}\" \"#{Capucine.settings.working_dir}\""
82
- system(command)
83
- puts "[compass] - Compiled"
86
+ def exec_compass compass_args, system = true
87
+ if not system
88
+ require 'compass'
89
+ require 'compass/exec'
90
+ return Compass::Exec::SubCommandUI.new(compass_args).run!
91
+ else
92
+ return system("compass #{compass_args}")
93
+ end
84
94
  end
85
95
 
86
- # def self.export_path
87
- # require 'compass'
88
- # require 'rubygems'
89
- # path_compass = Gem.loaded_specs['compass'].full_gem_path
90
- # ENV['PATH'] = "#{path_compass}:#{Capucine.settings.gem_dir}:#{ENV['PATH']}"
91
- # end
96
+ def run_watch
97
+ conf = self.update_config
98
+ self.import_css if @cap.settings.conf['sass_import_css']
92
99
 
93
- def self.proc_watch
94
- self.update_config
95
- config_file = File.join Capucine.settings.working_dir, '.compass.rb'
96
- compass_args = ['watch', '--config', config_file, Capucine.settings.working_dir]
97
- proc_watch = Thread.new {
98
- self.exec_compass compass_args
99
- }
100
- return proc_watch
101
- end
100
+ compass_args = ['watch', '--config', conf, @cap.settings.working_dir]
101
+ compass_args = compass_args.join(' ')
102
102
 
103
- def self.exec_compass compass_args
104
- require 'compass'
105
- require 'compass/exec'
106
- Compass::Exec::SubCommandUI.new(compass_args).run!
103
+ proc_watch = Thread.new { self.exec_compass compass_args }
104
+ return proc_watch
107
105
  end
108
106
 
109
107
  end
data/lib/incloudr.rb CHANGED
@@ -1,50 +1,64 @@
1
1
  module Capucine
2
2
  class Incloudr
3
+
4
+ require 'cdnjs.rb'
5
+ require 'npm.rb'
6
+
3
7
  require 'open-uri'
4
8
  require 'fileutils'
5
- require 'json'
6
9
  require 'packr'
7
10
 
8
- @@noderoot = 'http://registry.npmjs.org/'
9
- @@cdnjsroot = 'https://raw.github.com/cdnjs/cdnjs/master/ajax/libs/'
10
- @@cdnjs = 'http://www.cdnjs.com/packages.json'
11
+ def initialize(capucine)
12
+ @cap = capucine
13
+ end
11
14
 
12
- def self.run_once
13
- files = Capucine.settings.config['incloudr_libs']
15
+ def run_once
16
+ files = @cap.settings.conf['incloudr_libs']
14
17
  return false if files.length == 0
15
- dir = File.join(Capucine.settings.working_dir, Capucine.settings.config['incloudr_output_dir'])
18
+
19
+ dir = File.join(@cap.settings.working_dir, @cap.settings.conf['incloudr_output_dir'])
16
20
  FileUtils.rm_r dir if File.exist?(dir)
17
21
  FileUtils.mkdir_p dir
18
22
 
19
23
  @file = nil
24
+
20
25
  files.each {|file| self.pack file}
21
26
  puts "[incloudr] - Packaged"
22
27
  end
23
28
 
24
- def self.pack file
29
+ def pack file
30
+
25
31
  @file = file
26
32
 
27
- if @file.kind_of? String # CDNJS
28
- @file = {}
29
- @file['name'] = file
30
- @file['type'] = 'cdnjs'
31
- else
32
- @file['type'] = 'npm' unless @file['source'] # NPM
33
- end
33
+ @file['version'] = @file['version'].to_s if @file['version']
34
+ @file['type'] = @file['type'] || 'cdnjs'
35
+ @file['type'] = 'url' if @file['source']
34
36
 
35
- @file['type'] = @file['type'] || 'url' # URL
37
+ name = @file['file_name'] || @file['name']
36
38
 
37
- @output = File.join(Capucine.settings.working_dir, Capucine.settings.config['incloudr_output_dir'], @file['name'].gsub(/$/, '.js'))
38
- @output_min = File.join(Capucine.settings.working_dir, Capucine.settings.config['incloudr_output_dir'], @file['name'].gsub(/$/, '.min.js'))
39
+ @dir = @cap.settings.working_dir
40
+ @conf = @cap.settings.conf
41
+
42
+ @output = File.join(@dir, @conf['incloudr_output_dir'], name.gsub(/$/, '.js'))
43
+ @output_min = File.join(@dir, @conf['incloudr_output_dir'], name.gsub(/$/, '.min.js'))
39
44
 
40
45
  self.cdnjs if @file['type'] == 'cdnjs'
41
46
  self.url if @file['type'] == 'url'
42
- # self.npm(file) if type == 'npm'
47
+ # self.npm if @file['type'] == 'npm'
43
48
  end
44
49
 
50
+ def url raw_content = nil
51
+ if not raw_content
52
+ begin
53
+ content = open(@file['source']).read
54
+ rescue => e
55
+ puts "Error"
56
+ return e
57
+ end
58
+ else
59
+ content = raw_content
60
+ end
45
61
 
46
- def self.url raw_content = nil
47
- content = raw_content || open(@file['source']).read
48
62
  content_min = ""
49
63
  content_min << Packr.pack(content)
50
64
 
@@ -57,34 +71,21 @@ module Capucine
57
71
  f2.close
58
72
  end
59
73
 
74
+ def cdnjs
75
+ api = Capucine::CDNJS.new(@file['name'], @file['version'], content = false)
60
76
 
61
- def self.cdnjs
62
- cdnjs_url_pkg = "#{@@cdnjsroot}#{@file['name']}/package.json"
63
- content = JSON.parse open(cdnjs_url_pkg).read
64
- version = @file['version'] || content['version']
65
- filename = content['filename']
66
- raw_file_url = "#{@@cdnjsroot}#{@file['name']}/#{version}/#{filename}"
67
- raw_content = open(raw_file_url).read
68
- self.url raw_content
77
+ if not api.result[:error]
78
+ self.url api.result[:content]
79
+ else
80
+ puts "Error on #{@file['name']}"
81
+ end
69
82
  end
70
83
 
71
- def self.npm file
72
- # infos = JSON.parse open("#{@@noderoot}#{file['name']}").read
73
- # version = file['version'] || infos['dist-tags']['lastest']
74
- # lib = infos['versions'][version]
75
- # tarball_url = lib['dist']['tarball']
76
-
77
- # tarball = open(tarball_url).read
78
-
79
- # p version
84
+ def npm
85
+ # TODO !
80
86
 
81
87
  end
82
88
 
83
- def self.list
84
- content = JSON.parse open(@@cdnjs).read
85
- packages = content['packages']
86
- packages.each {|p| puts "#{p['name']}\n"}
87
- end
88
89
 
89
90
  end
90
91
  end
data/lib/npm.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'open-uri'
2
+ require 'zlib'
3
+ require 'fileutils'
4
+ require 'json'
5
+ require 'packr'
6
+
7
+ module Capucine
8
+ class NPM
9
+ @@noderoot = 'http://registry.npmjs.org/'
10
+
11
+ def initialise(lib_name)
12
+ infos = JSON.parse open("#{@@noderoot}#{file['name']}").read
13
+ version = file['version'] || infos['dist-tags']['lastest']
14
+ lib = infos['versions'][version]
15
+ tarball_url = lib['dist']['tarball']
16
+
17
+ # tarball = open(tarball_url).read
18
+
19
+ end
20
+ end
21
+ end