capykit 0.0.2

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/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in capykit.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/capykit ADDED
@@ -0,0 +1,36 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'capykit'
5
+ require 'irb'
6
+
7
+ CapybaraApi = Object.new
8
+ CapybaraApi.extend(Capybara)
9
+ (Capykit.constants-['VERSION']).sort.each do |c|
10
+ code="CapybaraApi.extend(Capykit::#{c})"; puts code
11
+ eval("CapybaraApi.extend(Capykit::#{c})")
12
+ end
13
+ CapybaraApi.auto_methods.each{ |m|CapybaraApi.send(m) }
14
+
15
+ puts "Capykit loaded..."
16
+ def IRB.start_capybara_console
17
+ IRB.setup(__FILE__)
18
+
19
+ irb = IRB::Irb.new(IRB::WorkSpace.new(CapybaraApi))
20
+ @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
21
+ @CONF[:MAIN_CONTEXT] = irb.context
22
+
23
+ trap("SIGINT") do
24
+ irb.signal_handle
25
+ end
26
+
27
+ begin
28
+ catch(:IRB_EXIT) do
29
+ irb.eval_input
30
+ end
31
+ ensure
32
+ irb_at_exit
33
+ end
34
+ end
35
+
36
+ IRB.start_capybara_console
data/capy/dsl_base.rb ADDED
@@ -0,0 +1,179 @@
1
+ module Capykit::DslBase
2
+
3
+ def a(sym)
4
+ gselector(sym)
5
+ if !@selec
6
+ @selec=@pname=='*' ? "a[href*=#{@name[1,99]}]" : @name
7
+ end
8
+ @nodes = all(@selec)
9
+ selec_info('a',sym)
10
+ @value='0' if !@value
11
+ if @value.scan(/[^\d]+/)==[]
12
+ @node = @nodes[@value.to_i]
13
+ puts [' '*28,"@nodes[#{@value}]"].join
14
+ else
15
+ @node = @nodes.select{|x|x.text=~/#{@value}/}[0]
16
+ puts [' '*28,"@nodes.select{|x|x.text=~/#{@value}/}[0]"].join
17
+ end
18
+ @node.click
19
+ self
20
+ end
21
+
22
+ ## Possible Keys
23
+ # :null, :cancel, :help, :backspace, :tab, :clear, :return, :enter, :shift, :left_shift, :control, :left_control :alt, :left_alt, :pause,
24
+ # :escape, :space:page_up, :page_down, :end, :home, :left, :arrow_left, :up:arrow_up, :right, :arrow_right:down, :arrow_down, :insert,
25
+ # :delete, :semicolon, :equals, :numpad0, :numpad1, :numpad2, :numpad3, :numpad4, :numpad5, :numpad6, :numpad7, :numpad8, :numpad9,
26
+ # :multiply, :add, :separator, :subtract, :decimal, :divide
27
+ #
28
+ def f(*arg)
29
+ arg.each do |sym|
30
+ find_fnode(sym)
31
+ end
32
+ self
33
+ end
34
+
35
+ def v(loc=:l,*oth)
36
+ params=[]
37
+ vsites=[]
38
+ status=" > v "
39
+ ([loc]+oth).each do |sym|
40
+ if sym.class==Symbol
41
+ params<<":#{sym}"
42
+ vsites<<vsite[sym]
43
+ else
44
+ params<<"'#{sym}'"
45
+ vsites<<sym
46
+ end
47
+ end
48
+ location=''
49
+ location=page.current_url.split('/')[0,3].join('/') if vsites[0][0,1]=='/'
50
+ location<<vsites.join
51
+ status<<params.join(',')
52
+ status=[status,' '*25].join[0,25]
53
+ status<<" - v('#{location}')"
54
+ puts status
55
+ visit location
56
+ self
57
+ end
58
+
59
+ def w(sym,new_out=15)
60
+ gselector(sym)
61
+ @selec=@name if !@selec
62
+ selec_info('w',sym)
63
+ new_out=@value.to_i if @value
64
+ old_out = Capybara.default_wait_time
65
+ Capybara.default_wait_time = new_out
66
+ result=page.has_css?(@selec)
67
+ Capybara.default_wait_time = old_out
68
+ result
69
+ end
70
+
71
+ def x(sym,*arg)
72
+ runs=[]
73
+ exec=execute_methods(sym)
74
+ arg.each do |oth|
75
+ mul=(oth.to_s[-1,1]=='_')
76
+ rgx=mul ? /#{oth}/ : /#{oth}$/
77
+ runs+=exec.select{|pr|pr=~rgx}
78
+ end
79
+ p runs
80
+ runs.each do|xx|
81
+ met="x_k#{xx}"
82
+ puts met
83
+ self.send met
84
+ end
85
+ end
86
+
87
+ def xconf(xhash=nil)
88
+ @xconf||={}
89
+ @xconf =@xconf.merge xhash if xhash
90
+ @xconf
91
+ end
92
+
93
+ def vsite(xhash=nil)
94
+ if !@vsite
95
+ @vsite= {
96
+ :l => 'http://localhost:3000',
97
+ :f => 'http://facebook.com',
98
+ :g => 'http://google.com',
99
+ :y => 'http://yahoo.com',
100
+ :b => 'http://bing.com'}
101
+ end
102
+ @vsite = @vsite.merge xhash if xhash
103
+ @vsite
104
+ end
105
+
106
+ def aselector(xhash=nil)
107
+ if !@aselector
108
+ @aselector= {}
109
+ end
110
+ @aselector = @aselector.merge xhash if xhash
111
+ @aselector
112
+ end
113
+
114
+ protected
115
+
116
+ def gselector(sym)
117
+ spltr = sym.class == Symbol ? '_' : ':'
118
+ param = sym.to_s.split(spltr)
119
+ if param.length==1
120
+ spltr= ';'
121
+ param= sym.to_s.split(spltr)
122
+ param[1] = ";#{param[1]}" if param[1]
123
+ end
124
+ @name = param.shift
125
+ result = aselector[@name.to_sym]
126
+ @value = param==[] ? nil : param.join(spltr)
127
+ @selec = result ? result.split('|')[0] : nil
128
+ @nname = result ? result.split('|')[1] : nil
129
+ @pname = @name[0,1]
130
+ end
131
+
132
+ def selec_info(msg,sym)
133
+ msg<<(sym.class==Symbol ? " :#{sym}" : " '#{sym}'")
134
+ status=[" > #{msg}",' '*25].join[0,25]
135
+ status<<" - all('#{@selec}')"
136
+ status<<" - #{@nname}" if @nname
137
+ puts status
138
+ nil
139
+ end
140
+
141
+ def find_fnode(sym)
142
+ gselector(sym)
143
+ if !@selec
144
+ @selec= @pname=='*' ?
145
+ "[name*=#{@name[1,99]}]" :
146
+ "[name=#{@name}]"
147
+ end
148
+ selec_info('f',sym)
149
+ @node = all(@selec)[0]
150
+ send_keys
151
+ end
152
+
153
+ def send_keys
154
+ nvalue=@value
155
+ nvalue.sub!(/^[+]/,'')
156
+ pvalue =$~
157
+ avalue =nvalue.split(/;\w+/)
158
+ asymbol=nvalue.scan(/;(\w+)/)
159
+ combine=[]
160
+ avalue.each_with_index do |ss,ii|
161
+ combine<<ss
162
+ combine<<asymbol[ii][0].to_sym if asymbol[ii]
163
+ end
164
+ puts [' '*28,"send_keys(#{nvalue})"].join
165
+ @node.native.clear if avalue!=[] && !pvalue
166
+ @node.native.send_keys(*combine)
167
+ self
168
+ end
169
+
170
+ def je(script)
171
+ page.session.driver.evaluate_script script
172
+ end
173
+
174
+ def jx(script)
175
+ page.session.driver.execute_script script
176
+ self
177
+ end
178
+
179
+ end
@@ -0,0 +1,21 @@
1
+ module Capykit::DslJquery
2
+ def h(sym,new_out=15)
3
+ gselector(sym)
4
+ @selec=@name if !@selec
5
+ selec_info('h',sym)
6
+ new_out=@value.to_i if @value
7
+ Capybara.timeout(new_out) do
8
+ je("$('#{@selec}').css('display')")!='block'
9
+ end
10
+ true
11
+ rescue
12
+ false
13
+ end
14
+
15
+ protected
16
+
17
+ def style_box_red(css)
18
+ jx "$('#{css}').attr('style','border:solid 5px red;')"
19
+ end
20
+
21
+ end
data/capy/dsl_ref.rb ADDED
@@ -0,0 +1,45 @@
1
+ module Capykit::DslRef
2
+ def base_methods
3
+ Capybara.methods - Object.methods
4
+ end
5
+
6
+ def core_methods
7
+ arr=Capykit::DslBase.public_instance_methods.sort
8
+ ar2=arr.select{|x|x.length==1}
9
+ ar2 + (arr-ar2)
10
+ end
11
+
12
+ def capy_methods
13
+ arr=modules_methods.sort!
14
+ ar2=arr.select{|x|x.length==1}
15
+ ar2 + (arr-ar2)
16
+ end
17
+
18
+ def auto_methods
19
+ arr=modules_methods.sort!
20
+ arr.select{|m|m=~/^(aselector_|vsite_)/}
21
+ end
22
+
23
+ def execute_methods(pr='')
24
+ ym="x_#{pr}"
25
+ mo=modules_methods.select{|x|x[0,ym.length]==ym}.sort!
26
+ pr=='' ? mo : mo.collect{|x|x[ym.length,99]}
27
+ end
28
+
29
+ def test_methods(pr='')
30
+ ym="t_#{pr}"
31
+ mo=modules_methods.select{|x|x[0,ym.length]==ym}.sort!
32
+ pr=='' ? mo : mo.collect{|x|x[ym.length,99]}
33
+ end
34
+
35
+ protected
36
+
37
+ def modules_methods
38
+ arr=[]
39
+ (Capykit.constants-['VERSION']).each do |m|
40
+ arr+=eval("Capykit::#{m}.instance_methods")
41
+ end
42
+ arr
43
+ end
44
+
45
+ end
data/capy/dsl_util.rb ADDED
@@ -0,0 +1,8 @@
1
+ module Capykit::DslUtil
2
+
3
+ def x_se_go(kwd,sym=:g)
4
+ v sym if !w('[name=q]',1)
5
+ f "q:#{kwd}",:submit
6
+ end
7
+
8
+ end
data/capykit.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "capykit/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.add_development_dependency "capybara", ["~> 0.4.1.2"]
7
+ s.name = "capykit"
8
+ s.version = Capykit::VERSION
9
+ s.platform = Gem::Platform::RUBY
10
+ s.authors = ["Widi Harsojo"]
11
+ s.email = ["wharsojo@gmail.com"]
12
+ s.homepage = "http://www.github.com/wharsojo"
13
+ s.summary = %q{Capybara mini dsl extension}
14
+ s.description = %q{Capybara mini dsl extension using webdriver and jquery}
15
+
16
+ s.required_rubygems_version = ">= 1.3.7"
17
+ s.rubyforge_project = "capykit"
18
+
19
+ s.files = Dir.glob("**/*").delete_if { |item| item.include?(".hg") }
20
+
21
+ #s.files = `git ls-files`.split("\n")
22
+ #s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ #s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ s.bindir = 'bin'
26
+ s.executables = ["capykit"]
27
+ s.default_executable = %q{capykit}
28
+ end
@@ -0,0 +1,3 @@
1
+ module Capykit
2
+ VERSION = "0.0.2"
3
+ end
data/lib/capykit.rb ADDED
@@ -0,0 +1,13 @@
1
+ #require 'bundler'
2
+ #Bundler.setup(:default, :test) if defined?(Bundler)
3
+ require "selenium-webdriver"
4
+ require 'capykit/version'
5
+ require 'capybara/dsl'
6
+ #Capybara.register_driver :selenium do |app|
7
+ # Capybara::Driver::Selenium.new(app, :browser => :firefox, :profile => "default")
8
+ #end
9
+ Capybara.default_driver = :selenium
10
+ Capybara.default_selector = :css
11
+ Capybara.default_wait_time = 5
12
+ files= Dir[File.join(File.dirname(__FILE__),%w[.. capy *.rb])]
13
+ (files+Dir[File.join(%w[. capy *.rb])]).each{ |f|require(f) }
Binary file
Binary file
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: capykit
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - Widi Harsojo
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-07 00:00:00 +07:00
19
+ default_executable: capykit
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: capybara
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 111
30
+ segments:
31
+ - 0
32
+ - 4
33
+ - 1
34
+ - 2
35
+ version: 0.4.1.2
36
+ type: :development
37
+ version_requirements: *id001
38
+ description: Capybara mini dsl extension using webdriver and jquery
39
+ email:
40
+ - wharsojo@gmail.com
41
+ executables:
42
+ - capykit
43
+ extensions: []
44
+
45
+ extra_rdoc_files: []
46
+
47
+ files:
48
+ - bin/capykit
49
+ - capy/dsl_base.rb
50
+ - capy/dsl_jquery.rb
51
+ - capy/dsl_ref.rb
52
+ - capy/dsl_util.rb
53
+ - capykit-0.0.2.gem
54
+ - capykit.gemspec
55
+ - Gemfile
56
+ - lib/capykit/version.rb
57
+ - lib/capykit.rb
58
+ - pkg/capykit-0.0.1.gem
59
+ - pkg/capykit-0.0.2.gem
60
+ - Rakefile
61
+ has_rdoc: true
62
+ homepage: http://www.github.com/wharsojo
63
+ licenses: []
64
+
65
+ post_install_message:
66
+ rdoc_options: []
67
+
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 21
85
+ segments:
86
+ - 1
87
+ - 3
88
+ - 7
89
+ version: 1.3.7
90
+ requirements: []
91
+
92
+ rubyforge_project: capykit
93
+ rubygems_version: 1.3.7
94
+ signing_key:
95
+ specification_version: 3
96
+ summary: Capybara mini dsl extension
97
+ test_files: []
98
+