dynamic_fieldsets 0.1.10 → 0.1.11
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/controllers/dynamic_fieldsets/fields_controller.rb +19 -10
- data/app/controllers/dynamic_fieldsets/fieldset_children_controller.rb +0 -1
- data/app/controllers/dynamic_fieldsets/fieldsets_controller.rb +2 -2
- data/app/helpers/dynamic_fieldsets_helper.rb +45 -3
- data/app/models/dynamic_fieldsets/dependency_clause.rb +1 -1
- data/app/models/dynamic_fieldsets/dependency_group.rb +1 -1
- data/app/models/dynamic_fieldsets/fieldset_associator.rb +2 -2
- data/app/models/dynamic_fieldsets/fieldset_child.rb +1 -1
- data/app/views/dynamic_fieldsets/fieldset_children/_dependency_fields.html.erb +1 -1
- data/app/views/dynamic_fieldsets/fieldset_children/_form.html.erb +4 -1
- data/app/views/dynamic_fieldsets/fieldset_children/edit.html.erb +2 -1
- data/app/views/dynamic_fieldsets/form_partials/_instruction_field.html.erb +1 -1
- data/app/views/dynamic_fieldsets/form_partials/_select_field.html.erb +1 -1
- data/app/views/dynamic_fieldsets/shared/_javascript_watcher.html.erb +147 -76
- data/config/routes.rb +1 -1
- data/dynamic_fieldsets.gemspec +3 -3
- data/spec/dummy/config/initializers/dynamic_fieldsets.rb +1 -1
- data/spec/dummy/db/schema.rb +1 -0
- metadata +223 -139
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.11
|
@@ -57,18 +57,27 @@ module DynamicFieldsets
|
|
57
57
|
@field = params[:dynamic_fieldsets_field][:type].constantize.new(params[:dynamic_fieldsets_field])
|
58
58
|
|
59
59
|
respond_to do |format|
|
60
|
+
type = params[:dynamic_fieldsets_field][:type]
|
61
|
+
|
62
|
+
if type == ""
|
63
|
+
format.html { redirect_to(new_dynamic_fieldsets_field_path, :notice => 'Need to select a type') }
|
64
|
+
|
65
|
+
elsif (type == "DynamicFieldsets::CheckboxField" || type == "DynamicFieldsets::RadioField" || type == "DynamicFieldsets::MultipleSelectField" || type == "DynamicFieldsets::SelectField") && !params[:dynamic_fieldsets_field].has_key?(:field_options_attributes)
|
66
|
+
format.html { redirect_to(new_dynamic_fieldsets_field_path, :notice => 'Need to add at least one option with field type '+type.split('::').last) }
|
60
67
|
|
61
|
-
if @field.save
|
62
|
-
if !parent_id.empty?
|
63
|
-
parent = DynamicFieldsets::Fieldset.find(parent_id)
|
64
|
-
DynamicFieldsets::FieldsetChild.create( :fieldset => parent, :child => @field )
|
65
|
-
#relation = @fieldset.fieldset_children.build( :fieldset => parent )
|
66
|
-
#relation.child = @field
|
67
|
-
#relation.save
|
68
|
-
end
|
69
|
-
format.html { redirect_to(dynamic_fieldsets_field_path(@field), :notice => 'Successfully created a new field.') }
|
70
68
|
else
|
71
|
-
|
69
|
+
if @field.save
|
70
|
+
if !parent_id.empty?
|
71
|
+
parent = DynamicFieldsets::Fieldset.find(parent_id)
|
72
|
+
DynamicFieldsets::FieldsetChild.create( :fieldset => parent, :child => @field )
|
73
|
+
#relation = @fieldset.fieldset_children.build( :fieldset => parent )
|
74
|
+
#relation.child = @field
|
75
|
+
#relation.save
|
76
|
+
end
|
77
|
+
format.html { redirect_to(dynamic_fieldsets_field_path(@field), :notice => 'Successfully created a new field.') }
|
78
|
+
else
|
79
|
+
format.html { render :action => "new" }
|
80
|
+
end
|
72
81
|
end
|
73
82
|
end
|
74
83
|
end
|
@@ -28,7 +28,6 @@ module DynamicFieldsets
|
|
28
28
|
# updates the fieldset_child and uses accepts_nested_attributes_for to setup a dependency system
|
29
29
|
def update
|
30
30
|
@fieldset_child = DynamicFieldsets::FieldsetChild.find(params[:id])
|
31
|
-
|
32
31
|
respond_to do |format|
|
33
32
|
if @fieldset_child.update_attributes(params[:dynamic_fieldsets_fieldset_child])
|
34
33
|
format.html { redirect_to(dynamic_fieldsets_children_dynamic_fieldsets_fieldset_path(@fieldset_child.root_fieldset), :notice => "Successfully updated a child")}
|
@@ -66,7 +66,7 @@ module DynamicFieldsets
|
|
66
66
|
if(@fieldset_child.nil?)
|
67
67
|
@fieldset_child = DynamicFieldsets::FieldsetChild.new(
|
68
68
|
:child_id => @field.id,
|
69
|
-
:child_type =>
|
69
|
+
:child_type => "DynamicFieldsets::Field",
|
70
70
|
:fieldset_id => @fieldset.id,
|
71
71
|
:order_num => DynamicFieldsets::FieldsetChild.where(:fieldset_id => @fieldset.id).count + 1)
|
72
72
|
else
|
@@ -82,7 +82,7 @@ module DynamicFieldsets
|
|
82
82
|
end
|
83
83
|
format.html { redirect_to(dynamic_fieldsets_children_dynamic_fieldsets_fieldset_path(@fieldset), :notice => notice_text )}
|
84
84
|
else
|
85
|
-
format.html { redirect_to(dynamic_fieldsets_children_dynamic_fieldsets_fieldset_path(@fieldset), :notice =>
|
85
|
+
format.html { redirect_to(dynamic_fieldsets_children_dynamic_fieldsets_fieldset_path(@fieldset), :notice => @fieldset_child.errors) }
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end
|
@@ -82,7 +82,47 @@ module DynamicFieldsetsHelper
|
|
82
82
|
|
83
83
|
return field_markup
|
84
84
|
end
|
85
|
-
|
85
|
+
|
86
|
+
# Removes fieldset children that do not show in the edit form due to dependencies
|
87
|
+
# @param [Fieldset] fieldset The Fieldset to render
|
88
|
+
# @param [Hash] values Stored values for the fieldset
|
89
|
+
# @return [Array <FieldsetChild>] children that should render in show page
|
90
|
+
#
|
91
|
+
def hide_children(fieldset, values)
|
92
|
+
children = []
|
93
|
+
fieldset.fieldset_children.each do |child_field|
|
94
|
+
value = values[child_field.id]
|
95
|
+
dependent_on = DynamicFieldsets::DependencyGroup.where(:fieldset_child_id => child_field.id).first
|
96
|
+
if dependent_on.nil?
|
97
|
+
children << child_field.child
|
98
|
+
else
|
99
|
+
dependencies = dependent_on.dependency_clauses.collect(&:dependencies).flatten.uniq
|
100
|
+
dependencies.each do |dependency|
|
101
|
+
if values[dependency.fieldset_child_id].present?
|
102
|
+
dependent_on_type = dependency.fieldset_child.child.type
|
103
|
+
dependent_on_values = values[dependency.fieldset_child_id]
|
104
|
+
check_values = []
|
105
|
+
|
106
|
+
if dependent_on_type == "DynamicFieldsets::CheckboxField" || dependent_on_type == "DynamicFieldsets::MultipleSelectField"
|
107
|
+
dependent_on_values.each do |current_value|
|
108
|
+
check_values << current_value[:name]
|
109
|
+
end
|
110
|
+
else
|
111
|
+
check_values << (dependent_on_values.has_key?(:name) ? dependent_on_values[:name] : dependent_on_values[:value])
|
112
|
+
end
|
113
|
+
|
114
|
+
check_values.each do |check|
|
115
|
+
if dependent_on.action == "show" && check == dependency.value
|
116
|
+
children << child_field.child
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
return children.uniq
|
124
|
+
end
|
125
|
+
|
86
126
|
# Builds HTML for the provided fieldset and its children.
|
87
127
|
# @param [FieldsetAssociator] fsa parent FieldsetAssociator
|
88
128
|
# @param [Fieldset] fieldset The Fieldset to render
|
@@ -92,9 +132,12 @@ module DynamicFieldsetsHelper
|
|
92
132
|
lines = []
|
93
133
|
lines.push render(:partial => "/dynamic_fieldsets/shared/fieldset_header", :locals => {:fieldset => fieldset})
|
94
134
|
|
135
|
+
# still have to add children that are fieldsets.. have not tested far enough to get into it
|
136
|
+
children = form_type == "show" ? hide_children(fieldset, values) : fieldset.children
|
137
|
+
|
95
138
|
# this returns field/fieldset objects rather than fieldset children
|
96
139
|
# that is why this code looks like it is accessing odd objects
|
97
|
-
|
140
|
+
children.each do |child|
|
98
141
|
if child.is_a? DynamicFieldsets::Fieldset
|
99
142
|
lines += fieldset_renderer( fsa, child, values, form_type )
|
100
143
|
else # one of many possible types of child
|
@@ -133,7 +176,6 @@ module DynamicFieldsetsHelper
|
|
133
176
|
rendered_dynamic_fieldset += line + "\n"
|
134
177
|
end
|
135
178
|
rendered_dynamic_fieldset += "</div>"
|
136
|
-
|
137
179
|
return rendered_dynamic_fieldset.html_safe
|
138
180
|
end
|
139
181
|
|
@@ -6,7 +6,7 @@ module DynamicFieldsets
|
|
6
6
|
self.table_name = "dynamic_fieldsets_dependency_clauses"
|
7
7
|
belongs_to :dependency_group
|
8
8
|
|
9
|
-
has_many :dependencies
|
9
|
+
has_many :dependencies, :dependent => :destroy
|
10
10
|
accepts_nested_attributes_for :dependencies, :allow_destroy => true
|
11
11
|
|
12
12
|
# hack to make saving through nested attributes work
|
@@ -3,7 +3,7 @@ module DynamicFieldsets
|
|
3
3
|
self.table_name = "dynamic_fieldsets_dependency_groups"
|
4
4
|
belongs_to :fieldset_child
|
5
5
|
|
6
|
-
has_many :dependency_clauses
|
6
|
+
has_many :dependency_clauses, :dependent => :destroy
|
7
7
|
accepts_nested_attributes_for :dependency_clauses, :allow_destroy => true
|
8
8
|
|
9
9
|
# List of allowable actions for the group
|
@@ -84,7 +84,7 @@ module DynamicFieldsets
|
|
84
84
|
output[fieldset_child.id] = {}
|
85
85
|
fieldset_child.dependencies.each do |dependency|
|
86
86
|
dependency_group = dependency.dependency_clause.dependency_group
|
87
|
-
output[fieldset_child.id][dependency_group.id] = dependency_group.to_hash
|
87
|
+
output[fieldset_child.id][dependency_group.id] = dependency_group.to_hash #if dependency_group.present?
|
88
88
|
end
|
89
89
|
end
|
90
90
|
return output
|
@@ -101,7 +101,7 @@ module DynamicFieldsets
|
|
101
101
|
output = []
|
102
102
|
parent_fieldset.fieldset_children.each do |fieldset_child|
|
103
103
|
if fieldset_child.child_type == "DynamicFieldsets::Field"
|
104
|
-
if
|
104
|
+
if fieldset_child.dependencies.present?
|
105
105
|
output.push fieldset_child
|
106
106
|
# else then next
|
107
107
|
end
|
@@ -23,7 +23,7 @@ module DynamicFieldsets
|
|
23
23
|
# statement:
|
24
24
|
# IF Field1 == A AND Field2 == B THEN show Field3
|
25
25
|
# In that example, Field1 and Field2 belong to dependencies and Field3 belongs to a dependency_group
|
26
|
-
has_one :dependency_group
|
26
|
+
has_one :dependency_group, :dependent => :destroy
|
27
27
|
accepts_nested_attributes_for :dependency_group, :allow_destroy => true
|
28
28
|
|
29
29
|
has_many :dependencies
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<tr>
|
2
|
-
<td><%= f.select :fieldset_child_id, options_for_select(DynamicFieldsets::FieldsetChild.all.collect { |c| [c.child.name, c.id]}, obj.fieldset_child_id)%></td>
|
2
|
+
<td><%= f.select :fieldset_child_id, options_for_select(DynamicFieldsets::FieldsetChild.all.select { |x| x.child.type != "DynamicFieldsets::InstructionField" }.collect { |c| [c.child.name, c.id]}, obj.fieldset_child_id)%></td>
|
3
3
|
<td><%= f.select :relationship, DynamicFieldsets::Dependency::RELATIONSHIP_LIST %></td>
|
4
4
|
<td><%= f.text_field :value %></td>
|
5
5
|
<td>
|
@@ -25,7 +25,10 @@
|
|
25
25
|
<%= f.fields_for :dependency_group, @fieldset_child.dependency_group do |dependency_group_form| %>
|
26
26
|
<%= render :partial => "dependency_group_fields", :locals => {:f => dependency_group_form, :obj => @fieldset_child.dependency_group} %>
|
27
27
|
<% end %>
|
28
|
-
|
28
|
+
|
29
|
+
<% if @fieldset_child.dependency_group.nil? %>
|
30
|
+
<p><%= df_link_to_add_fields "Add Dependency", f, :dependency_group %></p>
|
31
|
+
<% end %>
|
29
32
|
|
30
33
|
<div class="actions">
|
31
34
|
<%= f.submit %>
|
@@ -1 +1 @@
|
|
1
|
-
<p><%= label %></p>
|
1
|
+
<p id='<%= id %>' name='<%= name %>' type='<%= "instruction" %>'><%= label %></p>
|
@@ -1 +1 @@
|
|
1
|
-
<%= select_tag(name, options_from_collection_for_select( collection, :id, :name, selected_id ), attrs) %>
|
1
|
+
<%= select_tag(name, options_from_collection_for_select( collection, :id, :name, selected_id ), attrs.merge({:include_blank => true})) %>
|
@@ -1,7 +1,7 @@
|
|
1
1
|
<script type='text/javascript'>
|
2
2
|
|
3
3
|
// The only inputs we care about are visible... not hidden
|
4
|
-
var all_inputs = $(":input:not(:hidden)");
|
4
|
+
var all_inputs = $(":input:not(:hidden)").add("p[id^='fsa']");
|
5
5
|
|
6
6
|
//Return the fieldset child id for the input
|
7
7
|
//This uniquely associated the fieldset child with the fieldset associator
|
@@ -21,6 +21,7 @@ function get_fieldset_child_id(field, type) {
|
|
21
21
|
case 'textarea':
|
22
22
|
case 'select':
|
23
23
|
case 'multi-select':
|
24
|
+
case 'instruction':
|
24
25
|
var id_array = field.attr('id').split('-');
|
25
26
|
return id_array[id_array.length-1];
|
26
27
|
case 'radio':
|
@@ -44,61 +45,6 @@ function get_fieldset_associator_id(field) {
|
|
44
45
|
}
|
45
46
|
}
|
46
47
|
|
47
|
-
//Determines whether the dependency has been satisfied
|
48
|
-
//CHANGE THIS if the dependency model changes which relationships are allowed.
|
49
|
-
//
|
50
|
-
// user_value: The value on the form
|
51
|
-
// stored_value: The value that satisfies the dependency
|
52
|
-
// relationship: The predicate used to compare the user and stored values
|
53
|
-
//
|
54
|
-
// returns the result of the relationship between user and stored valued
|
55
|
-
function evaluate_dependency(user_value, relationship, stored_value) {
|
56
|
-
switch(relationship)
|
57
|
-
{
|
58
|
-
case 'equals':
|
59
|
-
return user_value == stored_value;
|
60
|
-
case 'not equals':
|
61
|
-
return user_value != stored_value;
|
62
|
-
case 'includes':
|
63
|
-
return $.inArray(stored_value, user_value) != -1;
|
64
|
-
case 'not includes':
|
65
|
-
return $.inArray(stored_value, user_value) == -1;
|
66
|
-
case 'blank':
|
67
|
-
return user_value == "";
|
68
|
-
case 'not blank':
|
69
|
-
return user_value != "";
|
70
|
-
default:
|
71
|
-
return false;
|
72
|
-
}
|
73
|
-
};
|
74
|
-
|
75
|
-
// What to do to the field based on the dependency information
|
76
|
-
// CHANGE THIS if the dependency group model changes which actions are allowed
|
77
|
-
//
|
78
|
-
// success_flag: whether the dependency group returned true or false
|
79
|
-
// action: the type of update to apply to the field
|
80
|
-
// group_field: the field to update (generally not the field that triggered the change)
|
81
|
-
function dependency_action(success_flag, action, group_field) {
|
82
|
-
|
83
|
-
if (success_flag){
|
84
|
-
switch(action)
|
85
|
-
{
|
86
|
-
case 'show':
|
87
|
-
$('#input-' + group_field).show();
|
88
|
-
case 'enable':
|
89
|
-
$('#' + group_field + ' :input').removeAttr('disabled');
|
90
|
-
}
|
91
|
-
} else {
|
92
|
-
switch(action)
|
93
|
-
{
|
94
|
-
case 'show':
|
95
|
-
$('#input-' + group_field).hide();
|
96
|
-
case 'enable':
|
97
|
-
$('#' + group_field + ' :input').attr('disabled', true);
|
98
|
-
}
|
99
|
-
}
|
100
|
-
};
|
101
|
-
|
102
48
|
function get_input_value(field, type) {
|
103
49
|
switch(type)
|
104
50
|
{
|
@@ -108,7 +54,11 @@ function get_input_value(field, type) {
|
|
108
54
|
case 'radio':
|
109
55
|
if (field.attr('checked') == 'checked') {
|
110
56
|
return $.trim(field.parent('label').text());
|
111
|
-
}
|
57
|
+
}
|
58
|
+
//it should only grab results for checked radios
|
59
|
+
else {
|
60
|
+
return $.trim(field.parent().parent().find('[checked="checked"]').parent('label').text());
|
61
|
+
}
|
112
62
|
case 'checkbox':
|
113
63
|
return $('input[name="' + field.attr('name') + '"]:checked').map(function(index,option) {
|
114
64
|
return $.trim($(option).parent('label').text())
|
@@ -143,43 +93,49 @@ function get_field_type(field) {
|
|
143
93
|
}
|
144
94
|
|
145
95
|
// when a dynamic fieldsets field fires a change event,
|
96
|
+
// store current values of all fields in associative array (AU 08-07-13)
|
97
|
+
// pass fieldset_child_id of field that was changed to other functions
|
146
98
|
// update the page based on dependency information
|
147
99
|
//
|
148
100
|
// the dependency information is stored in dynamic_fieldsets_dependencies
|
149
101
|
all_inputs.change( function() {
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
102
|
+
field = $(this);
|
103
|
+
var type = get_field_type(field);
|
104
|
+
var fieldset_child_id = get_fieldset_child_id(field, type)
|
105
|
+
var fieldset_associator_id = get_fieldset_associator_id(field);
|
106
|
+
|
107
|
+
var user_inputs = {}
|
108
|
+
$.each(all_inputs, function(index, input){
|
109
|
+
var all_type = get_field_type($(input));
|
110
|
+
var all_fieldset_child_id = get_fieldset_child_id($(input), all_type)
|
111
|
+
user_inputs[all_fieldset_child_id] = get_input_value($(input), all_type);
|
160
112
|
});
|
161
|
-
|
113
|
+
|
114
|
+
if (fieldset_child_id in dynamic_fieldsets_dependencies) {
|
115
|
+
$.each(dynamic_fieldsets_dependencies[fieldset_child_id], function(index, group) {
|
116
|
+
update_dependency_group_for_fieldset_child(fieldset_child_id, group, user_inputs, fieldset_associator_id);
|
117
|
+
});
|
118
|
+
}
|
162
119
|
});
|
163
120
|
|
164
121
|
// checks the clauses for a dependency group and runs the action
|
165
122
|
// group: the dependency group
|
166
123
|
// user_input: the input from the form
|
167
|
-
function update_dependency_group_for_fieldset_child(group,
|
124
|
+
function update_dependency_group_for_fieldset_child(fieldset_child_id, group, user_inputs, fieldset_associator_id) {
|
168
125
|
var action = group['action'];
|
169
126
|
var group_fsc_id = group['fieldset_child_id'];
|
170
127
|
var group_field_id = group['field_id'];
|
171
128
|
var group_field = '<%= DynamicFieldsets.config.form_fieldset_associator_prefix %>' + fieldset_associator_id + '_' + '<%=DynamicFieldsets.config.form_field_prefix %>' + group_fsc_id;
|
172
|
-
|
173
|
-
dependency_action(all_dependency_clauses_true(group, user_input), action, group_field)
|
129
|
+
dependency_action(all_dependency_clauses_true(fieldset_child_id, group, user_inputs), action, group_field, 0 )
|
174
130
|
}
|
175
131
|
|
176
|
-
//all dependencies
|
132
|
+
//all dependencies clauses are ANDed
|
177
133
|
//the first one that is false makes this return false
|
178
134
|
//only return true if all return true
|
179
|
-
function all_dependency_clauses_true(group,
|
135
|
+
function all_dependency_clauses_true(fieldset_child_id, group, user_inputs) {
|
180
136
|
for(var key in group["clause"]) {
|
181
137
|
var clause = group["clause"][key]
|
182
|
-
if(!at_least_one_dependency_true(clause,
|
138
|
+
if(!at_least_one_dependency_true(fieldset_child_id, clause, user_inputs)) {
|
183
139
|
return false;
|
184
140
|
}
|
185
141
|
}
|
@@ -189,16 +145,131 @@ function all_dependency_clauses_true(group, user_input) {
|
|
189
145
|
//The dependencies are ORed together
|
190
146
|
//So as soon as one returns true, return true
|
191
147
|
//Only return false if all are false
|
192
|
-
|
148
|
+
//It looks to see what dependencies inside the clause should actually be tested (AU 08-07-13)
|
149
|
+
// If dependency doesn't match current field, it looks up the correct stored input to compare
|
150
|
+
function at_least_one_dependency_true(fieldset_child_id, clause, user_inputs) {
|
193
151
|
for(var key in clause) {
|
194
152
|
var dependency = clause[key]
|
195
|
-
if(evaluate_dependency(
|
153
|
+
if( evaluate_dependency(user_inputs[fieldset_child_id], dependency["relationship"], dependency["value"]) ){
|
196
154
|
return true
|
155
|
+
} else if( fieldset_child_id != dependency['fieldset_child_id'] ) {
|
156
|
+
if( evaluate_dependency(user_inputs[dependency['fieldset_child_id']], dependency['relationship'], dependency['value']) ){
|
157
|
+
return true
|
158
|
+
}
|
197
159
|
}
|
198
160
|
}
|
199
161
|
return false
|
200
162
|
}
|
201
163
|
|
164
|
+
|
165
|
+
//Determines whether the dependency has been satisfied
|
166
|
+
//CHANGE THIS if the dependency model changes which relationships are allowed.
|
167
|
+
//
|
168
|
+
// user_value: The value on the form
|
169
|
+
// stored_value: The value that satisfies the dependency
|
170
|
+
// relationship: The predicate used to compare the user and stored values
|
171
|
+
//
|
172
|
+
// returns the result of the relationship between user and stored valued
|
173
|
+
function evaluate_dependency(user_value, relationship, stored_value) {
|
174
|
+
switch(relationship)
|
175
|
+
{
|
176
|
+
case 'equals':
|
177
|
+
return user_value == stored_value;
|
178
|
+
case 'not equals':
|
179
|
+
return user_value != stored_value;
|
180
|
+
case 'includes':
|
181
|
+
return $.inArray(stored_value, user_value) != -1;
|
182
|
+
case 'not includes':
|
183
|
+
return $.inArray(stored_value, user_value) == -1;
|
184
|
+
case 'blank':
|
185
|
+
return user_value == "";
|
186
|
+
case 'not blank':
|
187
|
+
return user_value != "";
|
188
|
+
default:
|
189
|
+
return false;
|
190
|
+
}
|
191
|
+
};
|
192
|
+
|
193
|
+
// What to do to the field based on the dependency information
|
194
|
+
// CHANGE THIS if the dependency group model changes which actions are allowed
|
195
|
+
//
|
196
|
+
// success_flag: whether the dependency group returned true or false
|
197
|
+
// action: the type of update to apply to the field
|
198
|
+
// group_field: the field to update (generally not the field that triggered the change)
|
199
|
+
function dependency_action(success_flag, action, group_field, counter) {
|
200
|
+
if (success_flag){
|
201
|
+
switch(action)
|
202
|
+
{
|
203
|
+
case 'show':
|
204
|
+
$('[id$=' + group_field +']').show();
|
205
|
+
case 'enable':
|
206
|
+
$('#' + group_field + ' :input').removeAttr('disabled');
|
207
|
+
}
|
208
|
+
} else {
|
209
|
+
switch(action)
|
210
|
+
{
|
211
|
+
case 'show':
|
212
|
+
$('[id$=' + group_field +']').hide();
|
213
|
+
case 'enable':
|
214
|
+
$('#' + group_field + ' :input').attr('disabled', true);
|
215
|
+
}
|
216
|
+
|
217
|
+
clear_unused_fields(group_field)
|
218
|
+
|
219
|
+
//save from infinite recursion, only goes as deep as there are dependency groups
|
220
|
+
if( counter < Object.keys(dynamic_fieldsets_dependencies).length ) {
|
221
|
+
nested_dependencies(success_flag, action, group_field, counter)
|
222
|
+
}
|
223
|
+
}
|
224
|
+
|
225
|
+
};
|
226
|
+
|
227
|
+
function clear_unused_fields(group_field) {
|
228
|
+
field = $('[id$='+group_field+']').children(':input');
|
229
|
+
type = get_field_type(field);
|
230
|
+
switch(type)
|
231
|
+
{
|
232
|
+
case 'text':
|
233
|
+
case 'textarea':
|
234
|
+
field.val("");
|
235
|
+
case 'radio':
|
236
|
+
if (field.attr('checked') == 'checked') {
|
237
|
+
}
|
238
|
+
case 'checkbox':
|
239
|
+
//$('input[name="' + field.attr('name') + '"]:checked').map(function(index,option) {
|
240
|
+
//});
|
241
|
+
case 'select':
|
242
|
+
//field.find(':selected').text();
|
243
|
+
case 'multi-select':
|
244
|
+
//return field.find(':selected').map(function(index, option) {
|
245
|
+
//});
|
246
|
+
}
|
247
|
+
};
|
248
|
+
|
249
|
+
//looks through dependency hash to find dependent fields that may need to be hidden (AU 08-07-13)
|
250
|
+
function nested_dependencies(success_flag, action, group_field, counter) {
|
251
|
+
var dependent_on = group_field.split("-").pop();
|
252
|
+
for( var key in dynamic_fieldsets_dependencies ) {
|
253
|
+
var child = dynamic_fieldsets_dependencies[key]
|
254
|
+
for( var keyg in child ) {
|
255
|
+
//ignore own group since dependents won't be here
|
256
|
+
if( keyg != dependent_on ) {
|
257
|
+
var group_search = child[keyg]
|
258
|
+
for( var keyc in group_search["clause"] ) {
|
259
|
+
var clause = group_search["clause"][keyc]
|
260
|
+
for( var keyd in clause ) {
|
261
|
+
var dependency = clause[keyd]
|
262
|
+
if ( dependency["fieldset_child_id"] == dependent_on ) {
|
263
|
+
var dependent_id = group_field.replace(dependent_on, group_search["fieldset_child_id"])
|
264
|
+
dependency_action(success_flag, action, dependent_id, counter+1)
|
265
|
+
}
|
266
|
+
}
|
267
|
+
}
|
268
|
+
}
|
269
|
+
}
|
270
|
+
}
|
271
|
+
};
|
272
|
+
|
202
273
|
all_inputs.change();
|
203
274
|
|
204
275
|
</script>
|
data/config/routes.rb
CHANGED
@@ -2,8 +2,8 @@ Rails.application.routes.draw do
|
|
2
2
|
namespace :dynamic_fieldsets do
|
3
3
|
resources :fieldset_associators
|
4
4
|
|
5
|
-
resources :fieldsets
|
6
5
|
match "/fieldsets/roots" => "fieldsets#roots"
|
6
|
+
resources :fieldsets
|
7
7
|
match "/fieldsets/:id/children" => "fieldsets#children", :as => :children_dynamic_fieldsets_fieldset
|
8
8
|
match "/fieldsets/:id/children/reorder" => "fieldsets#reorder"
|
9
9
|
match "/fieldsets/new(/:parent)" => "fieldsets#new", :as => :new_dynamic_fieldsets_fieldset
|
data/dynamic_fieldsets.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "dynamic_fieldsets"
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.11"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Jeremiah Hemphill", "Ethan Pemble", "John Carter"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2013-08-07"
|
13
13
|
s.description = "Dynamic fieldsets for rails controllers"
|
14
14
|
s.email = "jeremiah@cloudspace.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -217,7 +217,7 @@ Gem::Specification.new do |s|
|
|
217
217
|
s.homepage = "http://github.com/jeremiahishere/dynamic_fieldsets"
|
218
218
|
s.licenses = ["MIT"]
|
219
219
|
s.require_paths = ["lib"]
|
220
|
-
s.rubygems_version = "1.8.
|
220
|
+
s.rubygems_version = "1.8.25"
|
221
221
|
s.summary = "Dynamic fieldsets for rails controllers"
|
222
222
|
|
223
223
|
if s.respond_to? :specification_version then
|
@@ -3,7 +3,7 @@ DynamicFieldsets.configure do |config|
|
|
3
3
|
# can cause the single table inheritance to fail. This is due to the object
|
4
4
|
# space getting reset after every request. In production and test environemnts,
|
5
5
|
# this information will not be used because the object space will be complete.
|
6
|
-
# config.available_field_types = [ "DynamicFieldsets::CheckboxField", "DynamicFieldsets::
|
6
|
+
# config.available_field_types = [ "DynamicFieldsets::CheckboxField", "DynamicFieldsets::DateField", "DynamicFieldsets::DatetimeField", "DynamicFieldsets::InstructionField", "DynamicFieldsets::MultipleSelectField", "DynamicFieldsets::RadioField", "DynamicFieldsets::SelectField", "DynamicFieldsets::TextField", "DynamicFieldsets::TextareaField" ]
|
7
7
|
|
8
8
|
# This should correspond to the beginning of the id for the fields for on the form
|
9
9
|
# For example: fsa-8
|
data/spec/dummy/db/schema.rb
CHANGED
metadata
CHANGED
@@ -1,226 +1,313 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamic_fieldsets
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.11
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.10
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Jeremiah Hemphill
|
9
9
|
- Ethan Pemble
|
10
10
|
- John Carter
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
18
17
|
name: rails
|
19
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
20
19
|
none: false
|
21
|
-
requirements:
|
22
|
-
- -
|
23
|
-
- !ruby/object:Gem::Version
|
20
|
+
requirements:
|
21
|
+
- - ! '>='
|
22
|
+
- !ruby/object:Gem::Version
|
24
23
|
version: 3.0.7
|
25
24
|
type: :runtime
|
26
25
|
prerelease: false
|
27
|
-
version_requirements:
|
28
|
-
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ! '>='
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: 3.0.7
|
32
|
+
- !ruby/object:Gem::Dependency
|
29
33
|
name: capybara
|
30
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
31
35
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
36
|
+
requirements:
|
37
|
+
- - ! '>='
|
38
|
+
- !ruby/object:Gem::Version
|
35
39
|
version: 0.4.0
|
36
40
|
type: :development
|
37
41
|
prerelease: false
|
38
|
-
version_requirements:
|
39
|
-
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.4.0
|
48
|
+
- !ruby/object:Gem::Dependency
|
40
49
|
name: sqlite3
|
41
|
-
requirement:
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
42
51
|
none: false
|
43
|
-
requirements:
|
44
|
-
- -
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version:
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
47
56
|
type: :development
|
48
57
|
prerelease: false
|
49
|
-
version_requirements:
|
50
|
-
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
59
|
+
none: false
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
64
|
+
- !ruby/object:Gem::Dependency
|
51
65
|
name: ruby-debug19
|
52
|
-
requirement:
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
53
67
|
none: false
|
54
|
-
requirements:
|
55
|
-
- -
|
56
|
-
- !ruby/object:Gem::Version
|
57
|
-
version:
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
58
72
|
type: :development
|
59
73
|
prerelease: false
|
60
|
-
version_requirements:
|
61
|
-
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ! '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
- !ruby/object:Gem::Dependency
|
62
81
|
name: bundler
|
63
|
-
requirement:
|
82
|
+
requirement: !ruby/object:Gem::Requirement
|
64
83
|
none: false
|
65
|
-
requirements:
|
84
|
+
requirements:
|
66
85
|
- - ~>
|
67
|
-
- !ruby/object:Gem::Version
|
86
|
+
- !ruby/object:Gem::Version
|
68
87
|
version: 1.0.0
|
69
88
|
type: :development
|
70
89
|
prerelease: false
|
71
|
-
version_requirements:
|
72
|
-
|
90
|
+
version_requirements: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ~>
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 1.0.0
|
96
|
+
- !ruby/object:Gem::Dependency
|
73
97
|
name: jeweler
|
74
|
-
requirement:
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
75
99
|
none: false
|
76
|
-
requirements:
|
100
|
+
requirements:
|
77
101
|
- - ~>
|
78
|
-
- !ruby/object:Gem::Version
|
102
|
+
- !ruby/object:Gem::Version
|
79
103
|
version: 1.6.3
|
80
104
|
type: :development
|
81
105
|
prerelease: false
|
82
|
-
version_requirements:
|
83
|
-
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ~>
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: 1.6.3
|
112
|
+
- !ruby/object:Gem::Dependency
|
84
113
|
name: json
|
85
|
-
requirement:
|
114
|
+
requirement: !ruby/object:Gem::Requirement
|
86
115
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
116
|
+
requirements:
|
117
|
+
- - ! '>='
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0'
|
91
120
|
type: :development
|
92
121
|
prerelease: false
|
93
|
-
version_requirements:
|
94
|
-
|
122
|
+
version_requirements: !ruby/object:Gem::Requirement
|
123
|
+
none: false
|
124
|
+
requirements:
|
125
|
+
- - ! '>='
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
- !ruby/object:Gem::Dependency
|
95
129
|
name: rspec
|
96
|
-
requirement:
|
130
|
+
requirement: !ruby/object:Gem::Requirement
|
97
131
|
none: false
|
98
|
-
requirements:
|
132
|
+
requirements:
|
99
133
|
- - ~>
|
100
|
-
- !ruby/object:Gem::Version
|
134
|
+
- !ruby/object:Gem::Version
|
101
135
|
version: 2.6.0
|
102
136
|
type: :development
|
103
137
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
|
138
|
+
version_requirements: !ruby/object:Gem::Requirement
|
139
|
+
none: false
|
140
|
+
requirements:
|
141
|
+
- - ~>
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: 2.6.0
|
144
|
+
- !ruby/object:Gem::Dependency
|
106
145
|
name: rspec-rails
|
107
|
-
requirement:
|
146
|
+
requirement: !ruby/object:Gem::Requirement
|
108
147
|
none: false
|
109
|
-
requirements:
|
148
|
+
requirements:
|
110
149
|
- - ~>
|
111
|
-
- !ruby/object:Gem::Version
|
150
|
+
- !ruby/object:Gem::Version
|
112
151
|
version: 2.6.1
|
113
152
|
type: :development
|
114
153
|
prerelease: false
|
115
|
-
version_requirements:
|
116
|
-
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
156
|
+
requirements:
|
157
|
+
- - ~>
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 2.6.1
|
160
|
+
- !ruby/object:Gem::Dependency
|
117
161
|
name: shoulda
|
118
|
-
requirement:
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
119
163
|
none: false
|
120
|
-
requirements:
|
164
|
+
requirements:
|
121
165
|
- - ~>
|
122
|
-
- !ruby/object:Gem::Version
|
166
|
+
- !ruby/object:Gem::Version
|
123
167
|
version: 3.0.0
|
124
168
|
type: :development
|
125
169
|
prerelease: false
|
126
|
-
version_requirements:
|
127
|
-
|
170
|
+
version_requirements: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
172
|
+
requirements:
|
173
|
+
- - ~>
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: 3.0.0
|
176
|
+
- !ruby/object:Gem::Dependency
|
128
177
|
name: ruby_parser
|
129
|
-
requirement:
|
178
|
+
requirement: !ruby/object:Gem::Requirement
|
130
179
|
none: false
|
131
|
-
requirements:
|
180
|
+
requirements:
|
132
181
|
- - ~>
|
133
|
-
- !ruby/object:Gem::Version
|
182
|
+
- !ruby/object:Gem::Version
|
134
183
|
version: 2.3.1
|
135
184
|
type: :development
|
136
185
|
prerelease: false
|
137
|
-
version_requirements:
|
138
|
-
|
186
|
+
version_requirements: !ruby/object:Gem::Requirement
|
187
|
+
none: false
|
188
|
+
requirements:
|
189
|
+
- - ~>
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: 2.3.1
|
192
|
+
- !ruby/object:Gem::Dependency
|
139
193
|
name: ZenTest
|
140
|
-
requirement:
|
194
|
+
requirement: !ruby/object:Gem::Requirement
|
141
195
|
none: false
|
142
|
-
requirements:
|
143
|
-
- -
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
version:
|
196
|
+
requirements:
|
197
|
+
- - ! '>='
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
version: '0'
|
146
200
|
type: :development
|
147
201
|
prerelease: false
|
148
|
-
version_requirements:
|
149
|
-
|
202
|
+
version_requirements: !ruby/object:Gem::Requirement
|
203
|
+
none: false
|
204
|
+
requirements:
|
205
|
+
- - ! '>='
|
206
|
+
- !ruby/object:Gem::Version
|
207
|
+
version: '0'
|
208
|
+
- !ruby/object:Gem::Dependency
|
150
209
|
name: autotest-rails
|
151
|
-
requirement:
|
210
|
+
requirement: !ruby/object:Gem::Requirement
|
152
211
|
none: false
|
153
|
-
requirements:
|
154
|
-
- -
|
155
|
-
- !ruby/object:Gem::Version
|
156
|
-
version:
|
212
|
+
requirements:
|
213
|
+
- - ! '>='
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
version: '0'
|
157
216
|
type: :development
|
158
217
|
prerelease: false
|
159
|
-
version_requirements:
|
160
|
-
|
218
|
+
version_requirements: !ruby/object:Gem::Requirement
|
219
|
+
none: false
|
220
|
+
requirements:
|
221
|
+
- - ! '>='
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: '0'
|
224
|
+
- !ruby/object:Gem::Dependency
|
161
225
|
name: cucumber
|
162
|
-
requirement:
|
226
|
+
requirement: !ruby/object:Gem::Requirement
|
163
227
|
none: false
|
164
|
-
requirements:
|
165
|
-
- -
|
166
|
-
- !ruby/object:Gem::Version
|
167
|
-
version:
|
228
|
+
requirements:
|
229
|
+
- - ! '>='
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
version: '0'
|
168
232
|
type: :development
|
169
233
|
prerelease: false
|
170
|
-
version_requirements:
|
171
|
-
|
234
|
+
version_requirements: !ruby/object:Gem::Requirement
|
235
|
+
none: false
|
236
|
+
requirements:
|
237
|
+
- - ! '>='
|
238
|
+
- !ruby/object:Gem::Version
|
239
|
+
version: '0'
|
240
|
+
- !ruby/object:Gem::Dependency
|
172
241
|
name: cucumber-rails
|
173
|
-
requirement:
|
242
|
+
requirement: !ruby/object:Gem::Requirement
|
174
243
|
none: false
|
175
|
-
requirements:
|
176
|
-
- -
|
177
|
-
- !ruby/object:Gem::Version
|
178
|
-
version:
|
244
|
+
requirements:
|
245
|
+
- - ! '>='
|
246
|
+
- !ruby/object:Gem::Version
|
247
|
+
version: '0'
|
179
248
|
type: :development
|
180
249
|
prerelease: false
|
181
|
-
version_requirements:
|
182
|
-
|
250
|
+
version_requirements: !ruby/object:Gem::Requirement
|
251
|
+
none: false
|
252
|
+
requirements:
|
253
|
+
- - ! '>='
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: '0'
|
256
|
+
- !ruby/object:Gem::Dependency
|
183
257
|
name: database_cleaner
|
184
|
-
requirement:
|
258
|
+
requirement: !ruby/object:Gem::Requirement
|
185
259
|
none: false
|
186
|
-
requirements:
|
187
|
-
- -
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version:
|
260
|
+
requirements:
|
261
|
+
- - ! '>='
|
262
|
+
- !ruby/object:Gem::Version
|
263
|
+
version: '0'
|
190
264
|
type: :development
|
191
265
|
prerelease: false
|
192
|
-
version_requirements:
|
193
|
-
|
266
|
+
version_requirements: !ruby/object:Gem::Requirement
|
267
|
+
none: false
|
268
|
+
requirements:
|
269
|
+
- - ! '>='
|
270
|
+
- !ruby/object:Gem::Version
|
271
|
+
version: '0'
|
272
|
+
- !ruby/object:Gem::Dependency
|
194
273
|
name: yard
|
195
|
-
requirement:
|
274
|
+
requirement: !ruby/object:Gem::Requirement
|
196
275
|
none: false
|
197
|
-
requirements:
|
276
|
+
requirements:
|
198
277
|
- - ~>
|
199
|
-
- !ruby/object:Gem::Version
|
278
|
+
- !ruby/object:Gem::Version
|
200
279
|
version: 0.6.0
|
201
280
|
type: :development
|
202
281
|
prerelease: false
|
203
|
-
version_requirements:
|
204
|
-
|
282
|
+
version_requirements: !ruby/object:Gem::Requirement
|
283
|
+
none: false
|
284
|
+
requirements:
|
285
|
+
- - ~>
|
286
|
+
- !ruby/object:Gem::Version
|
287
|
+
version: 0.6.0
|
288
|
+
- !ruby/object:Gem::Dependency
|
205
289
|
name: ci_reporter
|
206
|
-
requirement:
|
290
|
+
requirement: !ruby/object:Gem::Requirement
|
207
291
|
none: false
|
208
|
-
requirements:
|
209
|
-
- -
|
210
|
-
- !ruby/object:Gem::Version
|
211
|
-
version:
|
292
|
+
requirements:
|
293
|
+
- - ! '>='
|
294
|
+
- !ruby/object:Gem::Version
|
295
|
+
version: '0'
|
212
296
|
type: :development
|
213
297
|
prerelease: false
|
214
|
-
version_requirements:
|
298
|
+
version_requirements: !ruby/object:Gem::Requirement
|
299
|
+
none: false
|
300
|
+
requirements:
|
301
|
+
- - ! '>='
|
302
|
+
- !ruby/object:Gem::Version
|
303
|
+
version: '0'
|
215
304
|
description: Dynamic fieldsets for rails controllers
|
216
305
|
email: jeremiah@cloudspace.com
|
217
306
|
executables: []
|
218
|
-
|
219
307
|
extensions: []
|
220
|
-
|
221
|
-
extra_rdoc_files:
|
308
|
+
extra_rdoc_files:
|
222
309
|
- README.rdoc
|
223
|
-
files:
|
310
|
+
files:
|
224
311
|
- .rdebugrc
|
225
312
|
- .rspec
|
226
313
|
- CHANGELOG
|
@@ -419,34 +506,31 @@ files:
|
|
419
506
|
- spec/support/fieldset_child_helper.rb
|
420
507
|
- spec/support/fieldset_helper.rb
|
421
508
|
homepage: http://github.com/jeremiahishere/dynamic_fieldsets
|
422
|
-
licenses:
|
509
|
+
licenses:
|
423
510
|
- MIT
|
424
511
|
post_install_message:
|
425
512
|
rdoc_options: []
|
426
|
-
|
427
|
-
require_paths:
|
513
|
+
require_paths:
|
428
514
|
- lib
|
429
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
515
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
430
516
|
none: false
|
431
|
-
requirements:
|
432
|
-
- -
|
433
|
-
- !ruby/object:Gem::Version
|
434
|
-
|
435
|
-
segments:
|
517
|
+
requirements:
|
518
|
+
- - ! '>='
|
519
|
+
- !ruby/object:Gem::Version
|
520
|
+
version: '0'
|
521
|
+
segments:
|
436
522
|
- 0
|
437
|
-
|
438
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
523
|
+
hash: -3321699385613512278
|
524
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
439
525
|
none: false
|
440
|
-
requirements:
|
441
|
-
- -
|
442
|
-
- !ruby/object:Gem::Version
|
443
|
-
version:
|
526
|
+
requirements:
|
527
|
+
- - ! '>='
|
528
|
+
- !ruby/object:Gem::Version
|
529
|
+
version: '0'
|
444
530
|
requirements: []
|
445
|
-
|
446
531
|
rubyforge_project:
|
447
|
-
rubygems_version: 1.8.
|
532
|
+
rubygems_version: 1.8.25
|
448
533
|
signing_key:
|
449
534
|
specification_version: 3
|
450
535
|
summary: Dynamic fieldsets for rails controllers
|
451
536
|
test_files: []
|
452
|
-
|