trellis 0.0.3 → 0.0.4
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/lib/trellis/trellis.rb +36 -9
- data/lib/trellis/utils.rb +10 -1
- data/lib/trellis/version.rb +1 -1
- data/test/core_extensions_spec.rb +14 -0
- metadata +2 -2
data/lib/trellis/trellis.rb
CHANGED
@@ -38,6 +38,7 @@ require 'markaby'
|
|
38
38
|
require 'redcloth'
|
39
39
|
require 'bluecloth'
|
40
40
|
require 'english/inflect'
|
41
|
+
require 'facets'
|
41
42
|
require 'directory_watcher'
|
42
43
|
|
43
44
|
module Trellis
|
@@ -113,7 +114,7 @@ module Trellis
|
|
113
114
|
response = Rack::Response.new
|
114
115
|
request = Rack::Request.new(env)
|
115
116
|
|
116
|
-
Application.logger.debug "request received with url_root of #{request.script_name}"
|
117
|
+
Application.logger.debug "request received with url_root of #{request.script_name}" if request.script_name
|
117
118
|
|
118
119
|
session = env["rack.session"]
|
119
120
|
|
@@ -132,6 +133,8 @@ module Trellis
|
|
132
133
|
router.inject_parameters_into_page_instance(page, request)
|
133
134
|
result = route.event ? page.process_event(route.event, route.value, route.source, session) : page
|
134
135
|
|
136
|
+
Application.logger.debug "response is #{result} an instance of #{result.class}"
|
137
|
+
|
135
138
|
# prepare the http response
|
136
139
|
if (request.post? || route.event) && result.kind_of?(Trellis::Page)
|
137
140
|
# for action events of posts then use redirect after post pattern
|
@@ -139,6 +142,7 @@ module Trellis
|
|
139
142
|
path = result.path ? result.path.gsub(/\/events\/.*/, '') : result.class.class_to_sym
|
140
143
|
response.status = 302
|
141
144
|
response.headers["Location"] = "#{request.script_name}/#{path}"
|
145
|
+
Application.logger.debug "redirecting to ==> #{request.script_name}/#{path}"
|
142
146
|
else
|
143
147
|
# for render requests simply render the page
|
144
148
|
response.body = result.kind_of?(Trellis::Page) ? result.render : result
|
@@ -319,7 +323,8 @@ module Trellis
|
|
319
323
|
attr_accessor :params, :path, :logger
|
320
324
|
|
321
325
|
def self.inherited(child) #:nodoc:
|
322
|
-
|
326
|
+
sym = child.class_to_sym
|
327
|
+
@@subclasses[sym] = child if sym
|
323
328
|
|
324
329
|
child.instance_variable_set(:@name, child.underscore_class_name)
|
325
330
|
child.attr_array(:pages, :create_accessor => false)
|
@@ -451,14 +456,33 @@ module Trellis
|
|
451
456
|
def self.inject_dependent_pages(target)
|
452
457
|
@pages.each do |sym|
|
453
458
|
clazz = Page.get_page(sym)
|
454
|
-
if
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
459
|
+
# if the injected page class is not found
|
460
|
+
# throw an exception in production mode or
|
461
|
+
# dynamically generate a page in development mode
|
462
|
+
unless clazz
|
463
|
+
target_class = sym.to_s.camelcase(:upper)
|
464
|
+
Application.logger.debug "creating stand in page class #{target_class} for symbol #{sym}"
|
465
|
+
|
466
|
+
clazz = Page.create_child(target_class) do
|
467
|
+
|
468
|
+
def method_missing(sym, *args, &block)
|
469
|
+
Application.logger.debug "faking response to #{sym}(#{args}) from #{self} an instance of #{self.class}"
|
470
|
+
self
|
471
|
+
end
|
472
|
+
|
473
|
+
template do
|
474
|
+
xhtml_strict {
|
475
|
+
head { title "Stand-in Page" }
|
476
|
+
body { h1 { text %[Stand-in Page for <trellis:value name="page_name"/>] }}
|
477
|
+
}
|
478
|
+
end
|
479
|
+
end
|
480
|
+
Page.subclasses[sym] = clazz
|
461
481
|
end
|
482
|
+
|
483
|
+
Application.logger.debug "injecting an instance of #{clazz} for #{sym}"
|
484
|
+
target.instance_variable_set("@#{sym}".to_sym, clazz.new)
|
485
|
+
target.meta_def(sym) { instance_variable_get("@#{sym}") }
|
462
486
|
end
|
463
487
|
end
|
464
488
|
|
@@ -600,6 +624,9 @@ module Trellis
|
|
600
624
|
end
|
601
625
|
end
|
602
626
|
|
627
|
+
# add other useful values to the tag context
|
628
|
+
@context.globals.send(:page_name=, page.class.to_s)
|
629
|
+
|
603
630
|
#TODO add public page methods to the context
|
604
631
|
|
605
632
|
|
data/lib/trellis/utils.rb
CHANGED
@@ -50,7 +50,8 @@ class Class #:nodoc:
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def underscore_class_name
|
53
|
-
name.
|
53
|
+
value = (name.empty? || name =~ /<class:(.*)/) ? self : name
|
54
|
+
value.to_s.gsub(/::/, '/').
|
54
55
|
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
55
56
|
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
56
57
|
tr("-", "_").
|
@@ -87,6 +88,14 @@ class Class #:nodoc:
|
|
87
88
|
instance_variable_set("@#{plural_array_name_sym}".to_sym, Array.new)
|
88
89
|
meta_def(plural_array_name_sym) { instance_variable_get("@#{plural_array_name_sym}".to_sym) } if create_accessor
|
89
90
|
end
|
91
|
+
|
92
|
+
def create_child(class_name, mod = Object, register = true, &block)
|
93
|
+
klass = Class.new self
|
94
|
+
klass.class_eval &block if block_given?
|
95
|
+
mod.const_set class_name, klass if register
|
96
|
+
klass
|
97
|
+
end
|
98
|
+
|
90
99
|
end
|
91
100
|
|
92
101
|
class String #:nodoc:
|
data/lib/trellis/version.rb
CHANGED
@@ -48,6 +48,13 @@ describe Class, " when calling underscore_class_name" do
|
|
48
48
|
sym = Boo::SomeOtherClass.underscore_class_name
|
49
49
|
sym.should eql("some_other_class")
|
50
50
|
end
|
51
|
+
|
52
|
+
it "should return a valid underscore ruby identifier string for an annonymous class" do
|
53
|
+
class TheParent; end
|
54
|
+
TheParent.create_child "AnnonymousChild"
|
55
|
+
sym = AnnonymousChild.underscore_class_name
|
56
|
+
sym.should eql("annonymous_child")
|
57
|
+
end
|
51
58
|
end
|
52
59
|
|
53
60
|
# class_to_sym
|
@@ -66,6 +73,13 @@ describe Class, " when calling class_to_sym" do
|
|
66
73
|
sym = Boo::SomeOtherClass.class_to_sym
|
67
74
|
sym.should eql(:some_other_class)
|
68
75
|
end
|
76
|
+
|
77
|
+
it "should return a valid underscore ruby identifier as a symbol for an annonymous class" do
|
78
|
+
class TheParent; end
|
79
|
+
TheParent.create_child "AnotherAnnonymousChild"
|
80
|
+
sym = AnotherAnnonymousChild.class_to_sym
|
81
|
+
sym.should eql(:another_annonymous_child)
|
82
|
+
end
|
69
83
|
end
|
70
84
|
|
71
85
|
# attr_array tests
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: trellis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Sam-Bodden
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-10-06 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|