inline_forms 0.7.2 → 0.7.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/app/helpers/form_elements/associated.rb +1 -1
- data/app/helpers/form_elements/check_box.rb +1 -1
- data/app/helpers/form_elements/checklist.rb +1 -1
- data/app/helpers/form_elements/date.rb +1 -1
- data/app/helpers/form_elements/dropdown.rb +1 -1
- data/app/helpers/form_elements/dropdown_with_integers.rb +1 -1
- data/app/helpers/form_elements/dropdown_with_values.rb +1 -1
- data/app/helpers/form_elements/geo_code_curacao.rb +1 -1
- data/app/helpers/form_elements/image.rb +1 -1
- data/app/helpers/form_elements/range.rb +1 -1
- data/app/helpers/form_elements/text_area.rb +1 -1
- data/app/helpers/form_elements/text_field.rb +1 -1
- data/inline_forms.gemspec +2 -2
- data/lib/generators/inline_forms/inline_forms_generator.rb +104 -27
- data/lib/generators/inline_forms/templates/migration.erb +1 -11
- data/lib/generators/inline_forms/templates/model.erb +5 -25
- data/lib/inline_forms.rb +72 -12
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.3
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module InlineFormsHelper
|
2
|
-
InlineForms::
|
2
|
+
InlineForms::SPECIAL_COLUMN_TYPES[:check_box]=:boolean
|
3
3
|
# boolean, bit unaptly named check_box
|
4
4
|
def check_box_show(object, attribute, values)
|
5
5
|
values ||= { 'false' => 'no', 'true' => 'yes' }
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module InlineFormsHelper
|
2
|
-
InlineForms::
|
2
|
+
InlineForms::SPECIAL_COLUMN_TYPES[:dropdown]=:belongs_to
|
3
3
|
# dropdown
|
4
4
|
def dropdown_show(object, attribute, values)
|
5
5
|
attribute_value = object.send(attribute)._presentation rescue nil
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module InlineFormsHelper
|
2
|
-
InlineForms::
|
2
|
+
InlineForms::SPECIAL_COLUMN_TYPES[:dropdown_with_integers]=:integer
|
3
3
|
# dropdown_with_integers generates a dropdown menu
|
4
4
|
# with the given list of integers as options
|
5
5
|
#
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module InlineFormsHelper
|
2
|
-
InlineForms::
|
2
|
+
InlineForms::SPECIAL_COLUMN_TYPES[:dropdown_with_values]=:integer
|
3
3
|
# dropdown_with_values
|
4
4
|
def dropdown_with_values_show(object, attribute, values)
|
5
5
|
unless values.is_a?(Hash)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module InlineFormsHelper
|
2
|
-
InlineForms::
|
2
|
+
InlineForms::SPECIAL_COLUMN_TYPES[:geo_code_curacao]=:string
|
3
3
|
# geo_code_curacao
|
4
4
|
def geo_code_curacao_show(object, attribute, values)
|
5
5
|
attribute_value = object.send(attribute)._presentation rescue nil
|
data/inline_forms.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{inline_forms}
|
8
|
-
s.version = "0.7.
|
8
|
+
s.version = "0.7.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ace Suares"]
|
12
|
-
s.date = %q{2011-03-
|
12
|
+
s.date = %q{2011-03-08}
|
13
13
|
s.description = %q{Inline Forms aims to ease the setup of forms that provide inline editing. The field list can be specified in the model.}
|
14
14
|
s.email = %q{ace@suares.an}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,44 +1,59 @@
|
|
1
1
|
module InlineForms
|
2
|
+
# == Usage
|
3
|
+
# This generator generates a migration, a model and a controller.
|
4
|
+
#
|
5
|
+
# rails g inline_forms Model attribute:type [attribute:type ...] [options]
|
6
|
+
#
|
7
|
+
# Read more about the possible types below.
|
8
|
+
#
|
9
|
+
# = Overriding Rails::Generators::GeneratedAttribute
|
10
|
+
# When using a generator in the form
|
11
|
+
# rails g example_generator Modelname attribute:type attribute:type ...
|
12
|
+
# an array with attributes and types is created for use in the generator.
|
13
|
+
#
|
14
|
+
# Rails::Generators::GeneratedAttribute creates, among others, a field_type.
|
15
|
+
# This field_type maps column types to form field helpers like text_field.
|
16
|
+
# We override it here to make our own.
|
17
|
+
#
|
2
18
|
class InlineFormsGenerator < Rails::Generators::NamedBase
|
3
|
-
|
4
|
-
|
5
|
-
#
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
19
|
+
Rails::Generators::GeneratedAttribute.class_eval do #:doc:
|
20
|
+
# Deducts the column_type for migrations from the type.
|
21
|
+
#
|
22
|
+
# We first merge the Special Column Types with the Default Column Types,
|
23
|
+
# which has the effect that the Default Column Types with the same key override
|
24
|
+
# the Special Column Types.
|
25
|
+
#
|
26
|
+
# If the type is not in the merged hash, then column_type defaults to :unknown
|
9
27
|
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
28
|
+
# You are advised to check you migrations for the :unknown, because either you made a
|
29
|
+
# typo in the generator command line or you need to add a Form Element!
|
30
|
+
#
|
31
|
+
def column_type
|
32
|
+
SPECIAL_COLUMN_TYPES.merge(DEFAULT_COLUMN_TYPES).merge(RELATIONS)[type] || :unknown
|
15
33
|
end
|
16
34
|
|
35
|
+
# Override the field_type to include our special column types.
|
36
|
+
#
|
37
|
+
# If a type is not in the Special Column Type hash, then the default
|
38
|
+
# column type hash is used, and if that fails, the field_type
|
39
|
+
# will be :unknown. Make sure to check your models for the :unknown.
|
40
|
+
#
|
17
41
|
def field_type
|
18
|
-
|
19
|
-
SPECIAL_MIGRATION_TYPES.merge(RELATION_TYPES).merge(SPECIAL_RELATION_TYPES).has_key?(type) ? type : DEFAULT_FIELD_TYPES[type] || :unknown
|
42
|
+
SPECIAL_COLUMN_TYPES.merge(RELATIONS).has_key?(type) ? type : DEFAULT_COLUMN_TYPES[type] || :unknown
|
20
43
|
end
|
21
|
-
|
22
|
-
def
|
23
|
-
|
24
|
-
( relation? || field_type == :dropdown) ? name + '_id' : name
|
44
|
+
|
45
|
+
def relation?
|
46
|
+
RELATIONS.has_key?(type) || special_relation?
|
25
47
|
end
|
26
48
|
|
27
|
-
def
|
28
|
-
|
49
|
+
def special_relation?
|
50
|
+
SPECIAL_RELATIONS.has_key?(type)
|
29
51
|
end
|
30
|
-
|
52
|
+
|
31
53
|
def has_many?
|
32
54
|
field_type == :associated
|
33
55
|
end
|
34
56
|
|
35
|
-
def relation?
|
36
|
-
RELATION_TYPES.has_key?(field_type)
|
37
|
-
end
|
38
|
-
|
39
|
-
def special_relation?
|
40
|
-
SPECIAL_RELATION_TYPES.has_key?(field_type)
|
41
|
-
end
|
42
57
|
|
43
58
|
end
|
44
59
|
argument :attributes, :type => :array, :banner => "[name:form_element]..."
|
@@ -50,6 +65,48 @@ module InlineForms
|
|
50
65
|
end
|
51
66
|
|
52
67
|
def generate_model
|
68
|
+
@belongs_to = "\n"
|
69
|
+
@has_many = "\n"
|
70
|
+
@has_attached_files = "\n"
|
71
|
+
@presentation = "\n"
|
72
|
+
@inline_forms_field_list = String.new
|
73
|
+
|
74
|
+
for attribute in attributes
|
75
|
+
if attribute.column_type == :belongs_to || attribute.type == :belongs_to
|
76
|
+
@belongs_to << ' belongs_to :' + attribute.name + "\n"
|
77
|
+
end
|
78
|
+
if attribute.type == :has_many
|
79
|
+
@has_many << ' has_many :' + attribute.name + "\n"
|
80
|
+
end
|
81
|
+
if attribute.type == :image
|
82
|
+
@has_attached_files << " has_attached_file :#{attribute.name},
|
83
|
+
:styles => { :medium => \"300x300>\", :thumb => \"100x100>\" }\n"
|
84
|
+
end
|
85
|
+
if attribute.name == '_presentation'
|
86
|
+
@presentation << " def _presentation\n" +
|
87
|
+
" \"#{attribute.type.to_s}\"\n" +
|
88
|
+
" end\n" +
|
89
|
+
"\n"
|
90
|
+
end
|
91
|
+
unless attribute.name == '_presentation' || attribute.relation?
|
92
|
+
attribute.field_type == :unknown ? commenter = '#' : commenter = ' '
|
93
|
+
@inline_forms_field_list << commenter +
|
94
|
+
' [ :' +
|
95
|
+
attribute.name +
|
96
|
+
', "' + attribute.name +
|
97
|
+
'", :' + attribute.field_type.to_s +
|
98
|
+
" ], \n"
|
99
|
+
end
|
100
|
+
end
|
101
|
+
unless @inline_forms_field_list.empty?
|
102
|
+
@inline_forms_field_list = "\n" +
|
103
|
+
" def inline_forms_field_list\n" +
|
104
|
+
" [\n" +
|
105
|
+
@inline_forms_field_list +
|
106
|
+
" ]\n" +
|
107
|
+
" end\n" +
|
108
|
+
"\n"
|
109
|
+
end
|
53
110
|
template "model.erb", "app/models/#{model_file_name}.rb"
|
54
111
|
end
|
55
112
|
|
@@ -62,6 +119,26 @@ module InlineForms
|
|
62
119
|
end
|
63
120
|
|
64
121
|
def generate_migration
|
122
|
+
@columns = String.new
|
123
|
+
|
124
|
+
for attribute in attributes
|
125
|
+
if attribute.column_type == :image
|
126
|
+
@columns << ' t.string :' + attribute.name + "_file_name\n"
|
127
|
+
@columns << ' t.string :' + attribute.name + "_content_type\n"
|
128
|
+
@columns << ' t.integer :' + attribute.name + "_file_size\n"
|
129
|
+
@columns << ' t.datetime :' + attribute.name + "_updated_at\n"
|
130
|
+
else
|
131
|
+
unless attribute.name == '_presentation' || attribute.special_relation?
|
132
|
+
attribute.field_type == :unknown ? commenter = '#' : commenter = ' '
|
133
|
+
@columns << commenter +
|
134
|
+
' t.' +
|
135
|
+
attribute.column_type.to_s +
|
136
|
+
" :" +
|
137
|
+
attribute.name +
|
138
|
+
" \n"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
65
142
|
template "migration.erb", "db/migrate/#{time_stamp}_inline_forms_create_#{table_name}.rb"
|
66
143
|
end
|
67
144
|
|
@@ -2,17 +2,7 @@ class InlineFormsCreate<%= table_name.camelize %> < ActiveRecord::Migration
|
|
2
2
|
|
3
3
|
def self.up
|
4
4
|
create_table :<%= table_name %> do |t|
|
5
|
-
|
6
|
-
<% if attribute.migration_type == :image -%>
|
7
|
-
<%= ' t.string :' + attribute.migration_name + "_file_name" %>
|
8
|
-
<%= ' t.string :' + attribute.migration_name + "_content_type" %>
|
9
|
-
<%= ' t.integer :' + attribute.migration_name + "_file_size" %>
|
10
|
-
<%= ' t.datetime :' + attribute.migration_name + "_updated_at" %>
|
11
|
-
<% else -%>
|
12
|
-
<%= ( attribute.migration_type == :unknown || attribute.special_relation? ) ? '#' : ' ' -%>
|
13
|
-
<%= ' t.' + attribute.migration_type.to_s %> :<%= attribute.migration_name %>
|
14
|
-
<% end -%>
|
15
|
-
<% end -%>
|
5
|
+
<%= @columns -%>
|
16
6
|
t.timestamps
|
17
7
|
end
|
18
8
|
end
|
@@ -1,27 +1,7 @@
|
|
1
1
|
class <%= name %> < ActiveRecord::Base
|
2
|
-
|
3
|
-
|
4
|
-
<%=
|
5
|
-
|
6
|
-
|
7
|
-
<%= ' has_many :' + attribute.name + "\n" if attribute.has_many? -%>
|
8
|
-
<% end -%>
|
9
|
-
<% for attribute in attributes -%>
|
10
|
-
<%= " has_attached_file :#{attribute.name}, :styles => { :medium => \"300x300>\", :thumb => \"100x100>\" }\n" if attribute.type == :image -%>
|
11
|
-
<% end -%>
|
12
|
-
|
13
|
-
def _presentation
|
14
|
-
<% for attribute in attributes -%>
|
15
|
-
<%= ' "' + ( attribute.type.to_s || 'put your presentation here' ) + '"' + "\n" if attribute.name == '_presentation' -%>
|
16
|
-
<% end -%>
|
17
|
-
end
|
18
|
-
|
19
|
-
def inline_forms_field_list
|
20
|
-
[
|
21
|
-
<% for attribute in attributes -%>
|
22
|
-
<%= attribute.relation? ? '#' : ' ' -%>
|
23
|
-
<%= ' [ :' + attribute.name + ', "' + attribute.name + '", :' + attribute.field_type.to_s + " ], \n" unless attribute.name == '_presentation' -%>
|
24
|
-
<% end -%>
|
25
|
-
]
|
26
|
-
end
|
2
|
+
<%= @belongs_to if @belongs_to.length > 1 -%>
|
3
|
+
<%= @has_many if @belongs_to.length > 1 -%>
|
4
|
+
<%= @has_attached_files if @belongs_to.length > 1 -%>
|
5
|
+
<%= @presentation if @belongs_to.length > 1 -%>
|
6
|
+
<%= @inline_forms_field_list -%>
|
27
7
|
end
|
data/lib/inline_forms.rb
CHANGED
@@ -1,8 +1,29 @@
|
|
1
1
|
puts 'loading inline_forms...'
|
2
2
|
|
3
3
|
module InlineForms
|
4
|
-
#
|
5
|
-
|
4
|
+
# ActiveRecord::Migration comes with a set of column types.
|
5
|
+
# They are listed here so they can be uses alongside our Special Column Types.
|
6
|
+
#
|
7
|
+
# These types will override the Special Column Types, so don't declare
|
8
|
+
# types with these names as Special Column Types!
|
9
|
+
#
|
10
|
+
# Example:
|
11
|
+
# rails g inline_forms Example name:string price:integer
|
12
|
+
# will result in:
|
13
|
+
# class InlineFormsCreateExamples < ActiveRecord::Migration
|
14
|
+
# def self.up
|
15
|
+
# create_table :examples do |t|
|
16
|
+
# t.string :name
|
17
|
+
# t.integer :price
|
18
|
+
# t.timestamps
|
19
|
+
# end
|
20
|
+
# end
|
21
|
+
# def self.down
|
22
|
+
# drop_table :examples
|
23
|
+
# end
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
DEFAULT_COLUMN_TYPES = {
|
6
27
|
:string => :string,
|
7
28
|
:text => :text,
|
8
29
|
:integer => :integer,
|
@@ -14,9 +35,26 @@ module InlineForms
|
|
14
35
|
:date => :date,
|
15
36
|
:binary => :binary,
|
16
37
|
:boolean => :boolean,
|
38
|
+
# :references => :belongs_to,
|
39
|
+
# :belongs_to => :belongs_to,
|
17
40
|
}
|
18
|
-
#
|
19
|
-
|
41
|
+
# For each Default Column Type, we need to specify a Form Element for use in form creation.
|
42
|
+
#
|
43
|
+
# Example:
|
44
|
+
# rails g inline_forms Example name:string price:integer
|
45
|
+
# will result in the following model:
|
46
|
+
#
|
47
|
+
# class Example < ActiveRecord::Base
|
48
|
+
# def inline_forms_field_list
|
49
|
+
# [
|
50
|
+
# [ :name, "name", :text_field ],
|
51
|
+
# [ :price, "price", :text_field ],
|
52
|
+
# ]
|
53
|
+
# end
|
54
|
+
# end
|
55
|
+
# as you see, both :string and :integer are mapped to a :text_field
|
56
|
+
#
|
57
|
+
DEFAULT_FORM_ELEMENTS = {
|
20
58
|
:string => :text_field,
|
21
59
|
:text => :text_area,
|
22
60
|
:integer => :text_field,
|
@@ -28,22 +66,44 @@ module InlineForms
|
|
28
66
|
:date => :date_select,
|
29
67
|
:binary => :text_field,
|
30
68
|
:boolean => :check_box,
|
31
|
-
|
32
69
|
}
|
33
|
-
#
|
34
|
-
|
70
|
+
# This Hash will be used to map our Special Column Types to
|
71
|
+
# ActiveRecord::Migration Column Types.
|
72
|
+
#
|
73
|
+
# The helpers in app/helpers/form_elements add to this Hash.
|
74
|
+
#
|
75
|
+
# Usage example: in app/helpers/form_elements/dropdown.rb
|
76
|
+
# InlineForms::SPECIAL_COLUMN_TYPES[:dropdown]=:belongs_to
|
77
|
+
# this maps the :dropdown form element to the :belongs_to column type.
|
78
|
+
#
|
79
|
+
# If you call the generator with country:dropdown, it will add
|
80
|
+
# t.belongs_to :country
|
81
|
+
# to the migration. (In fact AR will add t.integer :country_id). And
|
82
|
+
# it will add
|
83
|
+
# [ :country, "country", :dropdown ],
|
84
|
+
# to the model.
|
85
|
+
#
|
86
|
+
SPECIAL_COLUMN_TYPES = {}
|
35
87
|
# experimental
|
36
|
-
|
37
|
-
:belongs_to => :
|
88
|
+
RELATIONS = {
|
89
|
+
:belongs_to => :belongs_to,
|
90
|
+
:references => :belongs_to,
|
38
91
|
}
|
39
|
-
|
92
|
+
# experimental
|
93
|
+
SPECIAL_RELATIONS = {
|
94
|
+
:has_many => :has_many,
|
40
95
|
:associated => :associated,
|
41
96
|
}
|
42
|
-
|
97
|
+
# has_and_belongs_to_many :clients
|
98
|
+
# def <=>(other)
|
99
|
+
# self.name <=> other.name
|
100
|
+
# end
|
101
|
+
|
102
|
+
# Declare as a Rails::Engine, see http://www.ruby-forum.com/topic/211017#927932
|
43
103
|
class InlineFormsEngine < Rails::Engine
|
44
104
|
initializer 'inline_forms.helper' do |app|
|
45
105
|
ActionView::Base.send :include, InlineFormsHelper
|
46
106
|
end
|
47
107
|
end
|
48
108
|
end
|
49
|
-
|
109
|
+
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inline_forms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 5
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 3
|
10
|
+
version: 0.7.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ace Suares
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-03-
|
18
|
+
date: 2011-03-08 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|