interfacelift 0.0.1 → 0.1.0

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.
@@ -0,0 +1,101 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>File: theme_manager.rb</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="fileHeader">
50
+ <h1>theme_manager.rb</h1>
51
+ <table class="header-table">
52
+ <tr class="top-aligned-row">
53
+ <td><strong>Path:</strong></td>
54
+ <td>lib/theme_manager.rb
55
+ </td>
56
+ </tr>
57
+ <tr class="top-aligned-row">
58
+ <td><strong>Last Update:</strong></td>
59
+ <td>Tue Nov 17 23:11:57 +0100 2009</td>
60
+ </tr>
61
+ </table>
62
+ </div>
63
+ <!-- banner header -->
64
+
65
+ <div id="bodyContent">
66
+
67
+
68
+
69
+ <div id="contextContent">
70
+
71
+
72
+
73
+ </div>
74
+
75
+
76
+ </div>
77
+
78
+
79
+ <!-- if includes -->
80
+
81
+ <div id="section">
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+ <!-- if method_list -->
91
+
92
+
93
+ </div>
94
+
95
+
96
+ <div id="validator-badges">
97
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
98
+ </div>
99
+
100
+ </body>
101
+ </html>
@@ -0,0 +1,31 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Classes
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Classes</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Classes</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/InterfaceLift.html">InterfaceLift</a><br />
24
+ <a href="classes/InterfaceLift/Catalog.html">InterfaceLift::Catalog</a><br />
25
+ <a href="classes/InterfaceLift/Fetcher.html">InterfaceLift::Fetcher</a><br />
26
+ <a href="classes/InterfaceLift/Installer.html">InterfaceLift::Installer</a><br />
27
+ <a href="classes/InterfaceLift/ThemeManager.html">InterfaceLift::ThemeManager</a><br />
28
+ </div>
29
+ </div>
30
+ </body>
31
+ </html>
@@ -0,0 +1,32 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Files
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Files</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Files</h1>
22
+ <div id="index-entries">
23
+ <a href="files/lib/catalog_rb.html">lib/catalog.rb</a><br />
24
+ <a href="files/lib/fetcher_rb.html">lib/fetcher.rb</a><br />
25
+ <a href="files/lib/installer_rb.html">lib/installer.rb</a><br />
26
+ <a href="files/lib/interfacelift_rb.html">lib/interfacelift.rb</a><br />
27
+ <a href="files/lib/templates/bright_admin/install_rb.html">lib/templates/bright_admin/install.rb</a><br />
28
+ <a href="files/lib/theme_manager_rb.html">lib/theme_manager.rb</a><br />
29
+ </div>
30
+ </div>
31
+ </body>
32
+ </html>
@@ -0,0 +1,33 @@
1
+
2
+ <?xml version="1.0" encoding="iso-8859-1"?>
3
+ <!DOCTYPE html
4
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
+
7
+ <!--
8
+
9
+ Methods
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>Methods</title>
15
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
+ <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
+ <base target="docwin" />
18
+ </head>
19
+ <body>
20
+ <div id="index">
21
+ <h1 class="section-bar">Methods</h1>
22
+ <div id="index-entries">
23
+ <a href="classes/InterfaceLift/ThemeManager.html#M000005">available_themes (InterfaceLift::ThemeManager)</a><br />
24
+ <a href="classes/InterfaceLift/Catalog.html#M000004">git_repo? (InterfaceLift::Catalog)</a><br />
25
+ <a href="classes/InterfaceLift/Installer.html#M000007">install! (InterfaceLift::Installer)</a><br />
26
+ <a href="classes/InterfaceLift/Catalog.html#M000001">new (InterfaceLift::Catalog)</a><br />
27
+ <a href="classes/InterfaceLift/Installer.html#M000006">new (InterfaceLift::Installer)</a><br />
28
+ <a href="classes/InterfaceLift/Catalog.html#M000003">theme_exists? (InterfaceLift::Catalog)</a><br />
29
+ <a href="classes/InterfaceLift/Catalog.html#M000002">themes (InterfaceLift::Catalog)</a><br />
30
+ </div>
31
+ </div>
32
+ </body>
33
+ </html>
@@ -0,0 +1,26 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
+
6
+ <!--
7
+
8
+ interfacelift 0.0.1
9
+
10
+
11
+ -->
12
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
+ <head>
14
+ <title>interfacelift 0.0.1
15
+ </title>
16
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
17
+ </head>
18
+ <frameset rows="20%, 80%">
19
+ <frameset cols="25%,35%,45%">
20
+ <frame src="fr_file_index.html" title="Files" name="Files" />
21
+ <frame src="fr_class_index.html" name="Classes" />
22
+ <frame src="fr_method_index.html" name="Methods" />
23
+ </frameset>
24
+ <frame src="files/lib/catalog_rb.html" name="docwin" />
25
+ </frameset>
26
+ </html>
@@ -0,0 +1,208 @@
1
+
2
+ body {
3
+ font-family: Verdana,Arial,Helvetica,sans-serif;
4
+ font-size: 90%;
5
+ margin: 0;
6
+ margin-left: 40px;
7
+ padding: 0;
8
+ background: white;
9
+ }
10
+
11
+ h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
+ h1 { font-size: 150%; }
13
+ h2,h3,h4 { margin-top: 1em; }
14
+
15
+ a { background: #eef; color: #039; text-decoration: none; }
16
+ a:hover { background: #039; color: #eef; }
17
+
18
+ /* Override the base stylesheet's Anchor inside a table cell */
19
+ td > a {
20
+ background: transparent;
21
+ color: #039;
22
+ text-decoration: none;
23
+ }
24
+
25
+ /* and inside a section title */
26
+ .section-title > a {
27
+ background: transparent;
28
+ color: #eee;
29
+ text-decoration: none;
30
+ }
31
+
32
+ /* === Structural elements =================================== */
33
+
34
+ div#index {
35
+ margin: 0;
36
+ margin-left: -40px;
37
+ padding: 0;
38
+ font-size: 90%;
39
+ }
40
+
41
+
42
+ div#index a {
43
+ margin-left: 0.7em;
44
+ }
45
+
46
+ div#index .section-bar {
47
+ margin-left: 0px;
48
+ padding-left: 0.7em;
49
+ background: #ccc;
50
+ font-size: small;
51
+ }
52
+
53
+
54
+ div#classHeader, div#fileHeader {
55
+ width: auto;
56
+ color: white;
57
+ padding: 0.5em 1.5em 0.5em 1.5em;
58
+ margin: 0;
59
+ margin-left: -40px;
60
+ border-bottom: 3px solid #006;
61
+ }
62
+
63
+ div#classHeader a, div#fileHeader a {
64
+ background: inherit;
65
+ color: white;
66
+ }
67
+
68
+ div#classHeader td, div#fileHeader td {
69
+ background: inherit;
70
+ color: white;
71
+ }
72
+
73
+
74
+ div#fileHeader {
75
+ background: #057;
76
+ }
77
+
78
+ div#classHeader {
79
+ background: #048;
80
+ }
81
+
82
+
83
+ .class-name-in-header {
84
+ font-size: 180%;
85
+ font-weight: bold;
86
+ }
87
+
88
+
89
+ div#bodyContent {
90
+ padding: 0 1.5em 0 1.5em;
91
+ }
92
+
93
+ div#description {
94
+ padding: 0.5em 1.5em;
95
+ background: #efefef;
96
+ border: 1px dotted #999;
97
+ }
98
+
99
+ div#description h1,h2,h3,h4,h5,h6 {
100
+ color: #125;;
101
+ background: transparent;
102
+ }
103
+
104
+ div#validator-badges {
105
+ text-align: center;
106
+ }
107
+ div#validator-badges img { border: 0; }
108
+
109
+ div#copyright {
110
+ color: #333;
111
+ background: #efefef;
112
+ font: 0.75em sans-serif;
113
+ margin-top: 5em;
114
+ margin-bottom: 0;
115
+ padding: 0.5em 2em;
116
+ }
117
+
118
+
119
+ /* === Classes =================================== */
120
+
121
+ table.header-table {
122
+ color: white;
123
+ font-size: small;
124
+ }
125
+
126
+ .type-note {
127
+ font-size: small;
128
+ color: #DEDEDE;
129
+ }
130
+
131
+ .xxsection-bar {
132
+ background: #eee;
133
+ color: #333;
134
+ padding: 3px;
135
+ }
136
+
137
+ .section-bar {
138
+ color: #333;
139
+ border-bottom: 1px solid #999;
140
+ margin-left: -20px;
141
+ }
142
+
143
+
144
+ .section-title {
145
+ background: #79a;
146
+ color: #eee;
147
+ padding: 3px;
148
+ margin-top: 2em;
149
+ margin-left: -30px;
150
+ border: 1px solid #999;
151
+ }
152
+
153
+ .top-aligned-row { vertical-align: top }
154
+ .bottom-aligned-row { vertical-align: bottom }
155
+
156
+ /* --- Context section classes ----------------------- */
157
+
158
+ .context-row { }
159
+ .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
+ .context-item-value { font-size: small; color: #448; }
161
+ .context-item-desc { color: #333; padding-left: 2em; }
162
+
163
+ /* --- Method classes -------------------------- */
164
+ .method-detail {
165
+ background: #efefef;
166
+ padding: 0;
167
+ margin-top: 0.5em;
168
+ margin-bottom: 1em;
169
+ border: 1px dotted #ccc;
170
+ }
171
+ .method-heading {
172
+ color: black;
173
+ background: #ccc;
174
+ border-bottom: 1px solid #666;
175
+ padding: 0.2em 0.5em 0 0.5em;
176
+ }
177
+ .method-signature { color: black; background: inherit; }
178
+ .method-name { font-weight: bold; }
179
+ .method-args { font-style: italic; }
180
+ .method-description { padding: 0 0.5em 0 0.5em; }
181
+
182
+ /* --- Source code sections -------------------- */
183
+
184
+ a.source-toggle { font-size: 90%; }
185
+ div.method-source-code {
186
+ background: #262626;
187
+ color: #ffdead;
188
+ margin: 1em;
189
+ padding: 0.5em;
190
+ border: 1px dashed #999;
191
+ overflow: hidden;
192
+ }
193
+
194
+ div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
+
196
+ /* --- Ruby keyword styles --------------------- */
197
+
198
+ .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
+
200
+ .ruby-constant { color: #7fffd4; background: transparent; }
201
+ .ruby-keyword { color: #00ffff; background: transparent; }
202
+ .ruby-ivar { color: #eedd82; background: transparent; }
203
+ .ruby-operator { color: #00ffee; background: transparent; }
204
+ .ruby-identifier { color: #ffdead; background: transparent; }
205
+ .ruby-node { color: #ffa07a; background: transparent; }
206
+ .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
+ .ruby-regexp { color: #ffa07a; background: transparent; }
208
+ .ruby-value { color: #7fffd4; background: transparent; }
File without changes
@@ -0,0 +1 @@
1
+ TEST
@@ -0,0 +1 @@
1
+ BLA
@@ -0,0 +1,110 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ include InterfaceLift
4
+ describe Catalog do
5
+
6
+ before(:all) do
7
+ FileUtils.stubs(:mkdir_p)
8
+ end
9
+
10
+ context "Initialize" do
11
+ it "should initialize with a path that contains the users current themes" do
12
+ @path = "test_path"
13
+ @cat = Catalog.new(@path)
14
+ @cat.catalog_path.should == @path
15
+ end
16
+
17
+ it "should take a default path when no path is provided" do
18
+ @cat = Catalog.new
19
+ @cat.catalog_path.should == ::InterfaceLift::DEFAULT_CATALOG_PATH
20
+ end
21
+ end
22
+
23
+ context "Catalog content" do
24
+ before(:each) do
25
+ @cat = Catalog.new(File.dirname(__FILE__) + "/assets")
26
+ end
27
+
28
+ it "should provide a list of the available themes in the given path" do
29
+ themes = ["test_theme", "test_theme2", "bright_admin"]
30
+ @cat.themes.sort == themes.sort
31
+ # (@cat.themes + (themes)).uniq.size.should == 3
32
+ end
33
+
34
+
35
+ it "should check if a theme exists" do
36
+ @cat.expects(:git_repo?).with("test_theme2").returns(true)
37
+ @cat.theme_exists?("test_theme2").should == true
38
+ @cat.theme_exists?("test_theme3").should == false
39
+ end
40
+
41
+
42
+ context "Updating a theme from a git repo" do
43
+
44
+ before(:each) do
45
+ @git_mock = mock('Git',:index => mock("index",:readable? => true))
46
+ Git.stubs(:open).returns(@git_mock)
47
+ end
48
+
49
+ it "should return true when its updated" do
50
+ @git_mock.stubs(:pull).returns("Updating 35d573d..546fee5")
51
+ @cat.update_theme("test_theme2").should == true
52
+ end
53
+
54
+ it "should return false when there are no updates" do
55
+ @git_mock.stubs(:pull).returns("Already up-to-date.")
56
+ @cat.update_theme("test_theme2").should == false
57
+ end
58
+
59
+ end
60
+
61
+ context "Checking if a directory contains a git repo" do
62
+ it "should return true if the directory contains a git repo" do
63
+ @git_mock = mock('Git',:index => mock("index",:readable? => true))
64
+ Git.stubs(:open).returns(@git_mock)
65
+ @cat.git_repo?("test_theme2").should == true
66
+ end
67
+
68
+
69
+ it "should return false if the directory contains a git repo" do
70
+ @cat.git_repo?("test_theme3").should == false
71
+ end
72
+
73
+ end
74
+
75
+ context "Download a theme from a git repo" do
76
+ it "should return an exception when given an invalid repository path" do
77
+ lambda { @cat.add_theme("mysweettheme", "git://fakepath.git") }.should raise_error Git::GitExecuteError
78
+ end
79
+
80
+ it "should download theme from a remote repository" do
81
+ @git_mock = mock('Git', :repo => mock("git", :path => "fakepath"))
82
+ Git.stubs(:clone).returns(@git_mock)
83
+ @cat.add_theme("mysweettheme", "git://mysickgit.git").should == true
84
+ end
85
+ end
86
+
87
+
88
+ context "Removing a theme" do
89
+ it "should remove a theme and return true" do
90
+ @cat.stubs(:theme_exists?).returns(true)
91
+ theme_name = "non_existing_theme"
92
+ FileUtils.stubs(:rm_rf).with("#{@cat.catalog_path}/#{theme_name}").returns(true)
93
+ @cat.remove_theme(theme_name).should == true
94
+ end
95
+
96
+ it "should return false when a theme doesn't exist in catalog" do
97
+ theme_name = "non_existing_theme"
98
+ FileUtils.expects(:rm_rf).with("#{@cat.catalog_path}/#{theme_name}")
99
+ @cat.remove_theme(theme_name).should
100
+ end
101
+ end
102
+ end
103
+
104
+ it "should create the catalog folder when it does not exists" do
105
+ non_existing_path = "no_path"
106
+ File.expects(:exists?).with(non_existing_path)
107
+ FileUtils.expects(:mkdir_p).with(non_existing_path)
108
+ @new_cat = Catalog.new(non_existing_path)
109
+ end
110
+ end