compass-connector 0.5.2 → 0.6

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,63 +1,69 @@
1
1
  require 'compass'
2
+
2
3
  require 'json'
4
+ require 'base64'
3
5
 
4
6
  require 'compass-connector/importer'
5
7
 
6
8
  module CompassConnector
7
9
 
10
+ class FakeFile < File
11
+ def initialize(data)
12
+ path = "/tmp/"+data["hash"]+"."+data["ext"]
13
+ super path, "w+b"
14
+ write(Base64.decode64(data["data"]))
15
+ rewind()
16
+ File.utime(Time.new, Time.at(data["mtime"]), path)
17
+ end
18
+
19
+ def self.from_response(response)
20
+ if response
21
+ FakeFile.new(response)
22
+ end
23
+ end
24
+
25
+ end
26
+
8
27
  class Resolver
9
28
 
10
29
  @process = nil
11
30
 
12
31
  private_class_method
13
32
  def self.resolver(method, *args)
14
- if @process == nil
15
- cmd = ENV["COMPASS_CONNECTOR"]
16
- if cmd == nil
17
- raise Compass::Error, "You have to define COMPASS_CONNECTOR env variable"
18
- end
19
- @process = IO.popen(cmd, "r+")
20
- end
21
-
22
33
  data_in = JSON::dump({'method' => method, 'args' => args})
23
- #$stdout.puts "Process input: " + data_in
24
- @process << data_in << "\n"
25
- out = @process.gets
26
- #$stdout.puts "Process output: " + out
34
+ STDOUT.puts data_in << "\n"
35
+ STDOUT.flush
36
+ out = STDIN.gets
27
37
  ret = JSON::load(out)
28
38
  if ret.kind_of?(Hash) and ret.has_key?("error")
29
- raise Compass::Error, "Remote process error: " + ret["error"]
39
+ raise "Remote process error: " + ret["error"]
30
40
  end
31
41
  return ret
32
42
  end
33
43
 
34
-
35
- def self.find_scss(uri)
36
- resolver("find_scss", uri)
37
- end
38
- def self.list_main_files()
39
- resolver("list_main_files")
44
+ def self.find_import(uri)
45
+ FakeFile.from_response(resolver("find_import", uri))
40
46
  end
41
47
  def self.image_url(path)
42
48
  resolver("get_image_url", path)
43
49
  end
44
- def self.find_image(path)
45
- resolver("find_image", path)
50
+ def self.get_image(path)
51
+ FakeFile.from_response(resolver("get_file", path, "image"))
46
52
  end
47
53
  def self.generated_image_url(path)
48
54
  resolver("get_generated_image_url", path)
49
55
  end
50
- def self.find_generated_image(path)
51
- resolver("find_generated_image", path)
56
+ def self.get_generated_image(path)
57
+ FakeFile.from_response(resolver("get_file", path, "generated_image"))
52
58
  end
53
59
  def self.find_sprites_matching(uri)
54
60
  resolver("find_sprites_matching", uri)
55
61
  end
56
62
  def self.find_sprite(file)
57
- resolver("find_sprite", file)
63
+ FakeFile.from_response(resolver("get_file", file, "sprite"))
58
64
  end
59
- def self.find_font(path)
60
- resolver("find_font", path)
65
+ def self.get_font(path)
66
+ FakeFile.from_response(resolver("get_file", path, "font"))
61
67
  end
62
68
  def self.font_url(path)
63
69
  resolver("get_font_url", path)
@@ -65,6 +71,15 @@ module CompassConnector
65
71
  def self.stylesheet_url(path)
66
72
  resolver("get_stylesheet_url", path)
67
73
  end
74
+ def self.put_sprite(filename, f)
75
+ resolver("put_file", filename, "sprite", Base64.encode64(f.read))
76
+ end
77
+ def self.put_output_css(filename, data)
78
+ resolver("put_file", filename, "css", Base64.encode64(data))
79
+ end
80
+ def self.get_output_css(filename)
81
+ FakeFile.from_response(resolver("get_file", filename, "out_stylesheet"))
82
+ end
68
83
 
69
84
  def self.configuration()
70
85
  resolver("get_configuration")
@@ -75,10 +90,12 @@ module CompassConnector
75
90
  end
76
91
 
77
92
  require 'compass-connector/configuration'
93
+ require 'compass-connector/patches/actions'
78
94
  require 'compass-connector/patches/compiler'
79
95
  require 'compass-connector/patches/urls'
80
96
  require 'compass-connector/patches/sprite_image'
81
97
  require 'compass-connector/patches/sprite_map'
98
+ require 'compass-connector/patches/sprite_methods'
82
99
  require 'compass-connector/patches/sprite_importer'
83
100
  require 'compass-connector/patches/image_size'
84
101
  require 'compass-connector/patches/inline_images'
@@ -8,13 +8,11 @@ module CompassConnector
8
8
  end
9
9
 
10
10
  def find(uri, options)
11
- f = CompassConnector::Resolver.find_scss(uri)
11
+ f = CompassConnector::Resolver.find_import(uri)
12
12
 
13
13
  if f
14
- f = f.to_s
15
- syntax = (f =~ /\.(s[ac]ss)$/) && $1.to_sym || :sass
16
- opts = options.merge(:syntax => syntax, :importer => self, :filename => f)
17
- return Sass::Engine.new(open(f).read, opts)
14
+ opts = options.merge(:syntax => :scss, :importer => self, :filename => uri)
15
+ return Sass::Engine.new(f.read, opts)
18
16
  end
19
17
 
20
18
  nil
@@ -25,9 +23,6 @@ module CompassConnector
25
23
  end
26
24
 
27
25
  def mtime(name, options)
28
- file, s = find_real_file(name)
29
- File.mtime(file) if file
30
- rescue Errno::ENOENT
31
26
  nil
32
27
  end
33
28
 
@@ -0,0 +1,28 @@
1
+ module Compass
2
+ module Actions
3
+
4
+ # Write a file given the file contents as a string
5
+ def write_file(file_name, contents, options = nil, binary = false)
6
+ options[:force] = false
7
+ options ||= self.options if self.respond_to?(:options)
8
+ skip_write = options[:dry_run]
9
+ contents = process_erb(contents, options[:erb]) if options[:erb]
10
+ old_file = CompassConnector::Resolver.get_output_css(file_name)
11
+ if old_file != nil
12
+ existing_contents = old_file.read()
13
+ if existing_contents == contents
14
+ log_action :identical, basename(file_name), options
15
+ skip_write = true
16
+ else options[:force]
17
+ log_action :overwrite, basename(file_name), options
18
+ end
19
+ else
20
+ log_action :create, basename(file_name), options
21
+ end
22
+ if not skip_write
23
+ CompassConnector::Resolver.put_output_css(file_name, contents)
24
+ end
25
+ end
26
+
27
+ end
28
+ end
@@ -10,14 +10,12 @@ module Compass
10
10
  exclude_partials = options.fetch(:exclude_partials, true)
11
11
 
12
12
  if self.options[:sass_files] != nil
13
- @sass_files = self.options[:sass_files]
14
- else
15
13
  @sass_files = []
16
- out = CompassConnector::Resolver.list_main_files
17
- out.to_enum.each do |item|
18
- @sass_files << item.to_s
19
- end
20
-
14
+ self.options[:sass_files].each { |f|
15
+ @sass_files << shorten_path(f)
16
+ }
17
+ else
18
+ raise "Cannot compile project, only single files are supported"
21
19
  end
22
20
 
23
21
  @sass_files
@@ -27,12 +25,26 @@ module Compass
27
25
  sass_file[0..-6].sub(/\.css$/,'')
28
26
  end
29
27
 
28
+ def shorten_path(path)
29
+ if path.start_with?(Dir.pwd)
30
+ path[Dir.pwd.length+1..-1]
31
+ else
32
+ path
33
+ end
34
+ end
35
+
30
36
  # A sass engine for compiling a single file.
31
37
  def engine(sass_filename, css_filename)
32
- sass_filename = CompassConnector::Resolver.find_scss(sass_filename).to_s
38
+ sass_filename = shorten_path(sass_filename)
39
+ css_filename = corresponding_css_file(sass_filename)
40
+
41
+ sass_file = CompassConnector::Resolver.find_import(sass_filename)
42
+ if not sass_file
43
+ raise "File '#{sass_filename}' was not found"
44
+ end
33
45
  syntax = (sass_filename =~ /\.(s[ac]ss)$/) && $1.to_sym || :sass
34
46
  opts = sass_options.merge(:filename => sass_filename, :css_filename => css_filename, :syntax => syntax)
35
- Sass::Engine.new(open(sass_filename).read, opts)
47
+ Sass::Engine.new(sass_file.read, opts)
36
48
  end
37
49
 
38
50
  def sass_options
@@ -44,11 +56,7 @@ module Compass
44
56
  end
45
57
 
46
58
  def corresponding_css_file(sass_file)
47
- if sass_file.start_with? from
48
- sass_file = sass_file[from.length+1 .. -1]
49
- end
50
-
51
- "#{to}/#{stylesheet_name(sass_file)}.css"
59
+ "#{stylesheet_name(sass_file)}.css"
52
60
  end
53
61
  end
54
62
  end
@@ -2,6 +2,6 @@ require "compass/sass_extensions/functions/image_size"
2
2
 
3
3
  module Compass::SassExtensions::Functions::ImageSize
4
4
  def real_path(image_file)
5
- CompassConnector::Resolver.find_image(image_file)
5
+ file = CompassConnector::Resolver.get_image(image_file)
6
6
  end
7
7
  end
@@ -4,8 +4,8 @@ module Compass::SassExtensions::Functions::InlineImage
4
4
 
5
5
  def inline_image(path, mime_type = nil)
6
6
  path = path.value
7
- real_path = CompassConnector::Resolver.find_image(path)
8
- inline_image_string(data(real_path), compute_mime_type(path, mime_type))
7
+ my_file = CompassConnector::Resolver.get_image(path)
8
+ inline_image_string(data(my_file.to_path), compute_mime_type(path, mime_type))
9
9
  end
10
10
 
11
11
  def inline_font_files(*args)
@@ -13,7 +13,7 @@ module Compass::SassExtensions::Functions::InlineImage
13
13
  files = []
14
14
  while args.size > 0
15
15
  path = args.shift.value
16
- real_path = CompassConnector::Resolver.find_font(path)
16
+ real_path = CompassConnector::Resolver.get_font(path)
17
17
  url = inline_image_string(data(real_path), compute_mime_type(path))
18
18
  files << "#{url} format('#{args.shift}')"
19
19
  end
@@ -5,7 +5,7 @@ module Compass
5
5
  module Sprites
6
6
  class Image
7
7
  def find_file
8
- CompassConnector::Resolver.find_sprite(relative_file).to_s
8
+ CompassConnector::Resolver.find_sprite(relative_file)
9
9
  end
10
10
  end
11
11
  end
@@ -0,0 +1,49 @@
1
+ require "compass/sass_extensions/sprites/sprite_methods"
2
+ require "tempfile"
3
+
4
+ module Compass
5
+ module SassExtensions
6
+ module Sprites
7
+ module SpriteMethods
8
+
9
+ def tmp_filename
10
+ fname = File.join(Compass.configuration.generated_images_path, name_and_hash)
11
+ f = CompassConnector::Resolver.get_generated_image(fname)
12
+ f && f.to_path || nil
13
+ end
14
+
15
+ def generation_required?
16
+ !(tmp_filename && File.exists?(tmp_filename)) || outdated?
17
+ end
18
+
19
+ def outdated?
20
+ if tmp_filename && File.exists?(tmp_filename)
21
+ return @images.any? {|image|
22
+ image.mtime.to_i > self.mtime.to_i
23
+ }
24
+ end
25
+ true
26
+ end
27
+
28
+ def mtime
29
+ @mtime ||= File.mtime(tmp_filename)
30
+ end
31
+
32
+ def save!
33
+ f=Tempfile.new("sprite")
34
+ engine.save(f.to_path)
35
+ f.rewind
36
+ saved = CompassConnector::Resolver.put_sprite(filename, f)
37
+ f.close!
38
+
39
+ #saved = true engine.save(filename)
40
+ log :create, filename
41
+ Compass.configuration.run_sprite_saved(filename)
42
+ @mtime = nil if saved
43
+ saved
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
@@ -3,16 +3,17 @@ require 'compass/sass_extensions/functions/urls'
3
3
  module Compass::SassExtensions::Functions::Urls
4
4
  module ImageUrl
5
5
  def image_url(path, only_path = Sass::Script::Bool.new(false), cache_buster = Sass::Script::Bool.new(true))
6
- path = path.value
6
+ org_path = path.value
7
7
 
8
- real_path = CompassConnector::Resolver.find_image(path)
9
- path = CompassConnector::Resolver.image_url(path)
8
+ path = CompassConnector::Resolver.image_url(org_path)
10
9
 
11
10
  # Compute and append the cache buster if there is one.
12
11
  if cache_buster.to_bool
13
12
  if cache_buster.is_a?(Sass::Script::String)
14
13
  path += "?#{cache_buster.value}"
15
14
  else
15
+ data = CompassConnector::Resolver.get_image(org_path)
16
+ real_path = data.to_path
16
17
  path = cache_busted_path(path, real_path)
17
18
  end
18
19
  end
@@ -52,16 +53,16 @@ module Compass::SassExtensions::Functions::Urls
52
53
  end
53
54
  module GeneratedImageUrl
54
55
  def generated_image_url(path, cache_buster = Sass::Script::Bool.new(false))
55
- path = path.value # get to the string value of the literal.
56
+ org_path = path.value # get to the string value of the literal.
56
57
 
57
- real_path = CompassConnector::Resolver.find_generated_image(path)
58
- path = CompassConnector::Resolver.generated_image_url(path)
58
+ path = CompassConnector::Resolver.generated_image_url(org_path)
59
59
 
60
60
  # Compute and append the cache buster if there is one.
61
61
  if cache_buster.to_bool
62
62
  if cache_buster.is_a?(Sass::Script::String)
63
63
  path += "?#{cache_buster.value}"
64
64
  else
65
+ real_path = CompassConnector::Resolver.get_generated_image(org_path).to_path
65
66
  path = cache_busted_path(path, real_path)
66
67
  end
67
68
  end
@@ -69,4 +70,4 @@ module Compass::SassExtensions::Functions::Urls
69
70
  clean_url(path)
70
71
  end
71
72
  end
72
- end
73
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: compass-connector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: '0.6'
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-04-08 00:00:00.000000000 Z
12
+ date: 2013-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: compass
@@ -37,9 +37,11 @@ files:
37
37
  - lib/compass-connector/configuration.rb
38
38
  - lib/compass-connector/importer.rb
39
39
  - lib/compass-connector/patches/compiler.rb
40
+ - lib/compass-connector/patches/actions.rb
40
41
  - lib/compass-connector/patches/sprite_map.rb
41
42
  - lib/compass-connector/patches/inline_images.rb
42
43
  - lib/compass-connector/patches/sprite_importer.rb
44
+ - lib/compass-connector/patches/sprite_methods.rb
43
45
  - lib/compass-connector/patches/urls.rb
44
46
  - lib/compass-connector/patches/sprite_image.rb
45
47
  - lib/compass-connector/patches/image_size.rb