jsus 0.1.4 → 0.1.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.
@@ -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