inline_forms 0.7.2 → 0.7.3
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/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
|