mack-javascript 0.6.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/README +3 -0
- data/lib/mack-javascript.rb +18 -0
- data/lib/mack-javascript/generators/javascript_generator.rb +20 -0
- data/lib/mack-javascript/generators/manifest.yml +16 -0
- data/lib/mack-javascript/generators/templates/javascripts/controls.js.template +963 -0
- data/lib/mack-javascript/generators/templates/javascripts/dragdrop.js.template +972 -0
- data/lib/mack-javascript/generators/templates/javascripts/effects.js.template +1120 -0
- data/lib/mack-javascript/generators/templates/javascripts/jquery-fx.js.template +28 -0
- data/lib/mack-javascript/generators/templates/javascripts/jquery-ui.js.template +85 -0
- data/lib/mack-javascript/generators/templates/javascripts/jquery.js.template +32 -0
- data/lib/mack-javascript/generators/templates/javascripts/prototype.js.template +4225 -0
- data/lib/mack-javascript/helpers/jquery_helper.rb +125 -0
- data/lib/mack-javascript/helpers/prototype_helper.rb +112 -0
- data/lib/mack-javascript/helpers/script_generator.rb +57 -0
- data/lib/mack-javascript/helpers/testing_helpers.rb +12 -0
- data/lib/mack-javascript/rendering/engine/rjs.rb +33 -0
- data/lib/mack-javascript/rendering/type/js.rb +33 -0
- data/lib/mack-javascript/view_helpers/html_helpers.rb +42 -0
- data/lib/mack-javascript/view_helpers/string_helpers.rb +13 -0
- metadata +81 -0
@@ -0,0 +1,125 @@
|
|
1
|
+
module Mack
|
2
|
+
module JavaScript
|
3
|
+
module Framework
|
4
|
+
class Jquery
|
5
|
+
class << self
|
6
|
+
def insert_html(position, id, html)
|
7
|
+
insertion = position.to_s.downcase
|
8
|
+
insertion = 'append' if insertion == 'bottom'
|
9
|
+
insertion = 'prepend' if insertion == 'top'
|
10
|
+
"$(\"##{id}\").#{insertion}('#{html}')"
|
11
|
+
end
|
12
|
+
|
13
|
+
def replace_html(id, html)
|
14
|
+
insert_html(:html, id, html)
|
15
|
+
end
|
16
|
+
|
17
|
+
def replace(id, html)
|
18
|
+
"$(\"##{id}\").replaceWith('#{html}')"
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove(*ids)
|
22
|
+
"$(\"##{ids.join(',#')}\").remove()"
|
23
|
+
end
|
24
|
+
|
25
|
+
def show(*ids)
|
26
|
+
"$(\"##{ids.join(',#')}\").show()"
|
27
|
+
end
|
28
|
+
|
29
|
+
def hide(*ids)
|
30
|
+
"$(\"##{ids.join(',#')}\").hide()"
|
31
|
+
end
|
32
|
+
|
33
|
+
def toggle(*ids)
|
34
|
+
"$(\"##{ids.join(',#')}\").toggle()"
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
# def draggable(id, options = {})
|
39
|
+
# record @context.send(:draggable_element_js, id, options)
|
40
|
+
# end
|
41
|
+
#
|
42
|
+
# def visual_effect(name, id = nil, options = {})
|
43
|
+
# record @context.send(:visual_effect, name, id, options)
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# def drop_receiving(id, options = {})
|
47
|
+
# record @context.send(:drop_receiving_element_js, id, options)
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
def remote_function(options)
|
51
|
+
javascript_options = options_for_ajax(options)
|
52
|
+
update = ''
|
53
|
+
if options[:update] && options[:update].is_a?(Hash)
|
54
|
+
update = []
|
55
|
+
update << "success:'#{options[:update][:success]}'" if options[:update][:success]
|
56
|
+
update << "failure:'#{options[:update][:failure]}'" if options[:update][:failure]
|
57
|
+
update = '{' + update.join(',') + '}'
|
58
|
+
elsif options[:update]
|
59
|
+
update << "'#{options[:update]}'"
|
60
|
+
end
|
61
|
+
|
62
|
+
function = "$.ajax(#{javascript_options})"
|
63
|
+
|
64
|
+
function = "#{options[:before]}; #{function}" if options[:before]
|
65
|
+
function = "#{function}; #{options[:after]}" if options[:after]
|
66
|
+
function = "if (#{options[:condition]}) { #{function}; }" if options[:condition]
|
67
|
+
function = "if (confirm('#{escape_javascript(options[:confirm])}')) { #{function}; }" if options[:confirm]
|
68
|
+
return function
|
69
|
+
end
|
70
|
+
|
71
|
+
protected
|
72
|
+
def options_for_ajax(options)
|
73
|
+
js_options = build_callbacks(options)
|
74
|
+
js_options['url'] = "'#{options[:url]}'"
|
75
|
+
js_options['async'] = options[:type] != :synchronous
|
76
|
+
js_options['type'] = options[:method] ? "'#{options[:method]}'" : "'post'"
|
77
|
+
js_options['dataType'] = options[:datatype] ? "'#{options[:datatype]}'" : (options[:update] ? nil : "'script'")
|
78
|
+
|
79
|
+
if options[:form]
|
80
|
+
js_options['data'] = "$.param($(this).serializeArray())"
|
81
|
+
elsif options[:submit]
|
82
|
+
js_options['data'] = "$(\"##{options[:submit]}\").serializeArray()"
|
83
|
+
elsif options[:with]
|
84
|
+
js_options['data'] = options[:with].gsub('Form.serialize(this.form)','$.param($(this.form).serializeArray())')
|
85
|
+
end
|
86
|
+
options_for_javascript(js_options.reject {|key, value| value.nil?})
|
87
|
+
end
|
88
|
+
|
89
|
+
def options_for_javascript(options)
|
90
|
+
'{' + options.map {|k, v| "#{k}:#{v}"}.sort.join(', ') + '}'
|
91
|
+
end
|
92
|
+
|
93
|
+
def build_callbacks(options)
|
94
|
+
callbacks = {}
|
95
|
+
options[:beforeSend] = '';
|
96
|
+
[:uninitialized,:loading,:loaded].each do |key|
|
97
|
+
options[:beforeSend] << (options[key].last == ';' ? options.delete(key) : options.delete(key) << ';') if options[key]
|
98
|
+
end
|
99
|
+
options.delete(:beforeSend) if options[:beforeSend].blank?
|
100
|
+
options[:error] = options.delete(:failure) if options[:failure]
|
101
|
+
if options[:update]
|
102
|
+
options[:success] = build_update(options) << (options[:success] ? options[:success] : '')
|
103
|
+
end
|
104
|
+
options.each do |callback, code|
|
105
|
+
if [:beforeSend, :complete, :error, :success ].include?(callback)
|
106
|
+
callbacks[callback] = "function(request){#{code}}"
|
107
|
+
end
|
108
|
+
end
|
109
|
+
callbacks
|
110
|
+
end
|
111
|
+
|
112
|
+
def build_update(options)
|
113
|
+
insertion = 'html'
|
114
|
+
insertion = options[:position].to_s.downcase if options[:position]
|
115
|
+
insertion = 'append' if insertion == 'bottom'
|
116
|
+
insertion = 'prepend' if insertion == 'top'
|
117
|
+
"$('##{options[:update]}').#{insertion}(request);"
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module Mack
|
2
|
+
module JavaScript
|
3
|
+
module Framework
|
4
|
+
class Prototype
|
5
|
+
@@callbacks = [:uninitialized, :loading, :loaded, :interactive, :complete, :failure, :success ] +
|
6
|
+
[100,101] + (200..206).to_a + (300..307).to_a + (400..417).to_a + (500..505).to_a
|
7
|
+
class << self
|
8
|
+
def insert_html(position, id, html)
|
9
|
+
insertion = position.to_s.camelcase
|
10
|
+
"new Insertion.#{insertion}('#{id}', '#{html}')"
|
11
|
+
end
|
12
|
+
|
13
|
+
def replace_html(id, html)
|
14
|
+
"Element.update('#{id}', '#{html}')"
|
15
|
+
end
|
16
|
+
|
17
|
+
def replace(id, html)
|
18
|
+
"Element.replace('#{id}', '#{html}')"
|
19
|
+
end
|
20
|
+
|
21
|
+
def remove(*ids)
|
22
|
+
"#{ids.to_json}.each(Element.remove)"
|
23
|
+
end
|
24
|
+
|
25
|
+
def show(*ids)
|
26
|
+
"#{ids.to_json}.each(Element.show)"
|
27
|
+
end
|
28
|
+
|
29
|
+
def toggle(*ids)
|
30
|
+
"#{ids.to_json}.each(Element.toggle)"
|
31
|
+
end
|
32
|
+
|
33
|
+
# def draggable(id, options = {})
|
34
|
+
# record @context.send(:draggable_element_js, id, options)
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# def visual_effect(name, id = nil, options = {})
|
38
|
+
# record @context.send(:visual_effect, name, id, options)
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# def drop_receiving(id, options = {})
|
42
|
+
# record @context.send(:drop_receiving_element_js, id, options)
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
def remote_function(options)
|
46
|
+
javascript_options = options_for_ajax(options)
|
47
|
+
"new Ajax.Request('#{options[:url]}', #{javascript_options.to_json})"
|
48
|
+
update = ''
|
49
|
+
if options[:update] && options[:update].is_a?(Hash)
|
50
|
+
update = []
|
51
|
+
update << "success:'#{options[:update][:success]}'" if options[:update][:success]
|
52
|
+
update << "failure:'#{options[:update][:failure]}'" if options[:update][:failure]
|
53
|
+
update = '{' + update.join(',') + '}'
|
54
|
+
elsif options[:update]
|
55
|
+
update << "'#{options[:update]}'"
|
56
|
+
end
|
57
|
+
|
58
|
+
function = update.empty? ?
|
59
|
+
"new Ajax.Request(" :
|
60
|
+
"new Ajax.Updater(#{update}, "
|
61
|
+
|
62
|
+
url_options = options[:url]
|
63
|
+
url_options = url_options.merge(:escape => false) if url_options.is_a?(Hash)
|
64
|
+
function << "'#{url_options}'"
|
65
|
+
function << ", #{javascript_options})"
|
66
|
+
|
67
|
+
function = "#{options[:before]}; #{function}" if options[:before]
|
68
|
+
function = "#{function}; #{options[:after]}" if options[:after]
|
69
|
+
function = "if (#{options[:condition]}) { #{function}; }" if options[:condition]
|
70
|
+
function = "if (confirm('#{escape_javascript(options[:confirm])}')) { #{function}; }" if options[:confirm]
|
71
|
+
|
72
|
+
return function
|
73
|
+
end
|
74
|
+
|
75
|
+
protected
|
76
|
+
def options_for_ajax(options)
|
77
|
+
js_options = build_callbacks(options)
|
78
|
+
js_options['asynchronous'] = options[:type] != :synchronous
|
79
|
+
js_options['method'] = "'#{options[:method]}'" if options[:method]
|
80
|
+
js_options['insertion'] = "Insertion.#{options[:position].to_s.camelize}" if options[:position]
|
81
|
+
js_options['evalScripts'] = options[:script].nil? || options[:script]
|
82
|
+
|
83
|
+
if options[:form]
|
84
|
+
js_options['parameters'] = 'Form.serialize(this)'
|
85
|
+
elsif options[:submit]
|
86
|
+
js_options['parameters'] = "Form.serialize('#{options[:submit]}')"
|
87
|
+
elsif options[:with]
|
88
|
+
js_options['parameters'] = options[:with]
|
89
|
+
end
|
90
|
+
options_for_javascript(js_options.reject {|key, value| value.nil?})
|
91
|
+
end
|
92
|
+
|
93
|
+
def options_for_javascript(options)
|
94
|
+
'{' + options.map {|k, v| "#{k}:#{v}"}.sort.join(', ') + '}'
|
95
|
+
end
|
96
|
+
|
97
|
+
def build_callbacks(options)
|
98
|
+
callbacks = {}
|
99
|
+
options.each do |callback, code|
|
100
|
+
if @@callbacks.include?(callback)
|
101
|
+
name = 'on' + callback.to_s.capitalize
|
102
|
+
callbacks[name] = "function(request){#{code}}"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
callbacks
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
module Mack
|
2
|
+
module JavaScript
|
3
|
+
class ScriptGenerator
|
4
|
+
def initialize
|
5
|
+
@lines = ''
|
6
|
+
end
|
7
|
+
|
8
|
+
def method_missing(sym, *args)
|
9
|
+
self << self.class.framework.send(sym, *args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def <<(s)
|
13
|
+
@lines << s + ";"
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_s
|
17
|
+
@lines
|
18
|
+
end
|
19
|
+
|
20
|
+
def alert(message)
|
21
|
+
self << "alert('#{message}')"
|
22
|
+
end
|
23
|
+
|
24
|
+
def call(*args, &block)
|
25
|
+
s = args.shift + '('
|
26
|
+
a = []
|
27
|
+
args.each {|arg| a << arg.to_json}
|
28
|
+
self << s + a.join(',') + ')'
|
29
|
+
end
|
30
|
+
|
31
|
+
def assign(variable, value)
|
32
|
+
self << "#{variable} = #{value.to_json}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def delay(seconds = 1, &block)
|
36
|
+
self << "setTimeout(function() {\n\n" + yield(Mack::JavaScript::ScriptGenerator.new) + "}, #{(seconds * 1000).to_i})"
|
37
|
+
end
|
38
|
+
|
39
|
+
class << self
|
40
|
+
|
41
|
+
def framework
|
42
|
+
"Mack::JavaScript::Framework::#{framework_name}".constantize
|
43
|
+
end
|
44
|
+
|
45
|
+
def framework=(args)
|
46
|
+
@@framework_name = args.camelcase
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def framework_name
|
51
|
+
@@framework_name ||= app_config.mack.js_framework.camelcase
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Mack
|
2
|
+
module Testing
|
3
|
+
module Helpers
|
4
|
+
#simulates an ajax request
|
5
|
+
def xhr(method, uri, options = {})
|
6
|
+
options = {:input => options.to_params} if method == :post || method == :put
|
7
|
+
build_response(request.send(method, uri, build_request_options(options.merge({"HTTP_X_REQUESTED_WITH" => 'XMLHttpRequest', "HTTP_ACCEPT" => 'text/javascript, text/html, application/xml, text/xml, */*'}))))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Mack
|
2
|
+
module Rendering # :nodoc:
|
3
|
+
module Engine # :nodoc:
|
4
|
+
# Allows use of the Builder::XmlMarkup engine to be used with rendering.
|
5
|
+
class Rjs < Mack::Rendering::Engine::Base
|
6
|
+
|
7
|
+
def render(io, binding)
|
8
|
+
@_jsp_page = Mack::JavaScript::ScriptGenerator.new
|
9
|
+
view_template.instance_variable_set("@_jsp_page", @_jsp_page)
|
10
|
+
eval(io, binding)
|
11
|
+
@_jsp_page.to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
def extension
|
15
|
+
:rjs
|
16
|
+
end
|
17
|
+
|
18
|
+
module ViewTemplateHelpers
|
19
|
+
def page
|
20
|
+
@_jsp_page
|
21
|
+
end
|
22
|
+
end # ViewTemplateHelpers
|
23
|
+
|
24
|
+
end # RJS
|
25
|
+
end # Engine
|
26
|
+
end # Rendering
|
27
|
+
end # Mack
|
28
|
+
|
29
|
+
Mack::Rendering::ViewTemplate.send(:include, Mack::Rendering::Engine::Rjs::ViewTemplateHelpers)
|
30
|
+
Mack::Rendering::Engine::Registry.instance.register(:action, :rjs)
|
31
|
+
Mack::Rendering::Engine::Registry.instance.register(:template, :rjs)
|
32
|
+
Mack::Rendering::Engine::Registry.instance.register(:partial, :rjs)
|
33
|
+
Mack::Rendering::Engine::Registry.instance.register(:js, :rjs)
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Mack
|
2
|
+
module Rendering # :nodoc:
|
3
|
+
module Type # :nodoc:
|
4
|
+
# Used to render an XML template that's relative to a controller.
|
5
|
+
#
|
6
|
+
# Example:
|
7
|
+
# class UsersController < Mack::Controller::Base
|
8
|
+
# # /users/:id
|
9
|
+
# def show
|
10
|
+
# @user = User.first(params(:id))
|
11
|
+
# end
|
12
|
+
# # /users
|
13
|
+
# def index
|
14
|
+
# @users = User.all
|
15
|
+
# render(:xml, :list)
|
16
|
+
# end
|
17
|
+
# end
|
18
|
+
# When some calls /users/1.xml the file: app/views/users/show.xml.builder will be rendered.
|
19
|
+
# When some calls /users.xml the file: app/views/users/list.xml.builder will be rendered.
|
20
|
+
class Js < Mack::Rendering::Type::FileBase
|
21
|
+
|
22
|
+
# See Mack::Rendering::Type::FileBase render_file for more information.
|
23
|
+
def render
|
24
|
+
self.options[:format] = "js"
|
25
|
+
self.controller.response["Content-Type"] = Mack::Utils::MimeTypes[self.options[:format]]
|
26
|
+
x_file = File.join(self.controller_view_path, "#{self.render_value}.#{self.options[:format]}")
|
27
|
+
render_file(x_file, :js)
|
28
|
+
end
|
29
|
+
|
30
|
+
end # Xml
|
31
|
+
end # Type
|
32
|
+
end # Rendering
|
33
|
+
end # Mack
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module Mack
|
2
|
+
module ViewHelpers
|
3
|
+
module HtmlHelpers
|
4
|
+
# Renders javascript in an html file
|
5
|
+
#
|
6
|
+
# Example:
|
7
|
+
# <%= update_page do |page|
|
8
|
+
# page.alert('this gets translated to js!')
|
9
|
+
# page.show('my_hidden_div')
|
10
|
+
# end
|
11
|
+
# %>
|
12
|
+
#This returns (assuming Prototype is your Js Framework):
|
13
|
+
# <script type='text/javascript'>
|
14
|
+
# alert('this gets translated to js!');
|
15
|
+
# $('my_hidden_div').show();
|
16
|
+
# </script>
|
17
|
+
def update_page(&block)
|
18
|
+
sg = Mack::JavaScript::ScriptGenerator.new
|
19
|
+
yield(sg)
|
20
|
+
"<script type='#{Mack::Utils::MimeTypes[:js]}'>\n" + sg.to_s.gsub(';', ";\n") + "</script>"
|
21
|
+
end
|
22
|
+
|
23
|
+
def link_to_remote(link_text, ajax_options, options = {})
|
24
|
+
link_to_function(link_text, remote_function(ajax_options), options)
|
25
|
+
end
|
26
|
+
|
27
|
+
def link_to_function(link_text, *args, &block)
|
28
|
+
function = args[0] || ''
|
29
|
+
options = args[1] || {}
|
30
|
+
function = yield(Mack::JavaScript::ScriptGenerator.new).chop if block_given?
|
31
|
+
options[:onclick] = (options[:onclick] ? "#{options[:onclick]}; " : "") + "#{function}; return false;"
|
32
|
+
link_to(link_text, '#', options)
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns javascript that does an Ajax call
|
36
|
+
def remote_function(options)
|
37
|
+
Mack::JavaScript::ScriptGenerator.framework.remote_function(options)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Mack
|
2
|
+
module ViewHelpers
|
3
|
+
module StringHelpers
|
4
|
+
|
5
|
+
# Escapes Javascript
|
6
|
+
#
|
7
|
+
def escape_javascript(javascript)
|
8
|
+
(javascript || '').gsub('\\','\0\0').gsub('</','<\/').gsub(/\r\n|\n|\r/, "\\n").gsub(/["']/) { |m| "\\#{m}" }
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mack-javascript
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.6.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gerardo Pis-Lopez
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-08-04 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: json_pure
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - "="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 1.1.2
|
24
|
+
version:
|
25
|
+
description: RJS support for the Mack Framework
|
26
|
+
email:
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
33
|
+
files:
|
34
|
+
- lib/mack-javascript/generators/javascript_generator.rb
|
35
|
+
- lib/mack-javascript/generators/manifest.yml
|
36
|
+
- lib/mack-javascript/generators/templates/javascripts/controls.js.template
|
37
|
+
- lib/mack-javascript/generators/templates/javascripts/dragdrop.js.template
|
38
|
+
- lib/mack-javascript/generators/templates/javascripts/effects.js.template
|
39
|
+
- lib/mack-javascript/generators/templates/javascripts/jquery-fx.js.template
|
40
|
+
- lib/mack-javascript/generators/templates/javascripts/jquery-ui.js.template
|
41
|
+
- lib/mack-javascript/generators/templates/javascripts/jquery.js.template
|
42
|
+
- lib/mack-javascript/generators/templates/javascripts/prototype.js.template
|
43
|
+
- lib/mack-javascript/helpers/jquery_helper.rb
|
44
|
+
- lib/mack-javascript/helpers/prototype_helper.rb
|
45
|
+
- lib/mack-javascript/helpers/script_generator.rb
|
46
|
+
- lib/mack-javascript/helpers/testing_helpers.rb
|
47
|
+
- lib/mack-javascript/rendering/engine/rjs.rb
|
48
|
+
- lib/mack-javascript/rendering/type/js.rb
|
49
|
+
- lib/mack-javascript/view_helpers/html_helpers.rb
|
50
|
+
- lib/mack-javascript/view_helpers/string_helpers.rb
|
51
|
+
- lib/mack-javascript.rb
|
52
|
+
- README
|
53
|
+
has_rdoc: true
|
54
|
+
homepage: http://www.mackframework.com
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options: []
|
57
|
+
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: "0"
|
66
|
+
version:
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: "0"
|
72
|
+
version:
|
73
|
+
requirements: []
|
74
|
+
|
75
|
+
rubyforge_project: magrathea
|
76
|
+
rubygems_version: 1.2.0
|
77
|
+
signing_key:
|
78
|
+
specification_version: 2
|
79
|
+
summary: JavaScript in Mack
|
80
|
+
test_files: []
|
81
|
+
|