rubyscriptwriter 0.0.1
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/README +27 -0
- data/lib/rubyscriptwriter.rb +70 -0
- data/lib/rubyspecwriter.rb +21 -0
- data/spec/rubyscriptwriter_spec.rb +100 -0
- data/spec/rubyspecwriter_spec.rb +30 -0
- metadata +66 -0
data/README
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
= RubyScriptWriter
|
2
|
+
|
3
|
+
RubyScriptWriter helps programatically create new ruby scripts:
|
4
|
+
|
5
|
+
r = RubyScriptWriter.new
|
6
|
+
r.put_class "One" do
|
7
|
+
r.put_method "a", "arg1","arg2" do
|
8
|
+
r.puts "return arg1 + arg2"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
puts r
|
12
|
+
|
13
|
+
class One
|
14
|
+
def a(arg1,arg2)
|
15
|
+
return arg1 + arg2
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
It can be installed as a gem:
|
21
|
+
gem install rubyscriptwriter
|
22
|
+
|
23
|
+
This software is (c) 2010 Green on Black Ltd and distributed under the open source MIT[http://www.opensource.org/licenses/mit-license.php] licence. (See LICENCE for the wording).
|
24
|
+
|
25
|
+
If you like this code, employ us: http://www.greenonblack.com
|
26
|
+
|
27
|
+
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
class RubyScriptWriter
|
4
|
+
attr_reader :r
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@r = StringIO.new
|
8
|
+
@tab_count = 0
|
9
|
+
end
|
10
|
+
|
11
|
+
def indent
|
12
|
+
@tab_count += 1
|
13
|
+
end
|
14
|
+
|
15
|
+
def outdent
|
16
|
+
@tab_count -= 1
|
17
|
+
end
|
18
|
+
|
19
|
+
def put_class(class_name,superclass_name = nil)
|
20
|
+
puts "class ", class_name, superclass_name && " < ", superclass_name
|
21
|
+
indent
|
22
|
+
yield self
|
23
|
+
outdent
|
24
|
+
puts "end"
|
25
|
+
puts
|
26
|
+
end
|
27
|
+
|
28
|
+
def put_simple_method(method_name,*method_code)
|
29
|
+
puts "def ", method_name,"; ",*method_code.join,"; end"
|
30
|
+
end
|
31
|
+
|
32
|
+
def put_method(method_name,*arguments)
|
33
|
+
if arguments.empty?
|
34
|
+
puts "def ", method_name
|
35
|
+
else
|
36
|
+
puts "def ", method_name, "(", arguments.join(','), ")"
|
37
|
+
end
|
38
|
+
indent
|
39
|
+
yield self
|
40
|
+
outdent
|
41
|
+
puts "end"
|
42
|
+
puts
|
43
|
+
end
|
44
|
+
|
45
|
+
def put_coding(coding = 'utf-8')
|
46
|
+
comment 'coding: ', coding
|
47
|
+
end
|
48
|
+
|
49
|
+
def comment(*args)
|
50
|
+
puts "# ", *args
|
51
|
+
end
|
52
|
+
|
53
|
+
def puts(*args)
|
54
|
+
if args.empty?
|
55
|
+
r.puts
|
56
|
+
return self
|
57
|
+
end
|
58
|
+
args.compact!
|
59
|
+
r.puts tabs + args.join unless args.empty?
|
60
|
+
self
|
61
|
+
end
|
62
|
+
|
63
|
+
def tabs
|
64
|
+
" " * @tab_count
|
65
|
+
end
|
66
|
+
|
67
|
+
def to_s
|
68
|
+
r.string
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rubyscriptwriter'
|
2
|
+
|
3
|
+
class RubySpecWriter < RubyScriptWriter
|
4
|
+
def put_description(thing_being_described)
|
5
|
+
puts "describe ", thing_being_described, " do"
|
6
|
+
indent
|
7
|
+
yield self
|
8
|
+
outdent
|
9
|
+
puts "end"
|
10
|
+
puts
|
11
|
+
end
|
12
|
+
|
13
|
+
def put_spec(specficiation_in_words)
|
14
|
+
puts "it '",specficiation_in_words.tr("'",""), "' do"
|
15
|
+
indent
|
16
|
+
yield self
|
17
|
+
outdent
|
18
|
+
puts "end"
|
19
|
+
puts
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
|
+
require 'rubyscriptwriter'
|
3
|
+
|
4
|
+
describe RubyScriptWriter do
|
5
|
+
|
6
|
+
it "#initialize should create an empty string by default" do
|
7
|
+
r = RubyScriptWriter.new
|
8
|
+
r.to_s.should == ""
|
9
|
+
end
|
10
|
+
|
11
|
+
it "#puts should allow any text to be put, with newlines added automatically" do
|
12
|
+
r = RubyScriptWriter.new
|
13
|
+
r.puts "# Hello world"
|
14
|
+
r.puts "# again"
|
15
|
+
r.to_s.should == "# Hello world\n# again\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "#puts doesn't put anything if a nil value is supplied" do
|
19
|
+
r = RubyScriptWriter.new
|
20
|
+
r.puts nil
|
21
|
+
r.to_s.should == ""
|
22
|
+
end
|
23
|
+
|
24
|
+
it "#puts puts a new line if no argument is supplied" do
|
25
|
+
r = RubyScriptWriter.new
|
26
|
+
r.puts
|
27
|
+
r.to_s.should == "\n"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "#puts should handle several arguments, concatenating them onto the same line" do
|
31
|
+
r = RubyScriptWriter.new
|
32
|
+
r.puts "one", " ", 2, 3.0
|
33
|
+
r.to_s.should == "one 23.0\n"
|
34
|
+
end
|
35
|
+
|
36
|
+
it "#indent should add two spaces to the start a line for every time indent is called" do
|
37
|
+
r = RubyScriptWriter.new
|
38
|
+
r.puts "no indent"
|
39
|
+
r.indent
|
40
|
+
r.puts "one indent"
|
41
|
+
r.indent
|
42
|
+
r.puts "two indents"
|
43
|
+
r.to_s.should == "no indent\n one indent\n two indents\n"
|
44
|
+
end
|
45
|
+
|
46
|
+
it "#outdent should reverse the effect of an indent every time outdent is called" do
|
47
|
+
r = RubyScriptWriter.new
|
48
|
+
r.puts "no indent"
|
49
|
+
r.indent
|
50
|
+
r.outdent
|
51
|
+
r.puts "still no indent"
|
52
|
+
r.indent
|
53
|
+
r.indent
|
54
|
+
r.outdent
|
55
|
+
r.puts "one indent"
|
56
|
+
r.to_s.should == "no indent\nstill no indent\n one indent\n"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "#comment adds a # to the start of the given line" do
|
60
|
+
r = RubyScriptWriter.new
|
61
|
+
r.comment "This is a comment"
|
62
|
+
r.to_s.should == "# This is a comment\n"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "#put_class generates classes, optionally with a superclass" do
|
66
|
+
r = RubyScriptWriter.new
|
67
|
+
r.put_class "One" do
|
68
|
+
r.comment "part of class One"
|
69
|
+
end
|
70
|
+
r.put_class "Two", "One" do
|
71
|
+
r.comment "part of class Two"
|
72
|
+
end
|
73
|
+
r.to_s.should == "class One\n # part of class One\nend\n\nclass Two < One\n # part of class Two\nend\n\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
it "#put_simple_method generates single line methods" do
|
77
|
+
r = RubyScriptWriter.new
|
78
|
+
r.put_simple_method "a23", "b23 + 10"
|
79
|
+
r.to_s.should == "def a23; b23 + 10; end\n"
|
80
|
+
end
|
81
|
+
|
82
|
+
it "#put_method for generating multiple line methods, optionally with arguments" do
|
83
|
+
r = RubyScriptWriter.new
|
84
|
+
r.put_method "one" do
|
85
|
+
r.comment "part of method one"
|
86
|
+
end
|
87
|
+
r.put_method "two","a","b","c" do
|
88
|
+
r.comment "part of method two"
|
89
|
+
end
|
90
|
+
r.to_s.should == "def one\n # part of method one\nend\n\ndef two(a,b,c)\n # part of method two\nend\n\n"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "#put_coding for generating a ruby 1.9 encoding line at the start. Defaults to utf-8" do
|
94
|
+
r = RubyScriptWriter.new
|
95
|
+
r.put_coding
|
96
|
+
r.put_coding 'ascii'
|
97
|
+
r.to_s.should == "# coding: utf-8\n# coding: ascii\n"
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
2
|
+
require 'rubyspecwriter'
|
3
|
+
|
4
|
+
describe RubySpecWriter do
|
5
|
+
|
6
|
+
it "#put_description for generating rspec describe statements" do
|
7
|
+
r = RubySpecWriter.new
|
8
|
+
r.put_description "Sheet1" do
|
9
|
+
r.puts "Hello"
|
10
|
+
end
|
11
|
+
r.to_s.should == "describe Sheet1 do\n Hello\nend\n\n"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "#put_spec for generating rspec it should type statements" do
|
15
|
+
r = RubySpecWriter.new
|
16
|
+
r.put_spec "a1 should be equal to b2" do
|
17
|
+
r.puts "a1.should == b2"
|
18
|
+
end
|
19
|
+
r.to_s.should == "it 'a1 should be equal to b2' do\n a1.should == b2\nend\n\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "#put_spec for generating rspec it should type statements should deal with single quotes" do
|
23
|
+
r = RubySpecWriter.new
|
24
|
+
r.put_spec %Q{a1 should be equal to "One's own"} do
|
25
|
+
r.puts %Q{a1.should == "One's own"}
|
26
|
+
end
|
27
|
+
r.to_s.should == %Q{it 'a1 should be equal to "Ones own"' do\n a1.should == "One's own"\nend\n\n}
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rubyscriptwriter
|
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
|
+
- Thomas Counsell, Green on Black Ltd
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-04-25 00:00:00 +01:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description:
|
22
|
+
email: ruby-script-writer@greenonblack.com
|
23
|
+
executables: []
|
24
|
+
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- README
|
31
|
+
- spec/rubyscriptwriter_spec.rb
|
32
|
+
- spec/rubyspecwriter_spec.rb
|
33
|
+
- lib/rubyscriptwriter.rb
|
34
|
+
- lib/rubyspecwriter.rb
|
35
|
+
has_rdoc: true
|
36
|
+
homepage: http://wiki.github.com/tamc/ruby-script-writer
|
37
|
+
licenses: []
|
38
|
+
|
39
|
+
post_install_message:
|
40
|
+
rdoc_options: []
|
41
|
+
|
42
|
+
require_paths:
|
43
|
+
- lib
|
44
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 0
|
50
|
+
version: "0"
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
requirements: []
|
59
|
+
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.3.6
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: A small library for programmatically creating well formatted ruby scripts
|
65
|
+
test_files: []
|
66
|
+
|