fjson 0.0.7 → 0.0.8
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/CHANGES +4 -1
- data/Rakefile +36 -96
- data/lib/json/editor.rb +1 -1
- data/mkmf_rake_builder.rb +177 -0
- data/rake_helper.rb +8 -53
- data/spec/mkmf_rake_builder_spec.rb +223 -0
- data/spec/rake_helper_spec.rb +9 -0
- data/spec/spec_helper.rb +2 -15
- data/spec/spec_suite.rb +18 -0
- metadata +33 -20
data/CHANGES
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
2006-11-04 (0.0.8)
|
2
|
+
* Fixed build issues. Better spec coverage on build.
|
3
|
+
|
1
4
|
2006-11-03 (0.0.7)
|
2
5
|
* Fixed reference to mkmf.
|
3
6
|
|
@@ -17,4 +20,4 @@
|
|
17
20
|
* Gem now compiles the extension rather than just distribute the binary.
|
18
21
|
|
19
22
|
2006-10-10 (0.0.1)
|
20
|
-
* Initial Rubyforge Version. Forked from ruby json library. http://json.rubyforge.org
|
23
|
+
* Initial Rubyforge Version. Forked from ruby json library. http://json.rubyforge.org
|
data/Rakefile
CHANGED
@@ -1,109 +1,51 @@
|
|
1
1
|
dir = File.dirname(__FILE__)
|
2
2
|
require File.expand_path("#{dir}/rake_helper")
|
3
|
-
require 'rake/gempackagetask'
|
4
|
-
require 'rake/contrib/rubyforgepublisher'
|
5
|
-
require 'rake/clean'
|
6
|
-
require 'rake/testtask'
|
7
|
-
require 'rake/rdoctask'
|
8
|
-
|
9
|
-
task :default => [ :compile ] do
|
10
|
-
end
|
11
|
-
|
12
|
-
task :compile => [
|
13
|
-
:json_ext,
|
14
|
-
:state_ext,
|
15
|
-
:object_ext,
|
16
|
-
:integer_ext,
|
17
|
-
:float_ext,
|
18
|
-
:string_ext,
|
19
|
-
:true_class_ext,
|
20
|
-
:false_class_ext,
|
21
|
-
:nil_class_ext,
|
22
|
-
:array_ext,
|
23
|
-
:hash_ext
|
24
|
-
] do
|
25
|
-
end
|
26
|
-
|
27
|
-
task :spec => [:compile, :install] do
|
28
|
-
require File.expand_path("#{dir}/spec/spec_suite")
|
29
|
-
end
|
30
|
-
|
31
|
-
task :lib do
|
32
|
-
directory "lib"
|
33
|
-
end
|
34
|
-
|
35
|
-
fjson_extensions = [
|
36
|
-
"json_ext",
|
37
|
-
"state_ext",
|
38
|
-
"extensions/object_ext",
|
39
|
-
"extensions/integer_ext",
|
40
|
-
"extensions/float_ext",
|
41
|
-
"extensions/string_ext",
|
42
|
-
"extensions/true_class_ext",
|
43
|
-
"extensions/false_class_ext",
|
44
|
-
"extensions/nil_class_ext",
|
45
|
-
"extensions/array_ext",
|
46
|
-
"extensions/hash_ext"
|
47
|
-
]
|
48
|
-
|
49
|
-
fjson_extensions.each do |ext|
|
50
|
-
setup_mkmf_extension ext
|
51
|
-
end
|
52
|
-
|
53
|
-
task :install do
|
54
|
-
fjson_extensions.each do |extension_path|
|
55
|
-
library_path = library_path(extension_path)
|
56
|
-
raise "Extension binary for #{extension_path} does not exist. Did you run rake compile?" unless library_path
|
57
|
-
cp build_path(extension_path), library_path(extension_path)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
task :cleanup do
|
62
|
-
fjson_extensions.each do |extension_path|
|
63
|
-
library_path = library_path(extension_path)
|
64
|
-
rm library_path if library_path && File.exists?(library_path)
|
65
|
-
rake_file_path = "#{build_path(extension_path)}/Rakefile"
|
66
|
-
rm rake_file_path if rake_file_path && File.exists?(rake_file_path)
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
def build_path(relative_extension_path)
|
71
|
-
basename = "#{File.dirname(__FILE__)}/ext/#{relative_extension_path}/#{File.basename(relative_extension_path)}"
|
72
|
-
if File.exists?("#{basename}.so")
|
73
|
-
return "#{basename}.so"
|
74
|
-
elsif File.exists?("#{basename}.bundle")
|
75
|
-
return "#{basename}.bundle"
|
76
|
-
end
|
77
|
-
return nil
|
78
|
-
end
|
79
|
-
|
80
|
-
def library_path(relative_extension_path)
|
81
|
-
build_path = build_path(relative_extension_path)
|
82
|
-
return nil unless build_path
|
83
|
-
extname = File.extname(build_path)
|
84
|
-
library_directory_path = File.dirname(__FILE__) + "/lib/" + File.dirname(relative_extension_path)
|
85
|
-
binary_name = "#{File.basename(relative_extension_path)}#{extname}"
|
86
|
-
"#{library_directory_path}/#{binary_name}"
|
87
|
-
end
|
88
|
-
|
89
3
|
def win32?
|
90
4
|
ENV["target_platform"] == "win32"
|
91
5
|
end
|
92
6
|
|
93
|
-
|
94
|
-
|
95
|
-
|
7
|
+
rake_builder = MkmfRakeBuilder.new
|
8
|
+
rake_builder.project_dir = File.dirname(__FILE__)
|
9
|
+
rake_builder.rake_application = Rake.application
|
10
|
+
rake_builder.rake_tasks = Rake::Task
|
11
|
+
rake_builder.rake_file_tasks = Rake::FileTask
|
12
|
+
rake_builder.dir_class = Dir
|
13
|
+
rake_builder.file_class = File
|
14
|
+
rake_builder.file_extension = (RUBY_PLATFORM =~ /darwin/) ? "bundle" : "so"
|
15
|
+
fjson_extensions = rake_builder.extensions_to_build = [
|
16
|
+
[:json_ext, "json_ext"],
|
17
|
+
[:state_ext, "state_ext"],
|
18
|
+
[:object_ext, "extensions/object_ext"],
|
19
|
+
[:integer_ext, "extensions/integer_ext"],
|
20
|
+
[:float_ext, "extensions/float_ext"],
|
21
|
+
[:string_ext, "extensions/string_ext"],
|
22
|
+
[:true_class_ext, "extensions/true_class_ext"],
|
23
|
+
[:false_class_ext, "extensions/false_class_ext"],
|
24
|
+
[:nil_class_ext, "extensions/nil_class_ext"],
|
25
|
+
[:array_ext, "extensions/array_ext"],
|
26
|
+
[:hash_ext, "extensions/hash_ext"]
|
27
|
+
]
|
28
|
+
rake_builder.extconf_arguments = "-I /usr/local/lib/ruby-mingw32/lib/ruby/1.8/i386-mingw32" if win32?
|
29
|
+
|
30
|
+
rake_builder.build_default_task
|
31
|
+
rake_builder.build_compile_task
|
32
|
+
rake_builder.build_spec_task
|
33
|
+
rake_builder.build_lib_task
|
34
|
+
rake_builder.build_extension_compile_tasks
|
35
|
+
rake_builder.build_install_task
|
36
|
+
rake_builder.build_cleanup_task
|
96
37
|
|
97
38
|
PKG_NAME = "fjson"
|
98
|
-
PKG_VERSION = "0.0.
|
39
|
+
PKG_VERSION = "0.0.8"
|
99
40
|
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
100
41
|
PKG_FILES = FileList[
|
101
42
|
'[A-Z]*',
|
102
43
|
'*.rb',
|
103
44
|
'lib/**/*.rb',
|
104
|
-
'ext/**/*.{h,c,rb}',
|
105
45
|
'spec/**/*.rb'
|
106
46
|
]
|
47
|
+
executable_extensions = (win32?) ? 'lib/**/*.so' : 'ext/**/*.{h,c,rb}'
|
48
|
+
PKG_FILES.include(executable_extensions)
|
107
49
|
|
108
50
|
spec = Gem::Specification.new do |s|
|
109
51
|
s.name = PKG_NAME
|
@@ -115,6 +57,7 @@ spec = Gem::Specification.new do |s|
|
|
115
57
|
EOF
|
116
58
|
s.test_files = Dir.glob('spec/*_spec.rb')
|
117
59
|
s.description = s.summary
|
60
|
+
s.platform = (win32?) ? Gem::Platform::WIN32 : Gem::Platform::RUBY
|
118
61
|
|
119
62
|
s.files = PKG_FILES.to_a
|
120
63
|
s.require_path = 'lib'
|
@@ -130,13 +73,10 @@ spec = Gem::Specification.new do |s|
|
|
130
73
|
s.homepage = "http://fjson.rubyforge.org"
|
131
74
|
s.rubyforge_project = "fjson"
|
132
75
|
|
133
|
-
s.extensions = ["Rakefile"]
|
76
|
+
s.extensions = ["Rakefile"] unless win32?
|
134
77
|
|
78
|
+
s.add_dependency "rspec", ">=0.6.4"
|
135
79
|
#s.add_dependency "mkrf", ">=0.1.2"
|
136
|
-
|
137
|
-
if win32?
|
138
|
-
|
139
|
-
end
|
140
80
|
end
|
141
81
|
|
142
82
|
Rake::GemPackageTask.new(spec) do |pkg|
|
data/lib/json/editor.rb
CHANGED
@@ -0,0 +1,177 @@
|
|
1
|
+
class MkmfRakeBuilder
|
2
|
+
attr_writer :project_dir,
|
3
|
+
:rake_application,
|
4
|
+
:rake_tasks,
|
5
|
+
:rake_file_tasks,
|
6
|
+
:dir_class,
|
7
|
+
:file_extension,
|
8
|
+
:extensions_to_build,
|
9
|
+
:file_class,
|
10
|
+
:extconf_arguments
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@extconf_file = "extconf.mkmf.rb"
|
14
|
+
end
|
15
|
+
|
16
|
+
def build_default_task
|
17
|
+
task(:default => [ :compile ]) do
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def build_compile_task
|
22
|
+
task :compile => @extensions_to_build.collect {|ext| ext.first} do
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_spec_task
|
27
|
+
task :spec => [:compile, :install] do
|
28
|
+
dir = @project_dir
|
29
|
+
require expand_path("#{dir}/spec/spec_suite")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_lib_task
|
34
|
+
task :lib do
|
35
|
+
directory "lib"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_extension_compile_tasks
|
40
|
+
@extensions_to_build.each do |data|
|
41
|
+
build_extension_compile_task(data[1])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def build_install_task
|
46
|
+
extension_paths = self.extension_paths
|
47
|
+
task :install do
|
48
|
+
extension_paths.each do |extension_path|
|
49
|
+
library_path = library_path(extension_path)
|
50
|
+
raise "Extension binary for #{extension_path} does not exist. Did you run rake compile?" unless library_path
|
51
|
+
build_path = build_path(extension_path)
|
52
|
+
raise "File #{build_path} does not exist" unless file_exists?(build_path)
|
53
|
+
cp build_path, library_path(extension_path)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
extension_paths
|
57
|
+
end
|
58
|
+
|
59
|
+
def build_cleanup_task
|
60
|
+
extension_paths = self.extension_paths
|
61
|
+
task :cleanup do
|
62
|
+
extension_paths.each do |extension_path|
|
63
|
+
library_path = library_path(extension_path)
|
64
|
+
rm library_path if library_path && file_exists?(library_path)
|
65
|
+
|
66
|
+
build_file_path = build_path(extension_path)
|
67
|
+
rm build_file_path if build_file_path && file_exists?(build_file_path)
|
68
|
+
|
69
|
+
build_object_path = "#{build_path_without_file_extension(extension_path)}.o"
|
70
|
+
rm build_object_path if build_object_path && file_exists?(build_object_path)
|
71
|
+
|
72
|
+
build_dir = build_dir(extension_path)
|
73
|
+
make_file_path = "#{build_dir}/Makefile"
|
74
|
+
rm make_file_path if make_file_path && file_exists?(make_file_path)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
extension_paths
|
78
|
+
end
|
79
|
+
|
80
|
+
protected
|
81
|
+
def extension_paths
|
82
|
+
@extensions_to_build.collect {|data| data[1]}
|
83
|
+
end
|
84
|
+
|
85
|
+
def build_extension_compile_task(extension_path)
|
86
|
+
extension_dir = "ext/#{extension_path}"
|
87
|
+
extension = file_name(extension_path)
|
88
|
+
extension_path = "#{extension_dir}/#{extension}.#{@file_extension}"
|
89
|
+
|
90
|
+
desc "Builds the #{extension} extension"
|
91
|
+
task extension.to_sym => ["#{extension_dir}/Makefile", extension_path ]
|
92
|
+
|
93
|
+
file "#{extension_dir}/Makefile" => ["#{extension_dir}/#{@extconf_file}"] do
|
94
|
+
extconf extension_dir
|
95
|
+
end
|
96
|
+
|
97
|
+
ext_files = FileList[
|
98
|
+
"#{extension_dir}/*.c",
|
99
|
+
"#{extension_dir}/*.h",
|
100
|
+
"#{extension_dir}/#{@extconf_file}",
|
101
|
+
"#{extension_dir}/Makefile",
|
102
|
+
"lib"
|
103
|
+
]
|
104
|
+
file extension_path => ext_files do
|
105
|
+
make extension_dir
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
def extconf(dir)
|
110
|
+
chdir(dir) do
|
111
|
+
ruby "#{@extconf_arguments} #{@extconf_file}"
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def ruby(file)
|
116
|
+
sh("ruby #{file}")
|
117
|
+
end
|
118
|
+
|
119
|
+
def make(makedir)
|
120
|
+
chdir(makedir) do
|
121
|
+
sh("make")
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
def chdir(dir, &block)
|
126
|
+
@dir_class.chdir(dir) do
|
127
|
+
yield
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
def desc(comment)
|
132
|
+
@rake_application.last_comment = comment
|
133
|
+
end
|
134
|
+
|
135
|
+
def task(*args, &block)
|
136
|
+
@rake_tasks.define_task(*args, &block)
|
137
|
+
end
|
138
|
+
|
139
|
+
def file(*args, &block)
|
140
|
+
@rake_file_tasks.define_task(*args, &block)
|
141
|
+
end
|
142
|
+
|
143
|
+
def build_dir(relative_extension_path)
|
144
|
+
"#{@project_dir}/ext/#{relative_extension_path}"
|
145
|
+
end
|
146
|
+
|
147
|
+
def build_path(relative_extension_path)
|
148
|
+
basename = build_path_without_file_extension(relative_extension_path)
|
149
|
+
"#{basename}.#{@file_extension}"
|
150
|
+
end
|
151
|
+
|
152
|
+
def build_path_without_file_extension(relative_extension_path)
|
153
|
+
"#{build_dir(relative_extension_path)}/#{file_name(relative_extension_path)}"
|
154
|
+
end
|
155
|
+
|
156
|
+
def library_path(relative_extension_path)
|
157
|
+
library_directory_path = "#{@project_dir}/lib/#{file_directory(relative_extension_path)}"
|
158
|
+
binary_name = "#{file_name(relative_extension_path)}.#{@file_extension}"
|
159
|
+
"#{library_directory_path}/#{binary_name}"
|
160
|
+
end
|
161
|
+
|
162
|
+
def expand_path(path)
|
163
|
+
@file_class.expand_path path
|
164
|
+
end
|
165
|
+
|
166
|
+
def file_exists?(path)
|
167
|
+
@file_class.exists? path
|
168
|
+
end
|
169
|
+
|
170
|
+
def file_name(path)
|
171
|
+
@file_class.basename path
|
172
|
+
end
|
173
|
+
|
174
|
+
def file_directory(path)
|
175
|
+
@file_class.dirname path
|
176
|
+
end
|
177
|
+
end
|
data/rake_helper.rb
CHANGED
@@ -1,53 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
file "#{ext_dir}/Rakefile" => ["#{ext_dir}/extconf.rb"] do
|
10
|
-
extconf "#{ext_dir}"
|
11
|
-
end
|
12
|
-
|
13
|
-
create_so_file_tasks(ext_dir, ext_so)
|
14
|
-
end
|
15
|
-
|
16
|
-
def setup_mkmf_extension(extension_path, extension=nil)
|
17
|
-
ext_dir = "ext/#{extension_path}"
|
18
|
-
extension = File.basename(extension_path) if extension.nil?
|
19
|
-
ext_so = "#{ext_dir}/#{extension}.#{Config::CONFIG['DLEXT']}"
|
20
|
-
|
21
|
-
desc "Builds the #{extension} extension"
|
22
|
-
task extension.to_sym => ["#{ext_dir}/Makefile", ext_so ]
|
23
|
-
|
24
|
-
file "#{ext_dir}/Makefile" => ["#{ext_dir}/extconf.mkmf.rb"] do
|
25
|
-
extconf "#{ext_dir}"
|
26
|
-
end
|
27
|
-
|
28
|
-
create_so_file_tasks(ext_dir, ext_so)
|
29
|
-
end
|
30
|
-
|
31
|
-
|
32
|
-
def create_so_file_tasks(ext_dir, ext_so)
|
33
|
-
ext_files = FileList[
|
34
|
-
"#{ext_dir}/*.c",
|
35
|
-
"#{ext_dir}/*.h",
|
36
|
-
"#{ext_dir}/extconf.rb",
|
37
|
-
"#{ext_dir}/Rakefile",
|
38
|
-
"lib"
|
39
|
-
]
|
40
|
-
file ext_so => ext_files do
|
41
|
-
rake ext_dir
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def extconf(dir)
|
46
|
-
Dir.chdir(dir) do ruby "extconf.rb" end
|
47
|
-
end
|
48
|
-
|
49
|
-
def rake(rakedir)
|
50
|
-
Dir.chdir(rakedir) do
|
51
|
-
sh("rake")
|
52
|
-
end
|
53
|
-
end
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
require 'rake/contrib/rubyforgepublisher'
|
4
|
+
require 'rake/clean'
|
5
|
+
require 'rake/testtask'
|
6
|
+
require 'rake/rdoctask'
|
7
|
+
dir = File.dirname(__FILE__)
|
8
|
+
require "#{dir}/mkmf_rake_builder"
|
@@ -0,0 +1,223 @@
|
|
1
|
+
dir = File.dirname(__FILE__)
|
2
|
+
require "#{dir}/spec_helper"
|
3
|
+
|
4
|
+
context "A MkmfRakeBuilder" do
|
5
|
+
setup do
|
6
|
+
@builder = MkmfRakeBuilder.new
|
7
|
+
|
8
|
+
dir = File.dirname(__FILE__)
|
9
|
+
@project_dir = @builder.project_dir = "/project/dir"
|
10
|
+
@rake_application = @builder.rake_application = mock("rake_application")
|
11
|
+
@rake_tasks = @builder.rake_tasks = mock("rake_tasks")
|
12
|
+
@rake_file_tasks = @builder.rake_file_tasks = mock("rake_file_tasks")
|
13
|
+
@dir_class = @builder.dir_class = mock("dir_class")
|
14
|
+
@file_class = @builder.file_class = File
|
15
|
+
end
|
16
|
+
|
17
|
+
specify "should build the default task" do
|
18
|
+
@rake_tasks.should_receive(:define_task).with({:default => [ :compile ]})
|
19
|
+
@builder.build_default_task
|
20
|
+
end
|
21
|
+
|
22
|
+
specify "should build the compile task" do
|
23
|
+
extensions_to_build = @builder.extensions_to_build = [[:foo, "foo"], [:bar, "bar"]]
|
24
|
+
@rake_tasks.should_receive(:define_task).with({:compile => [:foo, :bar]})
|
25
|
+
@builder.build_compile_task
|
26
|
+
end
|
27
|
+
|
28
|
+
specify "should build spec task to require spec suite" do
|
29
|
+
spec_task = nil
|
30
|
+
@rake_tasks.should_receive(:define_task).with({:spec => [:compile, :install]}).
|
31
|
+
and_return{|definition, spec_task| spec_task = spec_task}
|
32
|
+
@builder.build_spec_task
|
33
|
+
|
34
|
+
require_args = nil
|
35
|
+
@builder.define_instance_method :require do |*args|
|
36
|
+
require_args = args
|
37
|
+
end
|
38
|
+
spec_task.call
|
39
|
+
require_args.should_equal ["/project/dir/spec/spec_suite"]
|
40
|
+
end
|
41
|
+
|
42
|
+
specify "should build lib task to create the lib directory" do
|
43
|
+
spec_task = nil
|
44
|
+
@rake_tasks.should_receive(:define_task).with(:lib).
|
45
|
+
and_return{|definition, spec_task| spec_task = spec_task}
|
46
|
+
@builder.build_lib_task
|
47
|
+
|
48
|
+
directory_args = nil
|
49
|
+
@builder.define_instance_method :directory do |*args|
|
50
|
+
directory_args = args
|
51
|
+
end
|
52
|
+
spec_task.call
|
53
|
+
directory_args.should_equal ["lib"]
|
54
|
+
end
|
55
|
+
|
56
|
+
specify "should build all extension compile tasks" do
|
57
|
+
extensions_to_build = @builder.extensions_to_build = [[:foo, "foo"], [:bar, "bar"]]
|
58
|
+
specify_build_extension_compile_task("foo", "foo")
|
59
|
+
specify_build_extension_compile_task("bar", "bar")
|
60
|
+
@builder.build_extension_compile_tasks
|
61
|
+
end
|
62
|
+
|
63
|
+
specify "should build extension compile task that creates a makefile and executable" do
|
64
|
+
extension_path = "extension/path"
|
65
|
+
class << @builder
|
66
|
+
public :build_extension_compile_task
|
67
|
+
end
|
68
|
+
makefile_task, executable_task = specify_build_extension_compile_task(extension_path, "path") do
|
69
|
+
@builder.build_extension_compile_task(extension_path)
|
70
|
+
end
|
71
|
+
|
72
|
+
specify_makefile_task(makefile_task)
|
73
|
+
specify_executable_task(executable_task)
|
74
|
+
end
|
75
|
+
|
76
|
+
def specify_makefile_task(makefile_task)
|
77
|
+
dir_class = @builder.dir_class = mock("dir_class_for_makefile")
|
78
|
+
@builder.extconf_arguments = "extconf_arguments"
|
79
|
+
makefile_chdir_task = nil
|
80
|
+
dir_class.should_receive(:chdir).with("ext/extension/path").
|
81
|
+
and_return do |name, makefile_chdir_task|
|
82
|
+
makefile_chdir_task = makefile_chdir_task
|
83
|
+
end
|
84
|
+
makefile_task.call
|
85
|
+
|
86
|
+
sh_args = []
|
87
|
+
@builder.define_instance_method :sh do |*args|
|
88
|
+
sh_args << args
|
89
|
+
end
|
90
|
+
makefile_chdir_task.call
|
91
|
+
sh_args.should_equal [["ruby extconf_arguments extconf.mkmf.rb"]]
|
92
|
+
end
|
93
|
+
|
94
|
+
def specify_executable_task(executable_task)
|
95
|
+
dir_class = @builder.dir_class = mock("dir_class_for_executable")
|
96
|
+
executable_chdir_task = nil
|
97
|
+
dir_class.should_receive(:chdir).with("ext/extension/path").
|
98
|
+
and_return do |name, executable_chdir_task|
|
99
|
+
executable_chdir_task = executable_chdir_task
|
100
|
+
end
|
101
|
+
executable_task.call
|
102
|
+
|
103
|
+
sh_args = []
|
104
|
+
@builder.define_instance_method :sh do |*args|
|
105
|
+
sh_args << args
|
106
|
+
end
|
107
|
+
executable_chdir_task.call
|
108
|
+
sh_args.should_equal [["make"]]
|
109
|
+
end
|
110
|
+
|
111
|
+
specify "should build install task to install all of the compiled extensions" do
|
112
|
+
extensions_to_build = @builder.extensions_to_build = [[:foo, "extensions/foo"], [:bar, "extensions/bar"]]
|
113
|
+
file_extension = @builder.file_extension = "file_extension"
|
114
|
+
rake_task = nil
|
115
|
+
@rake_tasks.should_receive(:define_task).with(:install).
|
116
|
+
and_return {|name, rake_task| rake_task = rake_task}
|
117
|
+
@builder.build_install_task.should_equal ["extensions/foo", "extensions/bar"]
|
118
|
+
|
119
|
+
file_class = @builder.file_class = mock("file_class")
|
120
|
+
file_class.should_receive(:dirname).at_least(1).with("extensions/foo").and_return("extensions")
|
121
|
+
file_class.should_receive(:dirname).at_least(1).with("extensions/bar").and_return("extensions")
|
122
|
+
file_class.should_receive(:basename).at_least(1).with("extensions/foo").and_return("foo")
|
123
|
+
file_class.should_receive(:basename).at_least(1).with("extensions/bar").and_return("bar")
|
124
|
+
file_class.should_receive(:exists?).at_least(1).
|
125
|
+
with("/project/dir/ext/extensions/foo/foo.file_extension").and_return(true)
|
126
|
+
file_class.should_receive(:exists?).at_least(1).
|
127
|
+
with("/project/dir/ext/extensions/bar/bar.file_extension").and_return(true)
|
128
|
+
|
129
|
+
cp_args = []
|
130
|
+
@builder.define_instance_method :cp do |*args|
|
131
|
+
cp_args << args
|
132
|
+
end
|
133
|
+
rake_task.call
|
134
|
+
|
135
|
+
cp_args.should_equal [
|
136
|
+
["/project/dir/ext/extensions/foo/foo.file_extension", "/project/dir/lib/extensions/foo.file_extension"],
|
137
|
+
["/project/dir/ext/extensions/bar/bar.file_extension", "/project/dir/lib/extensions/bar.file_extension"]
|
138
|
+
]
|
139
|
+
end
|
140
|
+
|
141
|
+
specify "should build cleanup task that removes all of the compiled files" do
|
142
|
+
extensions_to_build = @builder.extensions_to_build = [[:foo, "extensions/foo"], [:bar, "extensions/bar"]]
|
143
|
+
file_extension = @builder.file_extension = "file_extension"
|
144
|
+
cleanup_task = nil
|
145
|
+
@rake_tasks.should_receive(:define_task).with(:cleanup).
|
146
|
+
and_return do |name, cleanup_task|
|
147
|
+
cleanup_task = cleanup_task
|
148
|
+
end
|
149
|
+
@builder.build_cleanup_task.should_equal ["extensions/foo", "extensions/bar"]
|
150
|
+
|
151
|
+
file_class = @builder.file_class = mock("file_class")
|
152
|
+
file_class.should_receive(:dirname).at_least(1).with("extensions/foo").and_return("extensions")
|
153
|
+
file_class.should_receive(:dirname).at_least(1).with("extensions/bar").and_return("extensions")
|
154
|
+
file_class.should_receive(:basename).at_least(1).with("extensions/foo").and_return("foo")
|
155
|
+
file_class.should_receive(:basename).at_least(1).with("extensions/bar").and_return("bar")
|
156
|
+
file_class.should_receive(:exists?).at_least(1).
|
157
|
+
with("/project/dir/ext/extensions/foo/foo.file_extension").and_return(true)
|
158
|
+
file_class.should_receive(:exists?).at_least(1).
|
159
|
+
with("/project/dir/ext/extensions/bar/bar.file_extension").and_return(true)
|
160
|
+
file_class.should_receive(:exists?).at_least(1).
|
161
|
+
with("/project/dir/ext/extensions/foo/foo.o").and_return(true)
|
162
|
+
file_class.should_receive(:exists?).at_least(1).
|
163
|
+
with("/project/dir/ext/extensions/bar/bar.o").and_return(true)
|
164
|
+
file_class.should_receive(:exists?).at_least(1).
|
165
|
+
with("/project/dir/lib/extensions/foo.file_extension").and_return(true)
|
166
|
+
file_class.should_receive(:exists?).at_least(1).
|
167
|
+
with("/project/dir/lib/extensions/bar.file_extension").and_return(true)
|
168
|
+
file_class.should_receive(:exists?).at_least(1).
|
169
|
+
with("/project/dir/ext/extensions/foo/Makefile").and_return(true)
|
170
|
+
file_class.should_receive(:exists?).at_least(1).
|
171
|
+
with("/project/dir/ext/extensions/bar/Makefile").and_return(true)
|
172
|
+
|
173
|
+
|
174
|
+
rm_args = []
|
175
|
+
@builder.define_instance_method :rm do |*args|
|
176
|
+
rm_args << args
|
177
|
+
end
|
178
|
+
cleanup_task.call
|
179
|
+
|
180
|
+
rm_args.should_equal [
|
181
|
+
["/project/dir/lib/extensions/foo.file_extension"],
|
182
|
+
["/project/dir/ext/extensions/foo/foo.file_extension"],
|
183
|
+
["/project/dir/ext/extensions/foo/foo.o"],
|
184
|
+
["/project/dir/ext/extensions/foo/Makefile"],
|
185
|
+
["/project/dir/lib/extensions/bar.file_extension"],
|
186
|
+
["/project/dir/ext/extensions/bar/bar.file_extension"],
|
187
|
+
["/project/dir/ext/extensions/bar/bar.o"],
|
188
|
+
["/project/dir/ext/extensions/bar/Makefile"],
|
189
|
+
]
|
190
|
+
end
|
191
|
+
|
192
|
+
def specify_build_extension_compile_task(extension_path, extension)
|
193
|
+
file_extension = @builder.file_extension = "file_extension"
|
194
|
+
@rake_application.should_receive(:last_comment=).with("Builds the #{extension} extension")
|
195
|
+
expected_executable = "ext/#{extension_path}/#{extension}.file_extension"
|
196
|
+
@rake_tasks.should_receive(:define_task).with({extension.to_sym => ["ext/#{extension_path}/Makefile", expected_executable ]})
|
197
|
+
makefile_task = nil
|
198
|
+
@rake_file_tasks.should_receive(:define_task).
|
199
|
+
with({"ext/#{extension_path}/Makefile" => ["ext/#{extension_path}/extconf.mkmf.rb"]}).
|
200
|
+
and_return do |task_name, makefile_task|
|
201
|
+
makefile_task = makefile_task
|
202
|
+
end
|
203
|
+
|
204
|
+
file_list = FileList[
|
205
|
+
"ext/#{extension_path}/*.c",
|
206
|
+
"ext/#{extension_path}/*.h",
|
207
|
+
"ext/#{extension_path}/extconf.mkmf.rb",
|
208
|
+
"ext/#{extension_path}/Makefile",
|
209
|
+
"lib"
|
210
|
+
]
|
211
|
+
executable_task = nil
|
212
|
+
@rake_file_tasks.should_receive(:define_task).with({expected_executable => file_list}).
|
213
|
+
and_return do |task_name, executable_task|
|
214
|
+
executable_task = executable_task
|
215
|
+
end
|
216
|
+
|
217
|
+
yield if block_given?
|
218
|
+
[makefile_task, executable_task]
|
219
|
+
end
|
220
|
+
|
221
|
+
def specify_make_executable_task(expected_executable, extension_path)
|
222
|
+
end
|
223
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'spec'
|
2
3
|
dir = File.dirname(__FILE__)
|
3
|
-
|
4
|
+
require "#{dir}/../rake_helper"
|
4
5
|
|
5
6
|
class Object
|
6
7
|
def metaclass
|
@@ -11,17 +12,3 @@ class Object
|
|
11
12
|
metaclass.__send__(:define_method, sym, &block)
|
12
13
|
end
|
13
14
|
end
|
14
|
-
|
15
|
-
unless args.include?("-f") || args.include?("--format")
|
16
|
-
args << "--format"
|
17
|
-
args << "specdoc"
|
18
|
-
end
|
19
|
-
args << $0
|
20
|
-
|
21
|
-
$context_runner = ::Spec::Runner::OptionParser.create_context_runner(args, false, STDERR, STDOUT)
|
22
|
-
|
23
|
-
at_exit do
|
24
|
-
unless context_runner.instance_eval {@reporter}.instance_eval {@start_time}
|
25
|
-
context_runner.run(false)
|
26
|
-
end
|
27
|
-
end
|
data/spec/spec_suite.rb
CHANGED
@@ -1,3 +1,21 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
|
4
|
+
args = ARGV.dup
|
5
|
+
unless args.include?("-f") || args.include?("--format")
|
6
|
+
args << "--format"
|
7
|
+
args << "specdoc"
|
8
|
+
end
|
9
|
+
args << $0
|
10
|
+
|
11
|
+
$context_runner = ::Spec::Runner::OptionParser.create_context_runner(args, false, STDERR, STDOUT)
|
12
|
+
|
13
|
+
at_exit do
|
14
|
+
unless context_runner.instance_eval {@reporter}.instance_eval {@start_time}
|
15
|
+
context_runner.run(false)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
1
19
|
dir = File.dirname(__FILE__)
|
2
20
|
|
3
21
|
Dir["#{dir}/**/*_spec.rb"].each do |file|
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
|
|
3
3
|
specification_version: 1
|
4
4
|
name: fjson
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.0.
|
7
|
-
date: 2006-11-
|
6
|
+
version: 0.0.8
|
7
|
+
date: 2006-11-04 00:00:00 -08:00
|
8
8
|
summary: This library is for parsing JSON strings and unparsing ruby data structures. This library is a fork of Florian Frank's JSON library with key parts implemented in C for performance improvements.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -37,12 +37,31 @@ files:
|
|
37
37
|
- hash_benchmark.rb
|
38
38
|
- rake_helper.rb
|
39
39
|
- install.rb
|
40
|
+
- mkmf_rake_builder.rb
|
40
41
|
- lib/parser.rb
|
41
42
|
- lib/fjson.rb
|
42
43
|
- lib/extensions/kernel.rb
|
43
44
|
- lib/extensions/class.rb
|
44
45
|
- lib/extensions/string.rb
|
45
46
|
- lib/json/editor.rb
|
47
|
+
- spec/rake_helper_spec.rb
|
48
|
+
- spec/true_class_spec.rb
|
49
|
+
- spec/float_spec.rb
|
50
|
+
- spec/string_spec.rb
|
51
|
+
- spec/object_spec.rb
|
52
|
+
- spec/nil_class_spec.rb
|
53
|
+
- spec/array_spec.rb
|
54
|
+
- spec/spec_helper.rb
|
55
|
+
- spec/false_class_spec.rb
|
56
|
+
- spec/string_when_not_supporting_unicode_and_kcode_is_not_utf8_json_spec.rb
|
57
|
+
- spec/state_spec.rb
|
58
|
+
- spec/hash_spec.rb
|
59
|
+
- spec/spec_suite.rb
|
60
|
+
- spec/integer_spec.rb
|
61
|
+
- spec/string_when_supporting_unicode_and_kcode_is_not_utf8_json_spec.rb
|
62
|
+
- spec/string_with_latin1_character_set_json_spec.rb
|
63
|
+
- spec/mkmf_rake_builder_spec.rb
|
64
|
+
- spec/string_with_utf8_values_when_supporting_unicode_json_spec.rb
|
46
65
|
- ext/extensions/false_class_ext/false_class_ext.h
|
47
66
|
- ext/extensions/hash_ext/hash_ext.h
|
48
67
|
- ext/extensions/true_class_ext/true_class_ext.h
|
@@ -87,23 +106,8 @@ files:
|
|
87
106
|
- ext/state_ext/extconf.rb
|
88
107
|
- ext/json_ext/extconf.mkmf.rb
|
89
108
|
- ext/json_ext/extconf.rb
|
90
|
-
- spec/true_class_spec.rb
|
91
|
-
- spec/float_spec.rb
|
92
|
-
- spec/string_spec.rb
|
93
|
-
- spec/object_spec.rb
|
94
|
-
- spec/nil_class_spec.rb
|
95
|
-
- spec/array_spec.rb
|
96
|
-
- spec/spec_helper.rb
|
97
|
-
- spec/false_class_spec.rb
|
98
|
-
- spec/string_when_not_supporting_unicode_and_kcode_is_not_utf8_json_spec.rb
|
99
|
-
- spec/state_spec.rb
|
100
|
-
- spec/hash_spec.rb
|
101
|
-
- spec/spec_suite.rb
|
102
|
-
- spec/integer_spec.rb
|
103
|
-
- spec/string_when_supporting_unicode_and_kcode_is_not_utf8_json_spec.rb
|
104
|
-
- spec/string_with_latin1_character_set_json_spec.rb
|
105
|
-
- spec/string_with_utf8_values_when_supporting_unicode_json_spec.rb
|
106
109
|
test_files:
|
110
|
+
- spec/rake_helper_spec.rb
|
107
111
|
- spec/true_class_spec.rb
|
108
112
|
- spec/float_spec.rb
|
109
113
|
- spec/string_spec.rb
|
@@ -117,6 +121,7 @@ test_files:
|
|
117
121
|
- spec/integer_spec.rb
|
118
122
|
- spec/string_when_supporting_unicode_and_kcode_is_not_utf8_json_spec.rb
|
119
123
|
- spec/string_with_latin1_character_set_json_spec.rb
|
124
|
+
- spec/mkmf_rake_builder_spec.rb
|
120
125
|
- spec/string_with_utf8_values_when_supporting_unicode_json_spec.rb
|
121
126
|
rdoc_options: []
|
122
127
|
|
@@ -128,5 +133,13 @@ extensions:
|
|
128
133
|
- Rakefile
|
129
134
|
requirements: []
|
130
135
|
|
131
|
-
dependencies:
|
132
|
-
|
136
|
+
dependencies:
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: rspec
|
139
|
+
version_requirement:
|
140
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: 0.6.4
|
145
|
+
version:
|