humpyard_form 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,24 @@
1
+ source 'http://gemcutter.org'
2
+
3
+ gem "rails", :git => "git://github.com/rails/rails.git"
4
+ gem 'haml', :git => 'git://github.com/nex3/haml.git'
5
+ gem 'compass', :git => 'git://github.com/chriseppstein/compass.git'
6
+
7
+ group :test do
8
+ gem 'test-unit'
9
+ gem 'rspec-rails', '>= 2.0.0.beta.7'
10
+ gem 'capybara', '>= 0.3.7'
11
+ gem 'database_cleaner', '>= 0.5.2'
12
+ gem 'cucumber', '= 0.6.4' #'> 0.7.0.beta.2' # as 0.7.2.beta.2 is not running for us
13
+ gem 'cucumber-rails', :git => 'git://github.com/aslakhellesoy/cucumber-rails.git'
14
+ gem 'pickle', '>= 0.2.4'
15
+ gem 'capybara', '>= 0.3.5'
16
+ gem 'factory_girl', '>= 1.2.3'
17
+ gem 'markup_validity', '>= 1.1.0'
18
+ gem 'sqlite3-ruby', :require => 'sqlite3'
19
+ gem 'thin'
20
+ end
21
+
22
+ if RUBY_VERSION < '1.9'
23
+ gem 'ruby-debug', '>= 0.10.3'
24
+ end
data/LICENCE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009-2010 Sven G. Brönstrup
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,37 @@
1
+ = humpyard_form
2
+
3
+ A HumpyardForm is doing fare control. So HumpyardForm is an authentication system for Rails 3 applications.
4
+
5
+ == Installation
6
+
7
+ * Add HumpyardForm to your Rails application's Gemfile. It does require edge rails at the moment.
8
+ gem 'rails', :git => 'git://github.com/rails/rails.git'
9
+ gem 'haml', :git => 'git://github.com/nex3/haml.git'
10
+ gem 'compass', :git => 'git://github.com/chriseppstein/compass.git'
11
+ gem 'humpyard_form', :git => 'git://github.com/starpeak/humpyard_form.git'
12
+
13
+ * Change into your Rails application's directory
14
+
15
+ * Generate HumpyardForm skeleton
16
+ rails generate humpyard_form:skeleton
17
+
18
+ * Migrate the HumpyardForm database tables
19
+ rake humpyard_form:db:migrate
20
+
21
+ == API Documentation
22
+
23
+ * API Documentation can be created by running
24
+ rake rdoc
25
+ from the humpyard_form project directory.
26
+
27
+ == Note on Patches/Pull Requests
28
+
29
+ * Fork the project.
30
+ * Make your feature addition or bug fix.
31
+ * Add tests for it. No discussion. No tests, no game. We use rspec and cucumber with associated addons.
32
+ * Commit, do not mess with rakefile, version, or history. If you want to have your own version, thats fine. But bump your version in a seperate commit that can be ignored when pulling.
33
+ * Send me a pull request. Bonus points for topic branches.
34
+
35
+ == Copyright
36
+
37
+ Copyright (c) 2010 Sven G. Brönstrup. See LICENSE for details.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
@@ -0,0 +1 @@
1
+ %input{:type => "text", :name => "#{form.namespace}[#{name}]", :value => "#{form.object.send(name)}", :'data-date-input' => "true", :class => "datetime-field text ui-widget-content ui-corner-all field-highlight"}
@@ -0,0 +1 @@
1
+ %input{:type => "file", :name => "#{form.namespace}[#{name}]", :value => "#{form.object.send(name)}", :class => "text ui-widget-content ui-corner-all field-highlight"}
@@ -0,0 +1,3 @@
1
+ - #html_options[:method] = :put
2
+ = form_tag(form.url, form.html_options) do
3
+ = inner_haml
@@ -0,0 +1,9 @@
1
+ - puts name
2
+ .input{:class => "attr_#{name}"}
3
+ %div
4
+ %label{:for => "#{form.namespace}[#{name}]", :class => form.object.class.validators_on(name.to_s).map(&:class).include?(ActiveModel::Validations::PresenceValidator) ? 'required' : false}
5
+ = form.object.class.human_attribute_name(name)
6
+ %span.field-errors.ui-state-error-text{:style => form.object.errors[name].first.nil? ? 'display:none;' : ''}
7
+ = form.object.errors[name].first
8
+ %div
9
+ = render :partial => "/humpyard_form/#{as.to_s}_input", :locals => {:form => form, :name => name, :options => options}
@@ -0,0 +1,14 @@
1
+ - if form.object.send(name).file?
2
+ - if form.object.send(name).styles.keys.include?(:thumb)
3
+ - style = form.object.send(name).styles[:thumb]
4
+ = image_tag form.object.send(name).url(:thumb), :size => style.geometry.match(/(\d+x\d+)/)[1]
5
+ - else
6
+ = image_tag form.object.send(name).ur
7
+ [
8
+ = form.object.send("#{name}_file_name")
9
+ = form.object.send("#{name}_file_size")
10
+ = form.object.send("#{name}_content_type")
11
+ ]
12
+ - else
13
+ [none]
14
+ %input{:type => "file", :name => "#{form.namespace}[#{name}]", :value => "#{form.object.send(name)}", :class => "text ui-widget-content ui-corner-all field-highlight"}
@@ -0,0 +1,4 @@
1
+ %select{:name => "#{form.namespace}[#{name}]", :class => "select"}
2
+ - options[:select_options].each do |option|
3
+ %option{:value => "#{option[1]}", :selected => (option[1] == form.object.send(name))}
4
+ = option[0] #form.object.send(name)
@@ -0,0 +1 @@
1
+ %input{:type => "text", :name => "#{form.namespace}[#{name}]", :value => "#{form.object.send(name)}", :class => "text ui-widget-content ui-corner-all field-highlight"}
@@ -0,0 +1 @@
1
+ %button Submit
@@ -0,0 +1,2 @@
1
+ %textarea{:name => "#{form.namespace}[#{name}]", :class => "text ui-widget-content ui-corner-all field-highlight"}
2
+ = preserve raw(form.object.send(name))
@@ -0,0 +1,3 @@
1
+ en:
2
+ humpyard_form:
3
+ start: 'Loading HumpyardForm {{version}}'
@@ -0,0 +1,35 @@
1
+ module HumpyardForm
2
+ module ActionController #:nodoc:
3
+ module Base #:nodoc:
4
+
5
+
6
+ end
7
+ end
8
+ end
9
+
10
+ ActionController::Base.send :include, HumpyardForm::ActionController::Base
11
+
12
+ # register a custom json renderer for humpyard form to overcome xhr file upload limits.
13
+ # if a file input is present in the form, it should be sent as a normal form
14
+ # submit, targeted to a (hidden) iframe. client code can pick up the response from there.
15
+ # two things with this workaround: the MIME type cannot be the proper json type
16
+ # because the response would end up being downloaded by common browsers.
17
+ # additionally, there is some escaping going on in the browser which can
18
+ # render the json unparseable. to prevent this, we send the json wrapped
19
+ # in a <textarea> element. (this is the way jquery.form handles things)
20
+ # until there is a decent way to upload files using xhr (also supporting
21
+ # streaming large uploads), we have to use this rather ugly hack.
22
+ # this code is based on the original rails :json option for rendering.
23
+ # to use the workaround, include a parameter url_quirk=true in the request.
24
+
25
+ ActionController.add_renderer :json do |json, options|
26
+ json = ActiveSupport::JSON.encode(json) unless json.respond_to?(:to_str)
27
+ json = "#{options[:callback]}(#{json})" unless options[:callback].blank?
28
+ if params[:ul_quirk]
29
+ self.content_type ||= Mime::HTML
30
+ self.response_body = "<textarea>" + json + "</textarea>"
31
+ else
32
+ self.content_type ||= Mime::JSON
33
+ self.response_body = json
34
+ end
35
+ end
@@ -0,0 +1,22 @@
1
+ module HumpyardForm
2
+ module ActionView
3
+ module FormHelper
4
+ def humpyard_form_for(record, options={}, &block)
5
+ form = HumpyardForm::FormBuilder.new(self, record, options)
6
+ inner_haml = capture_haml(form, &block)
7
+ render :partial => '/humpyard_form/form', :locals => {:form => form, :inner_haml => inner_haml}
8
+ end
9
+
10
+ # execute a block with a given locale
11
+ def with_locale(locale, &block)
12
+ old_locale = I18n.locale
13
+ I18n.locale = locale
14
+ yield(locale)
15
+ I18n.locale = old_locale
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+
22
+ ActionView::Base.send :include, HumpyardForm::ActionView::FormHelper
@@ -0,0 +1,6 @@
1
+ require 'compass'
2
+
3
+ options = Hash.new
4
+ options[:stylesheets_directory] = ::File.expand_path(::File.join(::File.dirname(__FILE__), '..', '..', 'compass', 'stylesheets'))
5
+ options[:templates_directory] = ::File.expand_path(::File.join(File.dirname(__FILE__), '..', '..', 'compass', 'templates'))
6
+ ::Compass::Frameworks.register('humpyard_form', options)
@@ -0,0 +1,42 @@
1
+ module HumpyardForm
2
+ ####
3
+ # HumpyardForm::Config is responsible for holding and managing the configuration
4
+ # for your HumpyardForm Rails Application.
5
+ #
6
+ # Possible configuration options are:
7
+ # +table_name_prefix+::
8
+ # The prefix for the SQL tables
9
+ #
10
+ # The default value is <tt>"humpyard_form_"</tt>
11
+ # +admin_prefix+::
12
+ # The prefix for the admin controllers
13
+ #
14
+ # The default value is <tt>"admin"</tt>
15
+
16
+ class Config
17
+ def initialize(&block) #:nodoc:
18
+ configure(&block) if block_given?
19
+ end
20
+
21
+ # Configure your HumpyardForm Rails Application with the given parameters in
22
+ # the block. For possible options see above.
23
+ def configure(&block)
24
+ yield(self)
25
+ end
26
+
27
+ def locales=(locales) #:nodoc:
28
+ if locales.nil?
29
+ @locales = nil
30
+ elsif locales.class == Array
31
+ @locales = locales.map{|l| l.to_sym}
32
+ else
33
+ @locales = locales.split(',').collect{|l| l.to_sym}
34
+ end
35
+ end
36
+
37
+ def locales #:nodoc:
38
+ @locales ||= [:en]
39
+ end
40
+
41
+ end
42
+ end
@@ -0,0 +1,7 @@
1
+ module HumpyardForm
2
+ ####
3
+ # HumpyardForm::Engine is the ::Rails::Engine running the HumpyardForm
4
+ class Engine < ::Rails::Engine
5
+ #engine_name :humpyard_form
6
+ end
7
+ end
@@ -0,0 +1,145 @@
1
+ module HumpyardForm
2
+ ####
3
+ # HumpyardForm::FormHelper is a helper for forms
4
+ class FormBuilder
5
+ attr_reader :object, :options, :html_options, :url, :form_type
6
+
7
+ @@file_methods = [ :file?, :public_filename ]
8
+
9
+ cattr_accessor :file_methods
10
+
11
+ def initialize(renderer, object, options={})
12
+ @renderer = renderer
13
+ @object = @renderer.convert_to_model(object)
14
+ @html_options = options.delete(:html) || {}
15
+ @url = options.delete(:url) || @renderer.polymorphic_path(@object)
16
+ @options = options
17
+
18
+ if object.respond_to?(:persisted?) && object.persisted?
19
+ @form_type = 'Edit'
20
+ @html_options[:'data-action'] = @renderer.dom_class(object, :edit),
21
+ @html_options[:method] = :put
22
+ else
23
+ @form_type = 'New'
24
+ @html_options[:'data-action'] = @renderer.dom_class(object, :new),
25
+ @html_options[:method] = :post
26
+ end
27
+ end
28
+
29
+ def namespace
30
+ if @options[:as]
31
+ @options[:as]
32
+ else
33
+ @object.class.name.underscore.gsub('/', '_')
34
+ end
35
+ end
36
+
37
+ def inputs
38
+ end
39
+
40
+ # def input(method, options = {})
41
+ # options[:required] = method_required?(method) unless options.key?(:required)
42
+ # options[:as] ||= default_input_type(method)
43
+ #
44
+ # html_class = [ options[:as], (options[:required] ? :required : :optional) ]
45
+ # html_class << 'error' if @object && @object.respond_to?(:errors) && !@object.errors[method.to_sym].blank?
46
+ #
47
+ # wrapper_html = options.delete(:wrapper_html) || {}
48
+ # wrapper_html[:id] ||= generate_html_id(method)
49
+ # wrapper_html[:class] = (html_class << wrapper_html[:class]).flatten.compact.join(' ')
50
+ #
51
+ # if options[:input_html] && options[:input_html][:id]
52
+ # options[:label_html] ||= {}
53
+ # options[:label_html][:for] ||= options[:input_html][:id]
54
+ # end
55
+ #
56
+ # input_parts = @@inline_order.dup
57
+ # input_parts.delete(:errors) if options[:as] == :hidden
58
+ #
59
+ # list_item_content = input_parts.map do |type|
60
+ # send(:"inline_#{type}_for", method, options)
61
+ # end.compact.join("\n")
62
+ #
63
+ # return template.content_tag(:li, list_item_content, wrapper_html)
64
+ # end
65
+
66
+
67
+ def input(method, options={}) #:nodoc:
68
+ #options[:required] = method_required?(method) unless options.key?(:required)
69
+ options[:as] ||= default_input_type(method)
70
+ options[:translation_info] = translation_info(method)
71
+ #puts options.inspect
72
+ @renderer.render :partial => "/humpyard_form/form_element", :locals => {:form => self, :name => method, :options => options, :as => options[:as]}
73
+ end
74
+
75
+ def submit(options={})
76
+ @renderer.render :partial => '/humpyard_form/submit', :locals => {:form => self, :options => options}
77
+ end
78
+
79
+ def translation_info(method) #:nodoc:
80
+ if @object.respond_to?(:translated_attribute_names) and @object.translated_attribute_names.include?(method)
81
+ tmp = @object.translation_class.new
82
+ if tmp
83
+ column = tmp.column_for_attribute(method) if tmp.respond_to?(:column_for_attribute)
84
+ if column
85
+ {:locales => HumpyardForm::config.locales, :column => column}
86
+ end
87
+ end
88
+ else
89
+ false
90
+ end
91
+ end
92
+
93
+ # For methods that have a database column, take a best guess as to what the input method
94
+ # should be. In most cases, it will just return the column type (eg :string), but for special
95
+ # cases it will simplify (like the case of :integer, :float & :decimal to :numeric), or do
96
+ # something different (like :password and :select).
97
+ #
98
+ # If there is no column for the method (eg "virtual columns" with an attr_accessor), the
99
+ # default is a :string, a similar behaviour to Rails' scaffolding.
100
+ #
101
+ def default_input_type(method) #:nodoc:
102
+ column = @object.column_for_attribute(method) if @object.respond_to?(:column_for_attribute)
103
+
104
+ # translated attributes dont have a column info at this point
105
+ # check the associated translation class
106
+ if not column
107
+ tx_info = translation_info(method)
108
+ if tx_info
109
+ column = tx_info[:column]
110
+ end
111
+ end
112
+
113
+ if column
114
+ # handle the special cases where the column type doesn't map to an input method
115
+ return :time_zone if column.type == :string && method.to_s =~ /time_zone/
116
+ return :select if column.type == :integer && method.to_s =~ /_id$/
117
+ return :datetime if column.type == :timestamp
118
+ return :numeric if [:integer, :float, :decimal].include?(column.type)
119
+ return :password if column.type == :string && method.to_s =~ /password/
120
+ return :country if column.type == :string && method.to_s =~ /country/
121
+
122
+ # otherwise assume the input name will be the same as the column type (eg string_input)
123
+ return column.type
124
+ else
125
+ if @object
126
+ #return :select if find_reflection(method)
127
+
128
+ file = @object.send(method) if @object.respond_to?(method)
129
+ if file && @@file_methods.any? { |m| file.respond_to?(m) }
130
+ if file.styles.keys.empty?
131
+ return :file
132
+ else
133
+ return :image_file
134
+ end
135
+ end
136
+ end
137
+
138
+ return :password if method.to_s =~ /password/
139
+ return :string
140
+ end
141
+ end
142
+
143
+
144
+ end
145
+ end
@@ -0,0 +1,53 @@
1
+ ####
2
+ # Welcome to HumpyardForm
3
+
4
+ module HumpyardForm
5
+ # This is the actual version of the HumpyardForm gem
6
+ VERSION = ::File.read(::File.join(::File.dirname(__FILE__), "..", "VERSION")).strip
7
+
8
+ def self.load options = {} #:nodoc:
9
+ require ::File.expand_path('../humpyard_form/rake_tasks', __FILE__)
10
+ end
11
+
12
+ # This is the path to the HumpyardForm gem's root directory
13
+ def base_directory
14
+ ::File.expand_path(::File.join(::File.dirname(__FILE__), '..'))
15
+ end
16
+
17
+ # This is the path to the HumpyardForm gem's lib directory
18
+ def lib_directory
19
+ ::File.expand_path(::File.join(::File.dirname(__FILE__)))
20
+ end
21
+
22
+ module_function :base_directory, :lib_directory
23
+
24
+ class << self
25
+ # To access the actual configuration of your HumpyardForm, you can call this.
26
+ #
27
+ # An example would be <tt>HumpyardForm.config.www_prefix = 'cms/:locale/'</tt>
28
+ #
29
+ # See HumpyardForm::Config for configuration options.
30
+ def config
31
+ @config ||= HumpyardForm::Config.new
32
+ end
33
+
34
+ # Configure the HumpyardForm
35
+ # See HumpyardForm::Config.configure for details
36
+ def configure(&block)
37
+ config.configure(&block)
38
+ end
39
+ end
40
+ end
41
+
42
+ require File.expand_path('../humpyard_form/config', __FILE__)
43
+ require File.expand_path('../humpyard_form/engine', __FILE__)
44
+ require File.expand_path('../humpyard_form/compass', __FILE__)
45
+
46
+ require 'i18n'
47
+ I18n.load_path += Dir.glob("#{File.dirname(__FILE__)}/../config/locales/*.yml")
48
+ puts "=> #{I18n.t 'humpyard_form.start', :version => HumpyardForm::VERSION}"
49
+
50
+ require File.expand_path('../humpyard_form/action_controller/base', __FILE__)
51
+ require File.expand_path('../humpyard_form/action_view/form_helper', __FILE__)
52
+
53
+
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: humpyard_form
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Sven G. Broenstrup
13
+ - Andreas Pieper
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-05-02 00:00:00 +02:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: builder
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: rails
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ segments:
41
+ - 3
42
+ - 0
43
+ - 0
44
+ - beta
45
+ version: 3.0.0.beta
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: haml
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 2
57
+ - 2
58
+ - 20
59
+ version: 2.2.20
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: acts_as_tree
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 0
71
+ - 1
72
+ - 1
73
+ version: 0.1.1
74
+ type: :runtime
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: cancan
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 1
85
+ - 1
86
+ - 1
87
+ version: 1.1.1
88
+ type: :runtime
89
+ version_requirements: *id005
90
+ - !ruby/object:Gem::Dependency
91
+ name: globalize2
92
+ prerelease: false
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ segments:
98
+ - 0
99
+ - 2
100
+ - 0
101
+ version: 0.2.0
102
+ type: :runtime
103
+ version_requirements: *id006
104
+ description: HumpyardForm is an form builder for Rails 3 applications. It is developed as part of the humpyard cms
105
+ email: info@humpyard.org
106
+ executables: []
107
+
108
+ extensions: []
109
+
110
+ extra_rdoc_files: []
111
+
112
+ files:
113
+ - lib/humpyard_form/action_controller/base.rb
114
+ - lib/humpyard_form/action_view/form_helper.rb
115
+ - lib/humpyard_form/compass.rb
116
+ - lib/humpyard_form/config.rb
117
+ - lib/humpyard_form/engine.rb
118
+ - lib/humpyard_form/form_builder.rb
119
+ - lib/humpyard_form.rb
120
+ - app/views/humpyard_form/_datetime_input.html.haml
121
+ - app/views/humpyard_form/_file_input.html.haml
122
+ - app/views/humpyard_form/_form.html.haml
123
+ - app/views/humpyard_form/_form_element.html.haml
124
+ - app/views/humpyard_form/_image_file_input.html.haml
125
+ - app/views/humpyard_form/_select_input.html.haml
126
+ - app/views/humpyard_form/_string_input.html.haml
127
+ - app/views/humpyard_form/_submit.html.haml
128
+ - app/views/humpyard_form/_text_input.html.haml
129
+ - config/locales/en.yml
130
+ - VERSION
131
+ - README.rdoc
132
+ - LICENCE
133
+ - Gemfile
134
+ has_rdoc: true
135
+ homepage: http://humpyard.org/
136
+ licenses: []
137
+
138
+ post_install_message:
139
+ rdoc_options: []
140
+
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ segments:
148
+ - 0
149
+ version: "0"
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ">="
153
+ - !ruby/object:Gem::Version
154
+ segments:
155
+ - 0
156
+ version: "0"
157
+ requirements: []
158
+
159
+ rubyforge_project:
160
+ rubygems_version: 1.3.6
161
+ signing_key:
162
+ specification_version: 3
163
+ summary: HumpyardForm is a Rails form builder
164
+ test_files: []
165
+