erbside 0.1.0 → 0.2.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.
Files changed (67) hide show
  1. data/.gemspec +152 -0
  2. data/.gitignore +8 -0
  3. data/.ruby +48 -0
  4. data/.yardopts +6 -0
  5. data/{HISTORY → HISTORY.rdoc} +0 -0
  6. data/MANIFEST +33 -0
  7. data/NOTICE.rdoc +32 -0
  8. data/PROFILE +6 -3
  9. data/README.rdoc +76 -0
  10. data/VERSION +1 -1
  11. data/lib/erbside.rb +6 -2
  12. data/lib/erbside/context.rb +3 -3
  13. data/lib/erbside/gemspec.rb +19 -0
  14. data/lib/erbside/inline.rb +8 -5
  15. data/lib/erbside/inline/cpp.rb +7 -0
  16. data/lib/erbside/inline/css.rb +7 -0
  17. data/lib/erbside/inline/js.rb +7 -0
  18. data/lib/erbside/metadata.rb +86 -50
  19. data/lib/erbside/runner.rb +14 -5
  20. data/main.assembly +56 -0
  21. data/{test/functional → qed}/applique/env.rb +0 -0
  22. data/{test/functional → qed}/bash.rdoc +0 -0
  23. data/{test/functional → qed}/cli.rdoc +0 -0
  24. data/{test/functional → qed}/cpp.rdoc +0 -0
  25. data/{test/functional → qed}/css.rdoc +0 -0
  26. data/{test/functional → qed}/javascript.rdoc +0 -0
  27. data/{test/functional → qed}/ruby.rdoc +0 -0
  28. data/{test/functional → qed}/sgml.rdoc +0 -0
  29. data/site/.htaccess +2 -0
  30. data/site/.rsync-filter +7 -0
  31. data/site/assets/css/highlight.css +96 -0
  32. data/site/assets/css/reset.css +19 -0
  33. data/site/assets/css/site.css +52 -0
  34. data/site/assets/img/curb.jpg +0 -0
  35. data/site/assets/img/emeraled.png +0 -0
  36. data/site/assets/img/fade.png +0 -0
  37. data/site/assets/img/fork-me.png +0 -0
  38. data/site/assets/img/icon.jpg +0 -0
  39. data/site/assets/js/highlight.js +1 -0
  40. data/site/assets/js/jquery.js +19 -0
  41. data/site/assets/js/jquery.tabs.js +1 -0
  42. data/site/index.html +229 -0
  43. data/test/{unit/fixture → fixture}/inline.rb +3 -3
  44. data/test/{unit/fixture → fixture}/inline_complex.rb +0 -0
  45. data/test/inline_test.rb +15 -0
  46. data/work/defunct/css/color.css +45 -0
  47. data/work/defunct/css/font.css +39 -0
  48. data/work/defunct/css/struct.css +51 -0
  49. data/work/defunct/inline-old/bash.rb +36 -0
  50. data/work/defunct/inline-old/cpp.rb +39 -0
  51. data/work/defunct/inline-old/css.rb +32 -0
  52. data/work/defunct/inline-old/html.rb +32 -0
  53. data/work/defunct/inline-old/js.rb +85 -0
  54. data/work/defunct/inline-old/ruby.rb +147 -0
  55. data/work/defunct/inline-old/type.rb +91 -0
  56. data/work/defunct/inline.rb +202 -0
  57. data/work/defunct/plan.rb +37 -0
  58. data/work/defunct/tiller.rb +200 -0
  59. data/work/defunct/webme/options.yml +4 -0
  60. data/work/defunct/whole.rb +221 -0
  61. data/{lib → work}/plugins/syckle/erbside.rb +0 -0
  62. data/work/radio_earth.jpg +0 -0
  63. data/yard.watchr +12 -0
  64. metadata +94 -50
  65. data/LICENSE +0 -206
  66. data/README +0 -88
  67. data/test/unit/inline_test.rb +0 -14
@@ -0,0 +1,19 @@
1
+ begin
2
+ require 'rubygems'
3
+
4
+ module Gem
5
+ class Specification
6
+
7
+ def [](k); send(k); end
8
+
9
+ def to_h
10
+ instance_variables.inject({}) do |h,k|
11
+ h[k.sub('@','')] = instance_variable_get(k); h
12
+ end
13
+ end
14
+ end
15
+
16
+ end
17
+
18
+ rescue LoadError
19
+ end
@@ -31,7 +31,10 @@ module Erbside
31
31
  register << base
32
32
  end
33
33
 
34
- def self.extensions ; raise ; end
34
+ #
35
+ def self.extensions
36
+ raise NotImplementedError
37
+ end
35
38
 
36
39
  #
37
40
  def self.extension_list
@@ -76,11 +79,11 @@ module Erbside
76
79
  # I N I T I A L I Z E
77
80
 
78
81
  #
79
- def initialize(file)
82
+ def initialize(file, *resources)
80
83
  @file = Pathname.new(file)
81
84
  @type = @file.extname
82
85
 
83
- @context = Context.new(@file)
86
+ @context = Context.new(@file, resources)
84
87
  end
85
88
 
86
89
  #
@@ -139,12 +142,12 @@ module Erbside
139
142
 
140
143
  #
141
144
  def remarker
142
- raise
145
+ raise NotImplementedError
143
146
  end
144
147
 
145
148
  #
146
149
  def remarker_multiline
147
- raise
150
+ raise NotImplementedError
148
151
  end
149
152
 
150
153
  #
@@ -26,6 +26,13 @@ module Erbside
26
26
  '*/'
27
27
  end
28
28
 
29
+ #
30
+ def block_match
31
+ b = Regexp.escape(remarker_block_begin)
32
+ e = Regexp.escape(remarker_block_end)
33
+ %r{^(#{b})(\s*)(:#{TAG})(\+\d*)?(\:)(\s*)((?m:.*?))(\s#{e})}
34
+ end
35
+
29
36
  end
30
37
 
31
38
  end
@@ -28,6 +28,13 @@ module Erbside
28
28
  '*/'
29
29
  end
30
30
 
31
+ #
32
+ def block_match
33
+ b = Regexp.escape(remarker_block_begin)
34
+ e = Regexp.escape(remarker_block_end)
35
+ %r{^(#{b})(\s*)(:#{TAG})(\+\d*)?(\:)(\s*)((?m:.*?))(\s#{e})}
36
+ end
37
+
31
38
  end
32
39
 
33
40
  end
@@ -28,6 +28,13 @@ module Erbside
28
28
  '*/'
29
29
  end
30
30
 
31
+ #
32
+ def block_match
33
+ b = Regexp.escape(remarker_block_begin)
34
+ e = Regexp.escape(remarker_block_end)
35
+ %r{^(#{b})(\s*)(:#{TAG})(\+\d*)?(\:)(\s*)((?m:.*?))(\s#{e})}
36
+ end
37
+
31
38
  end
32
39
 
33
40
  end
@@ -1,79 +1,122 @@
1
+ begin require 'dotruby' rescue LoadError end
2
+
3
+ #require 'facets/ostruct'
4
+
1
5
  module Erbside
2
6
 
3
7
  # Metadata belongs to the project being scaffold.
4
8
  #
5
- # TODO: Support POM::Metadata
6
- #
7
9
  class Metadata
8
10
 
9
- #require 'facets/ostruct'
11
+ # Canonical metadata file.
12
+ CANONICAL_FILENAME = '.ruby'
10
13
 
11
- begin
12
- require 'pom'
13
- rescue LoadError
14
- end
14
+ # Root directory is indicated by the presence of a +meta/+ directory,
15
+ # or +.meta/+ hidden directory.
16
+ ROOT_INDICATORS = [ "{#{CANONICAL_FILENAME},meta/,.meta/}" ]
15
17
 
16
18
  # Project root pathname.
17
19
  attr :root
18
20
 
19
- #
20
- def initialize(root=nil)
21
- @root = self.class.root(root) || Dir.pwd
22
-
23
- if defined?(POM)
24
- @pom = POM::Metadata.new(@root)
25
- else
26
- @pom = nil
21
+ # Data resources.
22
+ attr :resources
23
+
24
+ # Construct new Metadata object.
25
+ def initialize(resources, options={})
26
+ @root = self.class.root(options[:root]) || Dir.pwd
27
+ @data = []
28
+
29
+ @resources = resources
30
+ @resources << '.ruby' if canonical?
31
+
32
+ @resources.each do |source|
33
+ case File.basename(source)
34
+ when CANONICAL_FILENAME
35
+ if canonical?
36
+ if defined?(::DotRuby)
37
+ @data << DotRuby::Spec.find(root) #(CANONICAL_FILENAME)
38
+ else
39
+ @data << YAML.load_file(canonical_file)
40
+ end
41
+ end
42
+ when /\.gemspec$/
43
+ require 'erbside/gemspec'
44
+ @data << ::Gem::Specification.load(source)
45
+ when /\.ya?ml$/
46
+ @data << YAML.load_file(source)
47
+ else
48
+ if File.directory?(source)
49
+ @data << load_metadir(source)
50
+ else
51
+ # now what ?
52
+ end
53
+ end
27
54
  end
28
55
 
29
- @cache = {} #OpenStruct.new
56
+ @cache = {}
57
+ end
30
58
 
31
- load_metadata # TODO: when pom supports arbitrary metadata, merge @pom and @cache into same variable.
59
+ # If method is missing, check the POM and metadata cache.
60
+ def method_missing(name, *args)
61
+ return super unless args.empty?
62
+ self[name]
32
63
  end
33
64
 
34
- #
35
- def method_missing(s, *a)
36
- return super unless a.empty?
37
- if @pom
38
- begin
39
- @pom.__send__(s, *a)
40
- rescue
41
- @cache.key?(s.to_s) ? @cache[s.to_s] : nil
42
- end
43
- else
44
- @cache.key?(s.to_s) ? @cache[s.to_s] : nil
65
+ # Lookup metadata entry.
66
+ def [](name)
67
+ name, value = name.to_s, nil
68
+ return @cache[name] if @cache.key?(name)
69
+ begin
70
+ @data.find{ |d| value = d[name] }
71
+ rescue
45
72
  end
73
+ @cache[name] = value
46
74
  end
47
75
 
48
76
  # Provide metadata to hash. Some (stencil) template systems
49
77
  # need the data in hash form.
50
-
51
78
  def to_h
52
- if @pom
53
- @pom.to_h
54
- else
55
- @cache
56
- end
79
+ @data.reverse.inject({}){ |h,d| h.merge(d.to_h) }
57
80
  end
58
81
 
59
82
  private
60
83
 
61
- # Load metadata. This serves as the fallback if POM is not used.
84
+ def canonical_file
85
+ File.join(root, CANONICAL_FILENAME)
86
+ end
62
87
 
63
- def load_metadata
64
- Dir[File.join(metadir, '*')].each do |f|
65
- val = File.read(f).strip
66
- val = YAML.load(val) if val =~ /\A---/
67
- @cache[File.basename(f)] = val
68
- end
88
+ #
89
+ def canonical?
90
+ File.exist?(canonical_file)
69
91
  end
70
92
 
71
- # What is project root's metadirectory?
93
+ # Load metadata cache. This serves as the fallback for the POM.
94
+ def load_metadir(dir=nil)
95
+ data = {}
96
+ Dir[File.join(dir || metadir, '*')].each do |file|
97
+ next unless File.file?(file)
98
+
99
+ case File.extname(file)
100
+ when '.yaml'
101
+ val = YAML.load(File.new(file))
102
+ data.merge!(val)
103
+ when ''
104
+ val = File.read(file).strip
105
+ val = YAML.load(val) if val =~ /\A---/
106
+ data[File.basename(file)] = val
107
+ else
108
+ # ignore
109
+ end
110
+ end
111
+ data
112
+ end
72
113
 
114
+ # What is project root's meta directory?
73
115
  def metadir
74
- @metadir ||= Dir[File.join(root, '{.meta,meta}/')].first || '.meta/'
116
+ @metadir ||= Dir[File.join(root, '{meta,.meta}/')].first || 'meta/'
75
117
  end
76
118
 
119
+ #
77
120
  #def load_value(name)
78
121
  # file = File.join(metadir, name)
79
122
  # file = Dir[file].first
@@ -83,15 +126,9 @@ module Erbside
83
126
  # end
84
127
  #end
85
128
 
86
- # Root directory is indicated by the presence of a +meta/+ directory,
87
- # or +.meta/+ hidden directory.
88
-
89
- ROOT_INDICATORS = [ '{.meta,meta}/' ]
90
-
91
129
  # Locate the project's root directory. This is determined
92
130
  # by ascending up the directory tree from the current position
93
131
  # until the ROOT_INDICATORS is matched. Returns +nil+ if not found.
94
-
95
132
  def self.root(local=Dir.pwd)
96
133
  local ||= Dir.pwd
97
134
  Dir.chdir(local) do
@@ -119,4 +156,3 @@ module Erbside
119
156
  end
120
157
 
121
158
  end
122
-
@@ -24,6 +24,9 @@ module Erbside
24
24
 
25
25
  #attr_accessor :delete
26
26
 
27
+ #
28
+ attr_accessor :resources
29
+
27
30
 
28
31
  # I N I T I A L I Z E
29
32
 
@@ -39,12 +42,18 @@ module Erbside
39
42
  end.flatten
40
43
  @files = files
41
44
 
42
- @force = options[:force]
43
- @skip = options[:skip]
44
- @output = options[:output]
45
- #@delete = options[:delete]
45
+ @force = options[:force]
46
+ @skip = options[:skip]
47
+ @output = options[:output]
48
+ #@delete = options[:delete]
49
+ @resources = options[:resources]
46
50
  end
47
51
 
52
+ #
53
+ #def metadata
54
+ # @metadata ||= Metadata.new(*resources)
55
+ #end
56
+
48
57
  #
49
58
  def collect_usable_files(dir)
50
59
  Dir[File.join(dir,"**/*#{ext_glob}")]
@@ -73,7 +82,7 @@ module Erbside
73
82
  return
74
83
  end
75
84
 
76
- template = parser.new(file)
85
+ template = parser.new(file, *resources)
77
86
 
78
87
  if template.exist? && skip?
79
88
  puts " #{template.relative_output} skipped"
@@ -0,0 +1,56 @@
1
+ ---
2
+ email:
3
+ service: Email
4
+ mailto: transfire@gmail.com
5
+
6
+ github:
7
+ active: true
8
+
9
+ gem:
10
+ active: true
11
+
12
+ qed:
13
+ active : false
14
+
15
+ #erbside:
16
+ # service : Custom
17
+ # pipeline: main
18
+ # generate: |
19
+ # sh 'erbside lib/erbside.rb'
20
+ # active: false
21
+
22
+ #erbside:
23
+ # service: erbside
24
+ # active: false
25
+
26
+ dnote:
27
+ service: DNote
28
+ output: log/DNOTES.rdoc
29
+ active: true
30
+
31
+ yard:
32
+ yardopts: true
33
+ active: false
34
+
35
+ ri:
36
+ output : .rdoc
37
+ include : lib
38
+ active : false
39
+
40
+ rdoc:
41
+ service : RDoc
42
+ template: spartacus
43
+ output : site/doc
44
+ title : Erbside
45
+ main : README.rdoc
46
+ extra : ""
47
+ include : ['lib', '[A-Z]*.*']
48
+ active : false
49
+
50
+ locat:
51
+ active: false
52
+
53
+ vclog:
54
+ service : VClog
55
+ active: false
56
+
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ DirectoryIndex index.html
2
+
@@ -0,0 +1,7 @@
1
+ - .svn
2
+ - scrap
3
+ P wiki
4
+ P robot.txt
5
+ P statcvs
6
+ P statsvn
7
+ P usage
@@ -0,0 +1,96 @@
1
+ /* github.com style (c) Vasily Polovnyov <vast@whiteants.net> */
2
+
3
+ /* NOTE: This has been included in the rdoc.css stylesheet
4
+ rather then have it's own file simply b/c I have not
5
+ figured out how to utilize my own generator to be able
6
+ to copy additional files.
7
+ */
8
+
9
+ pre code {
10
+ display: block;
11
+ color: #000;
12
+ background: #f8f8ff;
13
+ background: #eee;
14
+ -moz-border-radius: 10px;
15
+ border-radius: 10px;
16
+ }
17
+
18
+ code .comment, .template_comment, .diff .header, .javadoc {
19
+ color: #998;
20
+ font-style: italic
21
+ }
22
+
23
+ code .keyword, .css .rule .keyword, .winutils, .javascript .title, .lisp .title, .subst {
24
+ color: #000;
25
+ font-weight: bold
26
+ }
27
+
28
+ code .number, .hexcolor {
29
+ color: #40a070
30
+ }
31
+
32
+ code .string, .attribute .value, .phpdoc {
33
+ color: #d14
34
+ }
35
+
36
+ code .title, .id {
37
+ color: #900;
38
+ font-weight: bold
39
+ }
40
+
41
+ code .javascript .title, .lisp .title, .subst {
42
+ font-weight: normal
43
+ }
44
+
45
+ code .class .title {
46
+ color: #458;
47
+ font-weight: bold
48
+ }
49
+
50
+ code .tag, .css .keyword, .html .keyword, .tag .title, .django .tag .keyword {
51
+ color: #000080;
52
+ font-weight: normal
53
+ }
54
+
55
+ code .attribute, .variable, .instancevar, .lisp .body {
56
+ color: #008080
57
+ }
58
+
59
+ code .regexp {
60
+ color: #009926
61
+ }
62
+
63
+ code .class {
64
+ color: #458;
65
+ font-weight: bold
66
+ }
67
+
68
+ code .symbol, .lisp .keyword {
69
+ color: #990073
70
+ }
71
+
72
+ code .builtin, .built_in, .lisp .title {
73
+ color: #0086b3
74
+ }
75
+
76
+ code .preprocessor, .pi, .doctype, .shebang, .cdata {
77
+ color: #999;
78
+ font-weight: bold
79
+ }
80
+
81
+ code .deletion {
82
+ background: #fdd
83
+ }
84
+
85
+ code .addition {
86
+ background: #dfd
87
+ }
88
+
89
+ code .diff .change {
90
+ background: #0086b3
91
+ }
92
+
93
+ code .chunk {
94
+ color: #aaa
95
+ }
96
+