flexselect 1.2.0 → 1.3.0
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/VERSION +1 -1
- data/lib/flexselect.rb +10 -3
- data/spec/active_record_helper.rb +1 -1
- data/spec/flexselect_spec.rb +17 -0
- data/spec/spec_helper.rb +12 -0
- metadata +2 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.3.0
|
data/lib/flexselect.rb
CHANGED
@@ -1,4 +1,9 @@
|
|
1
1
|
module Flexselect
|
2
|
+
DEFAULT = {
|
3
|
+
:block => lambda { |new| new },
|
4
|
+
:if => lambda { |new| !new.nil? },
|
5
|
+
:on => :before_validation
|
6
|
+
}
|
2
7
|
|
3
8
|
# Creates an virtual attribute to handle new values for
|
4
9
|
# an autocomplete select tag handled by flexquery and a callback
|
@@ -26,14 +31,16 @@ module Flexselect
|
|
26
31
|
# &block :: If provided, is called to get the new value for the attribute.
|
27
32
|
# Defaults to lambda{ |virtual_attribute_value| virtual_attribute_value }
|
28
33
|
#
|
34
|
+
# NOTE default values can be changed by tweaking the :block, :if and :on keys of the
|
35
|
+
# Flexselect::DEFAULT hash.
|
29
36
|
def attr_flex_selector(attr, options = {}, &block)
|
30
37
|
virtual_attribute = "flex_#{ attr }_input"
|
31
38
|
callback_method = "callback_for_#{ virtual_attribute }"
|
32
39
|
|
33
40
|
attr_accessor virtual_attribute
|
34
41
|
|
35
|
-
if_lambda = options[:if] ||
|
36
|
-
action_lambda = block ||
|
42
|
+
if_lambda = options[:if] || DEFAULT[:if]
|
43
|
+
action_lambda = block || DEFAULT[:block]
|
37
44
|
|
38
45
|
# A new Module allows to redefine method retaining the old one for "super" usage.
|
39
46
|
mod = Module.new do
|
@@ -49,7 +56,7 @@ module Flexselect
|
|
49
56
|
|
50
57
|
include mod
|
51
58
|
|
52
|
-
send(options[:on] || :
|
59
|
+
send(options[:on] || DEFAULT[:on], callback_method)
|
53
60
|
end
|
54
61
|
|
55
62
|
end
|
data/spec/flexselect_spec.rb
CHANGED
@@ -57,4 +57,21 @@ describe "Flexselect" do
|
|
57
57
|
thing.d.should == "a-b-c-flex d-flex d"
|
58
58
|
end
|
59
59
|
end
|
60
|
+
|
61
|
+
describe "changing the defaults" do
|
62
|
+
before(:all) do
|
63
|
+
temporal_hash_change(Flexselect::DEFAULT, :block => lambda{ "something new" }, :on => :after_create, :if => lambda{|v|v=="sarasa"}) do
|
64
|
+
Thing.class_eval do
|
65
|
+
attr_flex_selector :e
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should work with a different set of defaults" do
|
71
|
+
Thing.create!(:e => "hola").e.should == "hola"
|
72
|
+
Thing.create!(:flex_e_input => "hola").e.should == nil
|
73
|
+
Thing.create!(:flex_e_input => "sarasa").e.should == "something new"
|
74
|
+
Thing.after_create_callback_chain.map(&:method).map(&:to_s).should include("callback_for_flex_e_input")
|
75
|
+
end
|
76
|
+
end
|
60
77
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -11,5 +11,17 @@ require 'active_record_helper'
|
|
11
11
|
# Rails hook.
|
12
12
|
require(File.join(File.dirname(__FILE__), '..', 'rails', 'init.rb'))
|
13
13
|
|
14
|
+
module SpecUtils
|
15
|
+
def temporal_hash_change(hash_to_change, hash_to_assign)
|
16
|
+
backup = hash_to_change.dup
|
17
|
+
hash_to_change.merge!(hash_to_assign)
|
18
|
+
yield(hash_to_change)
|
19
|
+
ensure
|
20
|
+
hash_to_change.clear.merge!(backup)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
14
24
|
Spec::Runner.configure do |config|
|
25
|
+
config.include SpecUtils
|
15
26
|
end
|
27
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flexselect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Emmanuel Oga
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-
|
12
|
+
date: 2010-02-04 00:00:00 -03:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|