cuba-tools 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/cuba-tools.gemspec +6 -1
- data/lib/cuba/tools/auth.rb +1 -1
- data/lib/cuba/tools/inflectors.rb +59 -0
- data/lib/cuba/tools/mab.rb +5 -0
- data/lib/cuba/tools/widget/base.rb +163 -0
- data/lib/cuba/tools/widget/events.rb +19 -0
- data/lib/cuba/tools/widget/helpers.rb +76 -0
- data/lib/cuba/tools/widget/middleware.rb +14 -0
- data/lib/cuba/tools/widget/responder.rb +52 -0
- data/lib/cuba/tools/widget.rb +49 -0
- data/lib/cuba/tools.rb +5 -1
- data/test/cutest_helper.rb +4 -0
- data/test/dummy/app/widgets/other_widget.rb +7 -0
- data/test/dummy/app/widgets/some_widget/_some_partial.slim +1 -0
- data/test/dummy/app/widgets/some_widget/display.slim +6 -0
- data/test/dummy/app/widgets/some_widget/some_state.slim +2 -0
- data/test/dummy/app/widgets/some_widget.rb +21 -0
- data/test/tools/widget_test.rb +102 -0
- metadata +95 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3bdced9844636ce9756c972e1f896b803385065d
|
4
|
+
data.tar.gz: f05797ab1125e08880e094778755aba92adcba0c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 61784850e3b6ae80d5f523a168845266f3c9d4d7c84a637a8d2a819303f3931e6e74c6f8df7243be20a4408f8a5a088a4c7f6a68975f744fb3ab89f3e037320c
|
7
|
+
data.tar.gz: 4920a0e969a0a36e689ca97a6007c70d31865f66ed5e940a8b04c7e51db36ea76cea3aaa996adf328c7c31f7e0847eb7220d7a86cf167dc3e8d7fd788a2f11f8
|
data/cuba-tools.gemspec
CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "cuba-tools"
|
7
|
-
spec.version = "0.0.
|
7
|
+
spec.version = "0.0.3"
|
8
8
|
spec.authors = ["cj"]
|
9
9
|
spec.email = ["cjlazell@gmail.com"]
|
10
10
|
spec.description = %q{Contains a group of tools to extend cuba}
|
@@ -20,7 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.add_dependency "cuba", "~> 3.1.1"
|
21
21
|
spec.add_dependency "shield", "~> 2.1.0"
|
22
22
|
spec.add_dependency "signature-acd", "~> 0.1.9"
|
23
|
+
spec.add_dependency "mab", "~> 0.0.3"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
26
|
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "cutest-cj"
|
28
|
+
spec.add_development_dependency "awesome_print"
|
29
|
+
spec.add_development_dependency "tilt"
|
30
|
+
spec.add_development_dependency "slim"
|
26
31
|
end
|
data/lib/cuba/tools/auth.rb
CHANGED
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
class String
|
4
|
+
def underscore
|
5
|
+
self.gsub(/::/, '/').
|
6
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
7
|
+
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
8
|
+
tr(" ", "_").
|
9
|
+
tr("-", "_").
|
10
|
+
downcase
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class Object
|
15
|
+
def blank?
|
16
|
+
respond_to?(:empty?) ? empty? : !self
|
17
|
+
end
|
18
|
+
|
19
|
+
def present?
|
20
|
+
!blank?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class DeepOpenStruct < OpenStruct
|
25
|
+
def initialize(hash=nil)
|
26
|
+
|
27
|
+
@table = {}
|
28
|
+
@hash_table = {}
|
29
|
+
|
30
|
+
if hash
|
31
|
+
hash.each do |k,v|
|
32
|
+
|
33
|
+
if v.is_a?(Array)
|
34
|
+
other = Array.new()
|
35
|
+
v.each { | entry |
|
36
|
+
other.push(self.class.new(entry))
|
37
|
+
}
|
38
|
+
v = other
|
39
|
+
end
|
40
|
+
|
41
|
+
@table[k.to_sym] = (v.is_a?(Hash) ? self.class.new(v) : v)
|
42
|
+
@hash_table[k.to_sym] = v
|
43
|
+
new_ostruct_member(k)
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_h
|
50
|
+
@hash_table
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class Hash
|
55
|
+
def to_deep_ostruct
|
56
|
+
DeepOpenStruct.new self
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
@@ -0,0 +1,163 @@
|
|
1
|
+
module Cuba::Tools
|
2
|
+
module Widget
|
3
|
+
class Base
|
4
|
+
JS_ESCAPE = { '\\' => '\\\\', '</' => '<\/', "\r\n" => '\n', "\n" => '\n', "\r" => '\n', '"' => '\\"', "'" => "\\'" }
|
5
|
+
PARTIAL_REGEX = Regexp.new '([a-zA-Z_]+)$'
|
6
|
+
VIEW_TYPES = %w(slim erb haml)
|
7
|
+
|
8
|
+
attr_accessor :app, :res, :req, :name, :events, :widget_state
|
9
|
+
|
10
|
+
def initialize app, res, req, name, events
|
11
|
+
@app = app
|
12
|
+
@res = res
|
13
|
+
@req = req
|
14
|
+
@name = name.to_s
|
15
|
+
@events = events
|
16
|
+
@widget_state = false
|
17
|
+
|
18
|
+
events.add_observer self, :trigger
|
19
|
+
end
|
20
|
+
|
21
|
+
def set_state state
|
22
|
+
@widget_state = state
|
23
|
+
end
|
24
|
+
|
25
|
+
def reset_state
|
26
|
+
@widget_state = false
|
27
|
+
end
|
28
|
+
|
29
|
+
def render_state options = {}
|
30
|
+
if method(widget_state).parameters.length > 0
|
31
|
+
send(widget_state, options.to_deep_ostruct)
|
32
|
+
else
|
33
|
+
send(widget_state)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def trigger widget_name, widget_event, data = {}
|
38
|
+
if class_events = self.class.events
|
39
|
+
class_events.each do |class_event, opts|
|
40
|
+
if class_event.to_s == widget_event.to_s && (
|
41
|
+
widget_name == name or
|
42
|
+
opts[:for].to_s == widget_name
|
43
|
+
)
|
44
|
+
if not opts[:with]
|
45
|
+
e = widget_event
|
46
|
+
else
|
47
|
+
e = opts[:with]
|
48
|
+
end
|
49
|
+
|
50
|
+
if method(e) and method(e).parameters.length > 0
|
51
|
+
send(e, data)
|
52
|
+
else
|
53
|
+
send(e)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def render *args
|
61
|
+
if args.first.kind_of? Hash
|
62
|
+
locals = args.first
|
63
|
+
# if it's a partial we add an underscore infront of it
|
64
|
+
state = view = locals[:state] ||
|
65
|
+
"#{locals[:partial]}".gsub(PARTIAL_REGEX, '_\1')
|
66
|
+
else
|
67
|
+
state = view = args.first
|
68
|
+
locals = args.length > 1 ? args.last : {}
|
69
|
+
end
|
70
|
+
|
71
|
+
# set the state and view if it's blank
|
72
|
+
if view.blank?
|
73
|
+
state = view = caller[0][/`.*'/][1..-2]
|
74
|
+
# override state if widget_state set
|
75
|
+
elsif !locals[:state] && widget_state
|
76
|
+
state = widget_state
|
77
|
+
end
|
78
|
+
|
79
|
+
req.env[:widget_name] = name
|
80
|
+
req.env[:widget_state] = state
|
81
|
+
|
82
|
+
view_folder = self.class.to_s.gsub(
|
83
|
+
/\w+::Widgets::/, ''
|
84
|
+
).split('::').map(&:underscore).join('/')
|
85
|
+
|
86
|
+
# check for the extension
|
87
|
+
file = false
|
88
|
+
VIEW_TYPES.each do |type|
|
89
|
+
file = "#{view_path}/#{view_folder}/#{view}.#{type}"
|
90
|
+
if File.file? file
|
91
|
+
break
|
92
|
+
else
|
93
|
+
file = false
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
app.render file, locals
|
98
|
+
end
|
99
|
+
|
100
|
+
def partial template, locals = {}
|
101
|
+
locals[:partial] = template
|
102
|
+
render locals
|
103
|
+
end
|
104
|
+
|
105
|
+
def current_user
|
106
|
+
app.current_user
|
107
|
+
end
|
108
|
+
|
109
|
+
def view_path
|
110
|
+
Widget.config.view_path
|
111
|
+
end
|
112
|
+
|
113
|
+
def replace state, opts = {}
|
114
|
+
set_state state
|
115
|
+
|
116
|
+
if !state.is_a? String
|
117
|
+
opts[:state] = state
|
118
|
+
content = render_state, opts
|
119
|
+
selector = '#' + id_for(state)
|
120
|
+
else
|
121
|
+
if !opts.key?(:content) and !opts.key?(:with)
|
122
|
+
content = render_state opts
|
123
|
+
else
|
124
|
+
content = opts[:content] || opts[:with]
|
125
|
+
end
|
126
|
+
selector = state
|
127
|
+
end
|
128
|
+
|
129
|
+
reset_state
|
130
|
+
|
131
|
+
res.write '$("' + selector + '").replaceWith("' + escape(content) + '");'
|
132
|
+
# scroll to the top of the page just as if we went to the url directly
|
133
|
+
# if opts[:scroll_to_top]
|
134
|
+
# res.write 'window.scrollTo(0, 0);'
|
135
|
+
# end
|
136
|
+
end
|
137
|
+
|
138
|
+
def id_for state
|
139
|
+
"#{req.env[:widget_name]}_#{state}"
|
140
|
+
end
|
141
|
+
|
142
|
+
def escape js
|
143
|
+
js.to_s.gsub(/(\\|<\/|\r\n|\\3342\\2200\\2250|[\n\r"'])/) {|match| JS_ESCAPE[match] }
|
144
|
+
end
|
145
|
+
|
146
|
+
class << self
|
147
|
+
attr_accessor :events, :available_helper_methods
|
148
|
+
|
149
|
+
def respond_to event, opts = {}
|
150
|
+
@events ||= []
|
151
|
+
@events << [event.to_s, opts]
|
152
|
+
end
|
153
|
+
|
154
|
+
def responds_to *events
|
155
|
+
@events ||= []
|
156
|
+
events.each do |event|
|
157
|
+
@events << [event, {}]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require "observer"
|
2
|
+
|
3
|
+
module Cuba::Tools
|
4
|
+
module Widget
|
5
|
+
class Events < Struct.new(:res, :req)
|
6
|
+
include Observable
|
7
|
+
|
8
|
+
def trigger widget_name, widget_event, user_data = {}
|
9
|
+
data = user_data.to_deep_ostruct
|
10
|
+
|
11
|
+
# THIS IS WHAT WILL MAKE SURE EVENTS ARE TRIGGERED
|
12
|
+
changed
|
13
|
+
##################################################
|
14
|
+
|
15
|
+
notify_observers widget_name, widget_event, data
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
module Cuba::Tools
|
2
|
+
module Widget
|
3
|
+
module Helpers
|
4
|
+
def self.setup app
|
5
|
+
require 'cuba/tools/mab'
|
6
|
+
# load up all the widgets if we have a path
|
7
|
+
if path = Widget.config.view_path
|
8
|
+
Dir["#{path}/**/*.rb"].each { |rb| require rb }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def method_missing(meth, *args, &block)
|
13
|
+
widget = req.env[:loaded_widgets][req.env[:widget_name].to_sym]
|
14
|
+
|
15
|
+
if widget and widget.respond_to? meth
|
16
|
+
widget.send meth, *args, &block
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def widget_div opts = {}, &block
|
23
|
+
defaults = {
|
24
|
+
id: "#{req.env[:widget_name]}_#{req.env[:widget_state]}"
|
25
|
+
}.merge opts
|
26
|
+
|
27
|
+
name = req.env[:widget_name].to_sym
|
28
|
+
widget = req.env[:loaded_widgets][name]
|
29
|
+
|
30
|
+
html = block.call widget
|
31
|
+
|
32
|
+
mab do
|
33
|
+
div(defaults) do
|
34
|
+
text! html
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def render_widget *args
|
40
|
+
Widget.load_all(self, req, res)
|
41
|
+
|
42
|
+
if args.first.kind_of? Hash
|
43
|
+
opts = args.first
|
44
|
+
name = req.env[:widget_name]
|
45
|
+
else
|
46
|
+
name = args.first
|
47
|
+
opts = args.length > 1 ? args.last : {}
|
48
|
+
end
|
49
|
+
|
50
|
+
# set the current state (the method that will get called on render_widget)
|
51
|
+
state = opts[:state] || 'display'
|
52
|
+
|
53
|
+
widget = req.env[:loaded_widgets][name]
|
54
|
+
|
55
|
+
if widget.method(state).parameters.length > 0
|
56
|
+
widget.send state, opts.to_deep_ostruct
|
57
|
+
else
|
58
|
+
widget.send state
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def url_for_event event, options = {}
|
63
|
+
widget_name = options.delete(:widget_name) || req.env[:widget_name]
|
64
|
+
"http#{req.env['SERVER_PORT'] == '443' ? 's' : ''}://#{req.env['HTTP_HOST']}#{Widget.config.url_path}?widget_event=#{event}&widget_name=#{widget_name}" + (options.any?? '&' + URI.encode_www_form(options) : '')
|
65
|
+
end
|
66
|
+
|
67
|
+
def render_widgets
|
68
|
+
res.headers["Content-Type"] = "text/javascript; charset=utf-8"
|
69
|
+
widget_name, widget_event, events = Widget.load_all self, req, res
|
70
|
+
events.trigger widget_name, widget_event, req.params
|
71
|
+
# res.write "$('head > meta[name=csrf-token]').attr('content', '#{csrf_token}');"
|
72
|
+
res.write '$(document).trigger("page:change");'
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Cuba::Tools
|
2
|
+
module Widget
|
3
|
+
class Responder
|
4
|
+
def initialize(app, env)
|
5
|
+
@app = app
|
6
|
+
@env = env
|
7
|
+
end
|
8
|
+
|
9
|
+
def respond
|
10
|
+
if widget_path
|
11
|
+
widget_name, widget_event, events = Widget.load_all @app, req, res
|
12
|
+
|
13
|
+
events.trigger widget_name, widget_event, req.params
|
14
|
+
# res.write "$('head > meta[name=csrf-token]').attr('content', '#{csrf_token}');"
|
15
|
+
res.write '$(document).trigger("page:change");'
|
16
|
+
end
|
17
|
+
|
18
|
+
res.finish
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def req
|
24
|
+
@req ||= Rack::Request.new(@env)
|
25
|
+
end
|
26
|
+
|
27
|
+
def res
|
28
|
+
@res ||= begin
|
29
|
+
if not widget_path
|
30
|
+
status, headers, body = @app.call(req.env)
|
31
|
+
else
|
32
|
+
status, headers, body = [
|
33
|
+
200,
|
34
|
+
{"Content-Type" => "text/javascript; charset=utf-8"},
|
35
|
+
[""]
|
36
|
+
]
|
37
|
+
end
|
38
|
+
|
39
|
+
Rack::Response.new(body, status, headers)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def widget_path
|
44
|
+
path[Regexp.new("^#{Widget.config.url_path}($|\\?.*)")]
|
45
|
+
end
|
46
|
+
|
47
|
+
def path
|
48
|
+
@env['PATH_INFO']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Cuba::Tools
|
2
|
+
module Widget
|
3
|
+
autoload :Responder, "cuba/tools/widget/responder"
|
4
|
+
autoload :Middleware, "cuba/tools/widget/middleware"
|
5
|
+
autoload :Helpers, "cuba/tools/widget/helpers"
|
6
|
+
autoload :Base, "cuba/tools/widget/base"
|
7
|
+
autoload :Events, "cuba/tools/widget/events"
|
8
|
+
|
9
|
+
extend self
|
10
|
+
|
11
|
+
attr_accessor :config, :reset_config, :load_all
|
12
|
+
|
13
|
+
def setup
|
14
|
+
yield config
|
15
|
+
end
|
16
|
+
|
17
|
+
def config
|
18
|
+
@config || reset_config!
|
19
|
+
end
|
20
|
+
|
21
|
+
# Resets the configuration to the default (empty hash)
|
22
|
+
def reset_config!
|
23
|
+
@config = OpenStruct.new({
|
24
|
+
url_path: '/widgets',
|
25
|
+
widgets: {}
|
26
|
+
})
|
27
|
+
end
|
28
|
+
|
29
|
+
def load_all app, req, res
|
30
|
+
events = Events.new res, req
|
31
|
+
|
32
|
+
if widget_event = req.params["widget_event"]
|
33
|
+
widget_name = req.params["widget_name"]
|
34
|
+
end
|
35
|
+
|
36
|
+
unless req.env[:loaded_widgets]
|
37
|
+
req.env[:loaded_widgets] ||= {}
|
38
|
+
|
39
|
+
Widget.config.widgets.each do |name, widget|
|
40
|
+
req.env[:loaded_widgets][name] = Object.const_get(widget).new(
|
41
|
+
app, res, req, name, events
|
42
|
+
)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
[widget_name, widget_event, events]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/cuba/tools.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
| some partial
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class SomeWidget < Cuba::Tools::Widget::Base
|
2
|
+
respond_to :test
|
3
|
+
|
4
|
+
def display
|
5
|
+
set_state :some_state
|
6
|
+
|
7
|
+
render
|
8
|
+
end
|
9
|
+
|
10
|
+
def some_state
|
11
|
+
render
|
12
|
+
end
|
13
|
+
|
14
|
+
def test
|
15
|
+
res.write 'moo'
|
16
|
+
end
|
17
|
+
|
18
|
+
def user_widget_method
|
19
|
+
'user_widget_method'
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require_relative '../cutest_helper'
|
2
|
+
require "slim"
|
3
|
+
require "cuba/render"
|
4
|
+
require 'cgi'
|
5
|
+
|
6
|
+
setup do
|
7
|
+
Cuba.reset!
|
8
|
+
Cuba::Tools::Widget.reset_config!
|
9
|
+
Cuba::Tools::Widget.setup do |c|
|
10
|
+
c.widgets = {
|
11
|
+
some_widget: 'SomeWidget',
|
12
|
+
other_widget: 'OtherWidget'
|
13
|
+
}
|
14
|
+
c.view_path = Dir.pwd + '/test/dummy/app/widgets'
|
15
|
+
end
|
16
|
+
Cuba.use Cuba::Tools::Widget::Middleware
|
17
|
+
Cuba.plugin Cuba::Tools::Widget::Helpers
|
18
|
+
Cuba.plugin Cuba::Render
|
19
|
+
Cuba.define do
|
20
|
+
def test_helper
|
21
|
+
'test_helper'
|
22
|
+
end
|
23
|
+
|
24
|
+
on "test" do
|
25
|
+
res.write render_widget :some_widget
|
26
|
+
end
|
27
|
+
|
28
|
+
on root do
|
29
|
+
res.write 'default'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
scope "tools/widget" do
|
35
|
+
test "config" do
|
36
|
+
assert Cuba::Tools::Widget.config.url_path == '/widgets'
|
37
|
+
Cuba::Tools::Widget.setup do |config|
|
38
|
+
config.url_path = '/new'
|
39
|
+
end
|
40
|
+
assert Cuba::Tools::Widget.config.url_path == '/new'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
scope "cuba/tools/widget/middleware" do
|
45
|
+
test 'default' do
|
46
|
+
status, headers, resp = Cuba.call({
|
47
|
+
'PATH_INFO' => '/widgets',
|
48
|
+
'rack.input' => {}
|
49
|
+
})
|
50
|
+
body = resp.send('body').join
|
51
|
+
|
52
|
+
assert status == 200
|
53
|
+
assert headers['Content-Type'] == "text/javascript; charset=utf-8"
|
54
|
+
assert body[/\$\(document\)/] != nil
|
55
|
+
assert body[/default/] == nil
|
56
|
+
|
57
|
+
_, _, resp = Cuba.call({
|
58
|
+
'PATH_INFO' => '/',
|
59
|
+
'rack.input' => {}
|
60
|
+
})
|
61
|
+
body = resp.send('body').join
|
62
|
+
|
63
|
+
assert body[/\$\(document\)/] == nil
|
64
|
+
assert body[/default/] != nil
|
65
|
+
end
|
66
|
+
|
67
|
+
test 'widget events' do
|
68
|
+
_, _, resp = Cuba.call({
|
69
|
+
'PATH_INFO' => '/widgets',
|
70
|
+
'REQUEST_METHOD' => 'GET',
|
71
|
+
'rack.input' => {},
|
72
|
+
'QUERY_STRING' => 'widget_name=some_widget&widget_event=test'
|
73
|
+
})
|
74
|
+
body = CGI.unescapeHTML resp.send('body').join
|
75
|
+
|
76
|
+
assert body[/moo/] != nil
|
77
|
+
assert body[/cow/] != nil
|
78
|
+
end
|
79
|
+
|
80
|
+
test '#render_widget' do
|
81
|
+
_, _, resp = Cuba.call({
|
82
|
+
'PATH_INFO' => '/test',
|
83
|
+
'SCRIPT_NAME' => '/test',
|
84
|
+
'REQUEST_METHOD' => 'GET',
|
85
|
+
'rack.input' => {}
|
86
|
+
})
|
87
|
+
# TODO: figure out why the html isn't decoded properly
|
88
|
+
# body = CGI.unescapeHTML resp.send('body').join
|
89
|
+
body = resp.send('body').join
|
90
|
+
|
91
|
+
assert body['test_helper'] != nil
|
92
|
+
assert body['display'] != nil
|
93
|
+
assert body['some_widget_display'] != nil
|
94
|
+
assert body['some partial'] != nil
|
95
|
+
assert body['some state'] != nil
|
96
|
+
assert body['user_widget_method'] != nil
|
97
|
+
# TODO: figure out why the html isn't decoded properly
|
98
|
+
# and this is failing
|
99
|
+
# assert body['id="some_widget_some_state"'] != nil
|
100
|
+
assert body['some_widget_some_state'] != nil
|
101
|
+
end
|
102
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cuba-tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- cj
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-05-
|
11
|
+
date: 2014-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cuba
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: 0.1.9
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: mab
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.0.3
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.0.3
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +94,62 @@ dependencies:
|
|
80
94
|
- - ">="
|
81
95
|
- !ruby/object:Gem::Version
|
82
96
|
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: cutest-cj
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: awesome_print
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: tilt
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: slim
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
83
153
|
description: Contains a group of tools to extend cuba
|
84
154
|
email:
|
85
155
|
- cjlazell@gmail.com
|
@@ -96,6 +166,21 @@ files:
|
|
96
166
|
- lib/cuba/tools.rb
|
97
167
|
- lib/cuba/tools/api.rb
|
98
168
|
- lib/cuba/tools/auth.rb
|
169
|
+
- lib/cuba/tools/inflectors.rb
|
170
|
+
- lib/cuba/tools/mab.rb
|
171
|
+
- lib/cuba/tools/widget.rb
|
172
|
+
- lib/cuba/tools/widget/base.rb
|
173
|
+
- lib/cuba/tools/widget/events.rb
|
174
|
+
- lib/cuba/tools/widget/helpers.rb
|
175
|
+
- lib/cuba/tools/widget/middleware.rb
|
176
|
+
- lib/cuba/tools/widget/responder.rb
|
177
|
+
- test/cutest_helper.rb
|
178
|
+
- test/dummy/app/widgets/other_widget.rb
|
179
|
+
- test/dummy/app/widgets/some_widget.rb
|
180
|
+
- test/dummy/app/widgets/some_widget/_some_partial.slim
|
181
|
+
- test/dummy/app/widgets/some_widget/display.slim
|
182
|
+
- test/dummy/app/widgets/some_widget/some_state.slim
|
183
|
+
- test/tools/widget_test.rb
|
99
184
|
homepage: ''
|
100
185
|
licenses:
|
101
186
|
- MIT
|
@@ -120,4 +205,11 @@ rubygems_version: 2.2.2
|
|
120
205
|
signing_key:
|
121
206
|
specification_version: 4
|
122
207
|
summary: Tools to extend cuba
|
123
|
-
test_files:
|
208
|
+
test_files:
|
209
|
+
- test/cutest_helper.rb
|
210
|
+
- test/dummy/app/widgets/other_widget.rb
|
211
|
+
- test/dummy/app/widgets/some_widget.rb
|
212
|
+
- test/dummy/app/widgets/some_widget/_some_partial.slim
|
213
|
+
- test/dummy/app/widgets/some_widget/display.slim
|
214
|
+
- test/dummy/app/widgets/some_widget/some_state.slim
|
215
|
+
- test/tools/widget_test.rb
|