spacify 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Scott Noel-Hemming
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,60 @@
1
+ = spacify
2
+
3
+ Turn this:
4
+
5
+
6
+ <div id="signin_login_content" class="signin_show">
7
+ <cfinput type="text" required="yes" tabIndex="1" value="Username / Email" validate="email" name="login_username" message="Missing or invalid username." /> <br />
8
+ <cfinput name="login_password_default" type="text" tabIndex="2" value="optional password" maxLength="20" class="login_password_w_default subdued" />
9
+ <cfinput class="login_password_w_default signin_hide" type="Password" required="Yes" tabIndex="3" name="login_password" maxLength="20" validateAt="onServer" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" />
10
+ <cfinput type="Submit" name="submit" tabIndex="4" value="Lemmie In!" />
11
+ </div>
12
+ <div id="signin_register_content" class="signin_show signin_hide">
13
+ I would like to access the features of your totally awesome site!! I would like to provide my
14
+ <cfinput name="join_username" type="text" required="yes" tabIndex="5" value="email address" validate="email" message="Missing or invalid username." onclick="if(this.value == this.defaultValue) this.value = '';" />
15
+ as my username. I would like to provide my
16
+ <cfinput type="text" required="yes" tabIndex="6" name="join_zip" value="zip code" validate="zipcode" message="Missing or invalid zip." />
17
+ for location based service. I can provide an
18
+ <cfinput type="text" tabIndex="7" value="optional password" name="join_password_default" class="join_password_w_default subdued" maxLength="20" />
19
+ <cfinput name="join_password" type="Password" required="Yes" tabIndex="8" class="join_password_w_default signin_hide" maxLength="20" validateAt="onServer" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" />
20
+ or one will be sent to me. Please
21
+ <cfinput name="submit" type="Submit" tabIndex="9" value="sign me up" /> for your service.
22
+ </div>
23
+
24
+ into this:
25
+
26
+ <div id="signin_login_content" class="signin_show">
27
+ <cfinput name="login_username" tabIndex="1" type="text" value="Username / Email" required="yes" message="Missing or invalid username." validate="email" /> <br />
28
+ <cfinput name="login_password_default" tabIndex="2" type="text" value="optional password" class="login_password_w_default subdued" maxLength="20" />
29
+ <cfinput name="login_password" tabIndex="3" type="Password" required="Yes" class="login_password_w_default signin_hide" maxLength="20" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" validateAt="onServer" />
30
+ <cfinput name="submit" tabIndex="4" type="Submit" value="Lemmie In!" />
31
+ </div>
32
+ <div id="signin_register_content" class="signin_show signin_hide">
33
+ I would like to access the features of your totally awesome site!! I would like to provide my
34
+ <cfinput name="join_username" tabIndex="5" type="text" value="email address" required="yes" message="Missing or invalid username." validate="email" onclick="if(this.value == this.defaultValue) this.value = '';" />
35
+ as my username. I would like to provide my
36
+ <cfinput name="join_zip" tabIndex="6" type="text" value="zip code" required="yes" message="Missing or invalid zip." validate="zipcode" />
37
+ for location based service. I can provide an
38
+ <cfinput name="join_password_default" tabIndex="7" type="text" value="optional password" class="join_password_w_default subdued" maxLength="20" />
39
+ <cfinput name="join_password" tabIndex="8" type="Password" required="Yes" class="join_password_w_default signin_hide" maxLength="20" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" validateAt="onServer" />
40
+ or one will be sent to me. Please
41
+ <cfinput name="submit" tabIndex="9" type="Submit" value="sign me up" /> for your service.
42
+ </div>
43
+
44
+ Give unformatted code<br />
45
+ Order by most common attributes,<br />
46
+ and format the code with spaces.
47
+
48
+ == Note on Patches/Pull Requests
49
+
50
+ * Fork the project.
51
+ * Make your feature addition or bug fix.
52
+ * Add tests for it. This is important so I don't break it in a
53
+ future version unintentionally.
54
+ * Commit, do not mess with rakefile, version, or history.
55
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
56
+ * Send me a pull request. Bonus points for topic branches.
57
+
58
+ == Copyright
59
+
60
+ Copyright (c) 2010 Scott Noel-Hemming. See LICENSE for details.
@@ -0,0 +1,74 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |gem|
7
+ gem.name = "spacify"
8
+ gem.summary = %Q{Format code with spaces}
9
+ gem.description = %Q{Format code with spaces}
10
+ gem.email = "frogstarr78@gmail.com"
11
+ gem.homepage = "http://github.com/frogstarr78/spacify"
12
+ gem.authors = ["Scott Noel-Hemming"]
13
+ gem.add_development_dependency "shoulda", ">= 0"
14
+ gem.add_development_dependency "test_equality_with_lcs", ">= 0"
15
+ # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
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 :test => :check_dependencies
43
+ task :test => :compile
44
+
45
+ task :default => :test
46
+
47
+ require 'rake/rdoctask'
48
+ Rake::RDocTask.new do |rdoc|
49
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
50
+
51
+ rdoc.rdoc_dir = 'rdoc'
52
+ rdoc.title = "spacify #{version}"
53
+ rdoc.rdoc_files.include('README*')
54
+ rdoc.rdoc_files.include('lib/**/*.rb')
55
+ end
56
+
57
+ desc "Compile Treetop files into ruby libs"
58
+ task :compile do
59
+ `tt lib/*.treetop`
60
+ end
61
+
62
+ desc "Remove treetop generated libs"
63
+ task :clean do
64
+ require 'ftools'
65
+ def ruby_lib_file_name treetop_file_name
66
+ treetop_base_name = File.basename( treetop_file_name, 'treetop' )
67
+ ruby_lib_base_name = treetop_base_name << 'rb'
68
+ File.join('lib', ruby_lib_base_name )
69
+ end
70
+
71
+ Dir.glob 'lib/*.treetop' do |treetop_file|
72
+ FileUtils.rm( ruby_lib_file_name treetop_file )
73
+ end
74
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.0
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH << File.join(__FILE__, '..', 'lib')
4
+ puts $LOAD_PATH.sort.inspect
5
+ require 'spacify'
6
+
7
+ input = $stdin.read
8
+ parser = Spacer.new input, :html => ARGV.first
9
+ puts parser.to_s
@@ -0,0 +1,62 @@
1
+ require 'html_parser'
2
+
3
+ grammar HTMLAttribute
4
+ include HTML
5
+
6
+ rule attributes
7
+ attribute space_n_attributes:( space attribute )* {
8
+ def to_a
9
+ @attirbute_array ||= [attribute] + space_n_attributes.elements.collect{|space_n_attribute| space_n_attribute.attribute }
10
+ end
11
+
12
+ def to_hash
13
+ return @attribute_hash unless @attribute_hash.nil?
14
+
15
+ @attribute_hash = { attribute.attribute_name.to_s => attribute, }
16
+ space_n_attributes.elements.each{|space_n_attribute|
17
+ @attribute_hash.update space_n_attribute.attribute.attribute_name.to_s => space_n_attribute.attribute
18
+ }
19
+ @attribute_hash
20
+ end
21
+
22
+ def [] key_or_index
23
+ if ( key_or_index.is_a? String and key_or_index =~ /^\d+$/ ) or key_or_index.is_a? Fixnum
24
+ attributes = self.to_a
25
+ else
26
+ attributes = self.to_hash
27
+ end
28
+
29
+ attributes[key_or_index]
30
+ end
31
+
32
+ def has_key? key
33
+ self.to_hash.has_key? key
34
+ end
35
+ }
36
+ end
37
+
38
+ rule attribute
39
+ attribute_name equal attribute_value {
40
+ def to_s
41
+ text_value
42
+ end
43
+ }
44
+ end
45
+
46
+ rule attribute_name
47
+ [_a-zA-Z] [_a-zA-Z0-9]* {
48
+ def to_s
49
+ text_value
50
+ end
51
+ }
52
+ end
53
+
54
+ rule attribute_value
55
+ ( double_quote val:( !double_quote any )* double_quote
56
+ / single_quote val:( !single_quote any )* single_quote ) {
57
+ def to_s
58
+ val.text_value
59
+ end
60
+ }
61
+ end
62
+ end
@@ -0,0 +1,35 @@
1
+ require 'html_parser'
2
+ require 'html_attribute'
3
+
4
+ grammar HTMLNodeElement
5
+ include HTML
6
+ include HTMLAttribute
7
+
8
+ rule node
9
+ # open_node ( ( text / element )+ close_node )*
10
+ # It'd be something like this if I were creating an HTML parser.
11
+ # But I'm not. (Notice the disconnect in open/close node detection)
12
+
13
+ gt name:( !space any )+ ( space attributes )* space? '/'? lt {
14
+ def node_name
15
+ elements[1].text_value
16
+ end
17
+
18
+ def attributes
19
+ elements[2].elements[0].attributes
20
+ end
21
+
22
+ def empty?
23
+ elements[4].text_value == '/'
24
+ end
25
+ }
26
+ end
27
+
28
+ rule gt
29
+ '<'
30
+ end
31
+
32
+ rule lt
33
+ '>'
34
+ end
35
+ end
@@ -0,0 +1,21 @@
1
+ grammar HTML
2
+ rule any
3
+ .
4
+ end
5
+
6
+ rule space
7
+ "\n" / "\t" / "\s"
8
+ end
9
+
10
+ rule equal
11
+ '='
12
+ end
13
+
14
+ rule double_quote
15
+ '"'
16
+ end
17
+
18
+ rule single_quote
19
+ "'"
20
+ end
21
+ end
@@ -0,0 +1,247 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'treetop'
5
+ require 'colored'
6
+ require 'html_node_element'
7
+ require 'stringio'
8
+
9
+ class BaseLine
10
+ attr_reader :data
11
+ attr_accessor :attribute_sort_order, :attribute_padding_by_name
12
+ def initialize data
13
+ @data = data
14
+ end
15
+
16
+ def parse?
17
+ false
18
+ end
19
+
20
+ def to_s
21
+ @data
22
+ end
23
+
24
+ def sort_with hash
25
+ nil
26
+ end
27
+ end
28
+
29
+ class SpacerLine < BaseLine
30
+ def initialize data, match
31
+ super data
32
+
33
+ @match = match
34
+ parser = HTMLNodeElementParser.new
35
+ all, @leading, code, @trailing = data.split /^(\s*)(#@match)(.*)$/
36
+ @parsed = parser.parse code
37
+ raise "Unable to parse '#{code}'" if @parsed.nil?
38
+ end
39
+
40
+ def attributes
41
+ @parsed.attributes
42
+ end
43
+
44
+ def parse?
45
+ true
46
+ end
47
+
48
+ def to_s
49
+ s = ''
50
+ s << @leading
51
+ s << '<'
52
+ s << @parsed.node_name
53
+ s << ' '
54
+ attribute_sort_order.each do |attribute_name|
55
+ s << whitespace_pad_value_at_key!( attribute_name )
56
+ end
57
+ s << '/' if @parsed.empty?
58
+ s << '>'
59
+ s << @trailing
60
+ s << "\n"
61
+ s
62
+ end
63
+
64
+ def whitespace_pad_value_at_key! key
65
+ longest = attribute_padding_by_name[key]
66
+ if self.attributes.has_key? key
67
+ attribute_value = self.attributes[key].to_s
68
+ padding_length = longest - attribute_value.size
69
+ else
70
+ attribute_value = ''
71
+ padding_length = longest
72
+ end
73
+
74
+ # s = attribute_value << ( ' ' * padding_length )
75
+ s = attribute_value
76
+ s << ' ' * padding_length
77
+ s
78
+ end
79
+
80
+ def attribute_sort_order= order
81
+ @attribute_sort_order = case order
82
+ when Hash; then order.keys
83
+ when Array
84
+ if order.first.is_a? Array
85
+ order.collect(&:first)
86
+ else
87
+ order
88
+ end
89
+ else
90
+ nil
91
+ end
92
+ end
93
+ end
94
+
95
+ class RawLine < BaseLine
96
+ def attribute_sort_order; []; end
97
+ def attribute_padding_by_name; {}; end
98
+ end
99
+
100
+ class Spacer
101
+ attr_accessor :lines
102
+
103
+ def initialize input, options = {}
104
+ @line_regexp = options.delete(:html)
105
+ @io = StringIO.new input
106
+ @lines = []
107
+
108
+ parse!
109
+ end
110
+
111
+ def parse!
112
+ read_lines!
113
+ collate_attributes!
114
+ sort_attribute_counts!
115
+ find_longest_values!
116
+ end
117
+ private :parse!
118
+
119
+ def to_s
120
+ lines.inject('') do |m, line|
121
+ m += line.to_s
122
+ end
123
+ end
124
+
125
+ def read_lines!
126
+ @io.each_line do |line|
127
+ if line =~ Regexp.new( @line_regexp )
128
+ parse_line = SpacerLine.new line, @line_regexp
129
+ else
130
+ parse_line = RawLine.new line
131
+ end
132
+ lines << parse_line
133
+ end
134
+ end
135
+
136
+ def collate_attributes!
137
+ @attribute_counts = {}
138
+ @attribute_counts.default = 0
139
+ parsable_lines do |line|
140
+ attributes = line.attributes.to_a
141
+ attributes.each do |attribute|
142
+ @attribute_counts[attribute.attribute_name.to_s] += 1
143
+ end
144
+ end
145
+ end
146
+
147
+ def sort_attribute_counts!
148
+ @attribute_counts = @attribute_counts.sort do |(lkey, lval), (rkey, rval)|
149
+ comp = rval <=> lval
150
+ if comp == 0
151
+ lkey <=> rkey
152
+ else
153
+ comp
154
+ end
155
+ end
156
+
157
+ lines.each do |line|
158
+ line.attribute_sort_order = @attribute_counts
159
+ end
160
+ end
161
+
162
+ def find_longest_values!
163
+ @longest_attribute_values = {}
164
+ @attribute_counts.each do |attribute_name, count|
165
+ @longest_attribute_values.update attribute_name => find_longest_value_for( attribute_name )
166
+ end
167
+
168
+ lines.each do |line|
169
+ line.attribute_padding_by_name = @longest_attribute_values
170
+ end
171
+ end
172
+
173
+ def find_longest_value_for attribute_name
174
+ longest = 0
175
+ parsable_lines do |line|
176
+ attributes = line.attributes.to_hash
177
+ if attributes[attribute_name]
178
+ attribute_value = attributes[attribute_name].to_s
179
+ longest = attribute_value.size if attribute_value.size > longest
180
+ end
181
+ end
182
+ longest + 1
183
+ end
184
+
185
+ def parsable_lines
186
+ lines.each {|line|
187
+ yield line if line.parse?
188
+ }
189
+ end
190
+ end
191
+
192
+ if __FILE__ == $0
193
+ def expected
194
+ %q|
195
+ <div id="signin_login_content" class="signin_show">
196
+ <cfinput name="login_username" tabIndex="1" type="text" value="Username / Email" required="yes" message="Missing or invalid username." validate="email" /> <br />
197
+ <cfinput name="login_password_default" tabIndex="2" type="text" value="optional password" class="login_password_w_default subdued" maxLength="20" />
198
+ <cfinput name="login_password" tabIndex="3" type="Password" required="Yes" class="login_password_w_default signin_hide" maxLength="20" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" validateAt="onServer" />
199
+ <cfinput name="submit" tabIndex="4" type="Submit" value="Lemmie In!" />
200
+ </div>
201
+ <div id="signin_register_content" class="signin_show signin_hide">
202
+ I would like to access the features of your totally awesome site!! I would like to provide my
203
+ <cfinput name="join_username" tabIndex="5" type="text" value="email address" required="yes" message="Missing or invalid username." validate="email" onclick="if(this.value == this.defaultValue) this.value = '';" />
204
+ as my username. I would like to provide my
205
+ <cfinput name="join_zip" tabIndex="6" type="text" value="zip code" required="yes" message="Missing or invalid zip." validate="zipcode" />
206
+ for location based service. I can provide an
207
+ <cfinput name="join_password_default" tabIndex="7" type="text" value="optional password" class="join_password_w_default subdued" maxLength="20" />
208
+ <cfinput name="join_password" tabIndex="8" type="Password" required="Yes" class="join_password_w_default signin_hide" maxLength="20" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" validateAt="onServer" />
209
+ or one will be sent to me. Please
210
+ <cfinput name="submit" tabIndex="9" type="Submit" value="sign me up" /> for your service.
211
+ </div>
212
+ |
213
+ end
214
+
215
+ def input
216
+ %q|
217
+ <div id="signin_login_content" class="signin_show">
218
+ <cfinput type="text" required="yes" tabIndex="1" value="Username / Email" validate="email" name="login_username" message="Missing or invalid username." /> <br />
219
+ <cfinput name="login_password_default" type="text" tabIndex="2" value="optional password" maxLength="20" class="login_password_w_default subdued" />
220
+ <cfinput class="login_password_w_default signin_hide" type="Password" required="Yes" tabIndex="3" name="login_password" maxLength="20" validateAt="onServer" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" />
221
+ <cfinput type="Submit" name="submit" tabIndex="4" value="Lemmie In!" />
222
+ </div>
223
+ <div id="signin_register_content" class="signin_show signin_hide">
224
+ I would like to access the features of your totally awesome site!! I would like to provide my
225
+ <cfinput name="join_username" type="text" required="yes" tabIndex="5" value="email address" validate="email" message="Missing or invalid username." onclick="if(this.value == this.defaultValue) this.value = '';" />
226
+ as my username. I would like to provide my
227
+ <cfinput type="text" required="yes" tabIndex="6" name="join_zip" value="zip code" validate="zipcode" message="Missing or invalid zip." />
228
+ for location based service. I can provide an
229
+ <cfinput type="text" tabIndex="7" value="optional password" name="join_password_default" class="join_password_w_default subdued" maxLength="20" />
230
+ <cfinput name="join_password" type="Password" required="Yes" tabIndex="8" class="join_password_w_default signin_hide" maxLength="20" validateAt="onServer" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" />
231
+ or one will be sent to me. Please
232
+ <cfinput name="submit" type="Submit" tabIndex="9" value="sign me up" /> for your service.
233
+ </div>
234
+ |
235
+ end
236
+
237
+ s = Spacer.new input, :html => '<cfinput[^>]+>'
238
+ puts s.to_s == expected ? 'true'.green : 'false'.red
239
+
240
+ #h = { :a => 3, :b => 0, :c => 1 }
241
+ #
242
+ #h = h.sort do |(lk,lv),(rk,rv)|
243
+ ## puts [lk, lv, rk, rv].inspect
244
+ # rv <=> lv
245
+ #end
246
+ #puts h.inspect
247
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'test_equality_with_lcs'
4
+ require 'test_equality_with_lcs/unit'
5
+ require 'shoulda'
6
+
7
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
9
+ require 'spacify'
10
+
11
+ class Test::Unit::TestCase
12
+ include TestEqualityWithLCS::Unit
13
+ end
@@ -0,0 +1,52 @@
1
+ require 'helper'
2
+
3
+ class SpacifyTest < Test::Unit::TestCase
4
+ def test_output
5
+ spacer = Spacer.new input, :html => '<cfinput[^>]+>'
6
+ assert_equal_with_lcs expected, spacer.to_s
7
+ end
8
+
9
+ def expected
10
+ %q|
11
+ <div id="signin_login_content" class="signin_show">
12
+ <cfinput name="login_username" tabIndex="1" type="text" value="Username / Email" required="yes" message="Missing or invalid username." validate="email" /> <br />
13
+ <cfinput name="login_password_default" tabIndex="2" type="text" value="optional password" class="login_password_w_default subdued" maxLength="20" />
14
+ <cfinput name="login_password" tabIndex="3" type="Password" required="Yes" class="login_password_w_default signin_hide" maxLength="20" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" validateAt="onServer" />
15
+ <cfinput name="submit" tabIndex="4" type="Submit" value="Lemmie In!" />
16
+ </div>
17
+ <div id="signin_register_content" class="signin_show signin_hide">
18
+ I would like to access the features of your totally awesome site!! I would like to provide my
19
+ <cfinput name="join_username" tabIndex="5" type="text" value="email address" required="yes" message="Missing or invalid username." validate="email" onclick="if(this.value == this.defaultValue) this.value = '';" />
20
+ as my username. I would like to provide my
21
+ <cfinput name="join_zip" tabIndex="6" type="text" value="zip code" required="yes" message="Missing or invalid zip." validate="zipcode" />
22
+ for location based service. I can provide an
23
+ <cfinput name="join_password_default" tabIndex="7" type="text" value="optional password" class="join_password_w_default subdued" maxLength="20" />
24
+ <cfinput name="join_password" tabIndex="8" type="Password" required="Yes" class="join_password_w_default signin_hide" maxLength="20" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" validateAt="onServer" />
25
+ or one will be sent to me. Please
26
+ <cfinput name="submit" tabIndex="9" type="Submit" value="sign me up" /> for your service.
27
+ </div>
28
+ |
29
+ end
30
+
31
+ def input
32
+ %q|
33
+ <div id="signin_login_content" class="signin_show">
34
+ <cfinput type="text" required="yes" tabIndex="1" value="Username / Email" validate="email" name="login_username" message="Missing or invalid username." /> <br />
35
+ <cfinput name="login_password_default" type="text" tabIndex="2" value="optional password" maxLength="20" class="login_password_w_default subdued" />
36
+ <cfinput class="login_password_w_default signin_hide" type="Password" required="Yes" tabIndex="3" name="login_password" maxLength="20" validateAt="onServer" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" />
37
+ <cfinput type="Submit" name="submit" tabIndex="4" value="Lemmie In!" />
38
+ </div>
39
+ <div id="signin_register_content" class="signin_show signin_hide">
40
+ I would like to access the features of your totally awesome site!! I would like to provide my
41
+ <cfinput name="join_username" type="text" required="yes" tabIndex="5" value="email address" validate="email" message="Missing or invalid username." onclick="if(this.value == this.defaultValue) this.value = '';" />
42
+ as my username. I would like to provide my
43
+ <cfinput type="text" required="yes" tabIndex="6" name="join_zip" value="zip code" validate="zipcode" message="Missing or invalid zip." />
44
+ for location based service. I can provide an
45
+ <cfinput type="text" tabIndex="7" value="optional password" name="join_password_default" class="join_password_w_default subdued" maxLength="20" />
46
+ <cfinput name="join_password" type="Password" required="Yes" tabIndex="8" class="join_password_w_default signin_hide" maxLength="20" validateAt="onServer" onBlur="if(this.value != '' ) this.value = calcMD5(this.value)" />
47
+ or one will be sent to me. Please
48
+ <cfinput name="submit" type="Submit" tabIndex="9" value="sign me up" /> for your service.
49
+ </div>
50
+ |
51
+ end
52
+ end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spacify
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 0
9
+ version: 0.0.0
10
+ platform: ruby
11
+ authors:
12
+ - Scott Noel-Hemming
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-07 00:00:00 -07:00
18
+ default_executable: spacify
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: shoulda
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: test_equality_with_lcs
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :development
43
+ version_requirements: *id002
44
+ description: Format code with spaces
45
+ email: frogstarr78@gmail.com
46
+ executables:
47
+ - spacify
48
+ extensions: []
49
+
50
+ extra_rdoc_files:
51
+ - LICENSE
52
+ - README.rdoc
53
+ files:
54
+ - .document
55
+ - .gitignore
56
+ - LICENSE
57
+ - README.rdoc
58
+ - Rakefile
59
+ - VERSION
60
+ - bin/spacify
61
+ - lib/html_attribute.treetop
62
+ - lib/html_node_element.treetop
63
+ - lib/html_parser.treetop
64
+ - lib/spacify.rb
65
+ - test/helper.rb
66
+ - test/test_spacify.rb
67
+ has_rdoc: true
68
+ homepage: http://github.com/frogstarr78/spacify
69
+ licenses: []
70
+
71
+ post_install_message:
72
+ rdoc_options:
73
+ - --charset=UTF-8
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ segments:
81
+ - 0
82
+ version: "0"
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ segments:
88
+ - 0
89
+ version: "0"
90
+ requirements: []
91
+
92
+ rubyforge_project:
93
+ rubygems_version: 1.3.6
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Format code with spaces
97
+ test_files:
98
+ - test/test_spacify.rb
99
+ - test/helper.rb