awestruct 0.0.6 → 0.0.8

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.
@@ -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