jsus 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,4 +1,4 @@
1
- name: orwik
1
+ name: Orwik
2
2
  filename: orwik.js
3
3
  web: http://orwik.com
4
4
  description: Orwik widgets and essensial things
@@ -0,0 +1,13 @@
1
+ /*
2
+ ---
3
+
4
+ script: Class.js
5
+
6
+ description: Contains the Class Function for easily creating, extending, and implementing reusable Classes.
7
+
8
+ license: MIT-style license.
9
+
10
+ provides: [Class]
11
+
12
+ ...
13
+ */
@@ -0,0 +1,8 @@
1
+ name: Core
2
+ filename: class.js
3
+ description: Framework base stuff
4
+ license: MIT-Style License, http://mootools.net/license
5
+ copyright: Somebody
6
+ authors: Someone
7
+ sources:
8
+ - Source/Class.js
@@ -0,0 +1,16 @@
1
+ /*
2
+ ---
3
+
4
+ script: Class.js
5
+
6
+ description: Extension for Core/Class
7
+
8
+ license: MIT-style license
9
+
10
+ authors:
11
+ - Valerio Proietti
12
+
13
+ extends: "Core/Class"
14
+
15
+ ...
16
+ */
@@ -0,0 +1,8 @@
1
+ name: Orwik
2
+ filename: orwik.js
3
+ description: Framework extensions
4
+ license: MIT-Style License, http://mootools.net/license
5
+ copyright: Somebody
6
+ authors: Someone
7
+ sources:
8
+ - Extensions/Class.js
@@ -11,6 +11,7 @@ authors:
11
11
  - Valerio Proietti
12
12
  requires:
13
13
  - Mash/Mash
14
+ - Class
14
15
  provides: [Test]
15
16
 
16
17
  ...
@@ -1,4 +1,4 @@
1
- name: orwik
1
+ name: Orwik
2
2
  filename: orwik.js
3
3
  web: http://orwik.com
4
4
  description: Orwik widgets and essensial things
@@ -10,8 +10,11 @@ license: MIT-style license
10
10
  authors:
11
11
  - Valerio Proietti
12
12
 
13
- provides: [Color]
14
-
13
+ provides:
14
+ - ./Color
15
+ requires:
16
+ - ./Class
17
+ extends: Core
15
18
  ...
16
19
  */
17
20
 
@@ -24,17 +24,16 @@ describe Jsus::Package do
24
24
  end
25
25
 
26
26
  it "should set provided modules from source files" do
27
- subject.provides.should have_exactly(4).items
28
- subject.provides.should include("Color", "Input", "Input.Color", "Widget")
27
+ subject.provides.should have_exactly(4).items
28
+ subject.provides_names.should include("Color", "Input", "Input.Color", "Widget")
29
29
  end
30
30
 
31
31
  it "should set up outside dependencies" do
32
- subject.dependencies.should == ['core/Class']
32
+ subject.dependencies_names.should == ['core/Class']
33
33
  end
34
34
 
35
- it "should set directory and relative directory fields" do
35
+ it "should set directory field" do
36
36
  subject.directory.should == File.expand_path(input_dir)
37
- subject.relative_directory.should == input_dir
38
37
  end
39
38
  end
40
39
  end
@@ -54,7 +53,7 @@ describe Jsus::Package do
54
53
  subject.generate_scripts_info(output_dir)
55
54
  File.exists?("#{output_dir}/scripts.json").should be_true
56
55
  info = JSON.parse(IO.read("#{output_dir}/scripts.json"))
57
- info = info["orwik"]
56
+ info = info["Orwik"]
58
57
  info["provides"].should have_exactly(4).items
59
58
  info["provides"].should include("Color", "Widget", "Input", "Input.Color")
60
59
  end
@@ -68,7 +67,7 @@ describe Jsus::Package do
68
67
  subject.include_dependencies!
69
68
  subject.generate_scripts_info(output_dir)
70
69
  info = JSON.parse(IO.read("#{output_dir}/scripts.json"))
71
- info = info["orwik"]
70
+ info = info["Orwik"]
72
71
  info["provides"].should have_exactly(4).items
73
72
  info["provides"].should include("Test", "Hash/Hash", "Class/Class", 'Mash/Mash')
74
73
  end
@@ -77,8 +76,8 @@ describe Jsus::Package do
77
76
  subject.include_dependencies!
78
77
  subject.generate_scripts_info(output_dir)
79
78
  info = JSON.parse(IO.read("#{output_dir}/scripts.json"))
80
- info = info["orwik"]
81
- info["requires"].should == []
79
+ info = info["Orwik"]
80
+ info["requires"].should == ["Class"]
82
81
  end
83
82
  end
84
83
  end
@@ -114,6 +113,11 @@ describe Jsus::Package do
114
113
  input_index.should < input_color_index
115
114
  color_index.should < input_color_index
116
115
  end
116
+
117
+ it "should not include extensions" do
118
+ required_files = Jsus::Package.new("spec/data/Extensions/app/javascripts/Orwik").required_files
119
+ required_files.should be_empty
120
+ end
117
121
  end
118
122
 
119
123
  describe "#include_dependencies!" do
@@ -130,4 +134,17 @@ describe Jsus::Package do
130
134
  end
131
135
  end
132
136
  end
137
+
138
+ describe "#include_extensions!" do
139
+ let(:lib_dir) { "spec/data/Extensions/app/javascripts" }
140
+ let(:pool) { Jsus::Pool.new(lib_dir) }
141
+ subject { Jsus::Package.new("spec/data/Extensions/app/javascripts/Core", :pool => pool) }
142
+
143
+ it "should include extensions into source files" do
144
+ subject.source_files[0].extensions.should be_empty
145
+ subject.include_extensions!
146
+ subject.source_files[0].extensions.should have_exactly(1).item
147
+ end
148
+
149
+ end
133
150
  end
@@ -34,7 +34,12 @@ describe Jsus::Pool do
34
34
 
35
35
  it "should add all the source files to pool" do
36
36
  subject.should have_exactly(3).sources
37
- subject.sources.map {|s| s.provides }.flatten.should include("Mash/Mash", "Hash/Hash", "Class/Class")
37
+ subject.sources.map {|s| s.provides_names }.flatten.should include("Mash/Mash", "Hash/Hash", "Class/Class")
38
+ end
39
+
40
+ it "should keep track of extensions" do
41
+ pool = Jsus::Pool.new("spec/data/Extensions/app/javascripts")
42
+ pool.send(:extensions_map).keys.should include(Jsus::Tag["Core/Class"])
38
43
  end
39
44
  end
40
45
  end
@@ -52,6 +57,10 @@ describe Jsus::Pool do
52
57
  it "should return nil if nothing could be found" do
53
58
  subject.lookup("Core/WTF").should be_nil
54
59
  end
60
+
61
+ it "should allow tags" do
62
+ subject.lookup(Jsus::Tag["Class/Class"]).should == sources[1]
63
+ end
55
64
  end
56
65
 
57
66
  describe "#lookup_direct_dependencies" do
@@ -62,6 +71,13 @@ describe Jsus::Pool do
62
71
  it "should return a container with direct dependencies" do
63
72
  subject.lookup_direct_dependencies("Mash/Mash").should be_a(Jsus::Container)
64
73
  subject.lookup_direct_dependencies("Mash/Mash").should == [sources[2]]
74
+ subject.lookup_direct_dependencies(Jsus::Tag["Mash/Mash"]).should be_a(Jsus::Container)
75
+ subject.lookup_direct_dependencies(Jsus::Tag["Mash/Mash"]).should == [sources[2]]
76
+ end
77
+
78
+ it "should return empty array if pool doesn't contain given source" do
79
+ subject.lookup_direct_dependencies("Lol/Wtf").should == []
80
+ subject.lookup_direct_dependencies(Jsus::Tag["Lol/Wtf"]).should == []
65
81
  end
66
82
  end
67
83
 
@@ -72,6 +88,27 @@ describe Jsus::Pool do
72
88
 
73
89
  it "should return a container with files and dependencies" do
74
90
  subject.lookup_dependencies("Mash/Mash").should == [sources[1], sources[2]]
91
+ subject.lookup_dependencies(Jsus::Tag["Mash/Mash"]).should == [sources[1], sources[2]]
92
+ end
93
+
94
+ it "should return empty array if pool doesn't contain given source" do
95
+ subject.lookup_dependencies("Lol/Wtf").should == []
96
+ subject.lookup_dependencies(Jsus::Tag["Caught/Mosh"]).should == []
97
+ end
98
+ end
99
+
100
+ describe "#lookup_extensions" do
101
+ let(:input_dir) { "spec/Data/Extensions/app/javascripts" }
102
+ subject { Jsus::Pool.new(input_dir) }
103
+
104
+ it "should return empty array if there's not a single extension for given tag" do
105
+ subject.lookup_extensions("Core/WTF").should be_empty
106
+ subject.lookup_extensions(Jsus::Tag["Core/WTF"]).should be_empty
107
+ end
108
+
109
+ it "should return an array with extensions if there are extensions for given tag" do
110
+ subject.lookup_extensions("Core/Class").should have_exactly(1).item
111
+ subject.lookup_extensions(Jsus::Tag["Core/Class"]).should have_exactly(1).item
75
112
  end
76
113
  end
77
114
  end
@@ -9,8 +9,8 @@ describe Jsus::SourceFile do
9
9
  context "from file" do
10
10
  subject { Jsus::SourceFile.from_file('spec/data/test_source_one.js') }
11
11
  it "should parse json header" do
12
- subject.dependencies.should == []
13
- subject.provides.should == ["Color"]
12
+ subject.dependencies_names.should == ["Class"]
13
+ subject.provides_names.should == ["Color"]
14
14
  subject.description.should == "A library to work with colors"
15
15
  end
16
16
 
@@ -25,7 +25,6 @@ describe Jsus::SourceFile do
25
25
  end
26
26
  end
27
27
 
28
-
29
28
  context "when file does not exist" do
30
29
  it "should return nil" do
31
30
  Jsus::SourceFile.from_file('spec/data/non-existant-file.js').should == nil
@@ -46,51 +45,207 @@ describe Jsus::SourceFile do
46
45
  source.header.should == subject.header
47
46
  end
48
47
 
49
- it "should register package in pool from constructor" do
50
- pool = mock("Pool")
51
- pool.should_receive("<<").with(instance_of(Jsus::SourceFile))
52
- Jsus::SourceFile.new(:pool => pool)
48
+ end
49
+
50
+ context "when no package set, " do
51
+ subject { Jsus::SourceFile.from_file("spec/data/test_source_one.js") }
52
+ describe "#package" do
53
+ it "should return nil" do
54
+ subject.package.should be_nil
55
+ end
56
+ end
57
+
58
+ describe "#provides_names" do
59
+ it "should return names without leading slash in both forms" do
60
+ subject.provides_names.should == ["Color"]
61
+ subject.provides_names(:short => true).should == ["Color"]
62
+ end
63
+ end
64
+
65
+ describe "#dependencies_names" do
66
+ it "should return names without leading slash in both forms" do
67
+ subject.dependencies_names.should == ["Class"]
68
+ subject.dependencies_names(:short => true).should == ["Class"]
69
+ end
70
+ end
71
+
72
+ describe "#external_dependencies" do
73
+ it "should be empty" do
74
+ subject.external_dependencies.should be_empty
75
+ end
76
+ end
77
+
78
+ describe "#external_dependencies_names" do
79
+ it "should be empty" do
80
+ subject.external_dependencies_names.should be_empty
81
+ end
82
+ end
83
+ end
84
+
85
+ context "when it is in package, " do
86
+ let(:package) { Jsus::Package.new("spec/data/ExternalDependencies/app/javascripts/Orwik") }
87
+ subject { package.source_files[0] }
88
+ describe "#package" do
89
+ it "should return the package" do
90
+ subject.package.should == package
91
+ end
92
+ end
93
+
94
+ describe "#provides_names" do
95
+ it "should prepend package name by default and when explicitly asked for long form" do
96
+ subject.provides_names.should == ["Orwik/Test"]
97
+ subject.provides_names(:short => false).should == ["Orwik/Test"]
98
+ end
99
+
100
+ it "shouldn't prepend package name in short form" do
101
+ subject.provides_names(:short => true).should == ["Test"]
102
+ end
103
+ end
104
+
105
+ describe "#dependencies_names" do
106
+ it "should prepend package names to inner dependencies by default and when explicitly asked for long form" do
107
+ subject.should have_exactly(2).dependencies_names
108
+ subject.dependencies_names.should include("Orwik/Class", "Mash/Mash")
109
+ subject.should have_exactly(2).dependencies_names(:short => false)
110
+ subject.dependencies_names(:short => false).should include("Orwik/Class", "Mash/Mash")
111
+ end
112
+
113
+ it "should not prepend package names to inner dependencies in short form" do
114
+ subject.should have_exactly(2).dependencies_names(:short => true)
115
+ subject.dependencies_names(:short => true).should include("Class", "Mash/Mash")
116
+ end
117
+ end
118
+
119
+ describe "#external_dependencies" do
120
+ it "should include external dependencies" do
121
+ subject.should have_exactly(1).external_dependencies
122
+ subject.external_dependencies.should include(Jsus::Tag["Mash/Mash"])
123
+ end
124
+
125
+ it "should not include internal dependencies" do
126
+ subject.external_dependencies.should_not include(Jsus::Tag["Orwik/Class"])
127
+ end
128
+ end
129
+
130
+ describe "#external_dependencies_names" do
131
+ it "should include names of external dependencies" do
132
+ subject.external_dependencies_names.should include("Mash/Mash")
133
+ end
134
+
135
+ it "should not include names of internal dependencies" do
136
+ subject.external_dependencies_names.should_not include("Orwik/Class")
137
+ end
138
+ end
139
+
140
+ end
141
+
142
+ context "when pool is not set, " do
143
+ subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Core/Source/Class.js", :package => Package.new(:name => "Core")) }
144
+ describe "#pool" do
145
+ it "should return nil" do
146
+ subject.pool.should be_nil
147
+ end
53
148
  end
54
149
 
150
+ describe "#include_extensions!" do
151
+ it "should do nothing" do
152
+ lambda {
153
+ subject.include_extensions!
154
+ }.should_not change(subject, :extensions)
155
+ end
156
+ end
55
157
  end
56
158
 
57
- describe "#provides" do
58
- it "should return the stuff it provides in full form" do
59
- subject.provides.should == ["Core/Chain", "Core/Events", "Core/Options"]
159
+ context "when pool is set, " do
160
+ let(:pool) { Jsus::Pool.new("spec/data/Extensions/app/javascripts") }
161
+ subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Core/Source/Class.js", :pool => pool, :package => Package.new(:name => "Core")) }
162
+ describe "#pool" do
163
+ it "should return the pool" do
164
+ subject.pool.should == pool
165
+ end
60
166
  end
61
167
 
62
- it "should cut package prefix if asked for short-formed provides" do
63
- subject.provides(:short => true).should == ["Chain", "Events", "Options"]
168
+ context "and there are extensions for subject in its pool, " do
169
+ describe "#include_extensions!" do
170
+ it "should add all extensions to @extensions" do
171
+ subject.extensions.should be_empty
172
+ subject.include_extensions!
173
+ subject.extensions.should have_exactly(1).item
174
+ end
175
+ end
64
176
  end
65
177
 
66
- it "should work well when given single string instead of array" do
67
- subject.header = {"provides" => "Mash"}
68
- subject.provides.should == ["Core/Mash"]
178
+ context "and there are no extensions for subject in its pool, " do
179
+ let(:pool) { Jsus::Pool.new }
180
+ describe "#include_extensions!" do
181
+ it "should add all extensions to @extensions" do
182
+ lambda {
183
+ subject.include_extensions!
184
+ }.should_not change(subject, :extensions)
185
+ end
186
+ end
69
187
  end
70
188
  end
71
189
 
72
- describe "#dependencies" do
73
- it "should truncate leading slash" do
74
- subject.dependencies.should == ["Core/Class"]
190
+ context "when it is not an extension, " do
191
+ subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Core/Source/Class.js") }
192
+
193
+ describe "#extension?" do
194
+ it "should return false" do
195
+ subject.should_not be_an_extension
196
+ end
75
197
  end
198
+ end
76
199
 
77
- it "should cut package prefix if asked for short-formed dependencies" do
78
- subject.dependencies(:short => true).should == ["Class"]
200
+ context "when it is an extension, " do
201
+ subject { Jsus::SourceFile.from_file("spec/data/Extensions/app/javascripts/Orwik/Extensions/Class.js") }
202
+
203
+ describe "#extension?" do
204
+ it "should return true" do
205
+ subject.should be_an_extension
206
+ end
79
207
  end
208
+ end
209
+
210
+ context "when there are no extensions, " do
211
+ let(:input_dir) { "spec/data/Extensions/app/javascripts" }
212
+ subject { Jsus::SourceFile.from_file("#{input_dir}/Core/Source/Class.js")}
80
213
 
81
- it "should work well when given single string instead of array" do
82
- subject.header = { "requires" => "Class" }
83
- subject.dependencies.should == ["Core/Class"]
214
+ describe "#required_files" do
215
+ it "should have only the filename itself" do
216
+ subject.required_files.should == [subject.filename]
217
+ end
84
218
  end
219
+ end
85
220
 
86
- it "should not truncate package name in short form for external dependencies" do
87
- subject.header = { "requires" => "Mash/Mash" }
88
- subject.dependencies(:short => true).should == ["Mash/Mash"]
221
+ context "when there are extensions, " do
222
+ let(:input_dir) { "spec/data/Extensions/app/javascripts" }
223
+ let(:extension) { Jsus::SourceFile.from_file("#{input_dir}/Orwik/Extensions/Class.js") }
224
+ subject { Jsus::SourceFile.from_file("#{input_dir}/Core/Source/Class.js")}
225
+ let(:initial_content) { subject.content }
226
+ before(:each) { initial_content; subject.extensions << extension }
227
+
228
+ describe "#required_files" do
229
+ it "should include source_file filename itself" do
230
+ subject.required_files.should include(subject.filename)
231
+ end
232
+
233
+ it "should include extensions filenames" do
234
+ subject.required_files.should include(extension.filename)
235
+ end
236
+
237
+ it "should put the subject's filename first" do
238
+ subject.required_files[0].should == subject.filename
239
+ end
89
240
  end
90
241
 
91
- it "should not prepend package name in full form for external dependencies" do
92
- subject.header = { "requires" => "Mash/Mash" }
93
- subject.dependencies.should == ["Mash/Mash"]
242
+ describe "#content" do
243
+ it "should have extensions applied to the initial file content" do
244
+ subject.content.should_not == initial_content
245
+ subject.content.index(initial_content).should_not be_nil
246
+ subject.content.index(extension.content).should_not be_nil
247
+ subject.content.index(initial_content).should < subject.content.index(extension.content)
248
+ end
94
249
  end
95
250
  end
96
251
  end