opal-jquery 0.4.1 → 0.4.5

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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/.editorconfig +12 -0
  3. data/.travis.yml +27 -9
  4. data/CHANGELOG.md +56 -2
  5. data/Gemfile +15 -0
  6. data/README.md +5 -3
  7. data/Rakefile +22 -4
  8. data/config.ru +4 -6
  9. data/lib/opal/jquery/element.rb +91 -25
  10. data/lib/opal/jquery/http.rb +10 -2
  11. data/lib/opal/jquery/version.rb +1 -1
  12. data/lib/opal/jquery/window.rb +2 -1
  13. data/opal-jquery.gemspec +8 -7
  14. data/{spec → spec-opal}/document_spec.rb +11 -4
  15. data/{spec → spec-opal}/element/after_spec.rb +1 -1
  16. data/{spec → spec-opal}/element/animations_spec.rb +5 -5
  17. data/{spec → spec-opal}/element/append_spec.rb +1 -1
  18. data/{spec → spec-opal}/element/append_to_spec.rb +1 -1
  19. data/{spec → spec-opal}/element/at_spec.rb +1 -1
  20. data/{spec → spec-opal}/element/attributes_spec.rb +1 -1
  21. data/{spec → spec-opal}/element/before_spec.rb +1 -1
  22. data/{spec → spec-opal}/element/class_name_spec.rb +2 -2
  23. data/{spec → spec-opal}/element/css_spec.rb +3 -3
  24. data/{spec → spec-opal}/element/display_spec.rb +6 -6
  25. data/spec-opal/element/expose_spec.rb +73 -0
  26. data/{spec → spec-opal}/element/height_width_spec.rb +1 -1
  27. data/{spec → spec-opal}/element/inspect_spec.rb +1 -1
  28. data/{spec → spec-opal}/element/iterable_spec.rb +1 -1
  29. data/{spec → spec-opal}/element/length_spec.rb +1 -1
  30. data/spec-opal/element/method_missing_spec.rb +34 -0
  31. data/{spec → spec-opal}/element/prepend_spec.rb +1 -1
  32. data/{spec → spec-opal}/element/to_s_spec.rb +1 -1
  33. data/{spec → spec-opal}/element/traversing_spec.rb +5 -5
  34. data/spec-opal/element_spec.rb +261 -0
  35. data/{spec → spec-opal}/event_spec.rb +1 -1
  36. data/{spec → spec-opal}/fixtures/simple.txt +0 -0
  37. data/{spec → spec-opal}/fixtures/user.json +0 -0
  38. data/{spec → spec-opal}/http_spec.rb +15 -1
  39. data/{spec → spec-opal}/jquery/index.html.erb +2 -1
  40. data/spec-opal/jquery/index3.html.erb +10 -0
  41. data/{spec/jquery/jquery.js → spec-opal/jquery/jquery-1.8.3.js} +0 -0
  42. data/spec-opal/jquery/jquery-3.0.0.js +4 -0
  43. data/spec-opal/kernel_spec.rb +15 -0
  44. data/{spec → spec-opal}/local_storage_spec.rb +1 -1
  45. data/{spec → spec-opal}/spec_helper.rb +10 -0
  46. data/{spec → spec-opal}/zepto/index.html.erb +1 -0
  47. data/{spec → spec-opal}/zepto/zepto.js +0 -0
  48. metadata +81 -83
  49. data/spec/element/method_missing_spec.rb +0 -32
  50. data/spec/element_spec.rb +0 -261
  51. data/spec/kernel_spec.rb +0 -7
@@ -165,7 +165,7 @@ class HTTP
165
165
 
166
166
  %x{
167
167
  if (typeof(#{payload}) === 'string') {
168
- #{settings}.data = payload;
168
+ settings.data = payload;
169
169
  }
170
170
  else if (payload != nil) {
171
171
  settings.data = payload.$to_json();
@@ -223,8 +223,16 @@ class HTTP
223
223
  #
224
224
  # @param key [String] name of the header to get
225
225
  # @return [String] value of the header
226
+ # @return [nil] if the header +key+ was not in the response
226
227
  def get_header(key)
227
- `#@xhr.getResponseHeader(#{key});`
228
+ %x{
229
+ var value = #@xhr.getResponseHeader(#{key});
230
+ return (value === null) ? nil : value;
231
+ }
232
+ end
233
+
234
+ def inspect
235
+ "#<HTTP @url=#{@url} @method=#{@method}>"
228
236
  end
229
237
 
230
238
  private
@@ -1,5 +1,5 @@
1
1
  module Opal
2
2
  module JQuery
3
- VERSION = '0.4.1'
3
+ VERSION = '0.4.5'
4
4
  end
5
5
  end
@@ -6,7 +6,8 @@ module Browser
6
6
  # Generally, you will want to use the top level {::Window} instance, which
7
7
  # wraps `window` from the main page.
8
8
  class Window
9
- include Native
9
+ # In more recent Opal versions Native::Wrapper should be used
10
+ include defined?(Native::Wrapper) ? Native::Wrapper : Native
10
11
 
11
12
  # Returns this {Window} instance wrapped as an {Element}. Useful for
12
13
  # delegating jQuery events, which allows the use of `window` as target.
data/opal-jquery.gemspec CHANGED
@@ -4,19 +4,20 @@ require File.expand_path('../lib/opal/jquery/version', __FILE__)
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'opal-jquery'
6
6
  s.version = Opal::JQuery::VERSION
7
- s.author = 'Adam Beynon'
8
- s.email = 'adam.beynon@gmail.com'
9
- s.homepage = 'http://opalrb.org'
10
- s.summary = 'Opal access to jquery'
11
- s.description = 'Opal DOM library for jquery'
7
+ s.authors = ['Adam Beynon', 'Elia Schito']
8
+ s.email = 'elia@schito.me'
9
+ s.homepage = 'https://github.com/opal/opal-jquery#readme'
10
+ s.summary = 'Opal access to jQuery'
11
+ s.description = 'Opal DOM library for jQuery'
12
12
 
13
13
  s.files = `git ls-files`.split("\n")
14
14
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
15
15
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
16
  s.require_paths = ['lib']
17
17
 
18
- s.add_runtime_dependency 'opal', '>= 0.7.0', '< 0.10.0'
19
- s.add_development_dependency 'opal-rspec', '~> 0.4.0'
18
+ s.add_runtime_dependency 'opal', ['>= 0.10.0', '< 2.0']
19
+ s.add_development_dependency 'opal-rspec', ['>= 0.7', '< 2.0']
20
+ s.add_development_dependency 'opal-sprockets', ['>= 0.4.1', '< 2.0']
20
21
  s.add_development_dependency 'yard'
21
22
  s.add_development_dependency 'rake'
22
23
  end
@@ -1,22 +1,29 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Document do
3
+ RSpec.describe 'Document' do
4
4
  subject { Document }
5
5
 
6
6
  describe "ready?" do
7
+ it "accepts a block" do
8
+ Document.ready? {
9
+ puts `$.fn.jquery`
10
+ }
11
+ end
12
+
7
13
  it "accepts a block" do
8
14
  Document.ready? { }
9
15
  end
10
16
  end
11
-
17
+
12
18
  describe "ready" do
19
+ p self.ancestors
13
20
  async "resolves when document is ready" do
14
- Document.ready.then do
21
+ Document.ready.then do
15
22
  async { Document.ready.resolved?.should be_truthy }
16
23
  end
17
24
  end
18
25
  end
19
-
26
+
20
27
  describe "title" do
21
28
  it "gets the document title" do
22
29
  Document.title.should be_kind_of(String)
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Element#after' do
3
+ RSpec.describe 'Element#after' do
4
4
  html <<-HTML
5
5
  <div id="some-header" class="kapow"></div>
6
6
  <div id="foo" class="after-spec-first"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element animation methods" do
3
+ RSpec.describe "Element animation methods" do
4
4
  html <<-HTML
5
5
  <div id="animate-foo"></div>
6
6
  HTML
@@ -41,16 +41,16 @@ describe "Element animation methods" do
41
41
  end
42
42
  end
43
43
 
44
- describe "Element effects methods" do
44
+ RSpec.describe "Element effects methods" do
45
45
  html <<-HTML
46
46
  <div id="effects-foo"></div>
47
47
  HTML
48
-
48
+
49
49
  describe "#fadeout / #fadein" do
50
50
  async "should fade the element out first" do
51
51
  foo = Element.find "#effects-foo"
52
52
  foo.effect(:fade_out)
53
-
53
+
54
54
  delay 1 do
55
55
  async {
56
56
  foo.css("display").should eq("none")
@@ -64,4 +64,4 @@ describe "Element effects methods" do
64
64
  end
65
65
  end
66
66
  end
67
- end
67
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#append" do
3
+ RSpec.describe "Element#append" do
4
4
  html <<-HTML
5
5
  <div id="foo" class="first-append"></div>
6
6
  <div id="bar" class="first-append"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#append_to" do
3
+ RSpec.describe "Element#append_to" do
4
4
  html <<-HTML
5
5
  <div id="foo"></div>
6
6
  <div id="bar"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#at" do
3
+ RSpec.describe "Element#at" do
4
4
  html <<-HTML
5
5
  <div class="foo" id="blah"></div>
6
6
  <div class="foo" id="bleh"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Element do
3
+ RSpec.describe Element do
4
4
  html <<-HTML
5
5
  <div id="foo"></div>
6
6
  <div id="bar" class="apples"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#before" do
3
+ RSpec.describe "Element#before" do
4
4
  html <<-HTML
5
5
  <div id="some-header" class="kapow"></div>
6
6
  <div id="foo" class="before-spec-first"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#class_name" do
3
+ RSpec.describe "Element#class_name" do
4
4
  html <<-HTML
5
5
  <div id="foo" class="whiskey"></div>
6
6
  <div id="bar" class="scotch brandy"></div>
@@ -30,7 +30,7 @@ describe "Element#class_name" do
30
30
  end
31
31
  end
32
32
 
33
- describe "Element#class_name=" do
33
+ RSpec.describe "Element#class_name=" do
34
34
  before do
35
35
  @div = Element.parse <<-HTML
36
36
  <div id="class-name-set-spec">
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#css" do
3
+ RSpec.describe "Element#css" do
4
4
  html <<-HTML
5
5
  <div id="foo" style="background-color:rgb(15,99,30); color:;"></div>
6
6
  <div id="bar"></div>
@@ -32,8 +32,8 @@ describe "Element#css" do
32
32
  it "should set the properties" do
33
33
  hash = Element.find("#hash")
34
34
  hash.css(:width => "100px", :height => "200px")
35
- hash.css("width").should be_kind_of(String)
36
- hash.css("height").should be_kind_of(String)
35
+ hash.css("width").should be_kind_of(String)
36
+ hash.css("height").should be_kind_of(String)
37
37
  end
38
38
 
39
39
  it "should return self" do
@@ -1,34 +1,34 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element display methods" do
3
+ RSpec.describe "Element display methods" do
4
4
  html <<-HTML
5
5
  <div id="shown"></div>
6
6
  <div id="hidden" style="display: none"></div>
7
7
  HTML
8
8
 
9
9
  it "hides an element" do
10
- element = Element.find('#shown')
10
+ element = Element.find('#shown')
11
11
  element.css('display').should == 'block'
12
12
  element.hide
13
13
  element.css('display').should == 'none'
14
14
  end
15
15
 
16
- it "shows an element" do
17
- element = Element.find('#hidden')
16
+ it "shows an element" do
17
+ element = Element.find('#hidden')
18
18
  element.css('display').should == 'none'
19
19
  element.show
20
20
  element.css('display').should == 'block'
21
21
  end
22
22
 
23
23
  it "toggles on a hidden element" do
24
- element = Element.find('#hidden')
24
+ element = Element.find('#hidden')
25
25
  element.css('display').should == 'none'
26
26
  element.toggle
27
27
  element.css('display').should == 'block'
28
28
  end
29
29
 
30
30
  it "toggles off a displayed element" do
31
- element = Element.find('#shown')
31
+ element = Element.find('#shown')
32
32
  element.css('display').should == 'block'
33
33
  element.toggle
34
34
  element.css('display').should == 'none'
@@ -0,0 +1,73 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Element#expose" do
4
+ subject(:element) { Element.new }
5
+ before do
6
+ `$.fn.exposableMethod = function() {return 123}`
7
+ `$.fn.exposableMethod2 = function() {return 12}`
8
+ `$.fn.opal_specs_extension = function() {return "foo_bar_baz";};`
9
+ `$.fn.opal_specs_args = function() {return Array.prototype.slice.call(arguments);};`
10
+ Element.expose :opal_specs_extension, :opal_specs_args
11
+ end
12
+
13
+ after do
14
+ `delete $.fn.exposableMethod; delete $.fn.$exposableMethod;`
15
+ `delete $.fn.exposableMethod2; delete $.fn.$exposableMethod2;`
16
+ `delete $.fn.opal_specs_extension; delete $.fn.$opal_specs_extension;`
17
+ `delete $.fn.opal_specs_args; delete $.fn.$opal_specs_args;`
18
+ end
19
+
20
+ it "exposes jquery plugins by given name" do
21
+ Element.new.opal_specs_extension.should eq("foo_bar_baz")
22
+ end
23
+
24
+ it "forwards any args onto native function" do
25
+ Element.new.opal_specs_args(:foo, 42, false).should eq([:foo, 42, false])
26
+ end
27
+
28
+ it "only forwards calls when a native method exists" do
29
+ expect {
30
+ Element.new.some_unknown_plugin
31
+ }.to raise_error(Exception)
32
+ end
33
+
34
+ it 'exposes methods defined on $.fn' do
35
+ expect(element).to respond_to(:exposableMethod) # via #respond_to_missing?
36
+ expect(element.methods).not_to include(:exposableMethod)
37
+ Element.expose :exposableMethod
38
+ expect(element.methods).to include(:exposableMethod)
39
+ expect(element).to respond_to(:exposableMethod) # via method missing
40
+ expect(element.exposableMethod).to eq(123)
41
+ end
42
+
43
+ it 'work if exposing the same method multiple times' do
44
+ Element.expose :exposableMethod
45
+ Element.expose :exposableMethod
46
+ expect(element.exposableMethod).to eq(123)
47
+
48
+ Element.expose :exposableMethod, :exposableMethod
49
+ expect(element.exposableMethod).to eq(123)
50
+ end
51
+
52
+ it 'work if exposing multiple methods' do
53
+ Element.expose :exposableMethod, :exposableMethod2
54
+ expect(element.exposableMethod).to eq(123)
55
+ expect(element.exposableMethod2).to eq(12)
56
+ end
57
+
58
+ it 'does not call method_missing after the method is exposed' do
59
+ pending "broken on opal < 0.11" if RUBY_ENGINE_VERSION.to_f < 0.11
60
+
61
+ expect(element).to receive(:method_missing).once.with(:exposableMethod)
62
+ def element.method_missing(name)
63
+ "#{name} (via method_missing)"
64
+ end
65
+
66
+ expect(element.exposableMethod).to eq("exposableMethod (via method_missing)")
67
+ Element.expose :exposableMethod
68
+
69
+ expect(element).not_to receive(:method_missing).once
70
+ element.exposableMethod
71
+ end
72
+
73
+ end
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element height and width" do
3
+ RSpec.describe "Element height and width" do
4
4
  html <<-HTML
5
5
  <div id="dimensions" style='width: 100px; height: 200px'></div>
6
6
  HTML
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#inspect" do
3
+ RSpec.describe "Element#inspect" do
4
4
  html <<-HTML
5
5
  <div id="foo"></div>
6
6
  <div class="bar"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Element do
3
+ RSpec.describe Element do
4
4
  html <<-HTML
5
5
  <table class="players">
6
6
  <tr class="player">
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#length" do
3
+ RSpec.describe "Element#length" do
4
4
  it "should report the number of elements in the instance" do
5
5
  Element.new.length.should == 1
6
6
  end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe "Element#method_missing" do
4
+ context 'with missing property' do
5
+ html %{<div id="foo" class="bar"></div>}
6
+
7
+ it 'fallsback on method_missing when a method is unknown' do
8
+ expect(Element['#foo']).to respond_to(:offsetParent)
9
+ expect(Element['#foo'].offsetParent).to eq(Element['body'])
10
+ end
11
+ end
12
+
13
+ context 'jQuery plugin methods' do
14
+ subject(:element) { Element.new }
15
+
16
+ before do
17
+ `$.fn.pluginMethod = function() {return 123}`
18
+ end
19
+
20
+ after do
21
+ `delete $.fn.pluginMethod; delete $.fn.$pluginMethod;`
22
+ end
23
+
24
+ it 'calls method_missing' do
25
+ expect(element).to receive(:method_missing).once.with(:pluginMethod)
26
+ element.pluginMethod
27
+ end
28
+
29
+ it 'calls forwards to the plugin', :focus do
30
+ pending "broken on opal < 0.11" if RUBY_ENGINE_VERSION.to_f < 0.11
31
+ expect(element.pluginMethod).to eq(123)
32
+ end
33
+ end
34
+ end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'Element#prepend' do
3
+ RSpec.describe 'Element#prepend' do
4
4
  html <<-HTML
5
5
  <div id="foo"></div>
6
6
  <div id="bar">
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe "Element#to_s" do
3
+ RSpec.describe "Element#to_s" do
4
4
  html <<-HTML
5
5
  <div id="foo">hi</div>
6
6
  <div class="bar"></div>
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Element do
3
+ RSpec.describe Element do
4
4
  before do
5
5
  @div = Element.parse <<-HTML
6
6
  <div id="traversing-spec">
@@ -76,7 +76,7 @@ describe Element do
76
76
  end
77
77
  end
78
78
 
79
- describe "Element#next" do
79
+ RSpec.describe "Element#next" do
80
80
  before do
81
81
  @div = Element.parse <<-HTML
82
82
  <div id="next-spec">
@@ -101,7 +101,7 @@ describe "Element#next" do
101
101
  end
102
102
  end
103
103
 
104
- describe "Element#parent" do
104
+ RSpec.describe "Element#parent" do
105
105
  before do
106
106
  @div = Element.parse <<-HTML
107
107
  <div id="foo">
@@ -126,7 +126,7 @@ describe "Element#parent" do
126
126
  end
127
127
  end
128
128
 
129
- describe "Element#succ" do
129
+ RSpec.describe "Element#succ" do
130
130
  before do
131
131
  @div = Element.parse <<-HTML
132
132
  <div id="succ-spec">
@@ -151,7 +151,7 @@ describe "Element#succ" do
151
151
  end
152
152
  end
153
153
 
154
- describe "Element#siblings" do
154
+ RSpec.describe "Element#siblings" do
155
155
  before do
156
156
  @div = Element.parse <<-HTML
157
157
  <div id="siblings-spec">