aeonscope-enhanced_select 1.0.0

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.
@@ -0,0 +1,3 @@
1
+ = v1.0.0
2
+
3
+ * Initial version.
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Brooke Kuhlmann of {Berserk Technologies}[http://www.berserktech.com]
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.
@@ -0,0 +1,90 @@
1
+ = Overview
2
+
3
+ An enhanced select helper for forms that allows you to use the full {HTML spec}[http://www.w3schools.com/tags/tag_option.asp] for select option elements. This is more than what you get with the default Rails select helper which only allows you to specify the value, text, and selected/disabled attributes.
4
+
5
+ = License
6
+
7
+ Copyright (c) 2009 Brooke Kuhlmann of {Berserk Technologies}[http://www.berserktech.com].
8
+ See the included LICENSE for more info.
9
+
10
+ = History
11
+
12
+ See the CHANGELOG file for more info.
13
+
14
+ = Requirements
15
+
16
+ 1. {Ruby on Rails}[http://rubyonrails.org].
17
+
18
+ = Installation
19
+
20
+ Type the following from the command line to install:
21
+
22
+ * *UNIX*: sudo gem install aeonscope-enhanced_select
23
+ * *Windows*: gem install aeonscope-enhanced_select
24
+
25
+ Update your environment.rb file to include the new gem:
26
+
27
+ * config.gem "enhanced_select"
28
+
29
+ = Usage
30
+
31
+ Simply use "enhanced_select" instead of the Rails "select" helper method in your views:
32
+
33
+ <% form_for @city do |form| %>
34
+ <div><%= form.enhanced_select :id, @schools, :include_blank => "-select-" %></div>
35
+ <% end %>
36
+
37
+ This will then yield the following results:
38
+
39
+ <select id="<auto filled>" name="<auto filled>">
40
+ <option value="">-select-</option>
41
+ <option value="1">Goldbugs</option>
42
+ <option value="2">Falcons</option>
43
+ </select>
44
+
45
+ While the above is a simple example, lets look at a more interesting case. Assuming we are still dealing with cities, lets say
46
+ we want cities but we want each city to have CSS classes associated with so that we might be able to attach jQuery behaviors to
47
+ each option as it is selected (that and/or maybe we want to style each option). Here is how things might play out:
48
+
49
+ <b>Model Code</b>
50
+
51
+ class School < ActiveRecord::Base
52
+ def kind
53
+ [special? ? "special" : nil, restricted? ? "restricted" : nil].compact.join(' ')
54
+ end
55
+ end
56
+
57
+ <b>Controller Code</b>
58
+
59
+ class CityController < ApplicationController
60
+ before_filter :form_data, :only => [:new, :create, :edit, :update]
61
+
62
+ private
63
+
64
+ def form_data
65
+ @schools = School.all.collect {|school| {:value => school.id, :class => school.kind, :text => school.label}}
66
+ end
67
+ end
68
+
69
+ <b>View Code</b>
70
+
71
+ <% form_for @city do |form| %>
72
+ <div><%= form.enhanced_select :id, @schools, :include_blank => "-select-" %></div>
73
+ <% end %>
74
+
75
+ This would then yield the following results:
76
+
77
+ <select id="<auto filled>" name="<auto filled>">
78
+ <option value="">-select-</option>
79
+ <option value="1" class="restricted">Goldbugs</option>
80
+ <option value="2" class="special">Falcons</option>
81
+ </select>
82
+
83
+ The possibilities are up to you as you can definitely build a hash array of options with more attributes than value, class, and text
84
+ as shown above. The best part is that you have total control over how select options are built for your views.
85
+
86
+ = Contact/Feedback/Issues
87
+
88
+ * {Berserk Technologies}[http://www.berserktech.com] - Company web site.
89
+ * Aeonscope[http://www.aeonscope.net] - Personal web site.
90
+ * Twitter[http://www.twitter.com/Aeonscope] - Short bursts of insight and/or noise.
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "enhanced_select"
8
+ gem.summary = "An enhanced select helper for forms that allows you to use the full HTML spec for select option elements."
9
+ gem.description = "Enhances the default capabilities found with the Rails select helper. Instead of being able to supply just the value, text, and selected/disabled attributes, you can use all valid HTML attributes for select option elements."
10
+ gem.authors = ["Brooke Kuhlmann"]
11
+ gem.email = "aeonscope@gmail.com"
12
+ gem.homepage = "http://github.com/aeonscope/enhanced_select"
13
+ gem.required_ruby_version = ">= 1.8.6"
14
+ gem.add_dependency "rails", ">= 2.3.2"
15
+ gem.rdoc_options << "CHANGELOG.rdoc"
16
+ gem.files = FileList["[A-Z]*", "{bin,lib,generators,rails_generators,test,spec}/**/*"]
17
+ end
18
+ rescue LoadError
19
+ puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
20
+ end
21
+
22
+ require 'rake/testtask'
23
+ Rake::TestTask.new(:test) do |test|
24
+ test.libs << 'lib' << 'test'
25
+ test.pattern = 'test/**/*_test.rb'
26
+ test.verbose = true
27
+ end
28
+
29
+ begin
30
+ require 'rcov/rcovtask'
31
+ Rcov::RcovTask.new do |test|
32
+ test.libs << 'test'
33
+ test.pattern = 'test/**/*_test.rb'
34
+ test.verbose = true
35
+ end
36
+ rescue LoadError
37
+ task :rcov do
38
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
39
+ end
40
+ end
41
+
42
+ task :default => :test
43
+
44
+ require 'rake/rdoctask'
45
+ Rake::RDocTask.new do |rdoc|
46
+ if File.exist?('VERSION.yml')
47
+ config = YAML.load(File.read('VERSION.yml'))
48
+ version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
49
+ else
50
+ version = ""
51
+ end
52
+
53
+ rdoc.rdoc_dir = 'rdoc'
54
+ rdoc.title = "enhanced_select #{version}"
55
+ rdoc.rdoc_files.include('README*')
56
+ rdoc.rdoc_files.include('lib/**/*.rb')
57
+ end
58
+
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 0
4
+ :patch: 0
@@ -0,0 +1,56 @@
1
+ # Enhanced Select
2
+ module ActionView
3
+ module Helpers
4
+ module FormOptionsHelper
5
+ def enhanced_select object, method, choices, options = {}, html_options = {}
6
+ InstanceTag.new(object, method, self, options.delete(:object)).to_enhanced_select_tag(choices, options, html_options)
7
+ end
8
+
9
+ # Accepts a hash array of options and returns a string of option tags. Each option hash is expected to be comprised of valid
10
+ # HTML option attributes (http://www.w3schools.com/tags/tag_option.asp) where the hash key is the HTML attribute name and the hash
11
+ # value is the attribute value. If +selected+ is specified, then the matching option will get the selected.
12
+ #
13
+ # Examples (call, result):
14
+ # enhanced_options_for_select [{:value => 1, :text => "New York"}, {:value => 2, :text => "Denver"}]
15
+ # <option value="1">New York</option>\n<option value="2">Denver</option>
16
+ #
17
+ # enhanced_options_for_select [{:value => "bmw", :text => "BMW"}, {:value => "tesla", :text => "Tesla Motors"}], "tesla"
18
+ # <option value="bmw">BMW</option>\n<option value="tesla" selected="selected">Tesla Motors</option>
19
+ #
20
+ # NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag.
21
+ def enhanced_options_for_select options = [], selected = nil
22
+ # Ensure option selections are unique.
23
+ options.each {|option| option.delete :selected}
24
+ # Generate the HTML code.
25
+ options.map do |option|
26
+ option[:selected] = "selected" if option[:value] == selected
27
+ html = "<option"
28
+ option.each_pair {|key, value| html << build_attribute(key, value)}
29
+ html << ">#{html_escape option[:text].to_s}</option>\n"
30
+ end.to_s
31
+ end
32
+
33
+ private
34
+
35
+ # Convenience method for assembling attributes based on a key and value.
36
+ def build_attribute key, value
37
+ key == :text ? '' : " #{key.to_s}=\"#{html_escape value.to_s}\""
38
+ end
39
+ end
40
+
41
+ class InstanceTag
42
+ def to_enhanced_select_tag choices, options, html_options
43
+ html_options = html_options.stringify_keys
44
+ add_default_name_and_id(html_options)
45
+ value = value(object)
46
+ content_tag "select", add_options(enhanced_options_for_select(choices, value), options, value), html_options
47
+ end
48
+ end
49
+
50
+ class FormBuilder
51
+ def enhanced_select method, choices, options = {}, html_options = {}
52
+ @template.enhanced_select @object_name, method, choices, objectify_options(options), @default_options.merge(html_options)
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,6 @@
1
+ require 'test_helper'
2
+
3
+ class EnhancedSelectTest < Test::Unit::TestCase
4
+ should "be testable" do
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'enhanced_select'
8
+
9
+ class Test::Unit::TestCase
10
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aeonscope-enhanced_select
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brooke Kuhlmann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-03 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rails
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.2
24
+ version:
25
+ description: Enhances the default capabilities found with the Rails select helper. Instead of being able to supply just the value, text, and selected/disabled attributes, you can use all valid HTML attributes for select option elements.
26
+ email: aeonscope@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - LICENSE.rdoc
33
+ - README.rdoc
34
+ files:
35
+ - CHANGELOG.rdoc
36
+ - LICENSE.rdoc
37
+ - README.rdoc
38
+ - Rakefile
39
+ - VERSION.yml
40
+ - lib/enhanced_select.rb
41
+ - test/enhanced_select_test.rb
42
+ - test/test_helper.rb
43
+ has_rdoc: true
44
+ homepage: http://github.com/aeonscope/enhanced_select
45
+ post_install_message:
46
+ rdoc_options:
47
+ - --charset=UTF-8
48
+ - CHANGELOG.rdoc
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: 1.8.6
56
+ version:
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ requirements: []
64
+
65
+ rubyforge_project:
66
+ rubygems_version: 1.2.0
67
+ signing_key:
68
+ specification_version: 3
69
+ summary: An enhanced select helper for forms that allows you to use the full HTML spec for select option elements.
70
+ test_files:
71
+ - test/enhanced_select_test.rb
72
+ - test/test_helper.rb