rsel 0.0.4 → 0.0.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 (52) hide show
  1. data/docs/development.md +8 -3
  2. data/docs/examples.md +119 -0
  3. data/docs/history.md +9 -0
  4. data/docs/index.md +3 -1
  5. data/docs/locators.md +72 -0
  6. data/docs/scoping.md +19 -5
  7. data/docs/todo.md +4 -2
  8. data/docs/usage.md +2 -2
  9. data/lib/rsel/exceptions.rb +1 -1
  10. data/lib/rsel/selenium_test.rb +37 -132
  11. data/lib/rsel/support.rb +138 -0
  12. data/rsel.gemspec +1 -1
  13. data/spec/selenium_test_spec.rb +103 -12
  14. data/spec/spec_helper.rb +1 -10
  15. data/spec/support_spec.rb +48 -0
  16. data/test/app.rb +6 -6
  17. metadata +8 -39
  18. data/vendor/rubyslim-0.1.1/.gitignore +0 -7
  19. data/vendor/rubyslim-0.1.1/README.md +0 -159
  20. data/vendor/rubyslim-0.1.1/Rakefile +0 -21
  21. data/vendor/rubyslim-0.1.1/bin/rubyslim +0 -10
  22. data/vendor/rubyslim-0.1.1/lib/rubyslim/list_deserializer.rb +0 -69
  23. data/vendor/rubyslim-0.1.1/lib/rubyslim/list_executor.rb +0 -12
  24. data/vendor/rubyslim-0.1.1/lib/rubyslim/list_serializer.rb +0 -45
  25. data/vendor/rubyslim-0.1.1/lib/rubyslim/ruby_slim.rb +0 -61
  26. data/vendor/rubyslim-0.1.1/lib/rubyslim/slim_error.rb +0 -3
  27. data/vendor/rubyslim-0.1.1/lib/rubyslim/slim_helper_library.rb +0 -23
  28. data/vendor/rubyslim-0.1.1/lib/rubyslim/socket_service.rb +0 -53
  29. data/vendor/rubyslim-0.1.1/lib/rubyslim/statement.rb +0 -79
  30. data/vendor/rubyslim-0.1.1/lib/rubyslim/statement_executor.rb +0 -174
  31. data/vendor/rubyslim-0.1.1/lib/rubyslim/table_to_hash_converter.rb +0 -32
  32. data/vendor/rubyslim-0.1.1/lib/test_module/library_new.rb +0 -13
  33. data/vendor/rubyslim-0.1.1/lib/test_module/library_old.rb +0 -12
  34. data/vendor/rubyslim-0.1.1/lib/test_module/should_not_find_test_slim_in_here/test_slim.rb +0 -7
  35. data/vendor/rubyslim-0.1.1/lib/test_module/simple_script.rb +0 -9
  36. data/vendor/rubyslim-0.1.1/lib/test_module/test_chain.rb +0 -5
  37. data/vendor/rubyslim-0.1.1/lib/test_module/test_slim.rb +0 -86
  38. data/vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_arguments.rb +0 -23
  39. data/vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_no_sut.rb +0 -5
  40. data/vendor/rubyslim-0.1.1/rubyslim.gemspec +0 -22
  41. data/vendor/rubyslim-0.1.1/spec/instance_creation_spec.rb +0 -40
  42. data/vendor/rubyslim-0.1.1/spec/it8f_spec.rb +0 -8
  43. data/vendor/rubyslim-0.1.1/spec/list_deserializer_spec.rb +0 -66
  44. data/vendor/rubyslim-0.1.1/spec/list_executor_spec.rb +0 -187
  45. data/vendor/rubyslim-0.1.1/spec/list_serialzer_spec.rb +0 -38
  46. data/vendor/rubyslim-0.1.1/spec/method_invocation_spec.rb +0 -127
  47. data/vendor/rubyslim-0.1.1/spec/slim_helper_library_spec.rb +0 -80
  48. data/vendor/rubyslim-0.1.1/spec/socket_service_spec.rb +0 -98
  49. data/vendor/rubyslim-0.1.1/spec/spec_helper.rb +0 -6
  50. data/vendor/rubyslim-0.1.1/spec/statement_executor_spec.rb +0 -50
  51. data/vendor/rubyslim-0.1.1/spec/statement_spec.rb +0 -17
  52. data/vendor/rubyslim-0.1.1/spec/table_to_hash_converter_spec.rb +0 -31
@@ -0,0 +1,138 @@
1
+ #require File.join(File.dirname(__FILE__), 'exceptions')
2
+
3
+ require 'xpath'
4
+
5
+ module Rsel
6
+ # Support functions for Rsel
7
+ module Support
8
+
9
+ # Execute the given block, and return false if it raises an exception.
10
+ # Otherwise, return true.
11
+ #
12
+ # @example
13
+ # return_error_status do
14
+ # # some code that might raise an exception
15
+ # end
16
+ #
17
+ def return_error_status
18
+ begin
19
+ yield
20
+ rescue => e
21
+ #puts e.message
22
+ #puts e.backtrace
23
+ return false
24
+ else
25
+ return true
26
+ end
27
+ end
28
+
29
+ # Convert the given locator to a format accepted by Selenium. If `locator`
30
+ # starts with `id=`, `name=`, `dom=`, `xpath=` `link=` or `css=`, then the
31
+ # locator is returned unchanged. Otherwise, `locator` is assumed to be a
32
+ # plain string, and a Selenium-style `xpath=` locator is returned, matching
33
+ # HTML elements of the given kind, in the given scope. This allows you to
34
+ # use simple human-readable locator strings, or more specific
35
+ # Selenium-style locators.
36
+ #
37
+ # @param [String] locator
38
+ # A Selenium-style locator beginning with `id=`, `name=`, `dom=`,
39
+ # `xpath=`, `link=` or `css=`, or a plain text string that will
40
+ # automatically match on the `id`, `name`, label, value, or text content
41
+ # depending on the value of `kind`.
42
+ # @param [String] kind
43
+ # What kind of locator you're using (link, button, checkbox, field etc.).
44
+ # This must correspond to a method name in `XPath::HTML`. If you're using
45
+ # a raw Selenium-style `locator` string, this argument can be omitted.
46
+ # @param [Hash] scope
47
+ # Keywords to restrict the scope of matching elements. Ignored when
48
+ # a Selenium-style locator is used. See the {#xpath} documentation for
49
+ # allowed options.
50
+ #
51
+ def loc(locator, kind='', scope={})
52
+ if locator.empty?
53
+ raise ArgumentError, "locator is required."
54
+ elsif locator =~ /^(id=|name=|dom=|xpath=|link=|css=)/
55
+ return locator
56
+ else
57
+ return xpath(kind, locator, scope)
58
+ end
59
+ end
60
+
61
+
62
+ # Return a Selenium-style xpath generated by calling `XPath::HTML.<kind>`
63
+ # with the given `locator`. If `scope` options are provided, the xpath is
64
+ # modified accordingly, to match only elements in the given scope.
65
+ #
66
+ # @param [String] kind
67
+ # What kind of locator you're using (link, button, checkbox, field etc.).
68
+ # This must correspond to a method name in `XPath::HTML`.
69
+ # @param [String] locator
70
+ # Name, id, value, label or whatever other locators are accepted by
71
+ # `XPath::HTML.<kind>`
72
+ # @param [Hash] scope
73
+ # Keywords to restrict the scope of matching elements
74
+ # @option scope [String] :within
75
+ # Restrict scope to elements having this id, matching `locator` only if
76
+ # it's contained within an element with this id.
77
+ # @option scope [String] :in_row
78
+ # Restrict scope to a table row containing this text, matching `locator`
79
+ # only if that locator is in the same row as the given text.
80
+ #
81
+ # @example
82
+ # xpath('link', 'Log in')
83
+ # xpath('button', 'Submit')
84
+ # xpath('field', 'First name')
85
+ # xpath('table_row', ['First', 'Last'])
86
+ #
87
+ def xpath(kind, locator, scope={})
88
+ if !XPath::HTML.respond_to?(kind)
89
+ raise ArgumentError, "Unknown kind of locator: '#{kind}'"
90
+ end
91
+ loc_xp = XPath::HTML.send(kind, locator)
92
+ if scope[:within]
93
+ parent = XPath.descendant[XPath.attr(:id).equals(scope[:within])]
94
+ result = apply_scope(parent, loc_xp)
95
+ elsif scope[:in_row]
96
+ row = XPath.descendant(:tr)[XPath.contains(scope[:in_row])]
97
+ result = apply_scope(row, loc_xp)
98
+ else
99
+ result = loc_xp.to_s
100
+ end
101
+ return "xpath=#{result}"
102
+ end
103
+
104
+
105
+ # Restrict the scope of all XPath expressions in `inner` by prepending
106
+ # `container` to each of them, and return new union expression where
107
+ # `inner` matches only if it's a child of `container`.
108
+ #
109
+ def apply_scope(container, inner)
110
+ scoped_expressions = xpath_expressions(inner).collect do |expr|
111
+ container.child(expr)
112
+ end
113
+ return XPath::Union.new(*scoped_expressions).to_s
114
+ end
115
+
116
+
117
+ # Return an array of individual Expressions in the given XPath::Union, or
118
+ # just `[union]` if it has no sub-expressions. This is an ugly recursive
119
+ # hack, designed to allow splitting up unions into their constituents for
120
+ # the purpose of modifying them individually and re-combining them.
121
+ #
122
+ # @param [XPath::Union, XPath::Expression] union
123
+ # The xpath you want to break down into individual expressions
124
+ #
125
+ # @since 0.0.3
126
+ #
127
+ def xpath_expressions(union)
128
+ if union.respond_to?(:expressions)
129
+ return union.expressions.collect do |expr|
130
+ xpath_expressions(expr)
131
+ end.flatten
132
+ else
133
+ return [union]
134
+ end
135
+ end
136
+ end
137
+ end
138
+
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "rsel"
3
- s.version = "0.0.4"
3
+ s.version = "0.0.5"
4
4
  s.summary = "Runs Selenium tests from FitNesse"
5
5
  s.description = <<-EOS
6
6
  Rsel provides a Slim fixture for running Selenium tests, with
@@ -1,6 +1,15 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
2
 
3
3
  describe Rsel::SeleniumTest do
4
+ before(:all) do
5
+ @st = Rsel::SeleniumTest.new('http://localhost:8070/')
6
+ @st.open_browser
7
+ end
8
+
9
+ after(:all) do
10
+ @st.close_browser
11
+ end
12
+
4
13
  context "initialization" do
5
14
  before(:each) do
6
15
  @st.visit("/")
@@ -37,6 +46,18 @@ describe Rsel::SeleniumTest do
37
46
  @st.enable_checkbox("Like", :in_row => "Marcus").should be_true
38
47
  end
39
48
  end
49
+
50
+ context "checkbox with id=" do
51
+ it "exists" do
52
+ @st.enable_checkbox("id=like_cheese").should be_true
53
+ end
54
+ end
55
+
56
+ context "checkbox with xpath=" do
57
+ it "exists" do
58
+ @st.enable_checkbox("xpath=//input[@id='like_cheese']").should be_true
59
+ end
60
+ end
40
61
  end
41
62
 
42
63
  context "fails when" do
@@ -77,6 +98,18 @@ describe Rsel::SeleniumTest do
77
98
  @st.disable_checkbox("Like", :in_row => "Marcus").should be_true
78
99
  end
79
100
  end
101
+
102
+ context "checkbox with id=" do
103
+ it "exists" do
104
+ @st.disable_checkbox("id=like_cheese").should be_true
105
+ end
106
+ end
107
+
108
+ context "checkbox with xpath=" do
109
+ it "exists" do
110
+ @st.disable_checkbox("xpath=//input[@id='like_cheese']").should be_true
111
+ end
112
+ end
80
113
  end
81
114
 
82
115
  context "fails when" do
@@ -338,18 +371,33 @@ describe Rsel::SeleniumTest do
338
371
  context "#dropdown_equals" do
339
372
  context "passes when" do
340
373
  it "option is selected in the dropdown" do
341
- @st.select_from_dropdown("Short", "Height")
342
- @st.dropdown_equals("Height", "Short").should be_true
374
+ ["Short", "Average", "Tall"].each do |height|
375
+ @st.select_from_dropdown(height, "Height")
376
+ @st.dropdown_equals("Height", height).should be_true
377
+ end
378
+ end
343
379
 
344
- @st.select_from_dropdown("Average", "Height")
345
- @st.dropdown_equals("Height", "Average").should be_true
380
+ it "option is selected in the dropdown, within scope" do
381
+ ["Short", "Average", "Tall"].each do |height|
382
+ @st.select_from_dropdown(height, "Height", :within => "spouse_form")
383
+ @st.dropdown_equals("Height", height, :within => "spouse_form").should be_true
384
+ end
385
+ end
346
386
 
347
- @st.select_from_dropdown("Tall", "Height")
348
- @st.dropdown_equals("Height", "Tall").should be_true
387
+ it "option is selected in the dropdown, in table row" do
388
+ @st.visit("/table")
389
+ ["Male", "Female"].each do |gender|
390
+ @st.select_from_dropdown(gender, "Gender", :in_row => "Eric")
391
+ @st.dropdown_equals("Gender", gender, :in_row => "Eric")
392
+ end
349
393
  end
350
394
  end
351
395
 
352
396
  context "fails when" do
397
+ it "no such dropdown exists" do
398
+ @st.dropdown_equals("Eggs", "Over easy").should be_false
399
+ end
400
+
353
401
  it "dropdown exists, but the option is not selected" do
354
402
  @st.select_from_dropdown("Short", "Height")
355
403
  @st.dropdown_equals("Height", "Average").should be_false
@@ -364,8 +412,17 @@ describe Rsel::SeleniumTest do
364
412
  @st.dropdown_equals("Height", "Average").should be_false
365
413
  end
366
414
 
367
- it "no such dropdown exists" do
368
- @st.dropdown_equals("Eggs", "Over easy").should be_false
415
+ it "dropdown exists, and option is selected, but not in scope" do
416
+ @st.select_from_dropdown("Tall", "Height", :within => "person_form")
417
+ @st.select_from_dropdown("Short", "Height", :within => "spouse_form")
418
+ @st.dropdown_equals("Height", "Tall", :within => "spouse_form").should be_false
419
+ end
420
+
421
+ it "dropdown exists, and option is selected, but not in table row" do
422
+ @st.visit("/table")
423
+ @st.select_from_dropdown("Female", "Gender", :in_row => "Eric")
424
+ @st.select_from_dropdown("Male", "Gender", :in_row => "Marcus")
425
+ @st.dropdown_equals("Gender", "Female", :in_row => "Marcus").should be_false
369
426
  end
370
427
  end
371
428
  end
@@ -604,13 +661,26 @@ describe Rsel::SeleniumTest do
604
661
  end
605
662
 
606
663
  it "field exists, but not within scope" do
607
- @st.type_into_field("Long story", "Life story", :within => 'spouse_form').should be_false
664
+ @st.type_into_field("Long story", "Life story",
665
+ :within => 'spouse_form').should be_false
608
666
  end
609
667
  end
610
668
  end
611
669
 
612
670
  describe "#field_contains" do
613
671
  context "passes when" do
672
+ context "text field with label" do
673
+ it "equals the text" do
674
+ @st.fill_in_with("First name", "Marcus")
675
+ @st.field_contains("First name", "Marcus").should be_true
676
+ end
677
+
678
+ it "contains the text" do
679
+ @st.fill_in_with("First name", "Marcus")
680
+ @st.field_contains("First name", "Marc").should be_true
681
+ end
682
+ end
683
+
614
684
  context "textarea with label" do
615
685
  it "contains the text" do
616
686
  @st.fill_in_with("Life story", "Blah dee blah")
@@ -620,6 +690,13 @@ describe Rsel::SeleniumTest do
620
690
  end
621
691
 
622
692
  context "fails when" do
693
+ context "text field with label" do
694
+ it "does not contain the text" do
695
+ @st.fill_in_with("First name", "Marcus")
696
+ @st.field_contains("First name", "Eric").should be_false
697
+ end
698
+ end
699
+
623
700
  context "textarea with label" do
624
701
  it "does not contain the text" do
625
702
  @st.fill_in_with("Life story", "Blah dee blah")
@@ -632,7 +709,15 @@ describe Rsel::SeleniumTest do
632
709
  describe "#field_equals" do
633
710
  context "passes when" do
634
711
  context "text field with label" do
635
- # TODO
712
+ it "equals the text" do
713
+ @st.fill_in_with("First name", "Ken")
714
+ @st.field_equals("First name", "Ken").should be_true
715
+ end
716
+
717
+ it "equals the text, and is within scope" do
718
+ @st.fill_in_with("First name", "Eric", :within => "person_form")
719
+ @st.field_equals("First name", "Eric", :within => "person_form")
720
+ end
636
721
  end
637
722
 
638
723
  context "textarea with label" do
@@ -642,7 +727,10 @@ describe Rsel::SeleniumTest do
642
727
  end
643
728
 
644
729
  it "equals the text, and is within scope" do
645
- # TODO
730
+ @st.fill_in_with("Life story", "Blah dee blah",
731
+ :within => "person_form")
732
+ @st.field_equals("Life story", "Blah dee blah",
733
+ :within => "person_form").should be_true
646
734
  end
647
735
 
648
736
  it "equals the text, and is in table row" do
@@ -653,7 +741,10 @@ describe Rsel::SeleniumTest do
653
741
 
654
742
  context "fails when" do
655
743
  context "text field with label" do
656
- # TODO
744
+ it "does not exactly equal the text" do
745
+ @st.fill_in_with("First name", "Marcus")
746
+ @st.field_equals("First name", "Marc").should be_false
747
+ end
657
748
  end
658
749
 
659
750
  context "textarea with label" do
@@ -6,16 +6,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test', 'app'))
6
6
 
7
7
  RSpec.configure do |config|
8
8
  config.include Rsel
9
-
10
- config.before(:all) do
11
- @st = Rsel::SeleniumTest.new('http://localhost:8070/')
12
- @st.open_browser
13
- end
14
-
15
- config.after(:all) do
16
- @st.close_browser
17
- end
18
-
9
+ config.include Rsel::Support
19
10
  end
20
11
 
21
12
 
@@ -0,0 +1,48 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/spec_helper")
2
+
3
+ describe Rsel::Support do
4
+ describe "#loc" do
5
+ it "returns Selenium-style locators unchanged" do
6
+ locators = [
7
+ "id=foo_bar",
8
+ "name=foo_bar",
9
+ "xpath=//input[@id='foo_bar']",
10
+ "css=div#foo_bar",
11
+ ]
12
+ locators.each do |locator|
13
+ loc(locator).should == locator
14
+ end
15
+ end
16
+
17
+ it "returns Rsel-style locators as Selenium xpaths" do
18
+ locators = [
19
+ "First name",
20
+ "first_name",
21
+ ]
22
+ locators.each do |locator|
23
+ loc(locator, 'field').should =~ /^xpath=/
24
+ end
25
+ end
26
+
27
+ it "requires a non-empty locator" do
28
+ lambda do
29
+ loc('')
30
+ end.should raise_error
31
+ end
32
+
33
+ it "requires element kind for Rsel-style locators" do
34
+ lambda do
35
+ loc('foo')
36
+ end.should raise_error
37
+ end
38
+ end
39
+
40
+ describe "#xpath" do
41
+ it "requires a valid kind" do
42
+ lambda do
43
+ xpath('junk', 'hello')
44
+ end.should raise_error
45
+ end
46
+ end
47
+ end
48
+
@@ -14,12 +14,12 @@ class TestApp < Sinatra::Base
14
14
  end
15
15
 
16
16
  get '/:view' do |view|
17
- erb view.to_sym
18
- end
19
-
20
- # Allow shutting down the app with a request
21
- get '/shutdown' do
22
- Process.kill('KILL', Process.pid)
17
+ # Allow shutting down the app with a request
18
+ if view == 'shutdown'
19
+ Process.kill('KILL', Process.pid)
20
+ else
21
+ erb view.to_sym
22
+ end
23
23
  end
24
24
  end
25
25
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsel
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 4
10
- version: 0.0.4
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Marcus French
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-07-25 00:00:00 -06:00
20
+ date: 2011-07-31 00:00:00 -06:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -155,18 +155,22 @@ files:
155
155
  - Rakefile
156
156
  - docs/custom.md
157
157
  - docs/development.md
158
+ - docs/examples.md
158
159
  - docs/history.md
159
160
  - docs/index.md
160
161
  - docs/install.md
162
+ - docs/locators.md
161
163
  - docs/scoping.md
162
164
  - docs/todo.md
163
165
  - docs/usage.md
164
166
  - lib/rsel.rb
165
167
  - lib/rsel/exceptions.rb
166
168
  - lib/rsel/selenium_test.rb
169
+ - lib/rsel/support.rb
167
170
  - rsel.gemspec
168
171
  - spec/selenium_test_spec.rb
169
172
  - spec/spec_helper.rb
173
+ - spec/support_spec.rb
170
174
  - test/app.rb
171
175
  - test/config.ru
172
176
  - test/views/about.erb
@@ -177,41 +181,6 @@ files:
177
181
  - test/views/index.erb
178
182
  - test/views/table.erb
179
183
  - test/views/thanks.erb
180
- - vendor/rubyslim-0.1.1/.gitignore
181
- - vendor/rubyslim-0.1.1/README.md
182
- - vendor/rubyslim-0.1.1/Rakefile
183
- - vendor/rubyslim-0.1.1/bin/rubyslim
184
- - vendor/rubyslim-0.1.1/lib/rubyslim/list_deserializer.rb
185
- - vendor/rubyslim-0.1.1/lib/rubyslim/list_executor.rb
186
- - vendor/rubyslim-0.1.1/lib/rubyslim/list_serializer.rb
187
- - vendor/rubyslim-0.1.1/lib/rubyslim/ruby_slim.rb
188
- - vendor/rubyslim-0.1.1/lib/rubyslim/slim_error.rb
189
- - vendor/rubyslim-0.1.1/lib/rubyslim/slim_helper_library.rb
190
- - vendor/rubyslim-0.1.1/lib/rubyslim/socket_service.rb
191
- - vendor/rubyslim-0.1.1/lib/rubyslim/statement.rb
192
- - vendor/rubyslim-0.1.1/lib/rubyslim/statement_executor.rb
193
- - vendor/rubyslim-0.1.1/lib/rubyslim/table_to_hash_converter.rb
194
- - vendor/rubyslim-0.1.1/lib/test_module/library_new.rb
195
- - vendor/rubyslim-0.1.1/lib/test_module/library_old.rb
196
- - vendor/rubyslim-0.1.1/lib/test_module/should_not_find_test_slim_in_here/test_slim.rb
197
- - vendor/rubyslim-0.1.1/lib/test_module/simple_script.rb
198
- - vendor/rubyslim-0.1.1/lib/test_module/test_chain.rb
199
- - vendor/rubyslim-0.1.1/lib/test_module/test_slim.rb
200
- - vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_arguments.rb
201
- - vendor/rubyslim-0.1.1/lib/test_module/test_slim_with_no_sut.rb
202
- - vendor/rubyslim-0.1.1/rubyslim.gemspec
203
- - vendor/rubyslim-0.1.1/spec/instance_creation_spec.rb
204
- - vendor/rubyslim-0.1.1/spec/it8f_spec.rb
205
- - vendor/rubyslim-0.1.1/spec/list_deserializer_spec.rb
206
- - vendor/rubyslim-0.1.1/spec/list_executor_spec.rb
207
- - vendor/rubyslim-0.1.1/spec/list_serialzer_spec.rb
208
- - vendor/rubyslim-0.1.1/spec/method_invocation_spec.rb
209
- - vendor/rubyslim-0.1.1/spec/slim_helper_library_spec.rb
210
- - vendor/rubyslim-0.1.1/spec/socket_service_spec.rb
211
- - vendor/rubyslim-0.1.1/spec/spec_helper.rb
212
- - vendor/rubyslim-0.1.1/spec/statement_executor_spec.rb
213
- - vendor/rubyslim-0.1.1/spec/statement_spec.rb
214
- - vendor/rubyslim-0.1.1/spec/table_to_hash_converter_spec.rb
215
184
  has_rdoc: true
216
185
  homepage: http://github.com/a-e/rsel
217
186
  licenses: []