inspectorgadget 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/History.txt +4 -0
- data/License.txt +20 -0
- data/Manifest.txt +38 -0
- data/README.txt +1 -0
- data/Rakefile +4 -0
- data/config/hoe.rb +70 -0
- data/config/requirements.rb +17 -0
- data/lib/inspectorgadget/dsl_attr_accessor.rb +15 -0
- data/lib/inspectorgadget/google_gadget_spec.rb +66 -0
- data/lib/inspectorgadget/module_preferences.rb +36 -0
- data/lib/inspectorgadget/sticky_attributes.rb +26 -0
- data/lib/inspectorgadget/user_preference.rb +40 -0
- data/lib/inspectorgadget/version.rb +9 -0
- data/lib/inspectorgadget.rb +15 -0
- data/log/debug.log +0 -0
- data/script/destroy +14 -0
- data/script/destroy.cmd +1 -0
- data/script/generate +14 -0
- data/script/generate.cmd +1 -0
- data/script/txt2html +74 -0
- data/script/txt2html.cmd +1 -0
- data/setup.rb +1585 -0
- data/tasks/deployment.rake +27 -0
- data/tasks/environment.rake +7 -0
- data/tasks/website.rake +17 -0
- data/test/test_dsl_attribute_accessor.rb +36 -0
- data/test/test_google_gadget_spec.rb +86 -0
- data/test/test_helper.rb +13 -0
- data/test/test_inspectorgadget.rb +11 -0
- data/test/test_module_preferences.rb +87 -0
- data/test/test_sticky_attributes.rb +29 -0
- data/test/test_user_preference.rb +47 -0
- data/test/xml_test_helper.rb +12 -0
- data/website/index.html +91 -0
- data/website/index.txt +35 -0
- data/website/javascripts/rounded_corners_lite.inc.js +285 -0
- data/website/stylesheets/screen.css +138 -0
- data/website/template.rhtml +48 -0
- metadata +102 -0
@@ -0,0 +1,27 @@
|
|
1
|
+
desc 'Release the website and new gem version'
|
2
|
+
task :deploy => [:check_version, :website, :release] do
|
3
|
+
puts "Remember to create SVN tag:"
|
4
|
+
puts "svn copy svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/trunk " +
|
5
|
+
"svn+ssh://#{rubyforge_username}@rubyforge.org/var/svn/#{PATH}/tags/REL-#{VERS} "
|
6
|
+
puts "Suggested comment:"
|
7
|
+
puts "Tagging release #{CHANGES}"
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'Runs tasks website_generate and install_gem as a local deployment of the gem'
|
11
|
+
task :local_deploy => [:website_generate, :install_gem]
|
12
|
+
|
13
|
+
task :check_version do
|
14
|
+
unless ENV['VERSION']
|
15
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
16
|
+
exit
|
17
|
+
end
|
18
|
+
unless ENV['VERSION'] == VERS
|
19
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
20
|
+
exit
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
desc 'Install the package as a gem, without generating documentation(ri/rdoc)'
|
25
|
+
task :install_gem_no_doc => [:clean, :package] do
|
26
|
+
sh "#{'sudo ' unless Hoe::WINDOZE }gem install pkg/*.gem --no-rdoc --no-ri"
|
27
|
+
end
|
data/tasks/website.rake
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
desc 'Generate website files'
|
2
|
+
task :website_generate => :ruby_env do
|
3
|
+
(Dir['website/**/*.txt'] - Dir['website/version*.txt']).each do |txt|
|
4
|
+
sh %{ #{RUBY_APP} script/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
desc 'Upload website files to rubyforge'
|
9
|
+
task :website_upload do
|
10
|
+
host = "#{rubyforge_username}@rubyforge.org"
|
11
|
+
remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/"
|
12
|
+
local_dir = 'website'
|
13
|
+
sh %{rsync -aCv #{local_dir}/ #{host}:#{remote_dir}}
|
14
|
+
end
|
15
|
+
|
16
|
+
desc 'Generate and upload website files'
|
17
|
+
task :website => [:website_generate, :website_upload, :publish_docs]
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class DslAttributeAccessorTest < Test::Unit::TestCase
|
4
|
+
include InspectorGadget
|
5
|
+
|
6
|
+
def test_dsl_attr_accessor_creates_methods
|
7
|
+
object = create_class_with_dsl_accessor
|
8
|
+
assert_respond_to(object, :foo)
|
9
|
+
assert_respond_to(object, :foo=)
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_creates_traditional_and_dsl_writers
|
13
|
+
object = create_class_with_dsl_accessor
|
14
|
+
object.foo 'baz'
|
15
|
+
assert object.instance_variables.include?("@foo")
|
16
|
+
|
17
|
+
object = create_class_with_dsl_accessor
|
18
|
+
object.foo = 'bar'
|
19
|
+
assert object.instance_variables.include?("@foo")
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_creates_traditional_reader
|
23
|
+
object = create_class_with_dsl_accessor
|
24
|
+
object.instance_variable_set "@foo", 'baz'
|
25
|
+
assert_equal 'baz', object.foo
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_class_with_dsl_accessor
|
29
|
+
klass = Class.new
|
30
|
+
klass.extend DslAttrAccessor
|
31
|
+
klass.send(:dsl_attr_accessor, :foo)
|
32
|
+
klass.new
|
33
|
+
end
|
34
|
+
private :create_class_with_dsl_accessor
|
35
|
+
|
36
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'rexml/document'
|
3
|
+
|
4
|
+
class GoogleGadgetSpecTest < Test::Unit::TestCase
|
5
|
+
include InspectorGadget
|
6
|
+
include REXML
|
7
|
+
|
8
|
+
def test_create_google_gadget_spec
|
9
|
+
gadget = GoogleGadgetSpec.new
|
10
|
+
|
11
|
+
mp = gadget.module_prefs
|
12
|
+
assert_instance_of ModulePreferences, gadget.module_prefs
|
13
|
+
assert_equal [], gadget.user_prefs
|
14
|
+
assert_equal :html, gadget.content_type
|
15
|
+
assert_nil gadget.content_href
|
16
|
+
assert_nil gadget.content
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_setting_module_preferences
|
20
|
+
gadget = GoogleGadgetSpec.new
|
21
|
+
|
22
|
+
module_prefs = gadget.module_prefs do |mp|
|
23
|
+
assert_same gadget.module_prefs, mp
|
24
|
+
end
|
25
|
+
|
26
|
+
assert_same gadget.module_prefs, module_prefs
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_add_user_preferences
|
30
|
+
gadget = GoogleGadgetSpec.new
|
31
|
+
new_user_pref = nil
|
32
|
+
gadget.user_pref do |up|
|
33
|
+
new_user_pref = up
|
34
|
+
end
|
35
|
+
assert_equal [new_user_pref], gadget.user_prefs
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_forwards_NoMethodMethodError_to_super_after_method_missing_chain
|
39
|
+
assert_raise NoMethodError do
|
40
|
+
GoogleGadgetSpec.new do
|
41
|
+
hello
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_to_xml_file_using_string_content
|
47
|
+
gadget = GoogleGadgetSpec.new
|
48
|
+
gadget.user_pref :name => 'mycolor'
|
49
|
+
gadget.content = "hello world"
|
50
|
+
|
51
|
+
gadget.module_prefs.expects(:to_xml)
|
52
|
+
gadget.user_prefs.each{|up| up.expects(:to_xml)}
|
53
|
+
xml = gadget.to_xml
|
54
|
+
|
55
|
+
doc = Document.new(xml)
|
56
|
+
assert_xpath doc, "/Module"
|
57
|
+
assert_xpath doc, "/Module/Content"
|
58
|
+
assert_equal "hello world", cdata_value(doc, "/Module/Content")
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_to_xml_file_using_IO_content
|
62
|
+
gadget = GoogleGadgetSpec.new
|
63
|
+
gadget.user_pref :name => 'mycolor'
|
64
|
+
gadget.content = IO.new(0)
|
65
|
+
gadget.module_prefs.expects(:to_xml)
|
66
|
+
gadget.user_prefs.each{|up| up.expects(:to_xml)}
|
67
|
+
gadget.content.expects(:readlines).returns(['mocked','content'])
|
68
|
+
|
69
|
+
xml = gadget.to_xml
|
70
|
+
|
71
|
+
doc = Document.new(xml)
|
72
|
+
assert_xpath doc, "/Module"
|
73
|
+
assert_xpath doc, "/Module/Content"
|
74
|
+
assert_equal "mockedcontent", cdata_value(doc, "/Module/Content")
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_to_xml_writes_url_content_type_attributes
|
78
|
+
gadget = GoogleGadgetSpec.new do
|
79
|
+
content_type :url
|
80
|
+
content_href 'www.google.com'
|
81
|
+
end
|
82
|
+
doc = Document.new gadget.to_xml
|
83
|
+
assert_xpath(doc, "/Module/Content", :type => :url, :href => 'www.google.com')
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/inspectorgadget'
|
3
|
+
|
4
|
+
#asserts number of elements returned by an xpath (executed on a ReXML doc)
|
5
|
+
def assert_xpath(doc, path, attributes = {}, expected_matches = 1)
|
6
|
+
xpath = path + "[" + attributes.collect{|k,v| "@#{k}='#{v}'"}.join(' and ') + "]"
|
7
|
+
assert_equal expected_matches, doc.get_elements(xpath).length
|
8
|
+
end
|
9
|
+
|
10
|
+
#first matching element's first cdata
|
11
|
+
def cdata_value(doc, xpath)
|
12
|
+
doc.root.get_elements(xpath)[0].cdatas[0].value
|
13
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'mocha'
|
3
|
+
require 'rexml/document'
|
4
|
+
require 'rexml/text'
|
5
|
+
|
6
|
+
class ModulePreferenceTest < Test::Unit::TestCase
|
7
|
+
include InspectorGadget
|
8
|
+
include REXML
|
9
|
+
|
10
|
+
def test_instantiating_with_hash_attributes
|
11
|
+
mp = ModulePreferences.new :title => 'hello world example'
|
12
|
+
assert_equal 'hello world example', mp.title
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_require_feature
|
16
|
+
mp = ModulePreferences.new
|
17
|
+
mp.require_features "setprefs", "another1"
|
18
|
+
assert_equal ["setprefs", "another1"], mp.required_features
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_may_require
|
22
|
+
mp = ModulePreferences.new
|
23
|
+
mp.may_require :browser, 'firefox'
|
24
|
+
mp.may_require :plugin, 'flash', :min_version => '8', :cdata => 'abcd'
|
25
|
+
|
26
|
+
assert_equal({:type => :browser, :value => 'firefox'}, mp.may_be_required.first)
|
27
|
+
assert_equal({:type => :plugin, :value => 'flash', :min_version => '8', :cdata => 'abcd'}, mp.may_be_required.last)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_locale_without_required_params
|
31
|
+
mp = ModulePreferences.new
|
32
|
+
assert_raise(ArgumentError) do
|
33
|
+
mp.supports_locale :messages => 'bundle.xml'
|
34
|
+
mp.supports_locale {}
|
35
|
+
end
|
36
|
+
assert_equal [], mp.supported_locales
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_locale_with_required_params
|
40
|
+
mp = ModulePreferences.new
|
41
|
+
en_locale = {:lang => :en, :country => :us, :messages => 'bundle.xml'}
|
42
|
+
ar_locale = {:lang => :ar}
|
43
|
+
mp.supports_locale en_locale
|
44
|
+
mp.supports_locale ar_locale
|
45
|
+
|
46
|
+
assert_equal [en_locale, ar_locale], mp.supported_locales
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_forwards_to_super_after_method_missing_chain
|
50
|
+
assert_raise(NoMethodError) do
|
51
|
+
mp = ModulePreferences.new
|
52
|
+
mp.hello
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_to_xml_writes_attributes_hash_as_xml_element_attributes
|
57
|
+
mp = ModulePreferences.new :title => 'farooq'
|
58
|
+
xml = ''
|
59
|
+
builder = Builder::XmlMarkup.new(:target => xml)
|
60
|
+
mp.to_xml(builder)
|
61
|
+
|
62
|
+
#verify generated xml:
|
63
|
+
doc = Document.new xml
|
64
|
+
assert_xpath doc, "/ModulePrefs", :title => 'farooq'
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_to_xml_writes_Require_and_MayRequire_and_Locale
|
68
|
+
mp = ModulePreferences.new
|
69
|
+
mp.require_features :setprefs, :hello
|
70
|
+
mp.may_require :plugin, 'flash'
|
71
|
+
mp.may_require :browser, 'firefox'
|
72
|
+
mp.supports_locale :country => :us, :lang => :en
|
73
|
+
|
74
|
+
xml = ''
|
75
|
+
builder = Builder::XmlMarkup.new(:target => xml)
|
76
|
+
mp.to_xml(builder)
|
77
|
+
|
78
|
+
#verify generated xml:
|
79
|
+
doc = Document.new xml
|
80
|
+
assert_xpath doc, "/ModulePrefs"
|
81
|
+
assert_xpath doc, "/ModulePrefs/Require", :feature => :setprefs
|
82
|
+
assert_xpath doc, "/ModulePrefs/Require", :feature => :hello
|
83
|
+
assert_xpath doc, "/ModulePrefs/MayRequire", :type => :plugin, :value => 'flash'
|
84
|
+
assert_xpath doc, "/ModulePrefs/MayRequire", :type => :browser, :value => 'firefox'
|
85
|
+
assert_xpath doc, "/ModulePrefs/Locale", :country => :us, :lang => :en
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
class StickyAttributesTest < Test::Unit::TestCase
|
5
|
+
include InspectorGadget
|
6
|
+
|
7
|
+
def test_calling_setters_and_then_getters
|
8
|
+
super_glue = Object.new.extend StickyAttributes
|
9
|
+
|
10
|
+
{:brand => "UHU",
|
11
|
+
:strength => 100,
|
12
|
+
:sticks_to => :everything}.each do |attr_name,attr_value|
|
13
|
+
|
14
|
+
#test w/ and w/o equals operator (e.g. super_glue.brand= and super_glue.brand)
|
15
|
+
["#{attr_name}=", attr_name].each do |method_name|
|
16
|
+
super_glue.send method_name, attr_value
|
17
|
+
assert_equal attr_value, super_glue.instance_variable_get("@#{attr_name}")
|
18
|
+
assert_equal attr_value, super_glue.send(attr_name)
|
19
|
+
|
20
|
+
#only needed for explicit sticky attributes:
|
21
|
+
assert_respond_to super_glue, method_name
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_forwards_method_missing_to_super_if_the_attribute_is_not_defined
|
27
|
+
assert_raise(NoMethodError) { Object.new.extend(StickyAttributes).title }
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
require 'rexml/document'
|
3
|
+
|
4
|
+
class UserPreferenceTest < Test::Unit::TestCase
|
5
|
+
include InspectorGadget
|
6
|
+
include REXML
|
7
|
+
|
8
|
+
def test_instantiating_with_hash_sets_attributes
|
9
|
+
mp = UserPreference.new :name => 'helloworldexample'
|
10
|
+
assert_equal 'helloworldexample', mp.name
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_create_user_preference_with_enum
|
14
|
+
up = UserPreference.new
|
15
|
+
up.name = "mycolor"
|
16
|
+
up.display_name "Color"
|
17
|
+
up.default_value "Yellow"
|
18
|
+
up.datatype "enum"
|
19
|
+
up.enum_values "Red", "Green", "Yellow", "Blue", "Pink", "Orange"
|
20
|
+
|
21
|
+
assert_equal "mycolor", up.name
|
22
|
+
assert_equal "Color", up.display_name
|
23
|
+
assert_equal "Yellow", up.default_value
|
24
|
+
assert_equal "enum", up.datatype
|
25
|
+
assert_equal ["Red", "Green", "Yellow", "Blue", "Pink", "Orange"], up.enum_values
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_to_xml
|
29
|
+
attributes = { :name => "mycolor", :display_name => "Color" }
|
30
|
+
up = UserPreference.new attributes
|
31
|
+
xml = ""
|
32
|
+
up.to_xml(Builder::XmlMarkup.new(:target => xml))
|
33
|
+
|
34
|
+
doc = Document.new(xml)
|
35
|
+
assert_xpath(doc, "/UserPref", attributes)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_serializes_default_value_for_list_datatypes
|
39
|
+
up = UserPreference.new
|
40
|
+
up.datatype = "list"
|
41
|
+
up.default_value ["zdnet", "pc", "Apple Insider"]
|
42
|
+
xml = ""
|
43
|
+
up.to_xml(Builder::XmlMarkup.new(:target => xml))
|
44
|
+
doc = Document.new(xml)
|
45
|
+
assert_xpath(doc, "/UserPref", :datatype => "list", :default_value => "zdnet|pc|Apple Insider")
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module XmlTestHelper
|
2
|
+
#asserts number of elements returned by an xpath (executed on a ReXML doc)
|
3
|
+
def assert_xpath(doc, path, attributes = {}, expected_matches = 1)
|
4
|
+
xpath = path + "[" + attributes.collect{|k,v| "@#{k}='#{v}'"}.join(' and ') + "]"
|
5
|
+
assert_equal expected_matches, doc.get_elements(xpath).length
|
6
|
+
end
|
7
|
+
|
8
|
+
#first matching element's first cdata
|
9
|
+
def cdata_value(doc, xpath)
|
10
|
+
doc.root.get_elements(xpath)[0].cdatas[0].value
|
11
|
+
end
|
12
|
+
end
|
data/website/index.html
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<link rel="stylesheet" href="stylesheets/screen.css" type="text/css" media="screen" />
|
6
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
7
|
+
<title>
|
8
|
+
Inspector Gadget
|
9
|
+
</title>
|
10
|
+
<script src="javascripts/rounded_corners_lite.inc.js" type="text/javascript"></script>
|
11
|
+
<style>
|
12
|
+
|
13
|
+
</style>
|
14
|
+
<script type="text/javascript">
|
15
|
+
window.onload = function() {
|
16
|
+
settings = {
|
17
|
+
tl: { radius: 10 },
|
18
|
+
tr: { radius: 10 },
|
19
|
+
bl: { radius: 10 },
|
20
|
+
br: { radius: 10 },
|
21
|
+
antiAlias: true,
|
22
|
+
autoPad: true,
|
23
|
+
validTags: ["div"]
|
24
|
+
}
|
25
|
+
var versionBox = new curvyCorners(settings, document.getElementById("version"));
|
26
|
+
versionBox.applyCornersToAll();
|
27
|
+
}
|
28
|
+
</script>
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="main">
|
32
|
+
|
33
|
+
<h1>Inspector Gadget</h1>
|
34
|
+
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/inspectorgadget"; return false'>
|
35
|
+
<p>Get Version</p>
|
36
|
+
<a href="http://rubyforge.org/projects/inspectorgadget" class="numbers">0.0.1</a>
|
37
|
+
</div>
|
38
|
+
<h1>→ ‘inspectorgadget’</h1>
|
39
|
+
|
40
|
+
|
41
|
+
<h2>What
|
42
|
+
InspectorGadget is a ruby <span class="caps">API</span> to create universal google gadget specifications</h2>
|
43
|
+
|
44
|
+
|
45
|
+
<h2>Installing</h2>
|
46
|
+
|
47
|
+
|
48
|
+
<p><pre class='syntax'><span class="ident">sudo</span> <span class="ident">gem</span> <span class="ident">install</span> <span class="ident">inspectorgadget</span></pre></p>
|
49
|
+
|
50
|
+
|
51
|
+
<h2>Usage and examples at <a href="http://jroller.com/page/abstractScope/entry/inspector_gadget" title=":ruby">InspectorGadget by got?</a></h2>
|
52
|
+
|
53
|
+
|
54
|
+
<h2>Forum</h2>
|
55
|
+
|
56
|
+
|
57
|
+
<p><a href="http://groups.google.com/group/inspectorgadget">http://groups.google.com/group/inspectorgadget</a></p>
|
58
|
+
|
59
|
+
|
60
|
+
<p><span class="caps">TODO</span> – create Google Group – inspectorgadget</p>
|
61
|
+
|
62
|
+
|
63
|
+
<h2>How to submit patches</h2>
|
64
|
+
|
65
|
+
|
66
|
+
<p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people’s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
|
67
|
+
|
68
|
+
|
69
|
+
<p>The trunk repository is <code>svn://rubyforge.org/var/svn/inspectorgadget/trunk</code> for anonymous access.</p>
|
70
|
+
|
71
|
+
|
72
|
+
<h2>License</h2>
|
73
|
+
|
74
|
+
|
75
|
+
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
76
|
+
|
77
|
+
|
78
|
+
<h2>Contact</h2>
|
79
|
+
|
80
|
+
|
81
|
+
<p>Comments are welcome. Shoot me an email anytime (<a href="mailto:farooq@thoughtworks.com">farooq@thoughtworks.com</a>) or visit my blog at <a href="http://jroller.com/page/abstractScope">got? :ruby</a></p>
|
82
|
+
<p class="coda">
|
83
|
+
<a href="FIXME email">FIXME full name</a>, 9th September 2007<br>
|
84
|
+
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
85
|
+
</p>
|
86
|
+
</div>
|
87
|
+
|
88
|
+
<!-- insert site tracking codes here, like Google Urchin -->
|
89
|
+
|
90
|
+
</body>
|
91
|
+
</html>
|
data/website/index.txt
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
h1. Inspector Gadget
|
2
|
+
|
3
|
+
h1. → 'inspectorgadget'
|
4
|
+
|
5
|
+
|
6
|
+
h2. What
|
7
|
+
InspectorGadget is a ruby API to create universal google gadget specifications
|
8
|
+
|
9
|
+
h2. Installing
|
10
|
+
|
11
|
+
<pre syntax="ruby">sudo gem install inspectorgadget</pre>
|
12
|
+
|
13
|
+
|
14
|
+
h2. Usage and examples at "InspectorGadget by got?(:ruby)":http://jroller.com/page/abstractScope/entry/inspector_gadget
|
15
|
+
|
16
|
+
h2. Forum
|
17
|
+
|
18
|
+
"http://groups.google.com/group/inspectorgadget":http://groups.google.com/group/inspectorgadget
|
19
|
+
|
20
|
+
TODO - create Google Group - inspectorgadget
|
21
|
+
|
22
|
+
h2. How to submit patches
|
23
|
+
|
24
|
+
Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
|
25
|
+
|
26
|
+
The trunk repository is <code>svn://rubyforge.org/var/svn/inspectorgadget/trunk</code> for anonymous access.
|
27
|
+
|
28
|
+
h2. License
|
29
|
+
|
30
|
+
This code is free to use under the terms of the MIT license.
|
31
|
+
|
32
|
+
h2. Contact
|
33
|
+
|
34
|
+
Comments are welcome. Shoot me an email anytime ("farooq@thoughtworks.com":mailto:farooq@thoughtworks.com) or visit my blog at "got? :ruby":http://jroller.com/page/abstractScope
|
35
|
+
|