compass-connector 0.5.1

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.
@@ -0,0 +1,84 @@
1
+ require 'compass'
2
+ require 'json'
3
+
4
+ require 'compass-connector/importer'
5
+
6
+ module CompassConnector
7
+
8
+ class Resolver
9
+
10
+ @process = nil
11
+
12
+ private_class_method
13
+ 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
+ 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
27
+ ret = JSON::load(out)
28
+ if ret.kind_of?(Hash) and ret.has_key?("error")
29
+ raise Compass::Error, "Remote process error: " + ret["error"]
30
+ end
31
+ return ret
32
+ end
33
+
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")
40
+ end
41
+ def self.image_url(path)
42
+ resolver("get_image_url", path)
43
+ end
44
+ def self.find_image(path)
45
+ resolver("find_image", path)
46
+ end
47
+ def self.generated_image_url(path)
48
+ resolver("get_generated_image_url", path)
49
+ end
50
+ def self.find_generated_image(path)
51
+ resolver("find_generated_image", path)
52
+ end
53
+ def self.find_sprites_matching(uri)
54
+ resolver("find_sprites_matching", uri)
55
+ end
56
+ def self.find_sprite(file)
57
+ resolver("find_sprite", file)
58
+ end
59
+ def self.find_font(path)
60
+ resolver("find_font", path)
61
+ end
62
+ def self.font_url(path)
63
+ resolver("get_font_url", path)
64
+ end
65
+ def self.stylesheet_url(path)
66
+ resolver("get_stylesheet_url", path)
67
+ end
68
+
69
+ def self.configuration()
70
+ resolver("get_configuration")
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+ require 'compass-connector/configuration'
78
+ require 'compass-connector/patches/compiler'
79
+ require 'compass-connector/patches/urls'
80
+ require 'compass-connector/patches/sprite_image'
81
+ require 'compass-connector/patches/sprite_map'
82
+ require 'compass-connector/patches/sprite_importer'
83
+ require 'compass-connector/patches/image_size'
84
+ require 'compass-connector/patches/inline_images'
@@ -0,0 +1,13 @@
1
+ require "compass/configuration"
2
+
3
+ CompassConnector::Resolver.configuration().each do |key,value|
4
+ if value.is_a?String and value.start_with?(":")
5
+ value[0]=''
6
+ value = value.to_sym
7
+ end
8
+ Compass.configuration.send(key+"=", value)
9
+ end
10
+
11
+ Compass.configuration.http_path = "/"
12
+ Compass.configuration.relative_assets = false
13
+ Compass.configuration.cache_path = Compass.configuration.project_path + "/.sass-cache"
@@ -0,0 +1,40 @@
1
+ require 'compass'
2
+
3
+ module CompassConnector
4
+
5
+ class Importer < Sass::Importers::Base
6
+ def to_s()
7
+ "CompassConnector::Importer"
8
+ end
9
+
10
+ def find(uri, options)
11
+ f = CompassConnector::Resolver.find_scss(uri)
12
+
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)
18
+ end
19
+
20
+ nil
21
+ end
22
+
23
+ def find_relative(uri, base, options)
24
+ nil
25
+ end
26
+
27
+ def mtime(name, options)
28
+ file, s = find_real_file(name)
29
+ File.mtime(file) if file
30
+ rescue Errno::ENOENT
31
+ nil
32
+ end
33
+
34
+ def key(name, options)
35
+ [self.class.name + ":" + File.dirname(File.expand_path(name)),
36
+ File.basename(name)]
37
+ end
38
+ end
39
+
40
+ end
@@ -0,0 +1,54 @@
1
+ require 'compass/compiler'
2
+
3
+ module Compass
4
+ class Compiler
5
+
6
+ attr_accessor(:django_sass)
7
+ attr_accessor :sass_options
8
+
9
+ def sass_files(options = {})
10
+ exclude_partials = options.fetch(:exclude_partials, true)
11
+
12
+ if self.options[:sass_files] != nil
13
+ @sass_files = self.options[:sass_files]
14
+ else
15
+ @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
+
21
+ end
22
+
23
+ @sass_files
24
+ end
25
+
26
+ def stylesheet_name(sass_file)
27
+ sass_file[0..-6].sub(/\.css$/,'')
28
+ end
29
+
30
+ # A sass engine for compiling a single file.
31
+ def engine(sass_filename, css_filename)
32
+ sass_filename = CompassConnector::Resolver.find_scss(sass_filename).to_s
33
+ syntax = (sass_filename =~ /\.(s[ac]ss)$/) && $1.to_sym || :sass
34
+ opts = sass_options.merge(:filename => sass_filename, :css_filename => css_filename, :syntax => syntax)
35
+ Sass::Engine.new(open(sass_filename).read, opts)
36
+ end
37
+
38
+ def sass_options
39
+ @sass_options[:load_paths] ||= []
40
+ unless @sass_options[:load_paths].any? {|k| k.is_a?(::CompassConnector::Importer) }
41
+ @sass_options[:load_paths] << ::CompassConnector::Importer.new()
42
+ end
43
+ @sass_options
44
+ end
45
+
46
+ 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"
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,7 @@
1
+ require "compass/sass_extensions/functions/image_size"
2
+
3
+ module Compass::SassExtensions::Functions::ImageSize
4
+ def real_path(image_file)
5
+ CompassConnector::Resolver.find_image(image_file)
6
+ end
7
+ end
@@ -0,0 +1,22 @@
1
+ require "compass/sass_extensions/functions/inline_image"
2
+
3
+ module Compass::SassExtensions::Functions::InlineImage
4
+
5
+ def inline_image(path, mime_type = nil)
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))
9
+ end
10
+
11
+ def inline_font_files(*args)
12
+ raise Sass::SyntaxError, "An even number of arguments must be passed to font_files()" unless args.size % 2 == 0
13
+ files = []
14
+ while args.size > 0
15
+ path = args.shift.value
16
+ real_path = CompassConnector::Resolver.find_font(path)
17
+ url = inline_image_string(data(real_path), compute_mime_type(path))
18
+ files << "#{url} format('#{args.shift}')"
19
+ end
20
+ Sass::Script::String.new(files.join(", "))
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ require "compass/sass_extensions/sprites/image"
2
+
3
+ module Compass
4
+ module SassExtensions
5
+ module Sprites
6
+ class Image
7
+ def find_file
8
+ CompassConnector::Resolver.find_sprite(relative_file).to_s
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,22 @@
1
+ require "compass/sprite_importer"
2
+
3
+ module Compass
4
+ class SpriteImporter
5
+ # Returns the Glob of image files for the uri
6
+ def self.files(uri)
7
+
8
+ files = []
9
+
10
+ CompassConnector::Resolver.find_sprites_matching(uri).to_enum.each do |item|
11
+ files << item.to_s
12
+ end
13
+
14
+ if not files.empty?
15
+ return files
16
+ end
17
+
18
+ raise Compass::SpriteException, %Q{No files were found in the load path matching "#{uri}".}
19
+ end
20
+
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ require "compass/sass_extensions/sprites/sprite_map"
2
+
3
+ module Compass
4
+ module SassExtensions
5
+ module Sprites
6
+ class SpriteMap < Sass::Script::Literal
7
+ def self.relative_name(sprite)
8
+ return sprite
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,72 @@
1
+ require 'compass/sass_extensions/functions/urls'
2
+
3
+ module Compass::SassExtensions::Functions::Urls
4
+ module ImageUrl
5
+ def image_url(path, only_path = Sass::Script::Bool.new(false), cache_buster = Sass::Script::Bool.new(true))
6
+ path = path.value
7
+
8
+ real_path = CompassConnector::Resolver.find_image(path)
9
+ path = CompassConnector::Resolver.image_url(path)
10
+
11
+ # Compute and append the cache buster if there is one.
12
+ if cache_buster.to_bool
13
+ if cache_buster.is_a?(Sass::Script::String)
14
+ path += "?#{cache_buster.value}"
15
+ else
16
+ path = cache_busted_path(path, real_path)
17
+ end
18
+ end
19
+
20
+ if only_path.to_bool
21
+ Sass::Script::String.new(clean_path(path))
22
+ else
23
+ clean_url(path)
24
+ end
25
+ end
26
+ end
27
+ module FontUrl
28
+ def font_url(path, only_path = Sass::Script::Bool.new(false))
29
+ path = path.value # get to the string value of the literal.
30
+
31
+ path = CompassConnector::Resolver.font_url(path)
32
+
33
+ if only_path.to_bool
34
+ Sass::Script::String.new(clean_path(path))
35
+ else
36
+ clean_url(path)
37
+ end
38
+ end
39
+ end
40
+ module StylesheetUrl
41
+ def stylesheet_url(path, only_path = Sass::Script::Bool.new(false))
42
+ path = path.value # get to the string value of the literal.
43
+
44
+ path = CompassConnector::Resolver.stylesheet_url(path)
45
+
46
+ if only_path.to_bool
47
+ Sass::Script::String.new(clean_path(path))
48
+ else
49
+ clean_url(path)
50
+ end
51
+ end
52
+ end
53
+ module GeneratedImageUrl
54
+ 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
+
57
+ real_path = CompassConnector::Resolver.find_generated_image(path)
58
+ path = CompassConnector::Resolver.generated_image_url(path)
59
+
60
+ # Compute and append the cache buster if there is one.
61
+ if cache_buster.to_bool
62
+ if cache_buster.is_a?(Sass::Script::String)
63
+ path += "?#{cache_buster.value}"
64
+ else
65
+ path = cache_busted_path(path, real_path)
66
+ end
67
+ end
68
+
69
+ clean_url(path)
70
+ end
71
+ end
72
+ end
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: compass-connector
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Arkadiusz Dzięgiel
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: compass
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ description: Allows integration between Compass and any other framework with corresponding
31
+ other-framework connector.
32
+ email: admin@glorpen.pl
33
+ executables: []
34
+ extensions: []
35
+ extra_rdoc_files: []
36
+ files:
37
+ - lib/compass-connector/configuration.rb
38
+ - lib/compass-connector/importer.rb
39
+ - lib/compass-connector/patches/compiler.rb
40
+ - lib/compass-connector/patches/sprite_map.rb
41
+ - lib/compass-connector/patches/inline_images.rb
42
+ - lib/compass-connector/patches/sprite_importer.rb
43
+ - lib/compass-connector/patches/urls.rb
44
+ - lib/compass-connector/patches/sprite_image.rb
45
+ - lib/compass-connector/patches/image_size.rb
46
+ - lib/compass-connector.rb
47
+ homepage: http://bitbucket.org/glorpen/compass-connector
48
+ licenses:
49
+ - GPL-3
50
+ post_install_message: To fully utilize this gem you should install connector app for
51
+ your project
52
+ rdoc_options: []
53
+ require_paths:
54
+ - lib
55
+ required_ruby_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ requirements: []
68
+ rubyforge_project:
69
+ rubygems_version: 1.8.24
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Compass integration with any framework
73
+ test_files: []