flok 0.0.6 → 0.0.7
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Rakefile +1 -0
- data/app/drivers/browser/Rakefile +24 -0
- data/app/drivers/browser/network.js +24 -0
- data/{drivers/chromium/jquery.min.js → app/drivers/browser/vendor/jquery.js} +0 -0
- data/flok.gemspec +1 -0
- data/lib/flok/version.rb +1 -1
- data/spec/cli_spec.rb +209 -209
- data/spec/drivers/net_spec.rb +91 -2
- data/spec/helpers.rb +129 -0
- data/spec/merge_source_spec.rb +56 -56
- metadata +20 -4
- data/drivers/chromium/Rakefile +0 -17
- data/drivers/chromium/network.js +0 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1ad99a2e37f5f7fd315f2d5aa6a0c1ecd2da568
|
4
|
+
data.tar.gz: 469142150d43cc41b9df90ff02f3959afe4ed428
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 397eda8fa9624eff545d736c1133261b9fbbe0f9db5a25322adcc90e73173a8fa500467001ef779e70db8d2477c2b51264984666446e99414a3c27d1d0a15772
|
7
|
+
data.tar.gz: a97e2b1931dbf9c9568275feb66b699c3c9d949a7f60cd6a9f9ee07fcb2838c0010b368d572014f215cac4b14ca72a1fc640fd3103c390c11f8c4a1c6ca7ae3e
|
data/.gitignore
CHANGED
data/Rakefile
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
#Compile all the *.js files into one file
|
4
|
+
BUILD_PATH = '../../../products/drivers/browser.js'
|
5
|
+
task :build do
|
6
|
+
out = "/* THIS IS AN AUTOGENETARED FILE, DO NOT EDIT THIS */\n"
|
7
|
+
Dir["./vendor/*.js"].each do |js|
|
8
|
+
code = File.read(js)
|
9
|
+
out << code
|
10
|
+
out << "\n"
|
11
|
+
end
|
12
|
+
|
13
|
+
Dir["*.js"].each do |js|
|
14
|
+
code = File.read(js)
|
15
|
+
out << code
|
16
|
+
out << "\n"
|
17
|
+
end
|
18
|
+
|
19
|
+
Dir.chdir File.dirname(__FILE__) do
|
20
|
+
FileUtils.rm_f BUILD_PATH
|
21
|
+
FileUtils.mkdir_p File.dirname(BUILD_PATH)
|
22
|
+
File.write BUILD_PATH, out
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
drivers = window.drivers || {}
|
2
|
+
drivers.network = {}
|
3
|
+
|
4
|
+
$(document).ready(function() {
|
5
|
+
//drivers.network.request("GET", "http://test.services.fittr.com/ping", {}, null);
|
6
|
+
})
|
7
|
+
|
8
|
+
//A basic get request that supports callbacks
|
9
|
+
drivers.network.request = function(verb, url, params, completion) {
|
10
|
+
$.ajax({
|
11
|
+
url: url,
|
12
|
+
type: verb,
|
13
|
+
data: params,
|
14
|
+
success: function(data) {
|
15
|
+
data = JSON.parse(data);
|
16
|
+
completion = completion || function() {}
|
17
|
+
if (completion != null) {
|
18
|
+
completion(data);
|
19
|
+
}
|
20
|
+
},
|
21
|
+
error: function(xhr, status, err) {
|
22
|
+
}
|
23
|
+
})
|
24
|
+
}
|
File without changes
|
data/flok.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'webrick', '~> 1.3'
|
26
26
|
spec.add_development_dependency "closure-compiler", "~> 1.1"
|
27
27
|
spec.add_development_dependency "phantomjs", "~> 1.9"
|
28
|
+
spec.add_development_dependency "rspec-wait", "~> 0.0"
|
28
29
|
spec.add_runtime_dependency "thor", "~> 0.19"
|
29
30
|
spec.executables << 'flok'
|
30
31
|
end
|
data/lib/flok/version.rb
CHANGED
data/spec/cli_spec.rb
CHANGED
@@ -1,210 +1,210 @@
|
|
1
|
-
require './lib/flok.rb'
|
2
|
-
require 'tempfile'
|
3
|
-
require 'securerandom'
|
4
|
-
require 'v8'
|
5
|
-
|
6
|
-
def ensure_tmp
|
7
|
-
tmp_spec_path = './spec/tmp'
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
RSpec.describe "CLI" do
|
12
|
-
it "Creates a new module folder with absolute path" do
|
13
|
-
|
14
|
-
temp = Tempfile.new
|
15
|
-
path = temp.path
|
16
|
-
temp.close
|
17
|
-
temp.unlink
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
expect(Dir.exists? path).to be(true)
|
22
|
-
end
|
23
|
-
|
24
|
-
it "Creates a new module folder with relative path" do
|
25
|
-
ensure_tmp
|
26
|
-
fn = SecureRandom.hex
|
27
|
-
|
28
|
-
dir = "./spec/tmp/#{fn}"
|
29
|
-
|
30
|
-
expect(File.exists?(dir)).to be(true)
|
31
|
-
end
|
32
|
-
|
33
|
-
it "Creates a new module folder with correct root folders" do
|
34
|
-
|
35
|
-
temp = Tempfile.new
|
36
|
-
path = temp.path
|
37
|
-
temp.close
|
38
|
-
temp.unlink
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
folders = %w{app lib config}
|
43
|
-
|
44
|
-
folders.each do |f|
|
45
|
-
p = "#{path}/#{f}"
|
46
|
-
expect(Dir.exists? p).to be(true)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
it "The new module has all the files and folders of a RubyGem" do
|
51
|
-
|
52
|
-
temp = Tempfile.new
|
53
|
-
path = temp.path
|
54
|
-
temp.close
|
55
|
-
temp.unlink
|
56
|
-
|
57
|
-
test_gem_path = "#{path}/test_gem"
|
58
|
-
|
59
|
-
file_paths = []
|
60
|
-
dir_paths = []
|
61
|
-
name = "#{SecureRandom.hex[0..4]}_module_name"
|
62
|
-
Dir.chdir(test_gem_path) do
|
63
|
-
|
64
|
-
|
65
|
-
Dir.chdir "./#{name}" do
|
66
|
-
Dir["**/*"].each do |f|
|
67
|
-
if File.file?(f)
|
68
|
-
file_paths << f
|
69
|
-
end
|
70
|
-
|
71
|
-
if File.directory?(f)
|
72
|
-
dir_paths << f
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
file_paths.uniq!
|
78
|
-
dir_paths.uniq!
|
79
|
-
end
|
80
|
-
|
81
|
-
|
82
|
-
Dir.chdir "#{path}/#{name}" do
|
83
|
-
Dir["**/*"].each do |f|
|
84
|
-
if File.file?(f)
|
85
|
-
file_paths = file_paths - [f]
|
86
|
-
end
|
87
|
-
|
88
|
-
if File.directory?(f)
|
89
|
-
dir_paths = dir_paths - [f]
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
if file_paths.count+dir_paths.count != 0
|
94
|
-
puts "------------------------------------------------------------------------------"
|
95
|
-
puts "Files not found matching Gemfile: #{file_paths.inspect}" if file_paths.count > 0
|
96
|
-
puts "Directories not found matching Gemfile: #{dir_paths.inspect}" if dir_paths.count > 0
|
97
|
-
puts "------------------------------------------------------------------------------"
|
98
|
-
end
|
99
|
-
|
100
|
-
expect(file_paths.count+dir_paths.count).to be(0)
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
it "does create a public/application.js when 'build' is run" do
|
105
|
-
|
106
|
-
temp = Tempfile.new
|
107
|
-
path = temp.path
|
108
|
-
temp.close
|
109
|
-
temp.unlink
|
110
|
-
|
111
|
-
|
112
|
-
gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
113
|
-
Dir.chdir path do
|
114
|
-
|
115
|
-
expect(File.exist?("./public/application.js")).to be(true)
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
it "does create a public/application.js when 'build' is run that's not empty" do
|
120
|
-
|
121
|
-
temp = Tempfile.new
|
122
|
-
path = temp.path
|
123
|
-
temp.close
|
124
|
-
temp.unlink
|
125
|
-
|
126
|
-
|
127
|
-
gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
128
|
-
Dir.chdir path do
|
129
|
-
|
130
|
-
expect(File.read("./public/application.js").length).to be > 0
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
it "creates an application.js that is executable by js" do
|
135
|
-
|
136
|
-
temp = Tempfile.new
|
137
|
-
path = temp.path
|
138
|
-
temp.close
|
139
|
-
temp.unlink
|
140
|
-
|
141
|
-
|
142
|
-
gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
143
|
-
Dir.chdir path do
|
144
|
-
|
1
|
+
#require './lib/flok.rb'
|
2
|
+
#require 'tempfile'
|
3
|
+
#require 'securerandom'
|
4
|
+
#require 'v8'
|
5
|
+
|
6
|
+
#def ensure_tmp
|
7
|
+
#tmp_spec_path = './spec/tmp'
|
8
|
+
#FileUtils.mkdir_p(tmp_spec_path) unless File.exists?(tmp_spec_path)
|
9
|
+
#end
|
10
|
+
|
11
|
+
#RSpec.describe "CLI" do
|
12
|
+
#it "Creates a new module folder with absolute path" do
|
13
|
+
##Get a temporary file, delete it, but save the path
|
14
|
+
#temp = Tempfile.new SecureRandom.hex
|
15
|
+
#path = temp.path
|
16
|
+
#temp.close
|
17
|
+
#temp.unlink
|
18
|
+
|
19
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
20
|
+
|
21
|
+
#expect(Dir.exists? path).to be(true)
|
22
|
+
#end
|
23
|
+
|
24
|
+
#it "Creates a new module folder with relative path" do
|
25
|
+
#ensure_tmp
|
26
|
+
#fn = SecureRandom.hex
|
27
|
+
|
28
|
+
#dir = "./spec/tmp/#{fn}"
|
29
|
+
#`ruby -Ilib ./bin/flok new #{dir}`
|
30
|
+
#expect(File.exists?(dir)).to be(true)
|
31
|
+
#end
|
32
|
+
|
33
|
+
#it "Creates a new module folder with correct root folders" do
|
34
|
+
##Get a temporary file, delete it, but save the path
|
35
|
+
#temp = Tempfile.new SecureRandom.hex
|
36
|
+
#path = temp.path
|
37
|
+
#temp.close
|
38
|
+
#temp.unlink
|
39
|
+
|
40
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
41
|
+
|
42
|
+
#folders = %w{app lib config}
|
43
|
+
|
44
|
+
#folders.each do |f|
|
45
|
+
#p = "#{path}/#{f}"
|
46
|
+
#expect(Dir.exists? p).to be(true)
|
47
|
+
#end
|
48
|
+
#end
|
49
|
+
|
50
|
+
#it "The new module has all the files and folders of a RubyGem" do
|
51
|
+
##Get a temporary file, delete it, but save the path
|
52
|
+
#temp = Tempfile.new SecureRandom.hex
|
53
|
+
#path = temp.path
|
54
|
+
#temp.close
|
55
|
+
#temp.unlink
|
56
|
+
#FileUtils.mkdir_p(path)
|
57
|
+
#test_gem_path = "#{path}/test_gem"
|
58
|
+
#FileUtils.mkdir_p(test_gem_path)
|
59
|
+
#file_paths = []
|
60
|
+
#dir_paths = []
|
61
|
+
#name = "#{SecureRandom.hex[0..4]}_module_name"
|
62
|
+
#Dir.chdir(test_gem_path) do
|
63
|
+
#`bundle gem #{name}`
|
64
|
+
|
65
|
+
#Dir.chdir "./#{name}" do
|
66
|
+
#Dir["**/*"].each do |f|
|
67
|
+
#if File.file?(f)
|
68
|
+
#file_paths << f
|
69
|
+
#end
|
70
|
+
|
71
|
+
#if File.directory?(f)
|
72
|
+
#dir_paths << f
|
73
|
+
#end
|
74
|
+
#end
|
75
|
+
#end
|
76
|
+
|
77
|
+
#file_paths.uniq!
|
78
|
+
#dir_paths.uniq!
|
79
|
+
#end
|
80
|
+
|
81
|
+
#`ruby -Ilib ./bin/flok new #{path}/#{name}`
|
82
|
+
#Dir.chdir "#{path}/#{name}" do
|
83
|
+
#Dir["**/*"].each do |f|
|
84
|
+
#if File.file?(f)
|
85
|
+
#file_paths = file_paths - [f]
|
86
|
+
#end
|
87
|
+
|
88
|
+
#if File.directory?(f)
|
89
|
+
#dir_paths = dir_paths - [f]
|
90
|
+
#end
|
91
|
+
#end
|
92
|
+
|
93
|
+
#if file_paths.count+dir_paths.count != 0
|
94
|
+
#puts "------------------------------------------------------------------------------"
|
95
|
+
#puts "Files not found matching Gemfile: #{file_paths.inspect}" if file_paths.count > 0
|
96
|
+
#puts "Directories not found matching Gemfile: #{dir_paths.inspect}" if dir_paths.count > 0
|
97
|
+
#puts "------------------------------------------------------------------------------"
|
98
|
+
#end
|
99
|
+
|
100
|
+
#expect(file_paths.count+dir_paths.count).to be(0)
|
101
|
+
#end
|
102
|
+
#end
|
103
|
+
|
104
|
+
#it "does create a public/application.js when 'build' is run" do
|
105
|
+
##Get a temporary file, delete it, but save the path
|
106
|
+
#temp = Tempfile.new SecureRandom.hex
|
107
|
+
#path = temp.path
|
108
|
+
#temp.close
|
109
|
+
#temp.unlink
|
110
|
+
|
111
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
112
|
+
#gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
113
|
+
#Dir.chdir path do
|
114
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build`
|
115
|
+
#expect(File.exist?("./public/application.js")).to be(true)
|
116
|
+
#end
|
117
|
+
#end
|
118
|
+
|
119
|
+
#it "does create a public/application.js when 'build' is run that's not empty" do
|
120
|
+
##Get a temporary file, delete it, but save the path
|
121
|
+
#temp = Tempfile.new SecureRandom.hex
|
122
|
+
#path = temp.path
|
123
|
+
#temp.close
|
124
|
+
#temp.unlink
|
125
|
+
|
126
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
127
|
+
#gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
128
|
+
#Dir.chdir path do
|
129
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build`
|
130
|
+
#expect(File.read("./public/application.js").length).to be > 0
|
131
|
+
#end
|
132
|
+
#end
|
133
|
+
|
134
|
+
#it "creates an application.js that is executable by js" do
|
135
|
+
##Get a temporary file, delete it, but save the path
|
136
|
+
#temp = Tempfile.new SecureRandom.hex
|
137
|
+
#path = temp.path
|
138
|
+
#temp.close
|
139
|
+
#temp.unlink
|
140
|
+
|
141
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
142
|
+
#gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
143
|
+
#Dir.chdir path do
|
144
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build`
|
145
|
+
##str = File.read("./public/application.js")
|
146
|
+
#ctx = V8::Context.new
|
147
|
+
#ctx.load("./public/application.js")
|
148
|
+
##ExecJS.compile(str)
|
149
|
+
##it does not throw an error
|
150
|
+
#end
|
151
|
+
#end
|
152
|
+
|
153
|
+
#it "supports build --compress, which makes a smaller js file" do
|
154
|
+
##Get a temporary file, delete it, but save the path
|
155
|
+
#temp = Tempfile.new SecureRandom.hex
|
156
|
+
#path = temp.path
|
157
|
+
#temp.close
|
158
|
+
#temp.unlink
|
159
|
+
|
160
|
+
#uncompressed_length = 0
|
161
|
+
#compressed_length = 0
|
162
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
163
|
+
#gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
164
|
+
#Dir.chdir path do
|
165
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build`
|
145
166
|
#str = File.read("./public/application.js")
|
146
|
-
|
147
|
-
|
148
|
-
#
|
149
|
-
#
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
temp.
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
#it
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
#
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
#it does not throw an error
|
191
|
-
end
|
192
|
-
end
|
193
|
-
|
194
|
-
it "creates an application.js that is executable by js when compress" do
|
195
|
-
#Get a temporary file, delete it, but save the path
|
196
|
-
temp = Tempfile.new "flok-temp"
|
197
|
-
path = temp.path
|
198
|
-
temp.close
|
199
|
-
temp.unlink
|
200
|
-
|
201
|
-
`ruby -Ilib ./bin/flok new #{path}`
|
202
|
-
gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
203
|
-
Dir.chdir path do
|
204
|
-
`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build --compress`
|
205
|
-
ctx = V8::Context.new
|
206
|
-
ctx.load("./public/application.js")
|
207
|
-
#it does not throw an error
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
167
|
+
#uncompressed_length = str.length
|
168
|
+
|
169
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build --compress`
|
170
|
+
#str = File.read("./public/application.js")
|
171
|
+
#compressed_length = str.length
|
172
|
+
#expect(compressed_length).to be < uncompressed_length
|
173
|
+
##it does not throw an error
|
174
|
+
#end
|
175
|
+
#end
|
176
|
+
|
177
|
+
#it "supports build --compress, which makes a smaller js file (that still contains something)" do
|
178
|
+
##Get a temporary file, delete it, but save the path
|
179
|
+
#temp = Tempfile.new SecureRandom.hex
|
180
|
+
#path = temp.path
|
181
|
+
#temp.close
|
182
|
+
#temp.unlink
|
183
|
+
|
184
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
185
|
+
#gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
186
|
+
#Dir.chdir path do
|
187
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build --compress`
|
188
|
+
#str = File.read("./public/application.js")
|
189
|
+
#expect(str.length).to be > 0
|
190
|
+
##it does not throw an error
|
191
|
+
#end
|
192
|
+
#end
|
193
|
+
|
194
|
+
#it "creates an application.js that is executable by js when compress" do
|
195
|
+
##Get a temporary file, delete it, but save the path
|
196
|
+
#temp = Tempfile.new SecureRandom.hex
|
197
|
+
#path = temp.path
|
198
|
+
#temp.close
|
199
|
+
#temp.unlink
|
200
|
+
|
201
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
202
|
+
#gem_root_path = File.expand_path(File.dirname(__FILE__))+"/.."
|
203
|
+
#Dir.chdir path do
|
204
|
+
#`ruby -I#{gem_root_path}/lib #{gem_root_path}/bin/flok build --compress`
|
205
|
+
#ctx = V8::Context.new
|
206
|
+
#ctx.load("./public/application.js")
|
207
|
+
##it does not throw an error
|
208
|
+
#end
|
209
|
+
#end
|
210
|
+
#end
|
data/spec/drivers/net_spec.rb
CHANGED
@@ -1,5 +1,94 @@
|
|
1
|
+
require 'phantomjs'
|
2
|
+
require 'rspec/wait'
|
3
|
+
require 'webrick'
|
4
|
+
require "./spec/helpers"
|
5
|
+
require 'json'
|
6
|
+
|
1
7
|
RSpec.describe "Drivers::Net" do
|
2
|
-
|
3
|
-
|
8
|
+
before(:all) do
|
9
|
+
#Respond to kill
|
10
|
+
@killable = []
|
11
|
+
end
|
12
|
+
|
13
|
+
after(:all) do
|
14
|
+
@killable ||= []
|
15
|
+
@killable.each {|p| p.kill}
|
16
|
+
|
17
|
+
#Stopgap to kill everything
|
18
|
+
`ps -ax | grep net_spec | awk '{print $1}' | grep -v #{Process.pid} | xargs kill -9`
|
19
|
+
`ps -ax | grep phantomjs| awk '{print $1}' | xargs kill -9`
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can make a get request" do
|
23
|
+
#Build driver
|
24
|
+
`cd ./app/drivers/browser; rake build`
|
25
|
+
|
26
|
+
cr = ChromeRunner.new "./products/drivers/browser.js"
|
27
|
+
|
28
|
+
#Setup rspec test server
|
29
|
+
called = false
|
30
|
+
spek = Webbing.get "/" do |params|
|
31
|
+
called = true
|
32
|
+
{"hello" => "world"}.to_json
|
33
|
+
end
|
34
|
+
@killable << spek
|
35
|
+
cr.eval "drivers.network.request('GET', 'http://localhost:#{spek.port}', {})"
|
36
|
+
cr.commit
|
37
|
+
|
38
|
+
#Load synchronously, but execute the code asynchronously, quit after it's been running for 3 seconds
|
39
|
+
wait(3).for { called }.to eq(true)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "can make a get request with parameters" do
|
43
|
+
#Build driver
|
44
|
+
`cd ./app/drivers/browser; rake build`
|
45
|
+
|
46
|
+
cr = ChromeRunner.new "./products/drivers/browser.js"
|
47
|
+
|
48
|
+
#Setup rspec test server
|
49
|
+
called = false
|
50
|
+
result = {}
|
51
|
+
spek = Webbing.get "/" do |params|
|
52
|
+
result = params
|
53
|
+
called = true
|
54
|
+
{"hello" => "world"}.to_json
|
55
|
+
end
|
56
|
+
@killable << spek
|
57
|
+
cr.eval "drivers.network.request('GET', 'http://localhost:#{spek.port}', {'a':'b'})"
|
58
|
+
cr.commit
|
59
|
+
|
60
|
+
#Load synchronously, but execute the code asynchronously, quit after it's been running for 3 seconds
|
61
|
+
wait(3).for { called }.to eq(true)
|
62
|
+
expect(result).to eq({'a' => 'b'})
|
63
|
+
end
|
64
|
+
|
65
|
+
it "can make a get and respond from callback" do
|
66
|
+
#Build driver
|
67
|
+
`cd ./app/drivers/browser; rake build`
|
68
|
+
|
69
|
+
cr = ChromeRunner.new "./products/drivers/browser.js"
|
70
|
+
|
71
|
+
#Setup rspec test server
|
72
|
+
@spek = Webbing.get "/" do |params|
|
73
|
+
{"port" => @spek2.port}.to_json
|
74
|
+
end
|
75
|
+
|
76
|
+
called = false
|
77
|
+
@spek2 = Webbing.get "/" do |params|
|
78
|
+
called = true
|
79
|
+
end
|
80
|
+
|
81
|
+
@killable << @spek
|
82
|
+
@killable << @spek2
|
83
|
+
cr.eval %{
|
84
|
+
drivers.network.request('GET', 'http://localhost:#{@spek.port}', {}, function(res) {
|
85
|
+
port = res.port;
|
86
|
+
drivers.network.request('GET', 'http://localhost:'+port, {});
|
87
|
+
})
|
88
|
+
}
|
89
|
+
cr.commit
|
90
|
+
|
91
|
+
##Load synchronously, but execute the code asynchronously, quit after it's been running for 3 seconds
|
92
|
+
wait(3).for { called }.to eq(true)
|
4
93
|
end
|
5
94
|
end
|
data/spec/helpers.rb
ADDED
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'securerandom'
|
2
|
+
|
3
|
+
#Duplex pipe
|
4
|
+
###################################################################################################################
|
5
|
+
class IO
|
6
|
+
def self.duplex_pipe
|
7
|
+
return DuplexPipe.new
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class DuplexPipe
|
12
|
+
def initialize
|
13
|
+
@r0, @w0 = IO.pipe
|
14
|
+
@r1, @w1 = IO.pipe
|
15
|
+
end
|
16
|
+
|
17
|
+
#Choose arbitrary side, just different ones for forked processes
|
18
|
+
def claim_low
|
19
|
+
@r = @r0
|
20
|
+
@w = @w1
|
21
|
+
end
|
22
|
+
|
23
|
+
def claim_high
|
24
|
+
@r = @r1
|
25
|
+
@w = @w0
|
26
|
+
end
|
27
|
+
|
28
|
+
def write msg
|
29
|
+
@w.write msg
|
30
|
+
end
|
31
|
+
|
32
|
+
def puts msg
|
33
|
+
@w.puts msg
|
34
|
+
end
|
35
|
+
|
36
|
+
def readline
|
37
|
+
@r.readline
|
38
|
+
end
|
39
|
+
end
|
40
|
+
###################################################################################################################
|
41
|
+
|
42
|
+
#RESTful mock
|
43
|
+
###################################################################################################################
|
44
|
+
module Webbing
|
45
|
+
def self.get path, &block
|
46
|
+
Webbing.new "GET", path, &block
|
47
|
+
end
|
48
|
+
|
49
|
+
class Webbing
|
50
|
+
attr_accessor :pid
|
51
|
+
attr_accessor :port
|
52
|
+
|
53
|
+
def kill
|
54
|
+
puts "killing #{@pid}"
|
55
|
+
Process.kill("KILL", @pid)
|
56
|
+
end
|
57
|
+
|
58
|
+
def initialize verb, path, &block
|
59
|
+
@verb = verb
|
60
|
+
@path = path
|
61
|
+
@block = block
|
62
|
+
@port = rand(30000)+3000
|
63
|
+
|
64
|
+
@pipe = IO.duplex_pipe
|
65
|
+
@pid = fork do
|
66
|
+
@pipe.claim_high
|
67
|
+
@server = WEBrick::HTTPServer.new :Port => @port, :DocumentRoot => ".", :StartCallback => Proc.new {
|
68
|
+
@pipe.puts("ready")
|
69
|
+
}
|
70
|
+
@server.mount_proc '/' do |req, res|
|
71
|
+
@pipe.puts req.query.to_json
|
72
|
+
res.body = @pipe.readline
|
73
|
+
res.header["Access-Control-Allow-Origin"] = "*"
|
74
|
+
res.header["Content-Type"] = "json/text"
|
75
|
+
end
|
76
|
+
@server.start
|
77
|
+
end
|
78
|
+
|
79
|
+
@pipe.claim_low
|
80
|
+
@pipe.readline #Wait for 'ready'
|
81
|
+
Thread.new do
|
82
|
+
begin
|
83
|
+
loop do
|
84
|
+
params = JSON.parse(@pipe.readline)
|
85
|
+
res = @block.call(params)
|
86
|
+
@pipe.puts res.to_json
|
87
|
+
end
|
88
|
+
rescue => e
|
89
|
+
puts "Exception: #{e.inspect}"
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
###################################################################################################################
|
96
|
+
|
97
|
+
#Mock chrome javascript running (Will not do anything until you run commit)
|
98
|
+
#Meant to be for one shot tests
|
99
|
+
#(1) load with --- cr = ChromeRunner.new('code.js')
|
100
|
+
#(2) queue execute with --- cr.eval('console.log("hello world");')
|
101
|
+
#(3) run in it's own process via --- cr.commit
|
102
|
+
###################################################################################################################
|
103
|
+
class ChromeRunner
|
104
|
+
#Load a javascript file
|
105
|
+
def initialize fn
|
106
|
+
@code = File.read(fn)
|
107
|
+
@code << "\n"
|
108
|
+
end
|
109
|
+
|
110
|
+
def eval(code)
|
111
|
+
@code << code
|
112
|
+
@code << "\n"
|
113
|
+
end
|
114
|
+
|
115
|
+
def commit
|
116
|
+
file = Tempfile.new SecureRandom.hex
|
117
|
+
file.write @code
|
118
|
+
|
119
|
+
@pid = fork do
|
120
|
+
system("phantomjs #{file.path}")
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def kill
|
125
|
+
puts "killing #{@pid}"
|
126
|
+
Process.kill("KILL", @pid)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
###################################################################################################################
|
data/spec/merge_source_spec.rb
CHANGED
@@ -1,68 +1,68 @@
|
|
1
|
-
require './lib/flok.rb'
|
2
|
-
require 'tempfile'
|
3
|
-
require 'securerandom'
|
4
|
-
require 'v8'
|
1
|
+
#require './lib/flok.rb'
|
2
|
+
#require 'tempfile'
|
3
|
+
#require 'securerandom'
|
4
|
+
#require 'v8'
|
5
5
|
|
6
|
-
def ensure_tmp
|
7
|
-
tmp_spec_path = './spec/tmp'
|
8
|
-
Dir.mkdir(tmp_spec_path) unless File.exists?(tmp_spec_path)
|
9
|
-
end
|
6
|
+
#def ensure_tmp
|
7
|
+
#tmp_spec_path = './spec/tmp'
|
8
|
+
#Dir.mkdir(tmp_spec_path) unless File.exists?(tmp_spec_path)
|
9
|
+
#end
|
10
10
|
|
11
|
-
RSpec.describe "Flok::MergeSourceSpec" do
|
12
|
-
it "when merging the kernel, it returns a string" do
|
13
|
-
str = Flok::MergeSource.merge_kernel
|
14
|
-
expect(str.class).to be(String)
|
15
|
-
end
|
11
|
+
#RSpec.describe "Flok::MergeSourceSpec" do
|
12
|
+
#it "when merging the kernel, it returns a string" do
|
13
|
+
#str = Flok::MergeSource.merge_kernel
|
14
|
+
#expect(str.class).to be(String)
|
15
|
+
#end
|
16
16
|
|
17
|
-
it "when merging the kernel, it returns a string with length" do
|
18
|
-
str = Flok::MergeSource.merge_kernel
|
19
|
-
expect(str.length).to be > 0
|
20
|
-
end
|
17
|
+
#it "when merging the kernel, it returns a string with length" do
|
18
|
+
#str = Flok::MergeSource.merge_kernel
|
19
|
+
#expect(str.length).to be > 0
|
20
|
+
#end
|
21
21
|
|
22
|
-
it "when merging the kernel, the kernel files located in ./lib/js/kernel/ do merge and run without js syntax errors" do
|
23
|
-
str = Flok::MergeSource.merge_kernel
|
24
|
-
ctx = V8::Context.new
|
25
|
-
ctx.eval(str)
|
22
|
+
#it "when merging the kernel, the kernel files located in ./lib/js/kernel/ do merge and run without js syntax errors" do
|
23
|
+
#str = Flok::MergeSource.merge_kernel
|
24
|
+
#ctx = V8::Context.new
|
25
|
+
#ctx.eval(str)
|
26
26
|
|
27
|
-
|
28
|
-
end
|
27
|
+
##It does not throw an error
|
28
|
+
#end
|
29
29
|
|
30
|
-
it "merges the user generated source files from app/*.js" do
|
31
|
-
|
32
|
-
temp = Tempfile.new "flok-temp"
|
33
|
-
path = temp.path
|
34
|
-
temp.close
|
35
|
-
temp.unlink
|
30
|
+
#it "merges the user generated source files from app/*.js" do
|
31
|
+
##Get a temporary file, delete it, but save the path
|
32
|
+
#temp = Tempfile.new "flok-temp"
|
33
|
+
#path = temp.path
|
34
|
+
#temp.close
|
35
|
+
#temp.unlink
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
##Create a new project
|
38
|
+
#`ruby -Ilib ./bin/flok new #{path}`
|
39
39
|
|
40
|
-
|
41
|
-
main_js = %{
|
42
|
-
function call_me_maybe() {
|
43
|
-
return call_me_maybe_response;
|
44
|
-
}
|
45
|
-
}
|
40
|
+
##Add a source function to this project
|
41
|
+
#main_js = %{
|
42
|
+
#function call_me_maybe() {
|
43
|
+
#return call_me_maybe_response;
|
44
|
+
#}
|
45
|
+
#}
|
46
46
|
|
47
|
-
two_js = %{
|
48
|
-
var call_me_maybe_response = "no_way";
|
49
|
-
}
|
47
|
+
#two_js = %{
|
48
|
+
#var call_me_maybe_response = "no_way";
|
49
|
+
#}
|
50
50
|
|
51
|
-
File.write "#{path}/app/main.js", main_js
|
52
|
-
File.write "#{path}/app/two.js", two_js
|
51
|
+
#File.write "#{path}/app/main.js", main_js
|
52
|
+
#File.write "#{path}/app/two.js", two_js
|
53
53
|
|
54
|
-
|
55
|
-
rpath = Dir.pwd
|
56
|
-
Dir.chdir path do
|
57
|
-
|
54
|
+
##Build
|
55
|
+
#rpath = Dir.pwd
|
56
|
+
#Dir.chdir path do
|
57
|
+
#`ruby -I#{rpath}/lib #{rpath}/bin/flok build`
|
58
58
|
|
59
|
-
|
60
|
-
Dir.chdir './public' do
|
61
|
-
ctx = V8::Context.new
|
62
|
-
ctx.load "application.js"
|
63
|
-
res = ctx.eval("call_me_maybe()")
|
64
|
-
expect(res).to eq("no_way")
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
59
|
+
##Execute
|
60
|
+
#Dir.chdir './public' do
|
61
|
+
#ctx = V8::Context.new
|
62
|
+
#ctx.load "application.js"
|
63
|
+
#res = ctx.eval("call_me_maybe()")
|
64
|
+
#expect(res).to eq("no_way")
|
65
|
+
#end
|
66
|
+
#end
|
67
|
+
#end
|
68
|
+
#end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flok
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- seo
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '1.9'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec-wait
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: thor
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -137,10 +151,10 @@ files:
|
|
137
151
|
- LICENSE
|
138
152
|
- README.md
|
139
153
|
- Rakefile
|
154
|
+
- app/drivers/browser/Rakefile
|
155
|
+
- app/drivers/browser/network.js
|
156
|
+
- app/drivers/browser/vendor/jquery.js
|
140
157
|
- bin/flok
|
141
|
-
- drivers/chromium/Rakefile
|
142
|
-
- drivers/chromium/jquery.min.js
|
143
|
-
- drivers/chromium/network.js
|
144
158
|
- flok.gemspec
|
145
159
|
- lib/flok.rb
|
146
160
|
- lib/flok/version.rb
|
@@ -153,6 +167,7 @@ files:
|
|
153
167
|
- logo.png
|
154
168
|
- spec/cli_spec.rb
|
155
169
|
- spec/drivers/net_spec.rb
|
170
|
+
- spec/helpers.rb
|
156
171
|
- spec/merge_source_spec.rb
|
157
172
|
homepage: https://github.com/sotownsend/flok
|
158
173
|
licenses:
|
@@ -181,4 +196,5 @@ summary: A boring javascript application framework
|
|
181
196
|
test_files:
|
182
197
|
- spec/cli_spec.rb
|
183
198
|
- spec/drivers/net_spec.rb
|
199
|
+
- spec/helpers.rb
|
184
200
|
- spec/merge_source_spec.rb
|
data/drivers/chromium/Rakefile
DELETED
data/drivers/chromium/network.js
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
drivers.network = {}
|
2
|
-
|
3
|
-
$(document).ready(function() {
|
4
|
-
drivers.network.request("GET", "http://test.services.fittr.com/ping", {}, null);
|
5
|
-
})
|
6
|
-
|
7
|
-
drivers.network.request = function(verb, url, params, completion) {
|
8
|
-
$.ajax({
|
9
|
-
url: url,
|
10
|
-
type: verb,
|
11
|
-
success: function(data) {
|
12
|
-
},
|
13
|
-
error: function(xhr, status, err) {
|
14
|
-
}
|
15
|
-
})
|
16
|
-
}
|