custom-attributes 0.2.18 → 0.2.22
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
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.22
|
@@ -1,11 +1,11 @@
|
|
1
1
|
class ActiveRecord::CustomAttributes::CustomAttribute
|
2
2
|
|
3
3
|
def initialize(item_list, main_model, attribute_model)
|
4
|
-
@main_model
|
5
|
-
@item_list
|
6
|
-
@attribute_model
|
4
|
+
@main_model = main_model
|
5
|
+
@item_list = item_list
|
6
|
+
@attribute_model = attribute_model
|
7
7
|
@marked_for_destruction = false
|
8
|
-
@errors
|
8
|
+
@errors = ActiveModel::Errors.new(self)
|
9
9
|
load if @attribute_model
|
10
10
|
end
|
11
11
|
|
@@ -64,24 +64,24 @@ class ActiveRecord::CustomAttributes::CustomAttribute
|
|
64
64
|
attr_reader :main_model, :item_list
|
65
65
|
|
66
66
|
FIELD_MAPPING = {
|
67
|
-
:text
|
68
|
-
:string
|
69
|
-
:float
|
70
|
-
:number
|
71
|
-
:boolean
|
67
|
+
:text => :text,
|
68
|
+
:string => :text,
|
69
|
+
:float => :float,
|
70
|
+
:number => :number,
|
71
|
+
:boolean => :number,
|
72
72
|
:date_time => :date_time,
|
73
|
-
:date
|
74
|
-
:time
|
73
|
+
:date => :date_time,
|
74
|
+
:time => :date_time
|
75
75
|
}
|
76
76
|
|
77
77
|
def assign_model_value
|
78
|
-
attribute_model.value_type
|
79
|
-
attribute_model.field_name
|
78
|
+
attribute_model.value_type = type.to_s
|
79
|
+
attribute_model.field_name = internal_label.to_s
|
80
80
|
attribute_model.field_label = label
|
81
|
-
write_value
|
82
|
-
field
|
81
|
+
write_value = item_list.supported_attribute_types[type]
|
82
|
+
field = FIELD_MAPPING[write_value]
|
83
83
|
|
84
|
-
converted_value
|
84
|
+
converted_value = value
|
85
85
|
converted_value = value ? 1 : 0 if write_value == :boolean
|
86
86
|
|
87
87
|
([:text, :date_time, :number, :float] - [field]).each { |value_field| attribute_model.send("#{value_field}_value=", nil) }
|
@@ -89,13 +89,17 @@ class ActiveRecord::CustomAttributes::CustomAttribute
|
|
89
89
|
end
|
90
90
|
|
91
91
|
def load
|
92
|
-
self.type
|
93
|
-
|
92
|
+
self.type = attribute_model.value_type.to_sym
|
93
|
+
if attribute_model.field_name.nil? or attribute_model.field_name.blank?
|
94
|
+
self.internal_label = nil
|
95
|
+
else
|
96
|
+
self.internal_label = attribute_model.field_name.to_sym
|
97
|
+
end
|
94
98
|
self.label = attribute_model.field_label
|
95
99
|
|
96
100
|
read_value = item_list.supported_attribute_types[self.type]
|
97
|
-
field
|
98
|
-
value
|
101
|
+
field = FIELD_MAPPING[read_value]
|
102
|
+
value = attribute_model.send("#{field}_value")
|
99
103
|
value = value == 0 ? false : true if read_value == :boolean
|
100
104
|
#puts "#{self.type} => #{read_value} = (#{field}) #{value} - #{self.label} (#{self.internal_label})"
|
101
105
|
self.value = value
|
@@ -59,7 +59,7 @@ class ActiveRecord::CustomAttributes::CustomAttributeList
|
|
59
59
|
end
|
60
60
|
|
61
61
|
def get_custom_validations_for(type, name)
|
62
|
-
[defined_validations[type], defined_attributes[type][name][:validate_with]].compact
|
62
|
+
[defined_validations[type], (defined_attributes[type][name] || {})[:validate_with]].compact
|
63
63
|
end
|
64
64
|
|
65
65
|
def defined_attribute_types
|
@@ -38,7 +38,7 @@ module Formtastic
|
|
38
38
|
|
39
39
|
index = 0
|
40
40
|
value_fields = @object.custom_attributes.attributes_of_type(attribute_type).collect do |attribute|
|
41
|
-
result = custom_field_input(attribute_type, [attribute_type, storage_type], attribute.label, attribute.value, index, {})
|
41
|
+
result = custom_field_input(attribute_type, [attribute_type, storage_type], attribute.label, attribute.value, index, { :errors => attribute.errors })
|
42
42
|
index += 1
|
43
43
|
result
|
44
44
|
end
|
@@ -163,22 +163,47 @@ module Formtastic
|
|
163
163
|
## Field addition support
|
164
164
|
|
165
165
|
def custom_string_input(attribute_type, value, index, options = {})
|
166
|
-
default_custom_field_handler(:text_field_tag, attribute_type, value, index)
|
166
|
+
default_custom_field_handler(:text_field_tag, attribute_type, value, index, options)
|
167
167
|
end
|
168
168
|
|
169
169
|
def custom_email_input(attribute_type, value, index, options = {})
|
170
|
-
default_custom_field_handler(:email_field_tag, attribute_type, value, index)
|
170
|
+
default_custom_field_handler(:email_field_tag, attribute_type, value, index, options)
|
171
171
|
end
|
172
172
|
|
173
173
|
def custom_url_input(attribute_type, value, index, options = {})
|
174
|
-
default_custom_field_handler(:url_field_tag, attribute_type, value, index)
|
174
|
+
default_custom_field_handler(:url_field_tag, attribute_type, value, index, options)
|
175
175
|
end
|
176
176
|
|
177
|
-
def
|
177
|
+
def custom_date_input(attribute_type, value, index, options = {})
|
178
178
|
i18n_scope = [:activerecord, :custom_attributes, @object.class.model_name.underscore.to_sym]
|
179
179
|
attribute_human_name = ::I18n.t(attribute_type, :count => 1, :scope => i18n_scope + [:attribute_names]).capitalize
|
180
|
+
format = options[:format] || I18n.t(:default, :scope => [:date, :formats]) || '%d %b %Y'
|
181
|
+
|
182
|
+
error_listing = ""
|
183
|
+
if options[:errors]
|
184
|
+
errors = [options[:errors][:value]]
|
185
|
+
errors = errors.flatten.compact.uniq
|
186
|
+
error_listing = send(:"error_#{self.class.inline_errors}", [*errors]) if errors.any?
|
187
|
+
end
|
188
|
+
|
189
|
+
str_value = value.respond_to?(:strftime) ? value.try(:strftime, format) : value
|
190
|
+
|
191
|
+
template.text_field_tag(field_name_for(attribute_type, "value", index), str_value, :class => 'custom-datepicker') <<
|
192
|
+
custom_attribute_delete_link(attribute_human_name) << error_listing
|
193
|
+
end
|
194
|
+
|
195
|
+
def default_custom_field_handler(method, attribute_type, value, index, options)
|
196
|
+
i18n_scope = [:activerecord, :custom_attributes, @object.class.model_name.underscore.to_sym]
|
197
|
+
attribute_human_name = ::I18n.t(attribute_type, :count => 1, :scope => i18n_scope + [:attribute_names]).capitalize
|
198
|
+
error_listing = ""
|
199
|
+
if options[:errors]
|
200
|
+
errors = [options[:errors][:value]]
|
201
|
+
errors = errors.flatten.compact.uniq
|
202
|
+
error_listing = send(:"error_#{self.class.inline_errors}", [*errors]) if errors.any?
|
203
|
+
end
|
204
|
+
|
180
205
|
template.send(method, field_name_for(attribute_type, "value", index), value) <<
|
181
|
-
custom_attribute_delete_link(attribute_human_name)
|
206
|
+
custom_attribute_delete_link(attribute_human_name) << error_listing
|
182
207
|
end
|
183
208
|
|
184
209
|
delegate :content_tag, :to => :template
|
@@ -59,6 +59,14 @@ describe "Custom attributes of a person" do
|
|
59
59
|
loaded_person.custom_attributes.telephone_value_of(:private).should == "06 28 61 06 28"
|
60
60
|
end
|
61
61
|
|
62
|
+
it "should accept custom defined labels" do
|
63
|
+
@person.custom_attributes.add_telephone "Werk", "06 28 61 06 28"
|
64
|
+
@person.save
|
65
|
+
|
66
|
+
loaded_person = Person.find @person.id
|
67
|
+
loaded_person.custom_attributes.telephone_value_of("Werk").should == "06 28 61 06 28"
|
68
|
+
end
|
69
|
+
|
62
70
|
it "should rename labels" do
|
63
71
|
@person.custom_attributes.add_telephone "Werk", "06 28 61 06 28"
|
64
72
|
|
@@ -241,4 +249,9 @@ describe "Custom attributes of a product" do
|
|
241
249
|
@product.should be_valid
|
242
250
|
end
|
243
251
|
|
252
|
+
it "should not run custom validations if name differs" do
|
253
|
+
@product.custom_attributes.add_date "In stock sance", Date.civil(2009, 12, 31)
|
254
|
+
@product.should be_valid
|
255
|
+
end
|
256
|
+
|
244
257
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: custom-attributes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 59
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 22
|
10
|
+
version: 0.2.22
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Matthijs Groen
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-28 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|