amrita2 2.0.0 → 2.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -1
- data/init.rb +1 -0
- data/lib/amrita2/rails_bridge.rb +92 -7
- data/lib/amrita2/template.rb +12 -127
- data/lib/amrita2/testsupport.rb +0 -25
- data/lib/amrita2/version.rb +1 -1
- data/sample/depot/app/controllers/admin_controller.rb +3 -1
- data/sample/depot/app/helpers/cart_helper.rb +8 -0
- data/sample/depot/app/helpers/price_helper.rb +7 -0
- data/sample/depot/config/environment.rb +0 -14
- data/sample/depot/config/environments/development.rb +2 -2
- data/sample/depot/db/schema.rb +27 -20
- data/sample/depot/test/functional/admin_controller_test.rb +63 -22
- data/sample/depot/test/functional/store_controller_test.rb +30 -18
- data/sample/depot/vendor/plugins/will_paginate/init.rb +4 -0
- data/sample/depot/vendor/plugins/will_paginate/lib/will_paginate.rb +61 -0
- data/sample/depot/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +132 -0
- data/sample/depot/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +80 -0
- data/sample/depot/vendor/plugins/will_paginate/lib/will_paginate/finder.rb +181 -0
- data/sample/depot/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +206 -0
- data/sample/depot/vendor/plugins/will_paginate/test/array_pagination_test.rb +131 -0
- data/sample/depot/vendor/plugins/will_paginate/test/boot.rb +23 -0
- data/sample/depot/vendor/plugins/will_paginate/test/finder_test.rb +290 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/admin.rb +3 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/company.rb +9 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/developer.rb +11 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/project.rb +15 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/reply.rb +5 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/schema.rb +38 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/topic.rb +4 -0
- data/sample/depot/vendor/plugins/will_paginate/test/fixtures/user.rb +2 -0
- data/sample/depot/vendor/plugins/will_paginate/test/helper.rb +25 -0
- data/sample/depot/vendor/plugins/will_paginate/test/lib/activerecord_test_case.rb +23 -0
- data/sample/depot/vendor/plugins/will_paginate/test/lib/activerecord_test_connector.rb +67 -0
- data/sample/depot/vendor/plugins/will_paginate/test/lib/load_fixtures.rb +13 -0
- data/sample/depot/vendor/plugins/will_paginate/test/pagination_test.rb +240 -0
- data/sample/hello/test1.rb +23 -0
- data/sample/login_engine/config/environment.rb +18 -20
- data/sample/login_engine/config/environments/development.rb +2 -2
- data/sample/login_engine/db/schema.rb +24 -17
- data/sample/login_engine/lib/login_engine/authenticated_system.rb +18 -18
- data/sample/login_engine/test/functional/user_controller_test.rb +1 -0
- data/sample/ramaze/ramaise_amrita2.rb +156 -0
- data/specs/attribute.rb +11 -0
- data/specs/datatypes.rb +13 -0
- data/specs/sample.rb +1 -2
- data/specs/sanitize.rb +14 -0
- metadata +28 -7
- data/sample/depot/app/helpers/ar_form.rb +0 -169
- data/sample/depot/app/helpers/form_tag.rb +0 -24
- data/sample/depot/app/helpers/standard_form.rb +0 -73
- data/sample/depot/test/integration/dsl_user_stories_test.rb +0 -126
- data/sample/depot/test/integration/user_stories_test.rb +0 -70
data/README
CHANGED
data/init.rb
CHANGED
data/lib/amrita2/rails_bridge.rb
CHANGED
@@ -2,9 +2,99 @@ require 'amrita2/template'
|
|
2
2
|
|
3
3
|
require 'action_view'
|
4
4
|
|
5
|
+
module Amrita2
|
6
|
+
module Core
|
7
|
+
class Hook
|
8
|
+
include ActionView::Helpers::FormHelper
|
9
|
+
include ActionView::Helpers::FormHelper
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
module Amrita2View # :nodoc: all
|
16
|
+
module FormHelper
|
17
|
+
class FormFieldHelper
|
18
|
+
include Amrita2::DictionaryData
|
19
|
+
attr_reader :form, :data
|
20
|
+
|
21
|
+
def initialize(record, form, &block)
|
22
|
+
@record = record
|
23
|
+
@form = form
|
24
|
+
@data = {}
|
25
|
+
block.call(self)
|
26
|
+
end
|
27
|
+
|
28
|
+
def add_field(name, value)
|
29
|
+
@data[name] = value
|
30
|
+
end
|
31
|
+
|
32
|
+
def add_field_element(name, element)
|
33
|
+
add_field(name, Amrita2::SanitizedString[element])
|
34
|
+
end
|
35
|
+
|
36
|
+
def method_missing(meth, name, *args, &block)
|
37
|
+
value = @form.send(meth, name, *args, &block)
|
38
|
+
add_field_element(name, value)
|
39
|
+
end
|
40
|
+
|
41
|
+
def as_hash
|
42
|
+
@data
|
43
|
+
end
|
44
|
+
|
45
|
+
def as_label_field_hash
|
46
|
+
@data.inject(Hash.new) do |h, data|
|
47
|
+
k, v = *data
|
48
|
+
h.merge ({
|
49
|
+
k => {
|
50
|
+
:label => {
|
51
|
+
:for=>"#{@record}_#{k}",
|
52
|
+
:text=>k.to_s
|
53
|
+
},
|
54
|
+
:field => v
|
55
|
+
}
|
56
|
+
})
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def amrita_define_form(*args, &block)
|
62
|
+
record = args.first
|
63
|
+
method = :form_for
|
64
|
+
format = :as_hash
|
65
|
+
case h = args.last
|
66
|
+
when Hash
|
67
|
+
method = h.delete(:form_method) || method
|
68
|
+
format = h.delete(:amrita_format) || format
|
69
|
+
end
|
70
|
+
|
71
|
+
amrita_form_hook(method, *args) do |f|
|
72
|
+
FormFieldHelper.new(record, f) do |ff|
|
73
|
+
block.call(ff)
|
74
|
+
end.send(format)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def amrita_form_hook(meth, *args, &block)
|
79
|
+
view = self
|
80
|
+
hook = Amrita2::Core::Hook.new do
|
81
|
+
_erbout = stream
|
82
|
+
view.instance_eval do
|
83
|
+
self.send(meth, *args) do |f|
|
84
|
+
data = block.call(f)
|
85
|
+
hook.render_me_with(data)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
FormFieldHelper = FormHelper::FormFieldHelper
|
92
|
+
end
|
93
|
+
|
5
94
|
module ActionView # :nodoc: all
|
6
95
|
class Base #:nodoc:
|
7
96
|
include Amrita2::Runtime
|
97
|
+
include Amrita2View::FormHelper
|
8
98
|
end
|
9
99
|
end
|
10
100
|
|
@@ -18,13 +108,6 @@ module ActiveRecord # :nodoc: all
|
|
18
108
|
end
|
19
109
|
end
|
20
110
|
|
21
|
-
module ActionController # :nodoc: all
|
22
|
-
class Pagination::Paginator
|
23
|
-
include Amrita2::DictionaryData
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
|
28
111
|
module Amrita2View # :nodoc: all
|
29
112
|
class Base
|
30
113
|
include Amrita2
|
@@ -91,6 +174,8 @@ module Amrita2View # :nodoc: all
|
|
91
174
|
end
|
92
175
|
end
|
93
176
|
end
|
177
|
+
|
178
|
+
|
94
179
|
module Helper
|
95
180
|
include ActionView::Helpers::UrlHelper
|
96
181
|
|
data/lib/amrita2/template.rb
CHANGED
@@ -1,10 +1,7 @@
|
|
1
|
-
require 'rubygems'
|
2
1
|
require 'hpricot'
|
3
2
|
require 'erb'
|
4
|
-
#require 'rexml/document'
|
5
3
|
require 'enumerator'
|
6
4
|
|
7
|
-
|
8
5
|
module Amrita2
|
9
6
|
module ScalarData
|
10
7
|
def amrita_value
|
@@ -73,18 +70,6 @@ class Time
|
|
73
70
|
include Amrita2::ScalarData
|
74
71
|
end
|
75
72
|
|
76
|
-
# class REXML::Element
|
77
|
-
# include Amrita2::ScalarData
|
78
|
-
# def amrita_value
|
79
|
-
# Amrita2::SanitizedString[to_s]
|
80
|
-
# end
|
81
|
-
|
82
|
-
# def as_amrita_dictionary(*args)
|
83
|
-
# Amrita2::Util::REXMLConverter.new(*args).convert(self)
|
84
|
-
# end
|
85
|
-
# end
|
86
|
-
|
87
|
-
|
88
73
|
class Array
|
89
74
|
include Amrita2::Enum
|
90
75
|
end
|
@@ -96,7 +81,7 @@ end
|
|
96
81
|
class Hash
|
97
82
|
include Amrita2::DictionaryData
|
98
83
|
def amrita_value(name)
|
99
|
-
self[name]
|
84
|
+
self[name.to_sym]
|
100
85
|
end
|
101
86
|
end
|
102
87
|
|
@@ -313,109 +298,9 @@ module Amrita2
|
|
313
298
|
self.new(args)
|
314
299
|
end
|
315
300
|
end
|
316
|
-
|
317
|
-
class REXMLConverter # :nodoc: all
|
318
|
-
include Amrita2
|
319
|
-
include Util::OptionSupport
|
320
|
-
|
321
|
-
def initialize(*args)
|
322
|
-
parse_opt(*args)
|
323
|
-
end
|
324
|
-
|
325
|
-
def convert(e)
|
326
|
-
@noattrs = select_elements(e, :noattrs)
|
327
|
-
@use_child_contents = select_elements(e, :use_child_contents)
|
328
|
-
@use_child = select_elements(e, :use_child)
|
329
|
-
convert1(e)
|
330
|
-
end
|
331
|
-
|
332
|
-
def convert1(e)
|
333
|
-
h = {}
|
334
|
-
if use_attr?(e)
|
335
|
-
e.attributes.each do |key, value|
|
336
|
-
h[key.intern] = value
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
|
-
ctag = get_contents_tag(e)
|
341
|
-
if ctag
|
342
|
-
if e.elements.size > 0
|
343
|
-
s = e.collect { |cc| cc.to_s }
|
344
|
-
h[ctag] = SanitizedString[s]
|
345
|
-
else
|
346
|
-
h[ctag] = e.text
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
e.each_element do |c|
|
351
|
-
if use_child_contents?(c)
|
352
|
-
if c.elements.size > 0
|
353
|
-
s = c.collect { |cc| cc.to_s }
|
354
|
-
h[c.name.intern] = SanitizedString[s]
|
355
|
-
else
|
356
|
-
h[c.name.intern] = c.text
|
357
|
-
end
|
358
|
-
end
|
359
|
-
|
360
|
-
if use_child?(c)
|
361
|
-
ch = convert1(c)
|
362
|
-
case h[c.name.intern]
|
363
|
-
when nil
|
364
|
-
h.merge!(ch)
|
365
|
-
when Array
|
366
|
-
h[c.name.intern] << ch[c.name.intern]
|
367
|
-
else
|
368
|
-
h[c.name.intern] = [h[c.name.intern], ch[c.name.intern]]
|
369
|
-
end
|
370
|
-
end
|
371
|
-
end
|
372
|
-
if @opt[:use_tag]
|
373
|
-
{ e.name.intern => h }
|
374
|
-
else
|
375
|
-
h
|
376
|
-
end
|
377
|
-
end
|
378
|
-
|
379
|
-
private
|
380
|
-
|
381
|
-
def select_elements(e, key)
|
382
|
-
case xpath = opt[key]
|
383
|
-
when String
|
384
|
-
REXML::XPath.match(e, xpath)
|
385
|
-
when nil,false
|
386
|
-
return []
|
387
|
-
else
|
388
|
-
REXML::XPath.match(e, "//*")
|
389
|
-
end
|
390
|
-
end
|
391
|
-
|
392
|
-
def get_contents_tag(e)
|
393
|
-
case o = opt[:use_contents]
|
394
|
-
when true, :use_contents
|
395
|
-
:contents
|
396
|
-
when Symbol
|
397
|
-
o
|
398
|
-
when nil
|
399
|
-
nil
|
400
|
-
else
|
401
|
-
raise "not implemented"
|
402
|
-
end
|
403
|
-
end
|
404
|
-
|
405
|
-
def use_attr?(e)
|
406
|
-
not @noattrs.include?(e)
|
407
|
-
end
|
408
|
-
|
409
|
-
def use_child_contents?(e)
|
410
|
-
@use_child_contents.include?(e)
|
411
|
-
end
|
412
|
-
|
413
|
-
def use_child?(e)
|
414
|
-
@use_child.include?(e)
|
415
|
-
end
|
416
|
-
end
|
417
301
|
end
|
418
302
|
|
303
|
+
|
419
304
|
module Runtime # :nodoc: all
|
420
305
|
def amrita_set_context_value(v)
|
421
306
|
Thread::current[:amrita_context_value] = v
|
@@ -951,7 +836,7 @@ module Amrita2
|
|
951
836
|
|
952
837
|
def class_name
|
953
838
|
if name
|
954
|
-
"XX" + name.capitalize
|
839
|
+
"XX" + name.capitalize.gsub(/[^\w\d]/, "_")
|
955
840
|
else
|
956
841
|
"XX%d" % [object_id.abs]
|
957
842
|
end
|
@@ -971,7 +856,7 @@ module Amrita2
|
|
971
856
|
|
972
857
|
def render_me(cg, n = name)
|
973
858
|
if (n)
|
974
|
-
cg.put_string_expression("#{instance_name}.render_with($_.amrita_value(
|
859
|
+
cg.put_string_expression("#{instance_name}.render_with($_.amrita_value(#{n.inspect}), __binding__)")
|
975
860
|
else
|
976
861
|
cg.put_string_expression("#{instance_name}.render_with($_, __binding__)")
|
977
862
|
end
|
@@ -1067,7 +952,6 @@ module Amrita2
|
|
1067
952
|
|
1068
953
|
def compile_filters(element, name, *args)
|
1069
954
|
src = args.compact.join('|')
|
1070
|
-
#filters = src.split('|').collect { |f| parse_filter(f) }
|
1071
955
|
filters = parse_filter(src)
|
1072
956
|
@filter_proc.call(element, name, filters)
|
1073
957
|
filters
|
@@ -2146,14 +2030,14 @@ module Amrita2
|
|
2146
2030
|
if use_body
|
2147
2031
|
body_key = @opt[:body]
|
2148
2032
|
body_key = :body unless body_key.kind_of?(Symbol)
|
2149
|
-
cg.code("body = $_.amrita_value(
|
2033
|
+
cg.code("body = $_.amrita_value(#{body_key.inspect})")
|
2150
2034
|
end
|
2151
2035
|
if @opt.size > 0
|
2152
2036
|
cg.code("a = {}")
|
2153
2037
|
@opt.each do |key, v|
|
2154
2038
|
next if key == :body
|
2155
2039
|
if element.get_attribute(key)
|
2156
|
-
cg.case_("v = $_.amrita_value(
|
2040
|
+
cg.case_("v = $_.amrita_value(#{v.inspect})") do
|
2157
2041
|
cg.when_("true") do
|
2158
2042
|
cg.code("a[#{key.inspect}] = #{element.get_attribute(key).inspect}")
|
2159
2043
|
end
|
@@ -2161,11 +2045,11 @@ module Amrita2
|
|
2161
2045
|
cg.code("a.delete(#{key.inspect})")
|
2162
2046
|
end
|
2163
2047
|
cg.else_ do
|
2164
|
-
cg.code("a[#{key.inspect}] = $_.amrita_value(
|
2048
|
+
cg.code("a[#{key.inspect}] = $_.amrita_value(#{v.inspect})")
|
2165
2049
|
end
|
2166
2050
|
end
|
2167
2051
|
else
|
2168
|
-
cg.code("v = $_.amrita_value(
|
2052
|
+
cg.code("v = $_.amrita_value(#{v.inspect})")
|
2169
2053
|
cg.code("a[#{key.inspect}] = v if v")
|
2170
2054
|
end
|
2171
2055
|
end
|
@@ -2414,7 +2298,7 @@ module Amrita2
|
|
2414
2298
|
|
2415
2299
|
def make_tupple_code(cg)
|
2416
2300
|
init_code = @names.collect do |n|
|
2417
|
-
"$_.amrita_value(
|
2301
|
+
"$_.amrita_value(#{n.inspect})"
|
2418
2302
|
end.join(",")
|
2419
2303
|
cg.code("$_ = Tuple[#{init_code}]")
|
2420
2304
|
end
|
@@ -2486,7 +2370,7 @@ module Amrita2
|
|
2486
2370
|
init_code = @names.collect do |n|
|
2487
2371
|
case n
|
2488
2372
|
when Symbol
|
2489
|
-
"$_.amrita_value(
|
2373
|
+
"$_.amrita_value(#{n.inspect})"
|
2490
2374
|
else
|
2491
2375
|
"eval(#{with_context_value_expression(n).inspect},__binding__)"
|
2492
2376
|
end
|
@@ -2532,7 +2416,7 @@ module Amrita2
|
|
2532
2416
|
private
|
2533
2417
|
def make_tupple_code(cg)
|
2534
2418
|
init_code = @names.collect do |n|
|
2535
|
-
"$_.amrita_value(
|
2419
|
+
"$_.amrita_value(#{n.inspect})"
|
2536
2420
|
end.join(",")
|
2537
2421
|
cg.code("a = [#{init_code}]")
|
2538
2422
|
end
|
@@ -2701,4 +2585,5 @@ module Amrita2
|
|
2701
2585
|
|
2702
2586
|
SanitizedString = Util::SanitizedString
|
2703
2587
|
Template = Core::Template
|
2588
|
+
Hooki = Core::Hook
|
2704
2589
|
end
|
data/lib/amrita2/testsupport.rb
CHANGED
@@ -144,28 +144,3 @@ end
|
|
144
144
|
class Object
|
145
145
|
include Amrita2::TestSupport
|
146
146
|
end
|
147
|
-
|
148
|
-
if Object::const_defined?(:ActionView)
|
149
|
-
|
150
|
-
class ActionView::Base # :nodoc: all
|
151
|
-
def self.unregister_template_handler(extension)
|
152
|
-
self.cache_template_extensions = false
|
153
|
-
@@template_handlers.delete(extension)
|
154
|
-
end
|
155
|
-
end
|
156
|
-
|
157
|
-
module Amrita2
|
158
|
-
module RailsTestHelper # :nodoc: all
|
159
|
-
def compare_result
|
160
|
-
ActionView::Base.register_template_handler "a2html", Amrita2View::Base
|
161
|
-
amrita2_result = yield
|
162
|
-
ActionView::Base.unregister_template_handler "a2html"
|
163
|
-
erb_result = yield
|
164
|
-
assert_equal_as_xml(erb_result, amrita2_result)
|
165
|
-
#assert_dom_equal(amrita2_result, erb_result)
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
end
|
171
|
-
|
data/lib/amrita2/version.rb
CHANGED
@@ -17,7 +17,9 @@ class AdminController < ApplicationController
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def list
|
20
|
-
|
20
|
+
#@product_pages, @products = paginate :products, :per_page => 10
|
21
|
+
|
22
|
+
@products = Product.paginate :page => params[:page]
|
21
23
|
end
|
22
24
|
|
23
25
|
def show
|
@@ -54,20 +54,6 @@ end
|
|
54
54
|
|
55
55
|
# Include your application configuration below
|
56
56
|
|
57
|
-
module PriceHelper
|
58
|
-
include ActionView::Helpers::NumberHelper
|
59
|
-
def to_currency
|
60
|
-
number_to_currency(self)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
class BigDecimal
|
65
|
-
include PriceHelper
|
66
|
-
end
|
67
|
-
|
68
|
-
class Integer
|
69
|
-
include PriceHelper
|
70
|
-
end
|
71
57
|
|
72
58
|
module StringHelper
|
73
59
|
include ActionView::Helpers::TextHelper
|