ruco 0.2.0.beta2 → 0.2.0.beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +3 -0
- data/Gemfile.lock +10 -0
- data/Rakefile +27 -10
- data/Readme.md +22 -26
- data/VERSION +1 -1
- data/bin/ruco +15 -6
- data/lib/ruco.rb +25 -0
- data/lib/ruco/application.rb +1 -1
- data/lib/ruco/array_processor.rb +53 -0
- data/lib/ruco/core_ext/object.rb +26 -0
- data/lib/ruco/core_ext/range.rb +9 -0
- data/lib/ruco/editor.rb +1 -0
- data/lib/ruco/editor/colors.rb +97 -0
- data/lib/ruco/editor_area.rb +1 -0
- data/lib/ruco/file_store.rb +23 -5
- data/lib/ruco/screen.rb +61 -7
- data/lib/ruco/style_map.rb +2 -2
- data/lib/ruco/syntax_parser.rb +33 -0
- data/lib/ruco/tm_theme.rb +46 -0
- data/lib/ruco/window.rb +19 -14
- data/playground/benchmark_syntax_parser.rb +23 -0
- data/ruco.gemspec +12 -21
- data/spec/fixtures/railscasts.tmTheme +369 -0
- data/spec/fixtures/slow.js +4 -0
- data/spec/fixtures/test.tmTheme +186 -0
- data/spec/ruco/array_processor_spec.rb +46 -0
- data/spec/ruco/core_ext/range_spec.rb +24 -0
- data/spec/ruco/editor_spec.rb +129 -11
- data/spec/ruco/file_store_spec.rb +45 -0
- data/spec/ruco/screen_spec.rb +39 -2
- data/spec/ruco/syntax_parser_spec.rb +74 -0
- data/spec/ruco/tm_theme_spec.rb +14 -0
- data/spec/spec_helper.rb +6 -2
- metadata +22 -28
@@ -16,6 +16,10 @@ describe Ruco::FileStore do
|
|
16
16
|
|
17
17
|
let(:store){ Ruco::FileStore.new(@folder, :keep => 3) }
|
18
18
|
|
19
|
+
it "can get unstored stuff" do
|
20
|
+
store.get('xxx').should == nil
|
21
|
+
end
|
22
|
+
|
19
23
|
it "can store stuff" do
|
20
24
|
store.set('xxx', 1)
|
21
25
|
store.get('xxx').should == 1
|
@@ -41,4 +45,45 @@ describe Ruco::FileStore do
|
|
41
45
|
store.set('zzz', 1)
|
42
46
|
store.get('xxx').should == 1
|
43
47
|
end
|
48
|
+
|
49
|
+
it "can cache" do
|
50
|
+
store.cache('x'){ 1 }.should == 1
|
51
|
+
store.cache('x'){ 2 }.should == 1
|
52
|
+
end
|
53
|
+
|
54
|
+
it "can cache false" do
|
55
|
+
store.cache('x'){ false }.should == false
|
56
|
+
store.cache('x'){ 2 }.should == false
|
57
|
+
end
|
58
|
+
|
59
|
+
it "does not cache nil" do
|
60
|
+
store.cache('x'){ nil }.should == nil
|
61
|
+
store.cache('x'){ 2 }.should == 2
|
62
|
+
end
|
63
|
+
|
64
|
+
it "can delete" do
|
65
|
+
store.set('x', 1)
|
66
|
+
store.set('y', 2)
|
67
|
+
store.delete('x')
|
68
|
+
store.get('x').should == nil
|
69
|
+
store.get('y').should == 2
|
70
|
+
end
|
71
|
+
|
72
|
+
it "can delete uncached" do
|
73
|
+
store.set('x', 1)
|
74
|
+
store.delete('z')
|
75
|
+
store.get('x').should == 1
|
76
|
+
store.get('z').should == nil
|
77
|
+
end
|
78
|
+
|
79
|
+
it "can clear" do
|
80
|
+
store.set('x', 1)
|
81
|
+
store.clear
|
82
|
+
store.get('x').should == nil
|
83
|
+
end
|
84
|
+
|
85
|
+
it "can clear unstored" do
|
86
|
+
store.clear
|
87
|
+
store.get('x').should == nil
|
88
|
+
end
|
44
89
|
end
|
data/spec/ruco/screen_spec.rb
CHANGED
@@ -3,7 +3,7 @@ require File.expand_path('spec/spec_helper')
|
|
3
3
|
describe Ruco::Screen do
|
4
4
|
describe :curses_style do
|
5
5
|
it "is 'normal' for nothing" do
|
6
|
-
Ruco::Screen.curses_style(:normal).should ==
|
6
|
+
Ruco::Screen.curses_style(:normal).should == 256
|
7
7
|
end
|
8
8
|
|
9
9
|
it "is red for red" do
|
@@ -12,7 +12,7 @@ describe Ruco::Screen do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it "is reverse for reverse" do
|
15
|
-
Ruco::Screen.curses_style(:reverse).should ==
|
15
|
+
Ruco::Screen.curses_style(:reverse).should == 512
|
16
16
|
end
|
17
17
|
|
18
18
|
it "raises on unknown style" do
|
@@ -20,5 +20,42 @@ describe Ruco::Screen do
|
|
20
20
|
Ruco::Screen.curses_style(:foo)
|
21
21
|
}.should raise_error
|
22
22
|
end
|
23
|
+
|
24
|
+
describe 'without colors' do
|
25
|
+
before do
|
26
|
+
Ruco::Screen.class_eval '@@styles = {}' # clear cache
|
27
|
+
$ruco_colors = false
|
28
|
+
end
|
29
|
+
|
30
|
+
after do
|
31
|
+
$ruco_colors = true
|
32
|
+
end
|
33
|
+
|
34
|
+
it "is 'normal' for normal" do
|
35
|
+
Ruco::Screen.curses_style(:normal).should == Curses::A_NORMAL
|
36
|
+
end
|
37
|
+
|
38
|
+
it "is reverse for reverse" do
|
39
|
+
Ruco::Screen.curses_style(:reverse).should == Curses::A_REVERSE
|
40
|
+
end
|
41
|
+
|
42
|
+
it "is normal for unknown style" do
|
43
|
+
Ruco::Screen.curses_style(:foo).should == Curses::A_NORMAL
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe :html_to_terminal_color do
|
49
|
+
# http://www.mudpedia.org/wiki/Xterm_256_colors
|
50
|
+
[
|
51
|
+
['#ff0000', 196],
|
52
|
+
['#00ff00', 46],
|
53
|
+
['#0000ff', 21],
|
54
|
+
['#ffffff', 231]
|
55
|
+
].each do |html,term|
|
56
|
+
it "converts #{html} to #{term}" do
|
57
|
+
Ruco::Screen.html_to_terminal_color(html).should == term
|
58
|
+
end
|
59
|
+
end
|
23
60
|
end
|
24
61
|
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require File.expand_path('spec/spec_helper')
|
2
|
+
|
3
|
+
describe Ruco::SyntaxParser do
|
4
|
+
def parse(text, languages=['ruby'])
|
5
|
+
Ruco::SyntaxParser.syntax_for_lines(text, languages)
|
6
|
+
end
|
7
|
+
|
8
|
+
describe :parse_lines do
|
9
|
+
it "shows positions for simple lines" do
|
10
|
+
parse(["class Foo","end"]).should == [[
|
11
|
+
["keyword.control.class.ruby", 0...5],
|
12
|
+
["entity.name.type.class.ruby", 6...9],
|
13
|
+
["meta.class.ruby", 0...9]],
|
14
|
+
[["keyword.control.ruby", 0...3]
|
15
|
+
]]
|
16
|
+
end
|
17
|
+
|
18
|
+
it "shows positions for complicated lines" do
|
19
|
+
parse(["class foo end blob else Foo"]).should == [[
|
20
|
+
["keyword.control.class.ruby", 0...5],
|
21
|
+
["entity.name.type.class.ruby", 6...9],
|
22
|
+
["meta.class.ruby", 0...9],
|
23
|
+
["keyword.control.ruby", 10...13],
|
24
|
+
["keyword.control.ruby", 19...23],
|
25
|
+
["variable.other.constant.ruby", 24...27]
|
26
|
+
]]
|
27
|
+
end
|
28
|
+
|
29
|
+
it "does not show keywords in strings" do
|
30
|
+
parse(["Bar 'Bar' foo"]).should == [[
|
31
|
+
["variable.other.constant.ruby", 0...3],
|
32
|
+
["punctuation.definition.string.begin.ruby", 4...5],
|
33
|
+
["punctuation.definition.string.end.ruby", 8...9],
|
34
|
+
["string.quoted.single.ruby", 4...9]
|
35
|
+
]]
|
36
|
+
end
|
37
|
+
|
38
|
+
it "does not show strings in comments" do
|
39
|
+
parse(["'Bar' # 'Bar'"]).should == [[
|
40
|
+
["punctuation.definition.string.begin.ruby", 0...1],
|
41
|
+
["punctuation.definition.string.end.ruby", 4...5],
|
42
|
+
["string.quoted.single.ruby", 0...5],
|
43
|
+
["punctuation.definition.comment.ruby", 6...7],
|
44
|
+
["comment.line.number-sign.ruby", 6...13]
|
45
|
+
]]
|
46
|
+
end
|
47
|
+
|
48
|
+
it "shows multiline comments" do
|
49
|
+
parse(["=begin","1 : 2","=end"]).should == [
|
50
|
+
[["punctuation.definition.comment.ruby", 0...6], ["comment.block.documentation.ruby", 0...7]],
|
51
|
+
[["comment.block.documentation.ruby", 0...6]],
|
52
|
+
[["punctuation.definition.comment.ruby", 0...4], ["comment.block.documentation.ruby", 0...4]]
|
53
|
+
]
|
54
|
+
end
|
55
|
+
|
56
|
+
it "continues multiline on last line before closing it" do
|
57
|
+
parse(["%Q{\n\na }"]).should == [
|
58
|
+
[["punctuation.definition.string.begin.ruby", 0...3], ["string.quoted.double.ruby.mod", 0...4]],
|
59
|
+
[["string.quoted.double.ruby.mod", 0...1]],
|
60
|
+
[["punctuation.definition.string.end.ruby", 3...4], ["string.quoted.double.ruby.mod", 0...4]]
|
61
|
+
]
|
62
|
+
end
|
63
|
+
|
64
|
+
it "can handle unfound syntaxes" do
|
65
|
+
parse('aaaa', ['fooo']).should == []
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
describe :syntax_nodes do
|
70
|
+
it "detects languages not present in ultraviolet" do
|
71
|
+
Ruco::SyntaxParser.syntax_node(['html+erb']).should_not == nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require File.expand_path('spec/spec_helper')
|
2
|
+
|
3
|
+
describe Ruco::TMTheme do
|
4
|
+
let(:theme){ Ruco::TMTheme.new('spec/fixtures/test.tmTheme') }
|
5
|
+
|
6
|
+
it "parses foreground/background" do
|
7
|
+
theme.foreground.should == '#4D4D4C'
|
8
|
+
theme.background.should == '#FFFFFF'
|
9
|
+
end
|
10
|
+
|
11
|
+
it "parses rules" do
|
12
|
+
theme.styles["keyword.operator.class"].should == ['#666969', nil]
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
$LOAD_PATH.unshift 'lib'
|
2
|
+
$ruco_colors = true
|
3
|
+
|
2
4
|
require 'ruco'
|
3
5
|
require 'timeout'
|
4
|
-
|
5
6
|
require 'tempfile'
|
7
|
+
|
8
|
+
silence_warnings{ Ruco::Editor::Colors::DEFAULT_THEME = 'spec/fixtures/test.tmTheme' }
|
9
|
+
|
6
10
|
class Tempfile
|
7
11
|
def self.string_as_file(data)
|
8
12
|
result = nil
|
@@ -21,4 +25,4 @@ class Time
|
|
21
25
|
yield
|
22
26
|
Time.now.to_f - t
|
23
27
|
end
|
24
|
-
end
|
28
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196357
|
5
5
|
prerelease: 6
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 0.2.0.
|
11
|
+
- 3
|
12
|
+
version: 0.2.0.beta3
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Michael Grosser
|
@@ -21,7 +21,7 @@ date: 2011-09-24 00:00:00 +02:00
|
|
21
21
|
default_executable: ruco
|
22
22
|
dependencies:
|
23
23
|
- !ruby/object:Gem::Dependency
|
24
|
-
|
24
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
27
|
- - ">="
|
@@ -32,12 +32,12 @@ dependencies:
|
|
32
32
|
- 9
|
33
33
|
- 8
|
34
34
|
version: 0.9.8
|
35
|
+
requirement: *id001
|
35
36
|
type: :runtime
|
36
37
|
name: clipboard
|
37
|
-
version_requirements: *id001
|
38
38
|
prerelease: false
|
39
39
|
- !ruby/object:Gem::Dependency
|
40
|
-
|
40
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ">="
|
@@ -46,12 +46,12 @@ dependencies:
|
|
46
46
|
segments:
|
47
47
|
- 0
|
48
48
|
version: "0"
|
49
|
+
requirement: *id002
|
49
50
|
type: :runtime
|
50
51
|
name: ultraviolet1x
|
51
|
-
version_requirements: *id002
|
52
52
|
prerelease: false
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
|
-
|
54
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
55
55
|
none: false
|
56
56
|
requirements:
|
57
57
|
- - ">="
|
@@ -60,9 +60,9 @@ dependencies:
|
|
60
60
|
segments:
|
61
61
|
- 0
|
62
62
|
version: "0"
|
63
|
+
requirement: *id003
|
63
64
|
type: :runtime
|
64
65
|
name: language_sniffer
|
65
|
-
version_requirements: *id003
|
66
66
|
prerelease: false
|
67
67
|
description:
|
68
68
|
email: michael@grosser.it
|
@@ -81,6 +81,7 @@ files:
|
|
81
81
|
- bin/ruco
|
82
82
|
- lib/ruco.rb
|
83
83
|
- lib/ruco/application.rb
|
84
|
+
- lib/ruco/array_processor.rb
|
84
85
|
- lib/ruco/command_bar.rb
|
85
86
|
- lib/ruco/core_ext/array.rb
|
86
87
|
- lib/ruco/core_ext/file.rb
|
@@ -89,6 +90,7 @@ files:
|
|
89
90
|
- lib/ruco/core_ext/range.rb
|
90
91
|
- lib/ruco/core_ext/string.rb
|
91
92
|
- lib/ruco/editor.rb
|
93
|
+
- lib/ruco/editor/colors.rb
|
92
94
|
- lib/ruco/editor/history.rb
|
93
95
|
- lib/ruco/editor/line_numbers.rb
|
94
96
|
- lib/ruco/editor_area.rb
|
@@ -101,12 +103,19 @@ files:
|
|
101
103
|
- lib/ruco/screen.rb
|
102
104
|
- lib/ruco/status_bar.rb
|
103
105
|
- lib/ruco/style_map.rb
|
106
|
+
- lib/ruco/syntax_parser.rb
|
104
107
|
- lib/ruco/text_area.rb
|
105
108
|
- lib/ruco/text_field.rb
|
109
|
+
- lib/ruco/tm_theme.rb
|
106
110
|
- lib/ruco/version.rb
|
107
111
|
- lib/ruco/window.rb
|
112
|
+
- playground/benchmark_syntax_parser.rb
|
108
113
|
- ruco.gemspec
|
114
|
+
- spec/fixtures/railscasts.tmTheme
|
115
|
+
- spec/fixtures/slow.js
|
116
|
+
- spec/fixtures/test.tmTheme
|
109
117
|
- spec/ruco/application_spec.rb
|
118
|
+
- spec/ruco/array_processor_spec.rb
|
110
119
|
- spec/ruco/command_bar_spec.rb
|
111
120
|
- spec/ruco/core_ext/array_spec.rb
|
112
121
|
- spec/ruco/core_ext/range_spec.rb
|
@@ -120,7 +129,9 @@ files:
|
|
120
129
|
- spec/ruco/screen_spec.rb
|
121
130
|
- spec/ruco/status_bar_spec.rb
|
122
131
|
- spec/ruco/style_map_spec.rb
|
132
|
+
- spec/ruco/syntax_parser_spec.rb
|
123
133
|
- spec/ruco/text_area_spec.rb
|
134
|
+
- spec/ruco/tm_theme_spec.rb
|
124
135
|
- spec/ruco/window_spec.rb
|
125
136
|
- spec/ruco_spec.rb
|
126
137
|
- spec/spec_helper.rb
|
@@ -164,22 +175,5 @@ rubygems_version: 1.6.2
|
|
164
175
|
signing_key:
|
165
176
|
specification_version: 3
|
166
177
|
summary: Commandline editor written in ruby
|
167
|
-
test_files:
|
168
|
-
|
169
|
-
- spec/ruco/command_bar_spec.rb
|
170
|
-
- spec/ruco/core_ext/array_spec.rb
|
171
|
-
- spec/ruco/core_ext/range_spec.rb
|
172
|
-
- spec/ruco/core_ext/string_spec.rb
|
173
|
-
- spec/ruco/editor_spec.rb
|
174
|
-
- spec/ruco/file_store_spec.rb
|
175
|
-
- spec/ruco/form_spec.rb
|
176
|
-
- spec/ruco/history_spec.rb
|
177
|
-
- spec/ruco/keyboard_spec.rb
|
178
|
-
- spec/ruco/option_accessor_spec.rb
|
179
|
-
- spec/ruco/screen_spec.rb
|
180
|
-
- spec/ruco/status_bar_spec.rb
|
181
|
-
- spec/ruco/style_map_spec.rb
|
182
|
-
- spec/ruco/text_area_spec.rb
|
183
|
-
- spec/ruco/window_spec.rb
|
184
|
-
- spec/ruco_spec.rb
|
185
|
-
- spec/spec_helper.rb
|
178
|
+
test_files: []
|
179
|
+
|