awestruct 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -97,7 +97,7 @@ unless options.init
97
97
  site_yaml_file = File.join( Dir.pwd, '_config', 'site.yml' )
98
98
  site_yaml = YAML.load( File.read( site_yaml_file ) )
99
99
  @profiles_data = site_yaml ? site_yaml['profiles'] : {}
100
- @profile_data = @profiles_data[options.profile]
100
+ @profile_data = @profiles_data.nil? ? nil : @profiles_data[options.profile]
101
101
  end
102
102
 
103
103
  if ( options.init )
@@ -0,0 +1,24 @@
1
+ require 'bluecloth'
2
+
3
+ module Awestruct
4
+
5
+ module Blueclothable
6
+ def render(context)
7
+ rendered = ''
8
+ begin
9
+ doc = BlueCloth.new( context.interpolate_string( raw_page_content ) )
10
+ rendered = doc.to_html
11
+ rescue => e
12
+ puts e
13
+ puts e.backtrace
14
+ end
15
+ rendered
16
+ end
17
+
18
+ def content
19
+ context = site.engine.create_context( self )
20
+ render( context )
21
+ end
22
+ end
23
+
24
+ end
@@ -11,7 +11,7 @@ module Awestruct
11
11
  end
12
12
 
13
13
  def run
14
- cmd = "rsync -rv --delete #{@site_path} #{@host}:#{@path}"
14
+ cmd = "rsync -rvl --delete #{@site_path} #{@host}:#{@path}"
15
15
  puts "running #{cmd}"
16
16
  Open3.popen3( cmd ) do |stdin, stdout, stderr|
17
17
  stdin.close
@@ -0,0 +1,9 @@
1
+ %html
2
+ %head
3
+ %title
4
+ An awesome site
5
+ %link{ :rel=>'stylesheet', :type=>'text/css', :href=>'/stylesheets/grid.css', :media=>'screen, projection' }
6
+ %link{ :rel=>'stylesheet', :type=>'text/css', :href=>'/stylesheets/text.css', :media=>'print' }
7
+ %body.ninesixty
8
+ #container
9
+ ~ content
@@ -1,7 +1,6 @@
1
1
  require 'awestruct'
2
2
  require 'awestruct/commands/manifest'
3
3
 
4
-
5
4
  module Awestruct
6
5
  module Commands
7
6
  class Init
@@ -10,7 +9,7 @@ module Awestruct
10
9
  mkdir( '_config' )
11
10
  mkdir( '_layouts' )
12
11
  mkdir( '_ext' )
13
- copy_file( '_ext/pipeline.rb', File.join( File.dirname(__FILE__), 'base_pipeline.rb' ) )
12
+ copy_file( '_ext/pipeline.rb', File.join( File.dirname(__FILE__), 'frameworks/base_pipeline.rb' ) )
14
13
  mkdir( 'stylesheets' )
15
14
  }
16
15
 
@@ -23,9 +22,10 @@ module Awestruct
23
22
  def run()
24
23
  manifest = Manifest.new( BASE_MANIFEST )
25
24
  manifest.install_compass( @framework )
25
+ scaffold_name = ( @framework == 'compass' ? 'blueprint' : @framework )
26
26
  if ( @scaffold )
27
- manifest.copy_file( '_layouts/base.html.haml', File.join( File.dirname(__FILE__), '/base_layout.html.haml' ) )
28
- manifest.copy_file( 'index.html.haml', File.join( File.dirname(__FILE__), '/base_index.html.haml' ) )
27
+ manifest.copy_file( '_layouts/base.html.haml', File.join( File.dirname(__FILE__), "/frameworks/#{scaffold_name}/base_layout.html.haml" ) )
28
+ manifest.copy_file( 'index.html.haml', File.join( File.dirname(__FILE__), "/frameworks/base_index.html.haml" ) )
29
29
  manifest.touch_file( '_config/site.yml' )
30
30
  end
31
31
  manifest.perform( @dir )
@@ -2,8 +2,13 @@ require 'hpricot'
2
2
 
3
3
  module Awestruct
4
4
  module ContextHelper
5
+
5
6
  def html_to_text(str)
6
- str.gsub( /<[^>]+>/, '' )
7
+ str.gsub( /<[^>]+>/, '' ).gsub( /&nbsp;/, ' ' )
8
+ end
9
+
10
+ def clean_html(str)
11
+ str.gsub( /&nbsp;/, ' ' )
7
12
  end
8
13
 
9
14
  def summarize(text, numwords=20)
@@ -2,6 +2,7 @@
2
2
  require 'ostruct'
3
3
  require 'find'
4
4
  require 'compass'
5
+ require 'ninesixty'
5
6
  require 'time'
6
7
 
7
8
  require 'awestruct/config'
@@ -21,6 +22,8 @@ require 'awestruct/extensions/posts'
21
22
  require 'awestruct/extensions/indexifier'
22
23
  require 'awestruct/extensions/paginator'
23
24
  require 'awestruct/extensions/atomizer'
25
+ require 'awestruct/extensions/tagger'
26
+ require 'awestruct/extensions/tag_cloud'
24
27
  require 'awestruct/extensions/intense_debate'
25
28
  require 'awestruct/extensions/google_analytics'
26
29
 
@@ -1,13 +1,17 @@
1
1
  module Awestruct
2
2
  module Extensions
3
3
  class Atomizer
4
- def initialize(entries_name, output_path)
4
+ def initialize(entries_name, output_path, opts={})
5
5
  @entries_name = entries_name
6
6
  @output_path = output_path
7
+ @num_entries = opts[:num_entries] || 50
7
8
  end
8
9
 
9
10
  def execute(site)
10
11
  entries = site.send( @entries_name )
12
+ unless ( @num_entries == :all )
13
+ entries = entries[0,@num_entries]
14
+ end
11
15
  input_page = File.join( File.dirname(__FILE__), 'template.atom.haml' )
12
16
  page = site.engine.load_page( input_page )
13
17
  page.output_path = @output_path
@@ -1,17 +1,37 @@
1
1
 
2
+ require 'sha1'
3
+
2
4
  module Awestruct
3
5
  module Extensions
4
- module IntenseDebate
6
+ class IntenseDebate
7
+
8
+ def execute(site)
9
+ site.pages.each{|p| p.extend IntenseDebatable }
10
+ end
11
+
12
+ module IntenseDebatable
13
+ def intense_debate_comments()
14
+ post_id = SHA1.hexdigest( self.url )
15
+ html = %Q(<script>\n)
16
+ html += %Q( var idcomments_acct='#{site.intense_debate_acct}';\n)
17
+ html += %Q( var idcomments_post_id='#{post_id}';\n )
18
+ html += %Q( var idcomments_post_url='#{self.url}';\n)
19
+ html += %Q(</script>\n)
20
+ html += %Q(<span id="IDCommentsPostTitle" style="display:none"></span>\n)
21
+ html += %Q(<script type='text/javascript' src='http://www.intensedebate.com/js/genericCommentWrapperV2.js'></script>\n)
22
+ html
23
+ end
5
24
 
6
- def intense_debate_comments()
7
- html = %Q(<script>\n)
8
- html += %Q( var idcomments_acct='#{site.intense_debate_acct}';\n)
9
- html += %Q( var idcomments_post_id;\n)
10
- html += %Q( var idcomments_post_url;\n)
11
- html += %Q(</script>\n)
12
- html += %Q(<span id="IDCommentsPostTitle" style="display:none"></span>\n)
13
- html += %Q(<script type='text/javascript' src='http://www.intensedebate.com/js/genericCommentWrapperV2.js'></script>\n)
14
- html
25
+ def intense_debate_comments_link()
26
+ post_id = SHA1.hexdigest( self.url )
27
+ html = %Q(<script>\n)
28
+ html += %Q( var idcomments_acct='#{site.intense_debate_acct}';\n)
29
+ html += %Q( var idcomments_post_id='#{post_id}';\n )
30
+ html += %Q( var idcomments_post_url='#{self.url}';\n)
31
+ html += %Q(</script>\n)
32
+ html += %Q(<script type='text/javascript' src='http://www.intensedebate.com/js/genericLinkWrapperV2.js'></script>\n)
33
+ html
34
+ end
15
35
  end
16
36
  end
17
37
  end
@@ -46,15 +46,18 @@ module Awestruct
46
46
  end
47
47
 
48
48
  def initialize(prop_name, input_path, opts={})
49
- @prop_name = prop_name
50
- @input_path = input_path
51
- @per_page = opts[:per_page] || 20
52
- @window_size = opts[:window_size] || 2
49
+ @prop_name = prop_name
50
+ @input_path = input_path
51
+ @per_page = opts[:per_page] || 20
52
+ @window_size = opts[:window_size] || 2
53
+ @remove_input = opts.has_key?( :remove_input ) ? opts[:remove_input] : true
54
+ @output_prefix = opts[:output_prefix] || File.dirname( @input_path )
55
+ @collection = opts[:collection]
53
56
  end
54
57
 
55
58
  def execute(site)
56
59
  removal_path = nil
57
- all = site.send( @prop_name )
60
+ all = @collection || site.send( @prop_name )
58
61
  i = 1
59
62
  paginated_pages = []
60
63
  all.each_slice( @per_page ) do |slice|
@@ -63,9 +66,9 @@ module Awestruct
63
66
  slice.extend( Paginated )
64
67
  page.send( "#{@prop_name}=", slice )
65
68
  if ( i == 1 )
66
- page.output_path = File.join( File.dirname( @input_path ), File.basename( @input_path ) + ".html" )
69
+ page.output_path = File.join( @output_prefix, File.basename( @input_path ) + ".html" )
67
70
  else
68
- page.output_path = File.join( File.dirname( @input_path ), "page#{i}.html" )
71
+ page.output_path = File.join( @output_prefix, "page#{i}.html" )
69
72
  end
70
73
  page.paginate_generated = true
71
74
  site.pages << page
@@ -73,9 +76,11 @@ module Awestruct
73
76
  i = i + 1
74
77
  end
75
78
 
76
- site.pages.reject!{|page|
77
- ( ! page.paginate_generated && ( page.output_path == removal_path ) )
78
- }
79
+ if ( @remove_input )
80
+ site.pages.reject!{|page|
81
+ ( ! page.paginate_generated && ( page.output_path == removal_path ) )
82
+ }
83
+ end
79
84
 
80
85
  prev_page = nil
81
86
  paginated_pages.each_with_index do |page,i|
@@ -92,6 +97,7 @@ module Awestruct
92
97
  prev_page = page
93
98
  end
94
99
 
100
+ paginated_pages.first
95
101
  end
96
102
  end
97
103
 
@@ -0,0 +1,8 @@
1
+ ---
2
+ ---
3
+
4
+ .tag-cloud
5
+ - for tag in page.tags
6
+ %span.tag{:class=>"tag-#{tag.group}"}
7
+ %a{:href=>tag.primary_page.url}
8
+ = tag.to_s
@@ -0,0 +1,23 @@
1
+
2
+ module Awestruct
3
+ module Extensions
4
+ class TagCloud
5
+
6
+ def initialize(tagged_items_property, output_path='tags', opts={})
7
+ @tagged_items_property = tagged_items_property
8
+ @output_path = output_path
9
+ @layout = opts[:layout].to_s
10
+ @title = opts[:title] || 'Tags'
11
+ end
12
+
13
+ def execute(site)
14
+ page = site.engine.load_page( File.join( File.dirname( __FILE__ ), 'tag_cloud.html.haml' ) )
15
+ page.output_path = File.join( @output_path )
16
+ page.layout = @layout
17
+ page.title = @title
18
+ page.tags = site.send( "#{@tagged_items_property}_tags" ) || []
19
+ site.pages << page
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,79 @@
1
+
2
+ module Awestruct
3
+ module Extensions
4
+ class Tagger
5
+
6
+ class TagStat
7
+ attr_accessor :pages
8
+ attr_accessor :group
9
+ attr_accessor :primary_page
10
+ def initialize(tag, pages)
11
+ @tag = tag
12
+ @pages = pages
13
+ end
14
+
15
+ def to_s
16
+ @tag
17
+ end
18
+ end
19
+
20
+ def initialize(tagged_items_property, input_path, output_path='tags', pagination_opts={})
21
+ @tagged_items_property = tagged_items_property
22
+ @input_path = input_path
23
+ @output_path = output_path
24
+ @pagination_opts = pagination_opts
25
+ end
26
+
27
+ def execute(site)
28
+ @tags ||= {}
29
+ all = site.send( @tagged_items_property )
30
+ return if ( all.nil? || all.empty? )
31
+
32
+ all.each do |page|
33
+ tags = page.tags
34
+ if ( tags && ! tags.empty? )
35
+ tags.each do |tag|
36
+ tag = tag.to_s
37
+ @tags[tag] ||= TagStat.new( tag, [] )
38
+ @tags[tag].pages << page
39
+ end
40
+ end
41
+ end
42
+
43
+ all.each do |page|
44
+ page.tags = page.tags.collect{|t| @tags[t]}
45
+ end
46
+
47
+ ordered_tags = @tags.values
48
+ ordered_tags.sort!{|l,r| -(l.pages.size <=> r.pages.size)}
49
+ #ordered_tags = ordered_tags[0,100]
50
+ ordered_tags.sort!{|l,r| l.to_s <=> r.to_s}
51
+
52
+ min = 9999
53
+ max = 0
54
+
55
+ ordered_tags.each do |tag|
56
+ min = tag.pages.size if ( tag.pages.size < min )
57
+ max = tag.pages.size if ( tag.pages.size > max )
58
+ end
59
+
60
+ span = max - min
61
+ slice = span / 6
62
+
63
+ ordered_tags.each do |tag|
64
+ adjusted_size = tag.pages.size - min
65
+ scaled_size = adjusted_size / slice
66
+ tag.group = ( tag.pages.size - min ) / slice
67
+ end
68
+
69
+ @tags.values.each do |tag|
70
+ paginator = Awestruct::Extensions::Paginator.new( @tagged_items_property, @input_path, { :remove_input=>false, :output_prefix=>File.join( @output_path, tag.to_s), :collection=>tag.pages }.merge( @pagination_opts ) )
71
+ primary_page = paginator.execute( site )
72
+ tag.primary_page = primary_page
73
+ end
74
+
75
+ site.send( "#{@tagged_items_property}_tags=", ordered_tags )
76
+ end
77
+ end
78
+ end
79
+ end
@@ -23,7 +23,7 @@
23
23
  - else
24
24
  %name= entry.author
25
25
  %summary
26
- = html_to_text( entry.content )
26
+ #{summarize( html_to_text( entry.content ), 100 )}...
27
27
  %content{:type=>'html'}
28
- = escape_once( fully_qualify_urls( site.base_url, entry.content ) )
28
+ = clean_html( escape_once( fully_qualify_urls( site.base_url, entry.content ) ) )
29
29
 
@@ -39,9 +39,13 @@ module Awestruct
39
39
  yaml_content = ''
40
40
  end
41
41
 
42
- front_matter = YAML.load( yaml_content ) || {}
43
- front_matter.each do |k,v|
44
- self.send( "#{k}=", v )
42
+ begin
43
+ front_matter = YAML.load( yaml_content ) || {}
44
+ front_matter.each do |k,v|
45
+ self.send( "#{k}=", v )
46
+ end
47
+ rescue=>e
48
+ puts "error reading #{self}: #{e}"
45
49
  end
46
50
  end
47
51
  end
@@ -1,11 +1,13 @@
1
1
 
2
2
  require 'awestruct/front_matter_file'
3
3
  require 'awestruct/marukuable'
4
+ require 'awestruct/blueclothable'
4
5
 
5
6
  module Awestruct
6
7
  class MarukuFile < FrontMatterFile
7
8
 
8
- include Marukuable
9
+ #include Marukuable
10
+ include Blueclothable
9
11
 
10
12
  def initialize(site, source_path, relative_source_path)
11
13
  super(site, source_path, relative_source_path)
@@ -15,6 +15,10 @@ module Awestruct
15
15
  def output_filename
16
16
  File.basename( source_path, '.sass' ) + '.css'
17
17
  end
18
+
19
+ def syntax
20
+ :sass
21
+ end
18
22
 
19
23
  end
20
24
  end
@@ -6,17 +6,13 @@ module Awestruct
6
6
  module Sassable
7
7
 
8
8
  def render(context)
9
- #sass_opts = {
10
- #:load_paths => [
11
- #File.dirname( self.source_path ),
12
- #Compass::Frameworks['compass'].stylesheets_directory,
13
- #Compass::Frameworks['blueprint'].stylesheets_directory,
14
- #],
15
- #}
16
9
  sass_opts = Compass.sass_engine_options
17
10
  sass_opts[:load_paths] ||= []
11
+ Compass::Frameworks::ALL.each do |framework|
12
+ sass_opts[:load_paths] << framework.stylesheets_directory
13
+ end
18
14
  sass_opts[:load_paths] << File.dirname( self.source_path )
19
-
15
+ sass_opts[:syntax] = syntax()
20
16
  sass_engine = Sass::Engine.new( raw_page_content, sass_opts )
21
17
  sass_engine.render
22
18
  end
@@ -16,5 +16,9 @@ module Awestruct
16
16
  File.basename( source_path, '.scss' ) + '.css'
17
17
  end
18
18
 
19
+ def syntax
20
+ :scss
21
+ end
22
+
19
23
  end
20
24
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awestruct
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 6
10
- version: 0.0.6
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Bob McWhirter
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-12 00:00:00 -04:00
18
+ date: 2010-08-30 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -75,7 +75,7 @@ dependencies:
75
75
  type: :runtime
76
76
  version_requirements: *id004
77
77
  - !ruby/object:Gem::Dependency
78
- name: mongrel
78
+ name: compass-960-plugin
79
79
  prerelease: false
80
80
  requirement: &id005 !ruby/object:Gem::Requirement
81
81
  none: false
@@ -88,6 +88,34 @@ dependencies:
88
88
  version: "0"
89
89
  type: :runtime
90
90
  version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: mongrel
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :runtime
104
+ version_requirements: *id006
105
+ - !ruby/object:Gem::Dependency
106
+ name: org-ruby
107
+ prerelease: false
108
+ requirement: &id007 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ hash: 3
114
+ segments:
115
+ - 0
116
+ version: "0"
117
+ type: :runtime
118
+ version_requirements: *id007
91
119
  description:
92
120
  email: bob@mcwhirter.org
93
121
  executables:
@@ -97,8 +125,9 @@ extensions: []
97
125
  extra_rdoc_files: []
98
126
 
99
127
  files:
100
- - lib/awestruct/commands/base_pipeline.rb
128
+ - lib/awestruct/blueclothable.rb
101
129
  - lib/awestruct/commands/deploy.rb
130
+ - lib/awestruct/commands/frameworks/base_pipeline.rb
102
131
  - lib/awestruct/commands/generate.rb
103
132
  - lib/awestruct/commands/init.rb
104
133
  - lib/awestruct/commands/manifest.rb
@@ -115,6 +144,8 @@ files:
115
144
  - lib/awestruct/extensions/paginator.rb
116
145
  - lib/awestruct/extensions/pipeline.rb
117
146
  - lib/awestruct/extensions/posts.rb
147
+ - lib/awestruct/extensions/tag_cloud.rb
148
+ - lib/awestruct/extensions/tagger.rb
118
149
  - lib/awestruct/front_matter_file.rb
119
150
  - lib/awestruct/haml_file.rb
120
151
  - lib/awestruct/hamlable.rb
@@ -132,8 +163,10 @@ files:
132
163
  - lib/awestruct/util/inflector.rb
133
164
  - lib/awestruct/verbatim_file.rb
134
165
  - lib/awestruct.rb
135
- - lib/awestruct/commands/base_index.html.haml
136
- - lib/awestruct/commands/base_layout.html.haml
166
+ - lib/awestruct/commands/frameworks/960/base_layout.html.haml
167
+ - lib/awestruct/commands/frameworks/base_index.html.haml
168
+ - lib/awestruct/commands/frameworks/blueprint/base_layout.html.haml
169
+ - lib/awestruct/extensions/tag_cloud.html.haml
137
170
  - lib/awestruct/extensions/template.atom.haml
138
171
  - bin/awestruct
139
172
  has_rdoc: true