kuntoaji-harmony 0.5.6

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/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ .yardoc/
5
+ doc/
6
+ TODO
7
+ .yard_issues.md
8
+ sanity_check.rb
9
+ *.swp
10
+ *.swo
11
+ *~
12
+ Gemfile.lock
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in mygem.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright © 2009 Martin Aumont (mynyml)
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,13 @@
1
+ .gitignore
2
+ LICENSE
3
+ Manifest
4
+ README.md
5
+ Rakefile
6
+ docs.watchr
7
+ harmony.gemspec
8
+ lib/harmony.rb
9
+ lib/harmony/page.rb
10
+ specs.watchr
11
+ test/harmony_test.rb
12
+ test/page_test.rb
13
+ test/test_helper.rb
data/README.md ADDED
@@ -0,0 +1,162 @@
1
+ Harmony
2
+ =======
3
+
4
+ .,ad88888888baa,
5
+ ,d8P""" ""9888ba.
6
+ .a8" ,ad88888888888a
7
+ aP' ,88888888888888888a
8
+ ,8" ,88888888888888888888,
9
+ ,8' (888888888( )888888888,
10
+ ,8' `8888888888888888888888
11
+ 8) `888888888888888888888,
12
+ 8 "8888888888888888888)
13
+ 8 `888888888888888888)
14
+ 8) "8888888888888888
15
+ (b "88888888888888'
16
+ `8, (8) 8888888888888)
17
+ "8a ,888888888888)
18
+ V8, d88888888888"
19
+ `8b, ,d8888888888P'
20
+ `V8a, ,ad8888888888P'
21
+ ""88888888888888888P"
22
+ """"""""""""
23
+
24
+ Summary
25
+ -------
26
+
27
+ Harmony provides a simple DSL to execute javascript + DOM code within ruby.
28
+
29
+ Examples
30
+ --------
31
+
32
+ ### Simple Javascript Parsing
33
+
34
+ require 'harmony'
35
+
36
+ page = Harmony::Page.new(<<-HTML)
37
+ <html>
38
+ <head>
39
+ <title>Foo</title>
40
+ </head>
41
+ <body></body>
42
+ </html>
43
+ HTML
44
+
45
+ page.execute_js("1+1") #=> 2
46
+ page.execute_js("document.title") #=> "Foo"
47
+
48
+ The Page object's `#execute_js` method (aliased as `#x` for convenience) takes a
49
+ string of javascript code, executes it and returns the last statement's value
50
+ (just like a ruby method).
51
+
52
+ ### Javascript Unit Tests
53
+
54
+ One interesting use of Harmony is to test your javascript code within your ruby
55
+ application's own tests (test/unit, minitest, RSpec, nanotest, etc). Which
56
+ consequently means that you can now run browser-less, fully command-line
57
+ based, DOM-javascript tests.
58
+
59
+ require 'test/unit'
60
+ require 'harmony'
61
+
62
+ class JavascriptTest < Test::Unit::TestCase
63
+ def setup
64
+ @page = Harmony::Page.new
65
+ @page.load('public/javascripts/foo.js')
66
+ end
67
+
68
+ def test_foo
69
+ assert_equal "world", @page.execute_js(<<-JS)
70
+ foo = new Foo;
71
+ foo.hello();
72
+ JS
73
+ end
74
+ end
75
+
76
+ ### DOM Handling
77
+
78
+ Don't be affraid to throw in your favorite client-side js framework, like
79
+ JQuery or Prototype. And notice that scripts linked to in `<script>` tags will
80
+ automatically get pulled in.
81
+
82
+ require 'harmony'
83
+
84
+ page = Harmony::Page.new(<<-HTML)
85
+ <html>
86
+ <head>
87
+ <script src="javascripts/jquery.js" type="text/javascript"></script>
88
+ </head>
89
+ <body>
90
+ <div id="widget">ohaie</div>
91
+ </body>
92
+ </html>
93
+ HTML
94
+
95
+ page.execute_js("$('#widget').innerHTML") #=> "ohaie"
96
+
97
+ ### Fetching Documents
98
+
99
+ Use `Harmony::Page.fetch(uri)` to create a page from a remote document.
100
+
101
+ require 'harmony'
102
+
103
+ page = Harmony::Page.fetch('http://example.com')
104
+ page.execute_js('document.title') #=> "Example Web Page"
105
+
106
+ `fetch` also accepts "file://" uris.
107
+
108
+ Install
109
+ -------
110
+
111
+ # There's a gem dependency bug in rubygems currently, so we'll have to
112
+ # install some dependencies manually. This will be fixed soon.
113
+ gem install stackdeck
114
+ gem install johnson -v "2.0.0.pre3"
115
+
116
+ gem install harmony
117
+
118
+ See Also
119
+ --------
120
+
121
+ * [holygrail][20]: Harmony plugin for Rails tests
122
+
123
+ Acknowledgement
124
+ ---------------
125
+
126
+ Harmony is a thin DSL wrapper around three **amazing** libs, [Johnson][1],
127
+ [env.js][30] and [Envjs][2] . The authors of those libs have been doing a huge
128
+ amount of great work for quite a while, so please go recommend them on
129
+ WorkingWithRails right now and/or follow them on github:
130
+
131
+ [jbarnette][3], [tenderlove][4], [smparkes][5], [wycats][6], [matthewd][7], [thatcher][8], [jeresig][9]
132
+
133
+ Special thanks go to [smparkes][10] for his patient help, and for providing the
134
+ last puzzle pieces that made [everything][12] [work][11] [together][13].
135
+
136
+ Links
137
+ -----
138
+ * code: <http://github.com/mynyml/harmony>
139
+ * docs: <http://yardoc.org/docs/mynyml-harmony>
140
+ * wiki: <http://wiki.github.com/mynyml/harmony>
141
+ * bugs: <http://github.com/mynyml/harmony/issues>
142
+
143
+
144
+
145
+ YinYang ASCII art is © Normand Veilleux (nveilleuATemr1.emrDOTca)
146
+
147
+
148
+ [1]: http://github.com/jbarnette/johnson/
149
+ [2]: http://env-js.appspot.com/
150
+ [3]: http://www.workingwithrails.com/person/10668-john-barnette
151
+ [4]: http://github.com/tenderlove/
152
+ [5]: http://www.workingwithrails.com/person/11739-steven-parkes
153
+ [6]: http://www.workingwithrails.com/person/1805-yehuda-katz
154
+ [7]: http://www.workingwithrails.com/person/6221-matthew-draper
155
+ [8]: http://github.com/thatcher/
156
+ [9]: http://ejohn.org/
157
+ [10]: http://github.com/smparkes/
158
+ [11]: http://github.com/smparkes/env-js/commit/49abe259813a505b0761e6d31dde671344b5bc87#L0R279
159
+ [12]: http://groups.google.com/group/envjs/msg/4ac719f7db7912f5
160
+ [13]: http://gemcutter.org/gems/envjs
161
+ [20]: http://github.com/mynyml/holygrail
162
+ [30]: http://github.com/thatcher/env-js
data/Rakefile ADDED
@@ -0,0 +1,41 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ def gem_opt
5
+ defined?(Gem) ? "-rubygems" : ""
6
+ end
7
+
8
+ # --------------------------------------------------
9
+ # Tests
10
+ # --------------------------------------------------
11
+ task(:default => "test:all")
12
+
13
+ namespace(:test) do
14
+
15
+ desc "Run all tests"
16
+ task(:all) do
17
+ exit system("ruby #{gem_opt} -I.:lib:test -e'%w( #{Dir['test/**/*_test.rb'].join(' ')} ).each {|p| require p }'")
18
+ end
19
+
20
+ desc "Run all tests on multiple ruby versions (requires rvm)"
21
+ task(:portability) do
22
+ versions = %w( 1.8.6 1.8.7 )
23
+ versions.each do |version|
24
+ system <<-BASH
25
+ bash -c 'source ~/.rvm/scripts/rvm;
26
+ rvm use #{version};
27
+ echo "--------- #{version} ----------";
28
+ rake -s test:all'
29
+ BASH
30
+ end
31
+ end
32
+ end
33
+
34
+ # --------------------------------------------------
35
+ # Docs
36
+ # --------------------------------------------------
37
+ desc "Generate YARD Documentation"
38
+ task :yardoc do
39
+ require 'yard'
40
+ YARD::CLI::Yardoc.run *%w( --no-private --no-highlight -o doc/yard --readme README.md --markup markdown - LICENSE )
41
+ end
data/docs.watchr ADDED
@@ -0,0 +1,25 @@
1
+ # Run me with:
2
+ # $ watchr docs.watchr
3
+
4
+ require 'yard'
5
+ # --------------------------------------------------
6
+ # Rules
7
+ # --------------------------------------------------
8
+ watch( 'lib/.*\.rb' ) { yard }
9
+ watch( 'README.md' ) { yard }
10
+
11
+ # --------------------------------------------------
12
+ # Signal Handling
13
+ # --------------------------------------------------
14
+ Signal.trap('QUIT') { yard } # Ctrl-\
15
+ Signal.trap('INT' ) { abort("\n") } # Ctrl-C
16
+
17
+ # --------------------------------------------------
18
+ # Helpers
19
+ # --------------------------------------------------
20
+ def yard
21
+ print "Updating yardocs... "; STDOUT.flush
22
+ YARD::CLI::Yardoc.run *%w( --no-private --no-highlight -o doc/yard --readme README.md --markup markdown - LICENSE )
23
+ print "done\n"
24
+ end
25
+
data/harmony.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "harmony/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "kuntoaji-harmony"
7
+ s.version = Harmony::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["mynyml", "Kunto Aji Kristianto"]
10
+ s.email = ["mynyml@gmail.com", "kunto.aji.kr@gmail.com"]
11
+ s.homepage = "http://github.com/kuntoaji/harmony"
12
+ s.summary = %q{Javascript + DOM in your ruby, the simple way}
13
+ s.description = %q{Javascript + DOM in your ruby, the simple way. Kuntoaji's version.}
14
+
15
+ #s.rubyforge_project = ""
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'johnson', '2.0.0.pre3'
23
+ s.add_dependency 'envjs', '0.3.7'
24
+ s.add_development_dependency 'minitest'
25
+ end
data/lib/harmony.rb ADDED
@@ -0,0 +1,4 @@
1
+ module Harmony
2
+ require 'harmony/version'
3
+ autoload :Page, 'harmony/page'
4
+ end
@@ -0,0 +1,125 @@
1
+ require 'pathname'
2
+ require 'tempfile'
3
+
4
+ require 'johnson/tracemonkey'
5
+ require 'envjs/runtime'
6
+
7
+ module Harmony
8
+ class Page
9
+
10
+ # Window factory
11
+ #
12
+ # @private
13
+ module Window #:nodoc:
14
+ extend self
15
+
16
+ # Cache the initial runtime. Parsing env.js (done automatically when
17
+ # Envjs::Runtime is extended) takes a while, so we only want to do this
18
+ # once.
19
+ #
20
+ # @private
21
+ BASE_RUNTIME = Johnson::Runtime.new
22
+ BASE_RUNTIME.extend(Envjs::Runtime)
23
+
24
+ def from_uri(uri)
25
+ BASE_RUNTIME.evaluate("window.open('#{uri}')")
26
+ end
27
+
28
+ def from_document(document)
29
+ Tempfile.open('harmony') {|f| f << document; @path = f.path }
30
+ from_uri("file://#{@path}")
31
+ end
32
+
33
+ def blank
34
+ from_uri('about:blank')
35
+ end
36
+ end
37
+
38
+ # Create page from remote document.
39
+ #
40
+ # @example
41
+ #
42
+ # Page.fetch('http://montrealrb.org')
43
+ # Page.fetch('http://localhost:3000')
44
+ # Page.fetch('file:///home/mynyml/www/foo/index.html')
45
+ #
46
+ # @param [String] uri
47
+ # uri to fetch document from
48
+ #
49
+ # @return [Page]
50
+ # new page object preloaded with fetched document
51
+ #
52
+ def self.fetch(uri)
53
+ page = new
54
+ page.instance_variable_set(:@window, Window.from_uri(uri))
55
+ page
56
+ end
57
+
58
+ # Create new page containing given document.
59
+ #
60
+ # @param [String] document
61
+ # HTML document. Defaults to an "about:blank" window, with the basic
62
+ # structure: `<html><head><title></title></head><body></body></html>`
63
+ #
64
+ def initialize(document=nil)
65
+ @window = Window.from_document(document) if document
66
+ end
67
+
68
+ # Load one or more javascript files in page's context
69
+ #
70
+ # @param [#to_s, #to_s, ...] paths
71
+ # paths to js file
72
+ # @return [Page] self
73
+ #
74
+ def load(*paths)
75
+ paths.flatten.each do |path|
76
+ path.to_s.map {|f|
77
+ window.evaluate(File.read(f).gsub(/\A#!.*$/, ''), f, 1)
78
+ }.last
79
+ end
80
+ self
81
+ end
82
+
83
+ # Evaluate Javascript code within this page's context.
84
+ #
85
+ # @param [String] code
86
+ # javascript code to execute
87
+ #
88
+ # @return [Object]
89
+ # last javascript statement's value, cast to a ruby object
90
+ #
91
+ def execute_js(code)
92
+ window.evaluate(code)
93
+ end
94
+ alias :x :execute_js
95
+
96
+ # DOM document's `window` object. Equivalent to the return value of
97
+ # `page.execute_js('window')`
98
+ #
99
+ # @return [Object]
100
+ # window DOM object
101
+ #
102
+ def window
103
+ @window ||= Window.blank
104
+ end
105
+
106
+ # Convenience method, equivalent to the return value of
107
+ # `page.execute_js('window.document')`
108
+ #
109
+ # @return [Object]
110
+ # document DOM object
111
+ #
112
+ def document
113
+ window.document
114
+ end
115
+
116
+ # Page as html document
117
+ #
118
+ # @return [String] html
119
+ #
120
+ def to_html
121
+ document.innerHTML
122
+ end
123
+ end
124
+ end
125
+
@@ -0,0 +1,3 @@
1
+ module Harmony
2
+ VERSION = "0.5.6"
3
+ end
data/specs.watchr ADDED
@@ -0,0 +1,36 @@
1
+ # Run me with:
2
+ # $ watchr specs.watchr
3
+
4
+ # --------------------------------------------------
5
+ # Rules
6
+ # --------------------------------------------------
7
+ watch( '^test.*/.*_test\.rb' ) {|m| ruby m[0] }
8
+ watch( '^lib/(.*)\.rb' ) {|m| ruby "test/#{m[1]}_test.rb" }
9
+ watch( '^lib/harmony/(.*)\.rb' ) {|m| ruby "test/#{m[1]}_test.rb" }
10
+ watch( '^test/test_helper\.rb' ) { ruby tests }
11
+
12
+ # --------------------------------------------------
13
+ # Signal Handling
14
+ # --------------------------------------------------
15
+ Signal.trap('QUIT') { ruby tests } # Ctrl-\
16
+ Signal.trap('INT' ) { abort("\n") } # Ctrl-C
17
+
18
+ # --------------------------------------------------
19
+ # Helpers
20
+ # --------------------------------------------------
21
+ def ruby(*paths)
22
+ run "ruby #{gem_opt} -I.:lib:test -e'%w( #{paths.flatten.join(' ')} ).each {|p| require p }'"
23
+ end
24
+
25
+ def tests
26
+ Dir['test/**/*_test.rb']
27
+ end
28
+
29
+ def run( cmd )
30
+ puts cmd
31
+ system cmd
32
+ end
33
+
34
+ def gem_opt
35
+ defined?(Gem) ? "-rubygems" : ""
36
+ end
@@ -0,0 +1,8 @@
1
+ require 'test/test_helper'
2
+
3
+ class HarmonyTest < MiniTest::Unit::TestCase
4
+ test "version" do
5
+ refute_nil Harmony::VERSION
6
+ end
7
+ end
8
+
data/test/page_test.rb ADDED
@@ -0,0 +1,101 @@
1
+ require 'test/test_helper'
2
+
3
+ class PageTest < MiniTest::Unit::TestCase
4
+ include Harmony
5
+
6
+ PAGE = Page.new
7
+
8
+ test "api" do
9
+ assert_respond_to Page, :fetch
10
+ assert_respond_to Page, :new
11
+ assert_respond_to PAGE, :window
12
+ assert_respond_to PAGE, :document
13
+ assert_respond_to PAGE, :execute_js
14
+ assert_respond_to PAGE, :x
15
+ assert_respond_to PAGE, :to_s
16
+ end
17
+
18
+ test "document shortcut" do
19
+ assert_equal PAGE.window.document, PAGE.document
20
+ end
21
+
22
+ test "executes javascript" do
23
+ assert_equal 7, PAGE.x('5+2')
24
+ end
25
+
26
+ test "excutes DOM-accessing javascript" do
27
+ page = Page.new(<<-HTML)
28
+ <html>
29
+ <head>
30
+ <title>Harmony</title>
31
+ </head>
32
+ <body>
33
+ <div></div>
34
+ <div></div>
35
+ </body>
36
+ </html>
37
+ HTML
38
+ assert_equal 'Harmony', page.document.title
39
+ assert_equal 2, page.x(<<-JS)
40
+ document.getElementsByTagName('div').length
41
+ JS
42
+ end
43
+
44
+ test "fetches remote document" do
45
+ path = tempfile(<<-HTML)
46
+ <html><head><title>foo</title></head><body></body></html>
47
+ HTML
48
+ page = Page.fetch("file://#{path}")
49
+ assert_equal 'foo', page.document.title
50
+ end
51
+
52
+ test "default window" do
53
+ assert_empty Page.new.document.title
54
+ end
55
+
56
+ test "cast to html" do
57
+ assert_equal "<html><head><title></title></head><body></body></html>", Page.new.to_html
58
+ end
59
+
60
+ test "loads javascript file" do
61
+ path = tempfile(<<-HTML)
62
+ function foo() { return 'bar' };
63
+ HTML
64
+ page = Page.new.load(path)
65
+ assert_equal 'bar', page.x('foo()')
66
+ end
67
+
68
+ test "can load multiple files as array" do
69
+ paths = []
70
+ paths << tempfile(<<-HTML)
71
+ function foo() { return 'bar' };
72
+ HTML
73
+ paths << tempfile(<<-HTML)
74
+ function moo() { return 'boo' };
75
+ HTML
76
+
77
+ page = Page.new.load(paths)
78
+ assert_equal 'bar', page.x('foo()')
79
+ assert_equal 'boo', page.x('moo()')
80
+ end
81
+
82
+ test "can load multiple files as splat" do
83
+ paths = []
84
+ paths << tempfile(<<-HTML)
85
+ function foo() { return 'bar' };
86
+ HTML
87
+ paths << tempfile(<<-HTML)
88
+ function moo() { return 'boo' };
89
+ HTML
90
+
91
+ page = Page.new.load(*paths)
92
+ assert_equal 'bar', page.x('foo()')
93
+ assert_equal 'boo', page.x('moo()')
94
+ end
95
+
96
+ private
97
+ def tempfile(content)
98
+ Tempfile.open('abc') {|f| f << content; @__path = f.path }
99
+ @__path
100
+ end
101
+ end
@@ -0,0 +1,13 @@
1
+ require 'minitest/autorun'
2
+
3
+ begin require 'ruby-debug'; rescue LoadError; end
4
+ begin require 'redgreen' ; rescue LoadError; end
5
+ begin require 'phocus' ; rescue LoadError; end
6
+
7
+ require 'lib/harmony'
8
+
9
+ class MiniTest::Unit::TestCase
10
+ def self.test(name, &block)
11
+ define_method("test_#{name}".gsub(/\s/,'_'), &block)
12
+ end
13
+ end
metadata ADDED
@@ -0,0 +1,133 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kuntoaji-harmony
3
+ version: !ruby/object:Gem::Version
4
+ hash: 7
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 5
9
+ - 6
10
+ version: 0.5.6
11
+ platform: ruby
12
+ authors:
13
+ - mynyml
14
+ - Kunto Aji Kristianto
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-02-03 00:00:00 +07:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: johnson
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - "="
29
+ - !ruby/object:Gem::Version
30
+ hash: -223651601
31
+ segments:
32
+ - 2
33
+ - 0
34
+ - 0
35
+ - pre
36
+ - 3
37
+ version: 2.0.0.pre3
38
+ type: :runtime
39
+ version_requirements: *id001
40
+ - !ruby/object:Gem::Dependency
41
+ name: envjs
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
44
+ none: false
45
+ requirements:
46
+ - - "="
47
+ - !ruby/object:Gem::Version
48
+ hash: 29
49
+ segments:
50
+ - 0
51
+ - 3
52
+ - 7
53
+ version: 0.3.7
54
+ type: :runtime
55
+ version_requirements: *id002
56
+ - !ruby/object:Gem::Dependency
57
+ name: minitest
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ hash: 3
65
+ segments:
66
+ - 0
67
+ version: "0"
68
+ type: :development
69
+ version_requirements: *id003
70
+ description: Javascript + DOM in your ruby, the simple way. Kuntoaji's version.
71
+ email:
72
+ - mynyml@gmail.com
73
+ - kunto.aji.kr@gmail.com
74
+ executables: []
75
+
76
+ extensions: []
77
+
78
+ extra_rdoc_files: []
79
+
80
+ files:
81
+ - .gitignore
82
+ - Gemfile
83
+ - LICENSE
84
+ - Manifest
85
+ - README.md
86
+ - Rakefile
87
+ - docs.watchr
88
+ - harmony.gemspec
89
+ - lib/harmony.rb
90
+ - lib/harmony/page.rb
91
+ - lib/harmony/version.rb
92
+ - specs.watchr
93
+ - test/harmony_test.rb
94
+ - test/page_test.rb
95
+ - test/test_helper.rb
96
+ has_rdoc: true
97
+ homepage: http://github.com/kuntoaji/harmony
98
+ licenses: []
99
+
100
+ post_install_message:
101
+ rdoc_options: []
102
+
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ hash: 3
111
+ segments:
112
+ - 0
113
+ version: "0"
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ">="
118
+ - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ requirements: []
124
+
125
+ rubyforge_project:
126
+ rubygems_version: 1.4.2
127
+ signing_key:
128
+ specification_version: 3
129
+ summary: Javascript + DOM in your ruby, the simple way
130
+ test_files:
131
+ - test/harmony_test.rb
132
+ - test/page_test.rb
133
+ - test/test_helper.rb