Skip to content

Commit

Permalink
Added a better README. Preparing gem release.
Browse files Browse the repository at this point in the history
  • Loading branch information
thbar committed Mar 2, 2009
1 parent c1208ad commit bdced06
Show file tree
Hide file tree
Showing 3 changed files with 94 additions and 0 deletions.
61 changes: 61 additions & 0 deletions README.textile
@@ -0,0 +1,61 @@
Magic is an IronRuby gem making it easier to develop Windows Forms UI with IronRuby.

Note that while developing it, it quickly became clear that Magic could be useful outside IronRuby and Windows Forms in the very near future (look at IDEAS to see where we're heading).

h1. USAGE

Here's a quick starter:

form = Magic.build do
@menu = main_menu do
menu_item("&File") do
menu_item("&New")
menu_item("&Quit").click { Application.Exit }
menu_item("&Other Quit", :click => lambda { Application.Exit })
end
end
form(:text => "Title", :menu => @menu) do
flow_layout_panel(:dock => :fill) do
button(:text => "Click me!").click do
MessageBox.Show("Hello from button!")
end
end
end
end

h1. UNDER THE COVER

A few points (see spec/magic_spec.rb for details):

* classes to be built are inferred from method calls (converted from snake_case to CamelCase)
** menu_item creates an instance of MenuItem
** button becomes Button
** flow_layout_panel becomes FlowLayoutPanel
* method calls automatically add the object to its parent children collection (if the object is a Control or a MenuItem - this will become configurable)
* if a Hash is passed, corresponding properties are set after instanciation (:text => "This is the text")
* if the property is an enum, snake_case symbol value is allowed (:dock => :fill is the same as :dock => DockStyle.Fill)
* handlers are registered if a lambda is passed (:click => lambda)
* handlers can also be registered by calling the block directly (button.lambda do ... end)
* instance variables can be reused (form.menu = @menu)
* non-control (like BackgroundWorker for long-running operations) instances can be created (worker = background_worker)
* the last evaluted expression is returned.

h1. TESTING

Magic comes with its set of specs (based on MSpec). You'll currently have to tweak Rakefile (see spec task) to match your environment. Then you can run:

rake spec

to see all the (m)specs running.

h1. IDEAS

* build a website to make it easier to discover and understand
* become independent of Windows Forms (see Magic.method_missing for notes about that)
* try things out with WPF or Silverlight
* use it to generate graphs with QuickGraph
* use it outside IronRuby (the coupling to IronRuby is quite isolated)

h1. COPYRIGHT

Copyright (c) 2008 Thibaut Barrère. See LICENSE for details.
4 changes: 4 additions & 0 deletions VERSION.yml
@@ -0,0 +1,4 @@
---
:major: 1
:minor: 0
:patch: 0
29 changes: 29 additions & 0 deletions magic.gemspec
@@ -0,0 +1,29 @@
# -*- encoding: utf-8 -*-

Gem::Specification.new do |s|
s.name = %q{magic}
s.version = "1.0.0"

s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Thibaut Barr\303\250re"]
s.date = %q{2009-03-02}
s.description = %q{TODO}
s.email = %q{thibaut.barrere@gmail.com}
s.files = ["README.textile", "VERSION.yml", "lib/magic", "lib/magic/classifier.rb", "lib/magic/instanciator.rb", "lib/magic.rb", "spec/classifier_spec.rb", "spec/instanciator_spec.rb", "spec/magic_spec.rb", "spec/mspec", "spec/mspec/bin", "spec/mspec/bin/mkspec", "spec/mspec/bin/mkspec.bat", "spec/mspec/bin/mspec", "spec/mspec/bin/mspec-ci", "spec/mspec/bin/mspec-ci.bat", "spec/mspec/bin/mspec-run", "spec/mspec/bin/mspec-run.bat", "spec/mspec/bin/mspec-tag", "spec/mspec/bin/mspec-tag.bat", "spec/mspec/bin/mspec.bat", "spec/mspec/lib", "spec/mspec/lib/mspec", "spec/mspec/lib/mspec/commands", "spec/mspec/lib/mspec/commands/mkspec.rb", "spec/mspec/lib/mspec/commands/mspec-ci.rb", "spec/mspec/lib/mspec/commands/mspec-run.rb", "spec/mspec/lib/mspec/commands/mspec-tag.rb", "spec/mspec/lib/mspec/commands/mspec.rb", "spec/mspec/lib/mspec/expectations", "spec/mspec/lib/mspec/expectations/expectations.rb", "spec/mspec/lib/mspec/expectations/should.rb", "spec/mspec/lib/mspec/expectations.rb", "spec/mspec/lib/mspec/guards", "spec/mspec/lib/mspec/guards/background.rb", "spec/mspec/lib/mspec/guards/bug.rb", "spec/mspec/lib/mspec/guards/compliance.rb", "spec/mspec/lib/mspec/guards/conflict.rb", "spec/mspec/lib/mspec/guards/endian.rb", "spec/mspec/lib/mspec/guards/extensions.rb", "spec/mspec/lib/mspec/guards/guard.rb", "spec/mspec/lib/mspec/guards/noncompliance.rb", "spec/mspec/lib/mspec/guards/platform.rb", "spec/mspec/lib/mspec/guards/quarantine.rb", "spec/mspec/lib/mspec/guards/runner.rb", "spec/mspec/lib/mspec/guards/superuser.rb", "spec/mspec/lib/mspec/guards/support.rb", "spec/mspec/lib/mspec/guards/tty.rb", "spec/mspec/lib/mspec/guards/version.rb", "spec/mspec/lib/mspec/guards.rb", "spec/mspec/lib/mspec/helpers", "spec/mspec/lib/mspec/helpers/argv.rb", "spec/mspec/lib/mspec/helpers/bignum.rb", "spec/mspec/lib/mspec/helpers/const_lookup.rb", "spec/mspec/lib/mspec/helpers/environment.rb", "spec/mspec/lib/mspec/helpers/fixture.rb", "spec/mspec/lib/mspec/helpers/flunk.rb", "spec/mspec/lib/mspec/helpers/io.rb", "spec/mspec/lib/mspec/helpers/language_version.rb", "spec/mspec/lib/mspec/helpers/ruby_exe.rb", "spec/mspec/lib/mspec/helpers/scratch.rb", "spec/mspec/lib/mspec/helpers/tmp.rb", "spec/mspec/lib/mspec/helpers.rb", "spec/mspec/lib/mspec/matchers", "spec/mspec/lib/mspec/matchers/base.rb", "spec/mspec/lib/mspec/matchers/be_ancestor_of.rb", "spec/mspec/lib/mspec/matchers/be_close.rb", "spec/mspec/lib/mspec/matchers/be_empty.rb", "spec/mspec/lib/mspec/matchers/be_false.rb", "spec/mspec/lib/mspec/matchers/be_kind_of.rb", "spec/mspec/lib/mspec/matchers/be_nil.rb", "spec/mspec/lib/mspec/matchers/be_true.rb", "spec/mspec/lib/mspec/matchers/complain.rb", "spec/mspec/lib/mspec/matchers/eql.rb", "spec/mspec/lib/mspec/matchers/equal.rb", "spec/mspec/lib/mspec/matchers/equal_element.rb", "spec/mspec/lib/mspec/matchers/equal_utf16.rb", "spec/mspec/lib/mspec/matchers/have_constant.rb", "spec/mspec/lib/mspec/matchers/have_instance_method.rb", "spec/mspec/lib/mspec/matchers/have_method.rb", "spec/mspec/lib/mspec/matchers/have_private_instance_method.rb", "spec/mspec/lib/mspec/matchers/include.rb", "spec/mspec/lib/mspec/matchers/match_yaml.rb", "spec/mspec/lib/mspec/matchers/method.rb", "spec/mspec/lib/mspec/matchers/output.rb", "spec/mspec/lib/mspec/matchers/output_to_fd.rb", "spec/mspec/lib/mspec/matchers/raise_error.rb", "spec/mspec/lib/mspec/matchers/respond_to.rb", "spec/mspec/lib/mspec/matchers/stringsymboladapter.rb", "spec/mspec/lib/mspec/matchers.rb", "spec/mspec/lib/mspec/mocks", "spec/mspec/lib/mspec/mocks/mock.rb", "spec/mspec/lib/mspec/mocks/object.rb", "spec/mspec/lib/mspec/mocks/proxy.rb", "spec/mspec/lib/mspec/mocks.rb", "spec/mspec/lib/mspec/runner", "spec/mspec/lib/mspec/runner/actions", "spec/mspec/lib/mspec/runner/actions/debug.rb", "spec/mspec/lib/mspec/runner/actions/filter.rb", "spec/mspec/lib/mspec/runner/actions/gdb.rb", "spec/mspec/lib/mspec/runner/actions/tag.rb", "spec/mspec/lib/mspec/runner/actions/taglist.rb", "spec/mspec/lib/mspec/runner/actions/tagpurge.rb", "spec/mspec/lib/mspec/runner/actions/tally.rb", "spec/mspec/lib/mspec/runner/actions/timer.rb", "spec/mspec/lib/mspec/runner/actions.rb", "spec/mspec/lib/mspec/runner/context.rb", "spec/mspec/lib/mspec/runner/example.rb", "spec/mspec/lib/mspec/runner/exception.rb", "spec/mspec/lib/mspec/runner/filters", "spec/mspec/lib/mspec/runner/filters/match.rb", "spec/mspec/lib/mspec/runner/filters/profile.rb", "spec/mspec/lib/mspec/runner/filters/regexp.rb", "spec/mspec/lib/mspec/runner/filters/tag.rb", "spec/mspec/lib/mspec/runner/filters.rb", "spec/mspec/lib/mspec/runner/formatters", "spec/mspec/lib/mspec/runner/formatters/describe.rb", "spec/mspec/lib/mspec/runner/formatters/dotted.rb", "spec/mspec/lib/mspec/runner/formatters/file.rb", "spec/mspec/lib/mspec/runner/formatters/html.rb", "spec/mspec/lib/mspec/runner/formatters/method.rb", "spec/mspec/lib/mspec/runner/formatters/specdoc.rb", "spec/mspec/lib/mspec/runner/formatters/spinner.rb", "spec/mspec/lib/mspec/runner/formatters/summary.rb", "spec/mspec/lib/mspec/runner/formatters/unit.rb", "spec/mspec/lib/mspec/runner/formatters/yaml.rb", "spec/mspec/lib/mspec/runner/formatters.rb", "spec/mspec/lib/mspec/runner/mspec.rb", "spec/mspec/lib/mspec/runner/object.rb", "spec/mspec/lib/mspec/runner/shared.rb", "spec/mspec/lib/mspec/runner/tag.rb", "spec/mspec/lib/mspec/runner.rb", "spec/mspec/lib/mspec/utils", "spec/mspec/lib/mspec/utils/name_map.rb", "spec/mspec/lib/mspec/utils/options.rb", "spec/mspec/lib/mspec/utils/ruby_name.rb", "spec/mspec/lib/mspec/utils/script.rb", "spec/mspec/lib/mspec/utils/version.rb", "spec/mspec/lib/mspec/version.rb", "spec/mspec/lib/mspec.rb", "spec/mspec/LICENSE", "spec/mspec/mspec.gemspec", "spec/mspec/Rakefile", "spec/mspec/README", "spec/mspec/spec", "spec/mspec/spec/commands", "spec/mspec/spec/commands/fixtures", "spec/mspec/spec/commands/fixtures/four.txt", "spec/mspec/spec/commands/fixtures/level2", "spec/mspec/spec/commands/fixtures/level2/three_spec.rb", "spec/mspec/spec/commands/fixtures/one_spec.rb", "spec/mspec/spec/commands/fixtures/three.rb", "spec/mspec/spec/commands/fixtures/two_spec.rb", "spec/mspec/spec/commands/mkspec_spec.rb", "spec/mspec/spec/commands/mspec_ci_spec.rb", "spec/mspec/spec/commands/mspec_run_spec.rb", "spec/mspec/spec/commands/mspec_spec.rb", "spec/mspec/spec/commands/mspec_tag_spec.rb", "spec/mspec/spec/expectations", "spec/mspec/spec/expectations/expectations_spec.rb", "spec/mspec/spec/expectations/should_spec.rb", "spec/mspec/spec/guards", "spec/mspec/spec/guards/background_spec.rb", "spec/mspec/spec/guards/bug_spec.rb", "spec/mspec/spec/guards/compliance_spec.rb", "spec/mspec/spec/guards/conflict_spec.rb", "spec/mspec/spec/guards/endian_spec.rb", "spec/mspec/spec/guards/extensions_spec.rb", "spec/mspec/spec/guards/guard_spec.rb", "spec/mspec/spec/guards/noncompliance_spec.rb", "spec/mspec/spec/guards/platform_spec.rb", "spec/mspec/spec/guards/quarantine_spec.rb", "spec/mspec/spec/guards/runner_spec.rb", "spec/mspec/spec/guards/superuser_spec.rb", "spec/mspec/spec/guards/support_spec.rb", "spec/mspec/spec/guards/tty_spec.rb", "spec/mspec/spec/guards/version_spec.rb", "spec/mspec/spec/helpers", "spec/mspec/spec/helpers/argv_spec.rb", "spec/mspec/spec/helpers/bignum_spec.rb", "spec/mspec/spec/helpers/const_lookup_spec.rb", "spec/mspec/spec/helpers/environment_spec.rb", "spec/mspec/spec/helpers/fixture_spec.rb", "spec/mspec/spec/helpers/flunk_spec.rb", "spec/mspec/spec/helpers/io_spec.rb", "spec/mspec/spec/helpers/language_version_spec.rb", "spec/mspec/spec/helpers/ruby_exe_spec.rb", "spec/mspec/spec/helpers/scratch_spec.rb", "spec/mspec/spec/helpers/tmp_spec.rb", "spec/mspec/spec/matchers", "spec/mspec/spec/matchers/base_spec.rb", "spec/mspec/spec/matchers/be_ancestor_of_spec.rb", "spec/mspec/spec/matchers/be_close_spec.rb", "spec/mspec/spec/matchers/be_empty_spec.rb", "spec/mspec/spec/matchers/be_false_spec.rb", "spec/mspec/spec/matchers/be_kind_of_spec.rb", "spec/mspec/spec/matchers/be_nil_spec.rb", "spec/mspec/spec/matchers/be_true_spec.rb", "spec/mspec/spec/matchers/complain_spec.rb", "spec/mspec/spec/matchers/eql_spec.rb", "spec/mspec/spec/matchers/equal_element_spec.rb", "spec/mspec/spec/matchers/equal_spec.rb", "spec/mspec/spec/matchers/equal_utf16_spec.rb", "spec/mspec/spec/matchers/have_constant_spec.rb", "spec/mspec/spec/matchers/have_instance_method_spec.rb", "spec/mspec/spec/matchers/have_method_spec.rb", "spec/mspec/spec/matchers/have_private_instance_method_spec.rb", "spec/mspec/spec/matchers/include_spec.rb", "spec/mspec/spec/matchers/match_yaml_spec.rb", "spec/mspec/spec/matchers/output_spec.rb", "spec/mspec/spec/matchers/output_to_fd_spec.rb", "spec/mspec/spec/matchers/raise_error_spec.rb", "spec/mspec/spec/matchers/respond_to_spec.rb", "spec/mspec/spec/matchers/stringsymboladapter_spec.rb", "spec/mspec/spec/mocks", "spec/mspec/spec/mocks/mock_spec.rb", "spec/mspec/spec/mocks/proxy_spec.rb", "spec/mspec/spec/runner", "spec/mspec/spec/runner/actions", "spec/mspec/spec/runner/actions/debug_spec.rb", "spec/mspec/spec/runner/actions/filter_spec.rb", "spec/mspec/spec/runner/actions/gdb_spec.rb", "spec/mspec/spec/runner/actions/tag_spec.rb", "spec/mspec/spec/runner/actions/taglist_spec.rb", "spec/mspec/spec/runner/actions/tagpurge_spec.rb", "spec/mspec/spec/runner/actions/tally_spec.rb", "spec/mspec/spec/runner/actions/timer_spec.rb", "spec/mspec/spec/runner/context_spec.rb", "spec/mspec/spec/runner/example_spec.rb", "spec/mspec/spec/runner/exception_spec.rb", "spec/mspec/spec/runner/filters", "spec/mspec/spec/runner/filters/a.yaml", "spec/mspec/spec/runner/filters/b.yaml", "spec/mspec/spec/runner/filters/match_spec.rb", "spec/mspec/spec/runner/filters/profile_spec.rb", "spec/mspec/spec/runner/filters/regexp_spec.rb", "spec/mspec/spec/runner/filters/tag_spec.rb", "spec/mspec/spec/runner/formatters", "spec/mspec/spec/runner/formatters/describe_spec.rb", "spec/mspec/spec/runner/formatters/dotted_spec.rb", "spec/mspec/spec/runner/formatters/file_spec.rb", "spec/mspec/spec/runner/formatters/html_spec.rb", "spec/mspec/spec/runner/formatters/method_spec.rb", "spec/mspec/spec/runner/formatters/specdoc_spec.rb", "spec/mspec/spec/runner/formatters/spinner_spec.rb", "spec/mspec/spec/runner/formatters/summary_spec.rb", "spec/mspec/spec/runner/formatters/unit_spec.rb", "spec/mspec/spec/runner/formatters/yaml_spec.rb", "spec/mspec/spec/runner/mspec_spec.rb", "spec/mspec/spec/runner/shared_spec.rb", "spec/mspec/spec/runner/tag_spec.rb", "spec/mspec/spec/runner/tags.txt", "spec/mspec/spec/spec_helper.rb", "spec/mspec/spec/utils", "spec/mspec/spec/utils/name_map_spec.rb", "spec/mspec/spec/utils/options_spec.rb", "spec/mspec/spec/utils/script_spec.rb", "spec/mspec/spec/utils/version_spec.rb", "spec/spec_helper.rb"]
s.has_rdoc = true
s.homepage = %q{http://github.com/thbar/magic}
s.rdoc_options = ["--inline-source", "--charset=UTF-8"]
s.require_paths = ["lib"]
s.rubygems_version = %q{1.3.1}
s.summary = %q{TODO}

if s.respond_to? :specification_version then
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
s.specification_version = 2

if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
else
end
else
end
end

0 comments on commit bdced06

Please sign in to comment.