lolita 3.1.0 → 3.1.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/{GUIDELINE → GUIDELINES} +0 -0
- data/History.rdoc +70 -0
- data/LICENSE.txt +3 -1
- data/README.rdoc +5 -1
- data/Rakefile +2 -2
- data/VERSION +1 -1
- data/app/controllers/lolita/rest_controller.rb +1 -1
- data/app/views/components/lolita/configuration/field/array/filter/_display.html.erb +1 -0
- data/app/views/components/lolita/configuration/field/boolean/filter/_display.html.erb +2 -0
- data/app/views/components/lolita/configuration/field/date_time/_display.html.erb +1 -0
- data/app/views/components/lolita/configuration/field/date_time/date/_display.html.erb +1 -0
- data/app/views/components/lolita/configuration/field/date_time/time/_display.html.erb +1 -0
- data/app/views/components/lolita/configuration/field/time/_display.html.erb +1 -1
- data/app/views/components/lolita/configuration/list/_filter.html.erb +2 -2
- data/config/locales/en.yml +4 -1
- data/lib/lolita.rb +18 -11
- data/lib/lolita/adapter/abstract_adapter.rb +1 -1
- data/lib/lolita/adapter/active_record.rb +28 -1
- data/lib/lolita/adapter/mongoid.rb +25 -2
- data/lib/lolita/configuration/field/array.rb +1 -0
- data/lib/lolita/configuration/field/date.rb +1 -1
- data/lib/lolita/configuration/field/date_time.rb +13 -0
- data/lib/lolita/configuration/filter.rb +24 -0
- data/lib/lolita/configuration/list.rb +4 -1
- data/lib/lolita/configuration/page.rb +18 -2
- data/lib/lolita/controllers/internal_helpers.rb +1 -0
- data/lib/lolita/hooks.rb +22 -22
- data/lib/lolita/hooks/named_hook.rb +7 -3
- data/lib/lolita/navigation/branch.rb +7 -0
- data/lib/lolita/navigation/tree.rb +7 -0
- data/lolita.gemspec +22 -12
- data/public/stylesheets/lolita/style.css +16 -0
- data/spec/adapter_helper.rb +1 -1
- data/spec/configuration/filter_spec.rb +63 -1
- data/spec/controllers/internal_helpers_spec.rb +7 -0
- data/spec/controllers/lolita_rest_spec.rb +1 -0
- data/spec/hooks_spec.rb +16 -15
- data/spec/navigation/tree_spec.rb +41 -18
- data/spec/orm/mongoid.rb +4 -7
- data/spec/rails_app/app/mongoid/address.rb +1 -1
- data/spec/rails_app/app/mongoid/category.rb +6 -0
- data/spec/rails_app/app/mongoid/comment.rb +2 -2
- data/spec/rails_app/app/mongoid/post.rb +10 -6
- data/spec/rails_app/app/mongoid/preference.rb +1 -1
- data/spec/rails_app/app/mongoid/profile.rb +3 -3
- data/spec/rails_app/app/mongoid/tag.rb +4 -0
- data/spec/support/factories/category.rb +3 -0
- data/spec/support/factories/post.rb +1 -0
- data/spec/support/factories/tag.rb +3 -0
- metadata +23 -14
- data/.project +0 -17
- data/lib/lolita/navigation.rb +0 -48
- data/log/development.log +0 -0
- data/test/cells/form_cell_test.rb +0 -15
- data/test/test_helper.rb +0 -2
@@ -47,6 +47,7 @@ module Lolita
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def resource_with_attributes(current_resource,attributes={})
|
50
|
+
#TODO: detect rails date_select and datetime_select special attributes
|
50
51
|
attributes||=resource_attributes
|
51
52
|
attributes.each{|key,value|
|
52
53
|
current_resource.send(:"#{key}=",value)
|
data/lib/lolita/hooks.rb
CHANGED
@@ -4,7 +4,7 @@ module Lolita
|
|
4
4
|
# Hooks are stored in class <i>@hooks</i> variable, that is Hash and each key is hook name
|
5
5
|
# and each hook also is Hash that have <em>:methods</em> and <em>:blocks</em>
|
6
6
|
# keys. Both of those are Array, and each time you call callback method, like <i>before_save</i> and so on, block
|
7
|
-
# and/or methods is stored. <b>Each time</b> #
|
7
|
+
# and/or methods is stored. <b>Each time</b> #run is called all blocks and methods will be executed.
|
8
8
|
# It may look like this.
|
9
9
|
# class MyClass
|
10
10
|
# include Lolita::Hooks
|
@@ -19,7 +19,7 @@ module Lolita
|
|
19
19
|
# ==Scopes
|
20
20
|
# Most times hook callbacks are defined for class like in previous example, but also it's possible to do it
|
21
21
|
# on class instances. Difference between calling it on class or on instance is that instance callbacks will
|
22
|
-
# be called only when event is
|
22
|
+
# be called only when event is runned on instance. Class callbacks will be called on class and also on instance
|
23
23
|
# callbacks.
|
24
24
|
# my_object=MyClass.new
|
25
25
|
# MyClass.before_save do
|
@@ -29,25 +29,25 @@ module Lolita
|
|
29
29
|
# puts "instance callback"
|
30
30
|
# end
|
31
31
|
#
|
32
|
-
# MyClass.
|
32
|
+
# MyClass.run(:before_save) #=>
|
33
33
|
# class_callback
|
34
34
|
#
|
35
|
-
# my_object.
|
35
|
+
# my_object.run(:before_save) #=>
|
36
36
|
# class_callback
|
37
37
|
# instance_callback
|
38
38
|
# # As you can see, first class callbacks is called and after that instance callbacks.
|
39
39
|
#
|
40
40
|
# ==Firing events
|
41
|
-
# To execute callbacks, events should be called on object. Event names is same hooks names. #
|
42
|
-
# on class or on instance. Also it is possible to pass block to
|
41
|
+
# To execute callbacks, events should be called on object. Event names is same hooks names. #run can be called
|
42
|
+
# on class or on instance. Also it is possible to pass block to run event, that will replace callback block
|
43
43
|
# or if #let_content is called than it will work like wrapper, like this
|
44
44
|
# # this is continuation of previous code
|
45
|
-
# MyClass.
|
45
|
+
# MyClass.run(:before_save) do
|
46
46
|
# puts "replaced text"
|
47
47
|
# end
|
48
48
|
# # will produce #=> replaced text
|
49
49
|
#
|
50
|
-
# MyClass.
|
50
|
+
# MyClass.run(:before_save) do
|
51
51
|
# puts "before callback"
|
52
52
|
# let_content
|
53
53
|
# puts "after callback"
|
@@ -108,7 +108,7 @@ module Lolita
|
|
108
108
|
@given_callback_content=content
|
109
109
|
end
|
110
110
|
|
111
|
-
# Callback content is used to let callback content executed insede of
|
111
|
+
# Callback content is used to let callback content executed insede of run block.
|
112
112
|
def given_callback_content
|
113
113
|
@given_callback_content
|
114
114
|
end
|
@@ -147,13 +147,13 @@ module Lolita
|
|
147
147
|
}
|
148
148
|
end
|
149
149
|
|
150
|
-
#
|
150
|
+
# run is used to execute callback. Method accept one or more <i>hook_names</i> and optional block.
|
151
151
|
# It will raise error if hook don't exist for this class. Also it accept <em>:scope</em> options, that
|
152
152
|
# is used to #get_callbacks and #run_callbacks.
|
153
153
|
# ====Example
|
154
|
-
# MyClass.
|
154
|
+
# MyClass.run(:before_save,:after_save,:scope=>MyClass.new)
|
155
155
|
# # this will call callbacks in MyClass instance scope, that means that self will be MyClass instance.
|
156
|
-
def
|
156
|
+
def run(*hook_names,&block)
|
157
157
|
options=hook_names.extract_options!
|
158
158
|
(hook_names || []).each do |hook_name|
|
159
159
|
raise Lolita::HookNotFound, "Hook #{hook_name} is not defined for #{self}." unless self.has_hook?(hook_name)
|
@@ -169,19 +169,19 @@ module Lolita
|
|
169
169
|
self.hooks.include?(name.to_sym)
|
170
170
|
end
|
171
171
|
|
172
|
-
# Try to recognize named
|
173
|
-
# MyClass.
|
172
|
+
# Try to recognize named run methods like
|
173
|
+
# MyClass.run_after_save # will call MyClass.run(:after_save)
|
174
174
|
def method_missing(*args, &block)
|
175
175
|
unless self.recognize_hook_methods(*args,&block)
|
176
176
|
super
|
177
177
|
end
|
178
178
|
end
|
179
179
|
|
180
|
-
# Call callback block inside of
|
180
|
+
# Call callback block inside of run block.
|
181
181
|
# ====Example
|
182
|
-
# MyClass.
|
182
|
+
# MyClass.run(:before_save) do
|
183
183
|
# do_stuff
|
184
|
-
# let_content # execute callback block(-s) in same scope as
|
184
|
+
# let_content # execute callback block(-s) in same scope as run is executed.
|
185
185
|
# end
|
186
186
|
def let_content
|
187
187
|
if content=self.given_callback_content
|
@@ -191,8 +191,8 @@ module Lolita
|
|
191
191
|
|
192
192
|
# Set #method_missing
|
193
193
|
def recognize_hook_methods method_name, *args, &block
|
194
|
-
if method_name.to_s.match(/^
|
195
|
-
self.
|
194
|
+
if method_name.to_s.match(/^run_(\w+)/)
|
195
|
+
self.run($1,&block)
|
196
196
|
true
|
197
197
|
end
|
198
198
|
end
|
@@ -276,9 +276,9 @@ module Lolita
|
|
276
276
|
# Methods for instance.
|
277
277
|
module InstanceMethods
|
278
278
|
|
279
|
-
# See Lolita::Hooks::ClassMethods#
|
280
|
-
def
|
281
|
-
self.class.
|
279
|
+
# See Lolita::Hooks::ClassMethods#run
|
280
|
+
def run(*hook_names)
|
281
|
+
self.class.run(*hook_names,:scope=>self)
|
282
282
|
end
|
283
283
|
|
284
284
|
# See Lolita::Hooks::ClassMethods#let_content
|
@@ -11,7 +11,7 @@ module Lolita
|
|
11
11
|
# go_to_honeymoon
|
12
12
|
# end
|
13
13
|
# john=Person.new("John")
|
14
|
-
# john.
|
14
|
+
# john.run(:get_merried) # and now john will go to honeymoon
|
15
15
|
# Hooks are added for pluralized hook name, even if you pass like #add(:person), it will create named hook
|
16
16
|
# with <i>people</i> name. This will be class, and when you call #person it will create instance for that class.
|
17
17
|
class NamedHook
|
@@ -30,6 +30,7 @@ module Lolita
|
|
30
30
|
named_hooks.keys
|
31
31
|
end
|
32
32
|
|
33
|
+
# Detect that named hook exist with given name.
|
33
34
|
def exist?(name)
|
34
35
|
self.names.include?(name)
|
35
36
|
end
|
@@ -44,6 +45,9 @@ module Lolita
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
48
|
+
# Find named hook filter.
|
49
|
+
# ====Example
|
50
|
+
# Lolita::Hooks::NamedHook.find(:components,:"list")
|
47
51
|
def find(hook_name,filter_name)
|
48
52
|
if named_hook=self.by_name(hook_name)
|
49
53
|
named_hook[filter_name.to_sym]
|
@@ -99,14 +103,14 @@ module Lolita
|
|
99
103
|
@hook_name
|
100
104
|
end
|
101
105
|
|
102
|
-
# def self.
|
106
|
+
# def self.run(*hook_names,&block)
|
103
107
|
# hook_names||=[]
|
104
108
|
# hook_names.extract_options!
|
105
109
|
# super(*hook_names,&block)
|
106
110
|
# if named_hook=self.by_name(self.hook_name)
|
107
111
|
# named_hook.each{|filter_name, filter|
|
108
112
|
# unless filter_name.to_sym==:"_class"
|
109
|
-
# self.
|
113
|
+
# self.run(*(hook_names + [{:scope=>filter}]),&block)
|
110
114
|
# end
|
111
115
|
# }
|
112
116
|
# end
|
data/lolita.gemspec
CHANGED
@@ -5,12 +5,12 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{lolita}
|
8
|
-
s.version = "3.1.
|
8
|
+
s.version = "3.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["ITHouse
|
12
|
-
s.date = %q{2011-04-
|
13
|
-
s.description = %q{Great Rails CMS that
|
11
|
+
s.authors = ["ITHouse (Latvia) and Arturs Meisters"]
|
12
|
+
s.date = %q{2011-04-13}
|
13
|
+
s.description = %q{Great Rails CMS, that turns your business logic into good-looking, fully functional workspace. }
|
14
14
|
s.email = %q{support@ithouse.lv}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
@@ -18,10 +18,10 @@ Gem::Specification.new do |s|
|
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
".project",
|
22
21
|
".rspec",
|
23
|
-
"
|
22
|
+
"GUIDELINES",
|
24
23
|
"Gemfile",
|
24
|
+
"History.rdoc",
|
25
25
|
"IDEA",
|
26
26
|
"LICENSE.txt",
|
27
27
|
"README.rdoc",
|
@@ -34,11 +34,16 @@ Gem::Specification.new do |s|
|
|
34
34
|
"app/views/components/lolita/configuration/field/_label.html.erb",
|
35
35
|
"app/views/components/lolita/configuration/field/_object.html.erb",
|
36
36
|
"app/views/components/lolita/configuration/field/array/_display.html.erb",
|
37
|
+
"app/views/components/lolita/configuration/field/array/filter/_display.html.erb",
|
37
38
|
"app/views/components/lolita/configuration/field/array/habtm/_display.html.erb",
|
38
39
|
"app/views/components/lolita/configuration/field/array/select/_display.html.erb",
|
39
40
|
"app/views/components/lolita/configuration/field/big_decimal/_display.html.erb",
|
40
41
|
"app/views/components/lolita/configuration/field/boolean/_display.html.erb",
|
42
|
+
"app/views/components/lolita/configuration/field/boolean/filter/_display.html.erb",
|
41
43
|
"app/views/components/lolita/configuration/field/date/_display.html.erb",
|
44
|
+
"app/views/components/lolita/configuration/field/date_time/_display.html.erb",
|
45
|
+
"app/views/components/lolita/configuration/field/date_time/date/_display.html.erb",
|
46
|
+
"app/views/components/lolita/configuration/field/date_time/time/_display.html.erb",
|
42
47
|
"app/views/components/lolita/configuration/field/float/_display.html.erb",
|
43
48
|
"app/views/components/lolita/configuration/field/integer/_display.html.erb",
|
44
49
|
"app/views/components/lolita/configuration/field/string/_display.html.erb",
|
@@ -101,6 +106,7 @@ Gem::Specification.new do |s|
|
|
101
106
|
"lib/lolita/configuration/field/big_decimal.rb",
|
102
107
|
"lib/lolita/configuration/field/boolean.rb",
|
103
108
|
"lib/lolita/configuration/field/date.rb",
|
109
|
+
"lib/lolita/configuration/field/date_time.rb",
|
104
110
|
"lib/lolita/configuration/field/integer.rb",
|
105
111
|
"lib/lolita/configuration/field/string.rb",
|
106
112
|
"lib/lolita/configuration/field/time.rb",
|
@@ -126,14 +132,14 @@ Gem::Specification.new do |s|
|
|
126
132
|
"lib/lolita/mapping.rb",
|
127
133
|
"lib/lolita/modules.rb",
|
128
134
|
"lib/lolita/modules/rest.rb",
|
129
|
-
"lib/lolita/navigation.rb",
|
135
|
+
"lib/lolita/navigation/branch.rb",
|
136
|
+
"lib/lolita/navigation/tree.rb",
|
130
137
|
"lib/lolita/observed_array.rb",
|
131
138
|
"lib/lolita/rails.rb",
|
132
139
|
"lib/lolita/rails/all.rb",
|
133
140
|
"lib/lolita/rails/routes.rb",
|
134
141
|
"lib/lolita/ruby_ext/accessors.rb",
|
135
142
|
"lib/lolita/test/matchers.rb",
|
136
|
-
"log/development.log",
|
137
143
|
"lolita.gemspec",
|
138
144
|
"public/images/lolita/plus.png",
|
139
145
|
"public/javascripts/jquery-1.5.1.min.js",
|
@@ -216,10 +222,12 @@ Gem::Specification.new do |s|
|
|
216
222
|
"spec/rails_app/app/controllers/application_controller.rb",
|
217
223
|
"spec/rails_app/app/helpers/application_helper.rb",
|
218
224
|
"spec/rails_app/app/mongoid/address.rb",
|
225
|
+
"spec/rails_app/app/mongoid/category.rb",
|
219
226
|
"spec/rails_app/app/mongoid/comment.rb",
|
220
227
|
"spec/rails_app/app/mongoid/post.rb",
|
221
228
|
"spec/rails_app/app/mongoid/preference.rb",
|
222
229
|
"spec/rails_app/app/mongoid/profile.rb",
|
230
|
+
"spec/rails_app/app/mongoid/tag.rb",
|
223
231
|
"spec/rails_app/app/views/components/lolita/configuration/list/_body_cell.html.erb",
|
224
232
|
"spec/rails_app/config/application.rb",
|
225
233
|
"spec/rails_app/config/boot.rb",
|
@@ -295,9 +303,9 @@ Gem::Specification.new do |s|
|
|
295
303
|
"spec/routing/routes_spec.rb",
|
296
304
|
"spec/simple_spec_helper.rb",
|
297
305
|
"spec/spec_helper.rb",
|
306
|
+
"spec/support/factories/category.rb",
|
298
307
|
"spec/support/factories/post.rb",
|
299
|
-
"
|
300
|
-
"test/test_helper.rb"
|
308
|
+
"spec/support/factories/tag.rb"
|
301
309
|
]
|
302
310
|
s.homepage = %q{http://github.com/ithouse/lolita}
|
303
311
|
s.licenses = ["MIT"]
|
@@ -328,10 +336,12 @@ Gem::Specification.new do |s|
|
|
328
336
|
"spec/rails_app/app/controllers/application_controller.rb",
|
329
337
|
"spec/rails_app/app/helpers/application_helper.rb",
|
330
338
|
"spec/rails_app/app/mongoid/address.rb",
|
339
|
+
"spec/rails_app/app/mongoid/category.rb",
|
331
340
|
"spec/rails_app/app/mongoid/comment.rb",
|
332
341
|
"spec/rails_app/app/mongoid/post.rb",
|
333
342
|
"spec/rails_app/app/mongoid/preference.rb",
|
334
343
|
"spec/rails_app/app/mongoid/profile.rb",
|
344
|
+
"spec/rails_app/app/mongoid/tag.rb",
|
335
345
|
"spec/rails_app/config/application.rb",
|
336
346
|
"spec/rails_app/config/boot.rb",
|
337
347
|
"spec/rails_app/config/environment.rb",
|
@@ -348,9 +358,9 @@ Gem::Specification.new do |s|
|
|
348
358
|
"spec/routing/routes_spec.rb",
|
349
359
|
"spec/simple_spec_helper.rb",
|
350
360
|
"spec/spec_helper.rb",
|
361
|
+
"spec/support/factories/category.rb",
|
351
362
|
"spec/support/factories/post.rb",
|
352
|
-
"
|
353
|
-
"test/test_helper.rb"
|
363
|
+
"spec/support/factories/tag.rb"
|
354
364
|
]
|
355
365
|
|
356
366
|
if s.respond_to? :specification_version then
|
@@ -189,6 +189,22 @@ a.create {
|
|
189
189
|
box-shadow: inset 0px 1px 1px #ddd;
|
190
190
|
}
|
191
191
|
|
192
|
+
/* filter */
|
193
|
+
#main form.filter {
|
194
|
+
background: #F3F3F3;
|
195
|
+
padding: 10px;
|
196
|
+
}
|
197
|
+
#main form.filter select {
|
198
|
+
margin-right: 15px;
|
199
|
+
margin-bottom: 3px;
|
200
|
+
}
|
201
|
+
#main form.filter input {
|
202
|
+
vertical-align: middle;
|
203
|
+
margin: 0 10px 2px 3px;
|
204
|
+
}
|
205
|
+
#main form.filter label {
|
206
|
+
color: #666;
|
207
|
+
}
|
192
208
|
/* --------------------------------------------- */
|
193
209
|
|
194
210
|
/* TinyMCE advanced theme's skin "Cirkuit" overrides */
|
data/spec/adapter_helper.rb
CHANGED
@@ -28,13 +28,13 @@ else
|
|
28
28
|
class Comment < ActiveRecord::Base
|
29
29
|
belongs_to :test_class1, :class_name=>"Post"
|
30
30
|
end
|
31
|
+
|
31
32
|
class Post < ActiveRecord::Base
|
32
33
|
has_many :pages
|
33
34
|
include Lolita::Configuration
|
34
35
|
lolita
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
38
|
class Profile < ActiveRecord::Base
|
39
39
|
include Lolita::Configuration
|
40
40
|
lolita do
|
@@ -8,7 +8,6 @@ describe Lolita::Configuration::Filter do
|
|
8
8
|
|
9
9
|
it "should create new filter with block" do
|
10
10
|
Lolita::Configuration::Filter.new(@dbi) do
|
11
|
-
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
@@ -57,4 +56,67 @@ describe Lolita::Configuration::Filter do
|
|
57
56
|
filter.fields[1].type.should == "integer"
|
58
57
|
filter.fields[2].type.should == "time"
|
59
58
|
end
|
59
|
+
|
60
|
+
it "should generate correct field_name" do
|
61
|
+
filter=Lolita::Configuration::Filter.new(@dbi)
|
62
|
+
filter.fields :name, :not_public
|
63
|
+
filter.field_name(filter.fields.first).should == "f_name"
|
64
|
+
filter.field_name(filter.fields.last).should == "f_not_public"
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should return right options_for_select" do
|
68
|
+
3.times{ Factory.create(:category)}
|
69
|
+
filter=Lolita::Configuration::Filter.new(@dbi) do
|
70
|
+
field :category
|
71
|
+
field :some_type, :array, :options_for_select => %w(a b c)
|
72
|
+
end
|
73
|
+
options = filter.options_for_select(filter.fields.first)
|
74
|
+
options.size.should == 3
|
75
|
+
options.first.first.should be_an(String)
|
76
|
+
options.first.last.should be_an(BSON::ObjectId)
|
77
|
+
options = filter.options_for_select(filter.fields.last)
|
78
|
+
options.size.should == 3
|
79
|
+
options.should == %w(a b c)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should filter results for boolean" do
|
83
|
+
Factory.create(:post, :is_public => true)
|
84
|
+
Factory.create(:post, :is_public => true)
|
85
|
+
Factory.create(:post, :is_public => false)
|
86
|
+
|
87
|
+
filter=Lolita::Configuration::Filter.new(@dbi) do
|
88
|
+
field :is_public
|
89
|
+
end
|
90
|
+
|
91
|
+
@dbi.filter(:is_public => 1).size.should == 2
|
92
|
+
@dbi.filter(:is_public => 0).size.should == 1
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should filter results for belongs_to" do
|
96
|
+
c1 = Factory.create(:category, :name => "Linux")
|
97
|
+
c2 = Factory.create(:category, :name => "Android")
|
98
|
+
p1=Factory.create(:post, :category => c1)
|
99
|
+
p2=Factory.create(:post, :category => c1)
|
100
|
+
p3=Factory.create(:post, :category => c2)
|
101
|
+
|
102
|
+
filter=Lolita::Configuration::Filter.new(@dbi) do
|
103
|
+
field :tags
|
104
|
+
end
|
105
|
+
@dbi.filter(:category => c1.id).size.should == 2
|
106
|
+
@dbi.filter(:category => c2.id).size.should == 1
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should filter results for has_and_belongs_to_many" do
|
110
|
+
tag1 = Factory.create(:tag, :name => "Linux")
|
111
|
+
tag2 = Factory.create(:tag, :name => "Android")
|
112
|
+
p1=Factory.create(:post, :tags => [tag1,tag2])
|
113
|
+
p2=Factory.create(:post, :tags => [tag1,tag2])
|
114
|
+
p3=Factory.create(:post, :tags => [tag1])
|
115
|
+
|
116
|
+
filter=Lolita::Configuration::Filter.new(@dbi) do
|
117
|
+
field :tags
|
118
|
+
end
|
119
|
+
@dbi.filter(:tags => tag1.id).size.should == 3
|
120
|
+
@dbi.filter(:tags => tag2.id).size.should == 2
|
121
|
+
end
|
60
122
|
end
|
@@ -32,5 +32,12 @@ describe MyController do
|
|
32
32
|
@controller.send(:resource=,nil)
|
33
33
|
@controller.resource.should be_nil
|
34
34
|
end
|
35
|
+
|
36
|
+
it "should convert rails date_select and datetime_select values" do
|
37
|
+
resource=Post.new
|
38
|
+
sample_date = Date.civil(2011,1,1)
|
39
|
+
attributes={:published_at => {}}
|
40
|
+
@controller.send(:resource_with_attributes,resource,attributes)
|
41
|
+
end
|
35
42
|
end
|
36
43
|
|
data/spec/hooks_spec.rb
CHANGED
@@ -9,11 +9,11 @@ class MyClass
|
|
9
9
|
|
10
10
|
attr_accessor :name
|
11
11
|
def initialize
|
12
|
-
self.
|
12
|
+
self.run(:after_init)
|
13
13
|
end
|
14
14
|
|
15
15
|
def save
|
16
|
-
self.
|
16
|
+
self.run(:before_save)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -91,17 +91,17 @@ describe Lolita::Hooks do
|
|
91
91
|
MyClass.after_load do
|
92
92
|
value(true)
|
93
93
|
end
|
94
|
-
MyClass.
|
94
|
+
MyClass.run(:after_load)
|
95
95
|
MyClass.value.should be_true
|
96
96
|
end
|
97
97
|
|
98
|
-
it "should have named
|
98
|
+
it "should have named run method" do
|
99
99
|
MyClass.after_load {
|
100
100
|
MyClass.value(MyClass.value()+1)
|
101
101
|
}
|
102
102
|
object=MyClass.new
|
103
|
-
MyClass.
|
104
|
-
object.
|
103
|
+
MyClass.run_after_load
|
104
|
+
object.run_after_load
|
105
105
|
MyClass.value.should == 2
|
106
106
|
end
|
107
107
|
|
@@ -110,22 +110,22 @@ describe Lolita::Hooks do
|
|
110
110
|
MyClass.after_load do
|
111
111
|
value(value()+1)
|
112
112
|
end
|
113
|
-
MyClass.
|
114
|
-
MyClass.
|
113
|
+
MyClass.run(:after_load)
|
114
|
+
MyClass.run(:after_load)
|
115
115
|
MyClass.value.should == 2
|
116
116
|
end
|
117
117
|
|
118
118
|
|
119
119
|
context "wrap around" do
|
120
120
|
|
121
|
-
it "should allow to wrap around when #
|
121
|
+
it "should allow to wrap around when #run receive block" do
|
122
122
|
MyClass.after_load do
|
123
123
|
value("first")
|
124
124
|
let_content()
|
125
125
|
value("second")
|
126
126
|
end
|
127
127
|
|
128
|
-
MyClass.
|
128
|
+
MyClass.run(:after_load) do
|
129
129
|
value().should=="first"
|
130
130
|
end
|
131
131
|
MyClass.value.should == "second"
|
@@ -159,7 +159,7 @@ describe Lolita::Hooks do
|
|
159
159
|
Counter.set(Counter.get+1)
|
160
160
|
end
|
161
161
|
|
162
|
-
Lolita::Hooks.component(:"list").
|
162
|
+
Lolita::Hooks.component(:"list").run(:before)
|
163
163
|
Counter.get.should == 1
|
164
164
|
end
|
165
165
|
|
@@ -169,12 +169,13 @@ describe Lolita::Hooks do
|
|
169
169
|
Lolita::Hooks.components.after do
|
170
170
|
Counter.set(Counter.get+1)
|
171
171
|
end
|
172
|
-
Lolita::Hooks.component(:"list").
|
173
|
-
Lolita::Hooks.component(:"tab").
|
172
|
+
Lolita::Hooks.component(:"list").run(:after)
|
173
|
+
Lolita::Hooks.component(:"tab").run(:after)
|
174
174
|
Counter.get.should == 2
|
175
175
|
end
|
176
176
|
|
177
|
-
it "should run all named hook callbacks when
|
177
|
+
it "should run all named hook callbacks when runned on named collection" do
|
178
|
+
pending "Need to update functionality to work."
|
178
179
|
Lolita::Hooks.components.add_hook(:after)
|
179
180
|
Counter.set(0)
|
180
181
|
Lolita::Hooks.component(:"list").after do
|
@@ -183,7 +184,7 @@ describe Lolita::Hooks do
|
|
183
184
|
Lolita::Hooks.component(:"tab").after do
|
184
185
|
Counter.set(Counter.get+1)
|
185
186
|
end
|
186
|
-
Lolita::Hooks.components.
|
187
|
+
Lolita::Hooks.components.run(:after)
|
187
188
|
Counter.get.should == 2
|
188
189
|
end
|
189
190
|
|