static 0.1.3 → 1.0.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.
@@ -1,321 +0,0 @@
1
- cli :name=>"static", :prompt=>"-> " do
2
- set :help do
3
- helpdocs
4
- end
5
-
6
- set :unknown_command do |method, args|
7
- puts "command not found: #{method} \nwith args: #{args.join(' ')}"
8
- end
9
-
10
- set :feed do |args|
11
- flag(:new => 'n'){@new = true}
12
- process(args)
13
- feeds = []
14
- name = (remaining_argument == '' ? '.' : remaining_argument)
15
- feeds << unless @new
16
- name = choice('please choose a collection:', items_under($active_site.home+'collections')[:folders], name)
17
- name
18
- else
19
- name
20
- end
21
- $active_site.info['feeds'] ||= []
22
- $active_site.info['feeds'] << feeds
23
- $active_site.info['feeds'].flatten!.uniq!
24
- $active_site.save_info 'site.info'
25
- puts "add this to base/default.rbml to host:\n\t`feed :#{name}`"
26
- end
27
-
28
- set :start do |args|
29
- key(:editor){ @active = :editor }
30
- key(:site){ @active = :site }
31
- key(:collection){ @active = :collection }
32
- key(:with)
33
- flag(:help => 'h'){ puts "helpdocs for 'start' go here" }
34
-
35
- process(args)
36
- name = (remaining_argument == '' ? request_value('please enter a name: ') : remaining_argument) unless @active == :editor
37
- @active = ($active_site ? :collection : :site) unless @active
38
-
39
- case @active
40
- when :site
41
- $active_site = start_site(name)
42
- if $active_site
43
- puts "starting a site map for #{$active_site.name}"
44
- else
45
- puts "looks like there is already a site called #{name}"
46
- end
47
- when :collection
48
- if $active_site
49
- name = remaining_arguments.shift
50
- $active_collection = start_collection(name, remaining_arguments)
51
- if $active_collection
52
- puts "#{name} collection is active"
53
- else
54
- puts "looks like there is already a collection called #{name}"
55
- end
56
- else
57
- puts 'gotta have a site to make a collection'
58
- end
59
- when :editor
60
- $active_site.info['user_name'] ||= request_value 'username on your server: '
61
- $active_site.info['server'] ||= {}
62
- $active_site.info['local'] ||= {}
63
- $active_site.info['server']['address'] ||= request_value 'server address (that you would use to ssh): '
64
- $active_site.info['server']['directory'] ||= request_value 'directory on server (e.g. ~/www): '
65
- $active_site.info['server']['link'] ||= request_value('web address of site home (e.g. somesite.com): ' ).as_http
66
- $active_site.info['local']['link'] ||= request_value('local address of site home (e.g. localhost/~username/): ' ).as_http+"static/#{$active_site.info['working_name']}"
67
-
68
- $active_site.info['server']['link'] = $active_site.info['server']['link'].as_http
69
- $active_site.save_info 'site.info'
70
- system "camping #{$active_site.home}helpers/content.rb"
71
- end
72
- end
73
-
74
- set :assign do |args|
75
- flag(:page => 'p'){ |name|
76
- @page = choice('please choose a page:', @possible_pages, name.downcase)
77
- }
78
- flag(:collection => 'c'){ |name|
79
- @collection = load_collection(choice('please choose a collection:', items_under($active_site.home+'collections')[:folders], name.downcase))
80
- }
81
- key(:paginate){@paginate = true}
82
-
83
- if $active_site
84
- ready = exists? :folder, $active_site.home+'blueprint'
85
- if ready
86
- @possible_pages = []
87
- $active_site.pages.each{ |page| @possible_pages << page unless $active_site.info['paginate'] && $active_site.info['paginate'].keys.include?(page.file_name) }
88
- process(args)
89
-
90
- @collection ||= load_collection(choice('please choose a collection:', items_under($active_site.home+'collections')[:folders]))
91
- puts "\n - - - \n" unless @page
92
- @page ||= choice('please choose a page:', @possible_pages)
93
- assign_pagination @collection.file_name, @page.file_name
94
- paginate @page.file_name if @paginate
95
- else
96
- puts 'please build a blueprint paginating collections'
97
- end
98
- else
99
- ready ? message : 'please choose a site'
100
- end
101
- end
102
-
103
- set :paginate do |name|
104
- @page = choice('which page did you mean?', $active_site.info['paginate'].keys, name) if name
105
- if exists? :folder, $active_site.home+'blueprint'
106
- if @page
107
- paginate @page
108
- else
109
- if $active_site.info['paginate']
110
- $active_site.info['paginate'].each { |page, collection| paginate page }
111
- else
112
- puts 'please use `assign` to assign a collection to a page before paginating'
113
- end
114
- end
115
- else
116
- puts 'please generate your blueprint before paginating'
117
- end
118
- end
119
-
120
- set :layout do |args|
121
- key(:choose) { @active = :choose }
122
- key(:save) { @active = :choose }
123
- flag(:force => 'f'){ @force = true }
124
- process args
125
- name = (remaining_argument == '' ? '.' : remaining_argument)
126
- @active = :choose unless @active
127
- case @active
128
- when :choose
129
- if $active_site
130
- if set_layout choice('please choose a layout:', items_under($ENV['LAYOUT_HOME'])[:folders], name), @force
131
- puts "#{$active_site.info['layout']['name']} is now being used" else puts 'no new layout was chosen'
132
- end
133
- else
134
- puts 'there is no active site right now.'
135
- end
136
- end
137
- end
138
-
139
- set :edit do |args|
140
- key(:site)
141
- key(:attributes){
142
- @collection = $active_collection.name unless @collection
143
- @edit << :attributes
144
- }
145
- key(:display){
146
- @collection = $active_collection.name unless @collection
147
- @edit << :display
148
- }
149
- key(:all){
150
- @collection = $active_collection.name unless @collection
151
- @edit = [:attributes, :display]
152
- }
153
- flag(:entry){
154
- @edit = :entry
155
- }
156
- flag(:collection => 'c'){ |name| @collection = name }
157
-
158
-
159
- @edit = []
160
- process args
161
- file = remaining_argument
162
- file = 'contents' if file == 'copy'
163
-
164
- if $active_site
165
- case
166
- when @edit == :entry
167
- @collection ||= $active_collection
168
- file ||= :last
169
- puts 'getting ready to edit an entry'
170
- when @collection
171
- @edit.each { |item|
172
- puts "opening #{@collection}'s attributes"
173
- edit("#{$active_site.home}collections/#{@collection}/#{item.to_s}")
174
- }
175
- when exists?(:file, "#{$active_site.home}project_info/#{file}") then
176
- puts "opening #{$active_site.name}'s #{file}"
177
- edit("#{$active_site.home}project_info/#{file}")
178
- $active_site.load_info(file)
179
- $active_site.load_pages if file == 'site.map'
180
- when exists?(:any, $active_site.home+file) : edit($active_site.home+file)
181
- else
182
- puts "no file found: #{$active_site.home}"
183
- end
184
- else
185
- puts 'no active site'
186
- end
187
- end
188
-
189
- set :load do |args|
190
- key(:site){ @active = :site }
191
- key(:collection){ @active = :collection }
192
-
193
- flag(:help => 'h'){ puts "helpdocs for 'load' go here" }
194
-
195
- process(args)
196
- name = (remaining_argument == '' ? '.' : remaining_argument)
197
- @active = $active_site ? :collection : :site unless @active
198
-
199
- case @active
200
- when :site then
201
- $active_site = load_site(name)
202
- if $active_site
203
- puts "#{$active_site.name} site is active"
204
- else
205
- $active_site = load_site(choice('available sites', items_under($ENV['SITE_BANK'])[:folders], name))
206
- puts 'sorry bub, nuthin there.' unless $active_site
207
- end
208
- when :collection then
209
- $active_collection = nil
210
- if $active_site
211
- $active_collection = load_collection(name)
212
- if $active_collection
213
- puts("#{$active_collection.name} collection is active")
214
- else
215
- $active_collection = load_collection(choice('available collections', items_under($active_site.home+'collections')[:folders], name))
216
- unless $active_collection
217
- puts 'can\'t find a collection like that, baby'
218
- else
219
- puts("#{$active_collection.name} collection is active")
220
- end
221
- end
222
- else
223
- puts 'there must be an active site before starting a collection'
224
- end
225
- end
226
- end
227
-
228
- set :generate do
229
- ready = exists? :folder, $active_site.home+'layout'
230
- message = 'please choose a layout before generating html' unless ready
231
- if ready
232
- ready = exists? :folder, $active_site.home+'blueprint'
233
- message = 'please build a blueprint before generating html' unless ready
234
- if ready
235
- ready = exists? :folder, $active_site.home+'contents'
236
- message = 'please build the site content before generating html' unless ready
237
- end
238
- end
239
- if $active_site
240
- if ready
241
- destroy $active_site.site_loc
242
- $active_site.generate
243
- else
244
- puts(message)
245
- end
246
- else
247
- puts 'need a site before you can generate one'
248
- end
249
- end
250
-
251
- set :add do |args|
252
- edit $active_collection.add_entry[:file]
253
- $active_collection.sanitize_listing
254
- $active_collection.save_listing
255
- end
256
-
257
- set :build do |args|
258
- key(:copy){ @active = :contents }
259
- key(:contents){ @active = :contents }
260
- key(:blueprint){ @active = :blueprint }
261
- key(:all){ @active = :all }
262
- flag(:force => 'f'){ @force = true }
263
- process args
264
- @active = :contents unless @active
265
- set_layout(choice('please choose a layout:', items_under($ENV['LAYOUT_HOME'])[:folders]), false) unless $active_site.info['layout']
266
- case @active
267
- when :contents then
268
- destroy $active_site.home+'contents' if @force
269
- $active_site.build(:contents)
270
- when :blueprint then
271
- destroy $active_site.home+'blueprint' if @force
272
- $active_site.build(:blueprint)
273
- when :all then
274
- destroy $active_site.home+'blueprint' if @force and not make_sure('do you want to destroy the blueprints?', 'N', 'y')
275
- destroy $active_site.home+'contents' if @force and not make_sure('do you want to destroy the contents?', 'N', 'y')
276
- $active_site.build(:contents)
277
- $active_site.build(:blueprint)
278
- end
279
- end
280
-
281
- set :clear do
282
- system 'clear'
283
- end
284
-
285
- set :publish do |args|
286
- flag(:user => 'u'){ |value|
287
- $active_site.info['user_name'] = value || request_value( 'username: ' )
288
- }
289
- flag(:address => 'a'){ |value|
290
- $active_site.info['server'] ||= {}
291
- $active_site.info['server']['address'] = value || request_value('server address: ' )
292
- }
293
- flag(:dir => 'd'){ |value|
294
- $active_site.info['server'] ||= {}
295
- $active_site.info['server']['location'] = value || request_value( 'site location on server: ' )
296
- }
297
- flag(:link => 'l'){ |value|
298
- $active_site.info['server'] ||= {}
299
- $active_site.info['server']['link'] = value || request_value( 'web address of site home: ' )
300
- }
301
- flag(:blank => 'b'){ @blank = true }
302
- process args
303
- $active_site.info['user_name'] ||= request_value 'username: '
304
- $active_site.info['server'] ||= {}
305
- $active_site.info['server']['address'] ||= request_value 'server address: '
306
- $active_site.info['server']['directory'] ||= request_value 'directory on server: '
307
- $active_site.info['server']['link'] ||= request_value('web address of site home: ' ).as_http
308
- $active_site.info['server']['link'] = $active_site.info['server']['link'].as_http
309
-
310
- $active_site.save_info 'site.info'
311
- publish_feeds @blank
312
- end
313
-
314
-
315
- set :quit do
316
- exit
317
- end
318
- set :exit do
319
- exit
320
- end
321
- end
@@ -1,161 +0,0 @@
1
- class Collection
2
- attr_accessor :name, :attrs, :base, :listing, :entries, :contents, :unpublished
3
- include FileBase
4
- def initialize base, where, name
5
- set_home where
6
- @base = base
7
- @name = name
8
- @attrs = []
9
- @listing = []
10
- @entries = []
11
- @unpublished = []
12
- setup_location 'collections'
13
- set_home path+name
14
- end
15
-
16
- def file_name
17
- name.as_file
18
- end
19
-
20
- def self.start base, where, name, attrs
21
- return nil if self.collection_exists?(base, where, name)
22
- c = self.new base, where, name
23
- c.attrs << attrs
24
- c.attrs.flatten!
25
- c.write_attribute_file
26
- c.load_attributes
27
- c.write_display_file rescue puts $!
28
- c.write_feed_file
29
- copy base+'.templates/disco/link_list', c.home
30
- c.write_paginate_file
31
- c.write '', c.home+'listing'
32
- c.mkdir c.home+'entries'
33
- c
34
- end
35
-
36
- def display_file
37
- home+'display'
38
- end
39
- def self.collection_exists?(base, where, name)
40
- exists?(:folder, base) && exists?(:folder, where+'collections/'+name) && exists?(:file, where+"collections/#{name}/attributes")
41
- end
42
- def self.load base, where, name
43
- return nil unless self.collection_exists?(base, where, name)
44
- c = self.new base, where, name
45
- c.load_attributes
46
- c.load_listing
47
- c.sanitize_listing
48
- c.load_entries
49
- c
50
- end
51
-
52
- def save_listing
53
- File.open(home+'listing', 'w') { |yf| YAML.dump(@listing, yf) }
54
- @listing
55
- end
56
-
57
- def sanitize_listing
58
- tmp = []
59
- @listing.each { |item|
60
- entry = load_entry(item)
61
- add = false
62
- attrs = File.open( home+'attributes' ) { |yf| @attrs = YAML::load( yf )[name] }
63
- entry.each { |key, value|
64
- if attrs.include? key
65
- add = true if value and not attrs[key]
66
- end
67
- }
68
- item[:publish] = false unless add or item[:publish]
69
- tmp << item
70
- }
71
- @listing = tmp
72
- save_listing
73
- end
74
-
75
- def write_attribute_file
76
- write_template base+'.templates/disco/attributes', home+'attributes'
77
- end
78
- def write_display_file
79
- write_template base+'.templates/disco/display', home+'display'
80
- end
81
- def write_feed_file
82
- write_template base+'.templates/disco/feed', home+'feed'
83
- end
84
- def write_paginate_file
85
- write_template base+'.templates/disco/paginate', home+'paginate'
86
- end
87
- def write_link_list_file
88
- write_template base+'.templates/disco/link_list', home+'link_list'
89
- end
90
- def load_attributes
91
- File.open( home+'attributes' ) { |yf| @attrs = YAML::load( yf )[name] }
92
- end
93
- def load_listing
94
- File.open( home+'listing' ) { |yf| @listing = YAML::load( yf ) }
95
- @listing ||= []
96
- @listing = @listing.sort{|x, y| x[:id] <=> y[:id]}.reverse
97
- end
98
- def save_entry(id)
99
- File.open( home+'entries/'+id, 'w' ) {|yf|
100
- tmp={}
101
- tmp[name] = find_entry id
102
- tmp[name] = tmp[name].reject{|key, value| key.kind_of? Symbol }
103
- YAML::dump( tmp, yf)
104
- }
105
- find_entry id
106
- end
107
- def load_entries
108
- @entries = []
109
- @unpublished = []
110
- listing.each {|entry|
111
- if entry[:publish]
112
- @entries << load_entry(entry)
113
- else
114
- @unpublished << load_entry(entry)
115
- end
116
- }
117
- entries
118
- end
119
- def delete entry
120
- listing.delete_if{|e| e[:id] == entry }
121
- save_listing
122
- end
123
- def load_entry(file)
124
- tmp = nil
125
- File.open( home+'entries/'+file[:id].to_s ) {|yf| tmp = YAML::load( yf )[name].merge(file)} rescue puts "loading entry -- #{$!}"
126
- tmp
127
- end
128
- def add_entry title=nil
129
- timestamp = Time.now.to_i.to_s
130
- title ||= timestamp
131
- listing.unshift({:id => timestamp})
132
- save_listing
133
- write_template home+'attributes', home+'entries/'+timestamp
134
- load_entries
135
- return {:id => timestamp, :file => home+'entries/'+timestamp}
136
- end
137
- def publish
138
- tmp = {}
139
- listing.each {|e|
140
- if e[:publish] and not e[:publish].kind_of? String
141
- e[:publish] = Time.now.to_s
142
- end
143
- }
144
- save_listing
145
- end
146
-
147
- def set_to_publish entry
148
- listing.find{|e| e[:id] == entry}[:publish] = true
149
- save_listing
150
- end
151
-
152
- def find_entry entry
153
- tmp = entries.find{|e| e[:id] == entry}
154
- tmp ||= unpublished.find{|e| e[:id] == entry}
155
- tmp
156
- end
157
-
158
-
159
- end
160
-
161
-