ezcript 0.0.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.
- data/CHANGELOG.md +3 -0
- data/README.md +9 -0
- data/Rakefile +36 -0
- data/lib/VERSION +4 -0
- data/lib/ezcript.rb +6 -0
- data/lib/ezcript/application_helper_extension.rb +166 -0
- data/lib/ezcript/minifier/stylesheet.rb +41 -0
- data/lib/ezcript/version.rb +24 -0
- metadata +155 -0
data/CHANGELOG.md
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
begin
|
2
|
+
require "rubygems"
|
3
|
+
require "bundler"
|
4
|
+
rescue LoadError
|
5
|
+
raise "Could not load the bundler gem. Install it with `gem install bundler`."
|
6
|
+
end
|
7
|
+
|
8
|
+
if Gem::Version.new(Bundler::VERSION) <= Gem::Version.new("1.0.0")
|
9
|
+
raise RuntimeError, "Your bundler version is too old for Mail" +
|
10
|
+
"Run `gem install bundler` to upgrade."
|
11
|
+
end
|
12
|
+
|
13
|
+
begin
|
14
|
+
# Set up load paths for all bundled gems
|
15
|
+
ENV["BUNDLE_GEMFILE"] = File.expand_path("../Gemfile", __FILE__)
|
16
|
+
Bundler.setup
|
17
|
+
rescue Bundler::GemNotFound
|
18
|
+
raise RuntimeError, "Bundler couldn't find some gems." +
|
19
|
+
"Did you run `bundle install`?"
|
20
|
+
end
|
21
|
+
|
22
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
23
|
+
|
24
|
+
require 'rspec/core/rake_task'
|
25
|
+
RSpec::Core::RakeTask.new(:spec)
|
26
|
+
task :default => :spec
|
27
|
+
|
28
|
+
require "ezcript/version"
|
29
|
+
|
30
|
+
task :build do
|
31
|
+
system "gem build ezcript.gemspec"
|
32
|
+
end
|
33
|
+
|
34
|
+
task :release => :build do
|
35
|
+
system "gem push ezcript-#{Ezcript::VERSION::STRING}"
|
36
|
+
end
|
data/lib/VERSION
ADDED
data/lib/ezcript.rb
ADDED
@@ -0,0 +1,166 @@
|
|
1
|
+
module Ezcript
|
2
|
+
module ApplicationHelperExtension
|
3
|
+
def self.included(base)
|
4
|
+
base.send(:include, InstanceMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module InstanceMethods
|
8
|
+
|
9
|
+
# yield for content_for, but will display default contents if content_for is not given
|
10
|
+
def yield_or_inline(yield_name, partial_name = nil, &block)
|
11
|
+
if @_content_for[yield_name] && !@_content_for[yield_name].empty?
|
12
|
+
@_content_for[yield_name]
|
13
|
+
else
|
14
|
+
if block_given?
|
15
|
+
render :inline => capture(&block)
|
16
|
+
else
|
17
|
+
render :partial => partial_name if partial_name
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
#If declared will include "controller#scripts and controller#action_scripts to the layout"
|
23
|
+
def yield_local_scripts
|
24
|
+
scripts = []
|
25
|
+
if "production".eql?(Rails.env)
|
26
|
+
js_cache_dir = File.join(Rails.root, "tmp", "cache", "js")
|
27
|
+
FileUtils.mkdir_p(js_cache_dir) unless File.exist?(js_cache_dir)
|
28
|
+
end
|
29
|
+
|
30
|
+
["scripts", "#{action_name}_scripts"].each do |f|
|
31
|
+
partial_src = File.join(Rails.root, "app", "views", controller_name, "_#{f}.js.erb")
|
32
|
+
if File.exist?(partial_src)
|
33
|
+
|
34
|
+
src = render(:partial => "#{controller_name}/#{f}.js")
|
35
|
+
|
36
|
+
if "production".eql?(Rails.env)
|
37
|
+
js_src = File.join(js_cache_dir, "#{controller_name}_#{File.basename(f, ".erb")}.min.js")
|
38
|
+
unless File.exist?(js_src)
|
39
|
+
File.open(js_src, "w") {|js_f| js_f.puts(JSMin.minify(src))}
|
40
|
+
end
|
41
|
+
src = render(:file => js_src)
|
42
|
+
end
|
43
|
+
scripts << src
|
44
|
+
end
|
45
|
+
end
|
46
|
+
render :inline => scripts.join("\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def yield_local_styles
|
50
|
+
scripts = []
|
51
|
+
["styles", "#{action_name}_styles"].each do |f|
|
52
|
+
scripts << render(:partial => "#{controller_name}/#{f}.css") if File.exist?(File.join(Rails.root, "app", "views", controller_name, "_#{f}.css.erb"))
|
53
|
+
end
|
54
|
+
render :inline => scripts.join("\n")
|
55
|
+
end
|
56
|
+
|
57
|
+
=begin
|
58
|
+
def render_minified_style(source, opt={})
|
59
|
+
options = {:type => "text/css"}.merge(opt)
|
60
|
+
source = "#{Rails.root}/public/assets/stylesheets/#{source}"
|
61
|
+
source << ".css" unless source.end_with?(".css")
|
62
|
+
if ["staging","production"].include?(Rails.env)
|
63
|
+
css_cache_dir = File.join(Rails.root, "tmp", "cache", "css")
|
64
|
+
FileUtils.mkdir_p(css_cache_dir) unless File.exist?(css_cache_dir)
|
65
|
+
src = File.join(css_cache_dir, File.basename(source))
|
66
|
+
unless File.exist?(src)
|
67
|
+
File.open(src, "w") {|f| f.puts(R3xt::Minifier::Stylesheet.new(source, true).minified) }
|
68
|
+
end
|
69
|
+
else
|
70
|
+
src = source
|
71
|
+
end
|
72
|
+
c = render(:file => src)
|
73
|
+
content_tag(:style, c.gsub("../images/", "#{Compass::Info.asset_dir}/images/"), options)
|
74
|
+
end
|
75
|
+
|
76
|
+
def render_minified_script(source, opt={})
|
77
|
+
options = {:type => "text/javascript"}.merge(opt)
|
78
|
+
source = "#{Rails.root}/public/assets/javascripts/#{source}"
|
79
|
+
source << ".js" unless source.end_with?(".js")
|
80
|
+
if ["staging","production"].include?(Rails.env)
|
81
|
+
js_cache_dir = File.join(Rails.root, "tmp", "cache", "js")
|
82
|
+
FileUtils.mkdir_p(js_cache_dir) unless File.exist?(js_cache_dir)
|
83
|
+
src = File.join(js_cache_dir, File.basename(source))
|
84
|
+
unless File.exist?(src)
|
85
|
+
c = ""
|
86
|
+
File.open(source, "r") {|f| c = f.read}
|
87
|
+
File.open(src, "w") {|f| f.puts(JSMin.minify(c)) }
|
88
|
+
end
|
89
|
+
else
|
90
|
+
src = source
|
91
|
+
end
|
92
|
+
c = render(:file => src)
|
93
|
+
content_tag(:script, c, options)
|
94
|
+
end
|
95
|
+
=end
|
96
|
+
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
module ActionView
|
102
|
+
module Helpers
|
103
|
+
module AssetTagHelper
|
104
|
+
|
105
|
+
def stylesheet_tag(source, options)
|
106
|
+
s= "#{Compass::Info.asset_dir}/stylesheets/#{source}"
|
107
|
+
tag("link", { "rel" => "stylesheet", "type" => Mime::CSS, "media" => "screen", "href" => html_escape(path_to_stylesheet(s)) }.merge(options), false, false)
|
108
|
+
end
|
109
|
+
|
110
|
+
def javascript_src_tag(source, options)
|
111
|
+
s= "#{Compass::Info.asset_dir}/javascripts/#{source}"
|
112
|
+
s << ".js" unless s.end_with?(".js")
|
113
|
+
content_tag("script", "", { "type" => Mime::JS, "src" => path_to_javascript(s) }.merge(options))
|
114
|
+
end
|
115
|
+
|
116
|
+
def image_tag(source, options = {})
|
117
|
+
options.symbolize_keys!
|
118
|
+
|
119
|
+
src = options[:src] = "#{Compass::Info.asset_dir}#{path_to_image(source)}"
|
120
|
+
|
121
|
+
unless src =~ /^cid:/
|
122
|
+
options[:alt] = options.fetch(:alt){ File.basename(src, '.*').capitalize }
|
123
|
+
end
|
124
|
+
|
125
|
+
if size = options.delete(:size)
|
126
|
+
options[:width], options[:height] = size.split("x") if size =~ %r{^\d+x\d+$}
|
127
|
+
end
|
128
|
+
|
129
|
+
if mouseover = options.delete(:mouseover)
|
130
|
+
options[:onmouseover] = "this.src='#{path_to_image(mouseover)}'"
|
131
|
+
options[:onmouseout] = "this.src='#{src}'"
|
132
|
+
end
|
133
|
+
|
134
|
+
tag("img", options)
|
135
|
+
end
|
136
|
+
|
137
|
+
def complete_link_to(*args, &block)
|
138
|
+
if block_given?
|
139
|
+
options = args.first || {}
|
140
|
+
html_options = args.second
|
141
|
+
link_to(capture(&block), options, html_options)
|
142
|
+
else
|
143
|
+
name = args[0]
|
144
|
+
options = args[1] || {}
|
145
|
+
html_options = args[2]
|
146
|
+
|
147
|
+
html_options = convert_options_to_data_attributes(options, html_options)
|
148
|
+
url = url_for(options)
|
149
|
+
url = File.join(Compass::Info.app_host, url).to_s unless url.downcase.starts_with?("http")
|
150
|
+
|
151
|
+
if html_options
|
152
|
+
html_options = html_options.stringify_keys
|
153
|
+
href = html_options['href']
|
154
|
+
tag_options = tag_options(html_options)
|
155
|
+
else
|
156
|
+
tag_options = nil
|
157
|
+
end
|
158
|
+
|
159
|
+
href_attr = "href=\"#{html_escape(url)}\"" unless href
|
160
|
+
"<a #{href_attr}#{tag_options}>#{(name || url)}</a>".html_safe
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# This code was extracted from Smurf
|
2
|
+
# https://github.com/thumblemonks/smurf
|
3
|
+
module Ezcript::Minifier
|
4
|
+
class Stylesheet
|
5
|
+
def self.minifies?(paths) !paths.grep(%r[\.css(\?\d+)?$]).empty?; end
|
6
|
+
|
7
|
+
def initialize(content, file=false)
|
8
|
+
if file
|
9
|
+
File.open(content, "r") {|f| content = f.read}
|
10
|
+
end
|
11
|
+
@content = content.nil? ? nil : minify(content)
|
12
|
+
end
|
13
|
+
|
14
|
+
def minified; @content; end
|
15
|
+
|
16
|
+
# TODO: deal with string values better (urls, content blocks, etc.)
|
17
|
+
def minify(content)
|
18
|
+
class << content; include Minifier; end
|
19
|
+
content.compress_whitespace.remove_comments.remove_spaces_outside_block.
|
20
|
+
remove_spaces_inside_block.trim_last_semicolon.strip
|
21
|
+
end
|
22
|
+
|
23
|
+
module Minifier
|
24
|
+
# .*? is a non-greedy match on anything
|
25
|
+
def compress_whitespace; compress!(/\s+/, ' '); end
|
26
|
+
def remove_comments; compress!(/\/\*.*?\*\/\s?/, ''); end
|
27
|
+
def remove_spaces_outside_block
|
28
|
+
compress!(/(\A|\})(.*?)\{/) { |m| m.gsub(/\s?([}{,])\s?/, '\1') }
|
29
|
+
end
|
30
|
+
def remove_spaces_inside_block
|
31
|
+
compress!(/\{(.*?)(?=\})/) do |m|
|
32
|
+
# remove spaces in the labels/attributes
|
33
|
+
m.gsub(/(?:\A|\s*;)(.*?)(?::\s*|\z)/) { |n| n.gsub(/\s/, '') }.strip
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def trim_last_semicolon; compress!(/;(?=\})/, ''); end
|
37
|
+
private
|
38
|
+
def compress!(*args, &block) gsub!(*args, &block) || self; end
|
39
|
+
end
|
40
|
+
end # Stylesheet
|
41
|
+
end # Smurf
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Ezcript
|
3
|
+
module VERSION
|
4
|
+
|
5
|
+
version = {}
|
6
|
+
File.read(File.join(File.dirname(__FILE__), '../', 'VERSION')).each_line do |line|
|
7
|
+
type, value = line.chomp.split(":")
|
8
|
+
next if type =~ /^ +$/ || value =~ /^ +$/
|
9
|
+
version[type] = value
|
10
|
+
end
|
11
|
+
|
12
|
+
MAJOR = version['major']
|
13
|
+
MINOR = version['minor']
|
14
|
+
PATCH = version['patch']
|
15
|
+
BUILD = version['build']
|
16
|
+
|
17
|
+
STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join('.')
|
18
|
+
|
19
|
+
def self.version
|
20
|
+
STRING
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ezcript
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Melvin Sembrano
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-06-08 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rspec
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 25
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
- 5
|
33
|
+
- 1
|
34
|
+
version: 2.5.1
|
35
|
+
type: :development
|
36
|
+
version_requirements: *id001
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: ZenTest
|
39
|
+
prerelease: false
|
40
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ">="
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
hash: 43
|
46
|
+
segments:
|
47
|
+
- 4
|
48
|
+
- 5
|
49
|
+
- 0
|
50
|
+
version: 4.5.0
|
51
|
+
type: :development
|
52
|
+
version_requirements: *id002
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rake
|
55
|
+
prerelease: false
|
56
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
hash: 49
|
62
|
+
segments:
|
63
|
+
- 0
|
64
|
+
- 8
|
65
|
+
- 7
|
66
|
+
version: 0.8.7
|
67
|
+
type: :development
|
68
|
+
version_requirements: *id003
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
prerelease: false
|
72
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
hash: 15
|
78
|
+
segments:
|
79
|
+
- 1
|
80
|
+
- 0
|
81
|
+
- 12
|
82
|
+
version: 1.0.12
|
83
|
+
type: :development
|
84
|
+
version_requirements: *id004
|
85
|
+
- !ruby/object:Gem::Dependency
|
86
|
+
name: jsmin
|
87
|
+
prerelease: false
|
88
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
hash: 21
|
94
|
+
segments:
|
95
|
+
- 1
|
96
|
+
- 0
|
97
|
+
- 1
|
98
|
+
version: 1.0.1
|
99
|
+
type: :development
|
100
|
+
version_requirements: *id005
|
101
|
+
description: ""
|
102
|
+
email:
|
103
|
+
- melvinsembrano@gmail.com
|
104
|
+
executables: []
|
105
|
+
|
106
|
+
extensions: []
|
107
|
+
|
108
|
+
extra_rdoc_files:
|
109
|
+
- README.md
|
110
|
+
- CHANGELOG.md
|
111
|
+
files:
|
112
|
+
- README.md
|
113
|
+
- Rakefile
|
114
|
+
- lib/VERSION
|
115
|
+
- lib/ezcript.rb
|
116
|
+
- lib/ezcript/application_helper_extension.rb
|
117
|
+
- lib/ezcript/minifier/stylesheet.rb
|
118
|
+
- lib/ezcript/version.rb
|
119
|
+
- CHANGELOG.md
|
120
|
+
has_rdoc: true
|
121
|
+
homepage: http://github.com/melvinsembrano/ezcript
|
122
|
+
licenses:
|
123
|
+
- MIT
|
124
|
+
post_install_message:
|
125
|
+
rdoc_options: []
|
126
|
+
|
127
|
+
require_paths:
|
128
|
+
- lib
|
129
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
hash: 3
|
135
|
+
segments:
|
136
|
+
- 0
|
137
|
+
version: "0"
|
138
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ">="
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
hash: 3
|
144
|
+
segments:
|
145
|
+
- 0
|
146
|
+
version: "0"
|
147
|
+
requirements: []
|
148
|
+
|
149
|
+
rubyforge_project:
|
150
|
+
rubygems_version: 1.3.7
|
151
|
+
signing_key:
|
152
|
+
specification_version: 3
|
153
|
+
summary: ""
|
154
|
+
test_files: []
|
155
|
+
|