drogus-merb-sexy-forms 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 Piotr Sarnacki
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 ADDED
@@ -0,0 +1,6 @@
1
+ merb-sexy-forms
2
+ ===============
3
+
4
+ A plugin for the Merb framework that provides extended form builder.
5
+
6
+ It's in development right now.
data/Rakefile ADDED
@@ -0,0 +1,71 @@
1
+ require 'rubygems'
2
+ require 'rake/gempackagetask'
3
+
4
+ require 'merb-core'
5
+ require 'merb-core/tasks/merb'
6
+
7
+ require 'date'
8
+ require "spec/rake/spectask"
9
+
10
+ require 'lib/merb-sexy-forms/merbtasks.rb'
11
+
12
+ GEM_NAME = "merb-sexy-forms"
13
+ GEM_VERSION = "0.0.3"
14
+ AUTHOR = "Piotr Sarnacki"
15
+ EMAIL = "drogus@gmail.com"
16
+ HOMEPAGE = ""
17
+ SUMMARY = "Merb plugin that provides extended builder for forms"
18
+
19
+ spec = Gem::Specification.new do |s|
20
+ s.rubyforge_project = 'merb'
21
+ s.name = GEM_NAME
22
+ s.version = GEM_VERSION
23
+ s.platform = Gem::Platform::RUBY
24
+ s.has_rdoc = true
25
+ s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
26
+ s.summary = SUMMARY
27
+ s.description = s.summary
28
+ s.author = AUTHOR
29
+ s.email = EMAIL
30
+ s.homepage = HOMEPAGE
31
+ s.add_dependency('merb', '>= 1.0.6.1')
32
+ s.require_path = 'lib'
33
+ s.files = %w(LICENSE README Rakefile TODO) + Dir.glob("{lib,spec,assets}/**/*")
34
+
35
+ end
36
+
37
+ Rake::GemPackageTask.new(spec) do |pkg|
38
+ pkg.gem_spec = spec
39
+ end
40
+
41
+ desc "install the plugin as a gem"
42
+ task :install do
43
+ Merb::RakeHelper.install(GEM_NAME, :version => GEM_VERSION)
44
+ end
45
+
46
+ desc "Uninstall the gem"
47
+ task :uninstall do
48
+ Merb::RakeHelper.uninstall(GEM_NAME, :version => GEM_VERSION)
49
+ end
50
+
51
+ desc "Create a gemspec file"
52
+ task :gemspec do
53
+ File.open("#{GEM_NAME}.gemspec", "w") do |file|
54
+ file.puts spec.to_ruby
55
+ end
56
+ end
57
+
58
+ desc "Run all examples (or a specific spec with TASK=xxxx)"
59
+ Spec::Rake::SpecTask.new('spec') do |t|
60
+ t.spec_opts = ["-cfs"]
61
+ t.spec_files = begin
62
+ if ENV["TASK"]
63
+ ENV["TASK"].split(',').map { |task| "spec/**/#{task}_spec.rb" }
64
+ else
65
+ FileList['spec/**/*_spec.rb']
66
+ end
67
+ end
68
+ end
69
+
70
+ desc 'Default: run spec examples'
71
+ task :default => 'spec'
data/TODO ADDED
@@ -0,0 +1 @@
1
+ TODO:
@@ -0,0 +1,56 @@
1
+ /* This file can be overwriten by rake task - if you want to customize
2
+ styles try to overwrite selectors them in another file or make new
3
+ stylesheet
4
+ */
5
+ form.sexy ul {
6
+ padding: 0px;
7
+ }
8
+
9
+ form.sexy label.main {
10
+ line-height: 1.5em;
11
+ color: #000;
12
+ font-weight: bold;
13
+ }
14
+
15
+ form.sexy ul li {
16
+ width: 97% !important;
17
+ }
18
+
19
+ form.sexy li {
20
+ clear: both;
21
+ display: block;
22
+ margin: 0;
23
+ padding: 5px 5px 2px 10px;
24
+ }
25
+
26
+ form.sexy ul li div input[type=text], form.sexy ul li div textarea,
27
+ form.sexy ul li div input[type=password] {
28
+ width: 100%;
29
+ border-color:#7C7C7C #a2a2a2 #b2b2b2;
30
+ border-style: solid;
31
+ border-width: 1px;
32
+ }
33
+
34
+ form.sexy input[type=text], form.sexy textarea, form.sexy input[type=password] {
35
+ background: #FFFFFF url(/images/sexy_forms/fieldbg.gif) repeat-x scroll center top;
36
+ }
37
+
38
+ form.sexy ul li div textarea {
39
+ height: 9em;
40
+ }
41
+
42
+ form.sexy label.choice {
43
+ display: block;
44
+ line-height: 1.5em;
45
+ margin: -1.4em 0 0 25px;
46
+ padding: 0.185em 0 0.6em;
47
+ width: 88%;
48
+ }
49
+
50
+ input.checkbox, input.radio {
51
+ display:block;
52
+ line-height: 1.5em;
53
+ margin:0.6em 0 0 3px;
54
+ width: 15px;
55
+ height: 15px;
56
+ }
@@ -0,0 +1,137 @@
1
+ module Merb::Helpers::SexyForm
2
+ module Builder
3
+ class Base < Merb::Helpers::Form::Builder::ResourcefulFormWithErrors
4
+ def form(attrs = {}, &blk)
5
+ ul_options = attrs.delete(:ul)
6
+ add_css_class(attrs, "sexy")
7
+ super(attrs) do
8
+ captured = @origin.capture(&blk)
9
+ tag(:ul, captured, ul_options)
10
+ end
11
+ end
12
+
13
+ def wrap_with_container(attrs = {}, content = "")
14
+ li = attrs.delete(:li)
15
+ container = attrs.delete(:container)
16
+
17
+ first = attrs.delete(:first)
18
+ method = attrs.delete(:method)
19
+
20
+ if first && (attrs[:id] || method)
21
+ if method
22
+ id = method ? "#{@name}_#{method}" : attrs[:id]
23
+ end
24
+ label_id = "#{id}_#{first[:value]}"
25
+ else
26
+ label_id = attrs[:id]
27
+ end
28
+
29
+ label = attrs.delete(:label)
30
+ if label && !label.is_a?(Hash)
31
+ label = {:label => {:title => label}}
32
+ end
33
+ if label.is_a?(Hash)
34
+ label[:label].merge!({:class => "main", :for => label_id})
35
+ end
36
+ label = label(label)
37
+
38
+ if container == false
39
+ content = label + content
40
+ else
41
+ content = label + tag(:div, content, container)
42
+ end
43
+
44
+ if li == false
45
+ content
46
+ else
47
+ li = li || {}
48
+ li.merge!(:id => "#{attrs[:id]}_container") if attrs[:id] and li[:id].blank?
49
+ tag(:li, content, li)
50
+ end
51
+ end
52
+
53
+ %w(text password file).each do |kind|
54
+ self.class_eval <<-RUBY, __FILE__, __LINE__ + 1
55
+ def unbound_#{kind}_field(attrs = {})
56
+ label = attrs.delete(:label)
57
+ wrap_with_container(attrs.merge(:label => label), super(clean_args!(attrs)))
58
+ end
59
+ RUBY
60
+ end
61
+
62
+ def unbound_check_box(attrs = {})
63
+ update_label_options(attrs, "radio")
64
+ wrap_with_container(attrs.merge(:label => nil),
65
+ super(clean_args!(attrs)))
66
+ end
67
+
68
+ def unbound_radio_button(attrs = {})
69
+ update_label_options(attrs, "radio")
70
+ wrap_with_container(attrs.merge(:label => nil),
71
+ super(clean_args!(attrs)))
72
+ end
73
+
74
+ def bound_radio_group(method, arr, global_attrs = {})
75
+ first = arr.first
76
+ wrap_with_container(global_attrs.merge(:first => first, :method => method), super(method, arr))
77
+ end
78
+
79
+ def unbound_radio_group(arr, global_attrs = {})
80
+ wrap_with_container(global_attrs, super(arr))
81
+ end
82
+
83
+ def unbound_select(attrs = {})
84
+ wrap_with_container(attrs, super(clean_args!(attrs)))
85
+ end
86
+
87
+ def unbound_text_area(contents, attrs = {})
88
+ label = attrs.delete(:label)
89
+ wrap_with_container(attrs.merge(:label => label), super(clean_args!(attrs)))
90
+ end
91
+
92
+ def button(contents, attrs = {})
93
+ wrap_with_container(attrs, super(contents, clean_args!(attrs)))
94
+ end
95
+
96
+ def submit(value, attrs = {})
97
+ wrap_with_container(attrs, super(value, clean_args!(attrs)))
98
+ end
99
+
100
+ private
101
+ def update_label_options(attrs, type)
102
+ case type
103
+ when "radio", "checkbox"
104
+ if attrs[:label] && !attrs[:label].is_a?(Hash)
105
+ attrs[:label] = {:title => attrs.delete(:label)}
106
+ add_css_class(attrs[:label], "choice")
107
+ end
108
+ end
109
+ end
110
+
111
+ def clean_args!(attrs)
112
+ new_attrs = attrs.dup
113
+ new_attrs.delete(:li)
114
+ new_attrs.delete(:container)
115
+ new_attrs
116
+ end
117
+
118
+ def radio_group_item(method, attrs)
119
+ attrs.merge!(:checked => "checked") if attrs[:checked]
120
+ attrs[:li] = false
121
+ attrs[:container] = false
122
+ super
123
+ end
124
+
125
+ def process_form_attrs(attrs)
126
+ attrs[:id] = "#{@name}" unless attrs[:id] || @name.nil?
127
+
128
+ if (@obj.respond_to?(:new_record?) && !@obj.new_record?) || (@obj.respond_to?(:new?) && !@obj.new?)
129
+ add_css_class(attrs, "edit")
130
+ else
131
+ add_css_class(attrs, "new")
132
+ end
133
+ super(attrs)
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,20 @@
1
+ module Merb::Helpers::Form
2
+ def sexy_form(attrs = {}, &blk)
3
+ with_form_context_without_name(Merb::Helpers::SexyForm::Builder::Base) do
4
+ current_form_context.form(attrs, &blk)
5
+ end
6
+ end
7
+
8
+ def sexy_form_for(name, attrs = {}, &blk)
9
+ with_form_context(name, Merb::Helpers::SexyForm::Builder::Base) do
10
+ current_form_context.form(attrs, &blk)
11
+ end
12
+ end
13
+
14
+ def with_form_context_without_name(builder)
15
+ form_contexts.push((builder || self._default_builder).new(nil, nil, self))
16
+ ret = yield
17
+ form_contexts.pop
18
+ ret
19
+ end
20
+ end
@@ -0,0 +1,11 @@
1
+ require 'fileutils'
2
+
3
+ namespace :merb_sexy_forms do
4
+ desc "Update assets for sexy forms"
5
+ task :update_assets do
6
+ assets = File.join(File.dirname(__FILE__), "../../assets")
7
+ FileUtils.cp(File.join(assets, "stylesheets/sexy_forms.css"), "public/stylesheets/")
8
+ FileUtils.mkdir_p("public/images/sexy_forms")
9
+ FileUtils.cp(File.join(assets, "images/sexy_forms/fieldbg.gif"), "public/images/sexy_forms/")
10
+ end
11
+ end
@@ -0,0 +1,20 @@
1
+ # make sure we're running inside Merb
2
+ if defined?(Merb::Plugins)
3
+
4
+ # Merb gives you a Merb::Plugins.config hash...feel free to put your stuff in your piece of it
5
+ Merb::Plugins.config[:merb_sexy_forms] = {
6
+ :chickens => false
7
+ }
8
+
9
+ Merb::BootLoader.before_app_loads do
10
+ # require code that must be loaded before the application
11
+ end
12
+
13
+ Merb::BootLoader.after_app_loads do
14
+ dir = File.dirname(__FILE__) / 'merb-sexy-forms'
15
+ require dir + '/builder'
16
+ require dir + '/form'
17
+ end
18
+
19
+ Merb::Plugins.add_rakefiles "merb-sexy-forms/merbtasks"
20
+ end
@@ -0,0 +1,2 @@
1
+ class Application < Merb::Controller
2
+ end
@@ -0,0 +1,2 @@
1
+ class SexyFormSpecs < SpecController
2
+ end
@@ -0,0 +1,11 @@
1
+ # Helpers are tested going through the full stack.
2
+ # to keep things isolated each helper has its own controller subclass
3
+ # if you are working on a new helper, please consider creating
4
+ # a new spec controller subclass
5
+ #
6
+ # Remember that your helper spec views
7
+ # will be located in a folder named after the controller you use
8
+
9
+ class SpecController < Merb::Controller
10
+ layout nil
11
+ end
@@ -0,0 +1,4 @@
1
+ <%= sexy_form() do %>
2
+ <%= radio_button :name => "radio", :label => "Radio label: ", :id => "radio" %>
3
+ <%= check_box :name => "checkbox", :label => "Checkbox label: ", :id => "checkbox" %>
4
+ <% end =%>
@@ -0,0 +1,3 @@
1
+ <%= sexy_form() do %>
2
+ <%= text_field :name => "name", :label => "Label: " %>
3
+ <% end =%>
@@ -0,0 +1,6 @@
1
+ Merb.logger.info("Loaded DEVELOPMENT Environment...")
2
+ Merb::Config.use { |c|
3
+ c[:exception_details] = true
4
+ c[:reload_classes] = true
5
+ c[:reload_time] = 0.5
6
+ }
@@ -0,0 +1,5 @@
1
+ Merb.logger.info("Loaded PRODUCTION Environment...")
2
+ Merb::Config.use { |c|
3
+ c[:exception_details] = false
4
+ c[:reload_classes] = false
5
+ }
@@ -0,0 +1,6 @@
1
+ Merb.logger.info("Loaded TEST Environment...")
2
+ Merb::Config.use { |c|
3
+ c[:exception_details] = true
4
+ c[:reload_classes] = true
5
+ c[:reload_time] = 0.5
6
+ }
@@ -0,0 +1,46 @@
1
+ # Make the app's "gems" directory a place where gems are loaded from
2
+ Gem.clear_paths
3
+ Gem.path.unshift(Merb.root / "gems")
4
+
5
+ # Make the app's "lib" directory a place where ruby files get "require"d from
6
+ $LOAD_PATH.unshift(Merb.root / "lib")
7
+
8
+ Merb::Config.use { |c|
9
+ c[:session_store] = 'cookie'
10
+ c[:session_secret_key] = "2c24532b38b8c46d8acf1b5ed71bdd5426dadd9b"
11
+ }
12
+
13
+ ### Merb doesn't come with database support by default. You need
14
+ ### an ORM plugin. Install one, and uncomment one of the following lines,
15
+ ### if you need a database.
16
+
17
+ ### Uncomment for DataMapper ORM
18
+ # use_orm :datamapper
19
+
20
+ ### Uncomment for ActiveRecord ORM
21
+ # use_orm :activerecord
22
+
23
+ ### Uncomment for Sequel ORM
24
+ # use_orm :sequel
25
+
26
+ ### This defines which test framework the generators will use
27
+ ### rspec is turned on by default
28
+ # use_test :test_unit
29
+ # use_test :rspec
30
+
31
+ ### Add your other dependencies here
32
+
33
+ # These are some examples of how you might specify dependencies.
34
+ #
35
+ # dependencies "RedCloth", "merb_helpers"
36
+ # OR
37
+ # dependency "RedCloth", "> 3.0"
38
+ # OR
39
+ # dependencies "RedCloth" => "> 3.0", "ruby-aes-cext" => "= 1.0"
40
+ dependency File.join(File.dirname(__FILE__),'..','..','..','lib','merb-sexy-forms')
41
+
42
+ Merb::BootLoader.after_app_loads do
43
+ ### Add dependencies here that must load after the application loads:
44
+
45
+ # dependency "magic_admin" # this gem uses the app's model classes
46
+ end
@@ -0,0 +1,11 @@
1
+ # use PathPrefix Middleware if :path_prefix is set in Merb::Config
2
+ if prefix = ::Merb::Config[:path_prefix]
3
+ use Merb::Rack::PathPrefix, prefix
4
+ end
5
+
6
+ # comment this out if you are running merb behind a load balancer
7
+ # that serves static files
8
+ use Merb::Rack::Static, Merb.dir_for(:public)
9
+
10
+ # this is our main merb application
11
+ run Merb::Rack::Application.new
@@ -0,0 +1,38 @@
1
+ # Merb::Router is the request routing mapper for the merb framework.
2
+ #
3
+ # You can route a specific URL to a controller / action pair:
4
+ #
5
+ # r.match("/contact").
6
+ # to(:controller => "info", :action => "contact")
7
+ #
8
+ # You can define placeholder parts of the url with the :symbol notation. These
9
+ # placeholders will be available in the params hash of your controllers. For example:
10
+ #
11
+ # r.match("/books/:book_id/:action").
12
+ # to(:controller => "books")
13
+ #
14
+ # Or, use placeholders in the "to" results for more complicated routing, e.g.:
15
+ #
16
+ # r.match("/admin/:module/:controller/:action/:id").
17
+ # to(:controller => ":module/:controller")
18
+ #
19
+ # You can also use regular expressions, deferred routes, and many other options.
20
+ # See merb/specs/merb/router.rb for a fairly complete usage sample.
21
+
22
+ Merb.logger.info("Compiling routes...")
23
+ Merb::Router.prepare do |r|
24
+ # RESTful routes
25
+ # r.resources :posts
26
+ resources :fake_models
27
+ resources :obj
28
+ resources :models
29
+
30
+ # This is the default route for /:controller/:action/:id
31
+ # This is fine for most cases. If you're heavily using resource-based
32
+ # routes, you may want to comment/remove this line to prevent
33
+ # clients from calling your create or destroy actions with a GET
34
+ r.default_routes
35
+
36
+ # Change this for your home page to be available at /
37
+ # r.match('/').to(:controller => 'whatever', :action =>'index')
38
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ Merb::Plugins.config[:helpers] = {
4
+ :default_builder => Merb::Helpers::Form::Builder::FormWithErrors
5
+ }
6
+
7
+ describe "form" do
8
+
9
+ before :each do
10
+ @c = SexyFormSpecs.new(Merb::Request.new({}))
11
+ end
12
+
13
+ it "should add labels with field nested in container" do
14
+ ret = @c.render(:with_labels)
15
+ ret.should have_selector("form ul li label")
16
+ ret.should have_selector("form ul li div input")
17
+ end
18
+
19
+ it "should add 'choice' class to labels for checkboxes or radio buttons" do
20
+ ret = @c.render(:label_choice_class)
21
+ ret.should have_selector("form div label[for=checkbox].choice")
22
+ ret.should have_selector("form div label[for=radio].choice")
23
+ end
24
+
25
+ it "should not add 'choice' class to main labels" do
26
+ ret = @c.render(:label_choice_class)
27
+ ret.should_not have_selector("form label.choice.main")
28
+ end
29
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "merb-sexy-forms" do
4
+ it "should do nothing" do
5
+ true.should == true
6
+ end
7
+ end
@@ -0,0 +1 @@
1
+ Sat, 20 Dec 2008 13:41:20 GMT ~ info ~ Logfile created
@@ -0,0 +1,153 @@
1
+ require "rubygems"
2
+ require "spec"
3
+ require "merb-core"
4
+ require 'merb-helpers'
5
+ require File.join(File.dirname(__FILE__),"..",'lib',"merb-sexy-forms")
6
+ require "date"
7
+ require "webrat"
8
+
9
+ default_options = {
10
+ :environment => 'test',
11
+ :adapter => 'runner',
12
+ :merb_root => File.dirname(__FILE__) / 'fixture',
13
+ :log_file => File.dirname(__FILE__) / "merb_test.log"
14
+ }
15
+ options = default_options.merge($START_OPTIONS || {})
16
+
17
+ Merb.disable(:initfile)
18
+ Merb.start_environment(options)
19
+
20
+ def unload_merb_helpers
21
+ Merb.class_eval do
22
+ remove_const("Helpers") if defined?(Merb::Helpers)
23
+ end
24
+ end
25
+
26
+ def reload_merb_helpers
27
+ unload_merb_helpers
28
+ load(MERB_HELPERS_ROOT + "/lib/merb-helpers.rb")
29
+ Merb::Helpers.load
30
+ end
31
+
32
+ class FakeErrors
33
+
34
+ def initialize(model)
35
+ @model = model
36
+ end
37
+
38
+ def on(name)
39
+ name.to_s.include?("bad")
40
+ end
41
+
42
+ end
43
+
44
+ class FakeColumn
45
+ attr_accessor :name, :type
46
+
47
+ def initialize(name, type)
48
+ @name, @type = name, type
49
+ end
50
+
51
+ end
52
+
53
+
54
+
55
+
56
+ # -- Global custom matchers --
57
+
58
+ # A better +be_kind_of+ with more informative error messages.
59
+ #
60
+ # The default +be_kind_of+ just says
61
+ #
62
+ # "expected to return true but got false"
63
+ #
64
+ # This one says
65
+ #
66
+ # "expected File but got Tempfile"
67
+
68
+ module Merb
69
+ module Test
70
+ module RspecMatchers
71
+ class IncludeLog
72
+ def initialize(expected)
73
+ @expected = expected
74
+ end
75
+
76
+ def matches?(target)
77
+ target.log.rewind
78
+ @text = target.log.read
79
+ @text =~ (String === @expected ? /#{Regexp.escape @expected}/ : @expected)
80
+ end
81
+
82
+ def failure_message
83
+ "expected to find `#{@expected}' in the log but got:\n" <<
84
+ @text.map {|s| " #{s}" }.join
85
+ end
86
+
87
+ def negative_failure_message
88
+ "exected not to find `#{@expected}' in the log but got:\n" <<
89
+ @text.map {|s| " #{s}" }.join
90
+ end
91
+
92
+ def description
93
+ "include #{@text} in the log"
94
+ end
95
+ end
96
+
97
+ class BeKindOf
98
+ def initialize(expected) # + args
99
+ @expected = expected
100
+ end
101
+
102
+ def matches?(target)
103
+ @target = target
104
+ @target.kind_of?(@expected)
105
+ end
106
+
107
+ def failure_message
108
+ "expected #{@expected} but got #{@target.class}"
109
+ end
110
+
111
+ def negative_failure_message
112
+ "expected #{@expected} to not be #{@target.class}"
113
+ end
114
+
115
+ def description
116
+ "be_kind_of #{@target}"
117
+ end
118
+ end
119
+
120
+ def be_kind_of(expected) # + args
121
+ BeKindOf.new(expected)
122
+ end
123
+
124
+ def include_log(expected)
125
+ IncludeLog.new(expected)
126
+ end
127
+ end
128
+
129
+ module Helper
130
+ def running(&blk) blk; end
131
+
132
+ def executing(&blk) blk; end
133
+
134
+ def doing(&blk) blk; end
135
+
136
+ def calling(&blk) blk; end
137
+ end
138
+ end
139
+ end
140
+
141
+ Spec::Runner.configure do |config|
142
+ config.include Merb::Test::Helper
143
+ config.include Merb::Test::RspecMatchers
144
+ config.include Merb::Test::RequestHelper
145
+ config.include Webrat::Matchers
146
+ config.include Webrat::HaveTagMatcher
147
+
148
+ def with_level(level)
149
+ Merb.logger = Merb::Logger.new(StringIO.new, level)
150
+ yield
151
+ Merb.logger
152
+ end
153
+ end
metadata ADDED
@@ -0,0 +1,100 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: drogus-merb-sexy-forms
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Piotr Sarnacki
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-20 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: merb
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.6.1
23
+ version:
24
+ description: Merb plugin that provides extended builder for forms
25
+ email: drogus@gmail.com
26
+ executables: []
27
+
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - README
32
+ - LICENSE
33
+ - TODO
34
+ files:
35
+ - LICENSE
36
+ - README
37
+ - Rakefile
38
+ - TODO
39
+ - lib/merb-sexy-forms.rb
40
+ - lib/merb-sexy-forms
41
+ - lib/merb-sexy-forms/builder.rb
42
+ - lib/merb-sexy-forms/merbtasks.rb
43
+ - lib/merb-sexy-forms/form.rb
44
+ - spec/fixture
45
+ - spec/fixture/app
46
+ - spec/fixture/app/controllers
47
+ - spec/fixture/app/controllers/application.rb
48
+ - spec/fixture/app/controllers/sexy_form.rb
49
+ - spec/fixture/app/controllers/specs_controller.rb
50
+ - spec/fixture/app/views
51
+ - spec/fixture/app/views/sexy_form_specs
52
+ - spec/fixture/app/views/sexy_form_specs/label_choice_class.html.erb
53
+ - spec/fixture/app/views/sexy_form_specs/with_labels.html.erb
54
+ - spec/fixture/config
55
+ - spec/fixture/config/init.rb.rb
56
+ - spec/fixture/config/environments
57
+ - spec/fixture/config/environments/development.rb
58
+ - spec/fixture/config/environments/production.rb
59
+ - spec/fixture/config/environments/test.rb
60
+ - spec/fixture/config/rack.rb
61
+ - spec/fixture/config/router.rb
62
+ - spec/merb_test.log
63
+ - spec/spec_helper.rb
64
+ - spec/merb-sexy-forms_spec.rb
65
+ - spec/merb-sexy-forms-form_spec.rb
66
+ - spec/merb.main.pid
67
+ - assets/stylesheets
68
+ - assets/stylesheets/sexy_forms.css
69
+ - assets/javascripts
70
+ - assets/images
71
+ - assets/images/sexy_forms
72
+ - assets/images/sexy_forms/fieldbg.gif
73
+ has_rdoc: true
74
+ homepage: ""
75
+ post_install_message:
76
+ rdoc_options: []
77
+
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: "0"
85
+ version:
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ version:
92
+ requirements: []
93
+
94
+ rubyforge_project: merb
95
+ rubygems_version: 1.2.0
96
+ signing_key:
97
+ specification_version: 2
98
+ summary: Merb plugin that provides extended builder for forms
99
+ test_files: []
100
+