rbml 0.0.5.9.2 → 0.0.5.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -25,6 +25,9 @@ lib/procedural.rb
25
25
  lib/processor.rb
26
26
  lib/rbml.rb
27
27
  lib/shell.rb
28
+ lib/cli_tools.rb
29
+ lib/cli_tools/array.rb
30
+ lib/cli_tools/string.rb
28
31
  spec/doc_spec.rb
29
32
  spec/object_spec.rb
30
33
  spec/rbml_spec.rb
data/bin/rbml CHANGED
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
2
+ #$LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
3
3
  $template_dir = File.dirname(ARGV[0]) if ARGV[0]
4
4
 
5
5
  require File.dirname(__FILE__)+'/../lib/rbml'
6
- ::Rbml::Processor.run(ARGV)
6
+ $script_extention = ARGV.first.gsub(/^.+\./, '')
7
+ ::Rbml::Processor.run(ARGV.first)
@@ -1,16 +1,38 @@
1
- cli :name=>"happycli", :prompt=>"happy> " do
2
- set :unknown_command do
3
- cliprint "overwritten unknown command"
1
+ cli :name=>"happycli", :prompt=>"^_^ " do
2
+ set :unknown_command do |args|
3
+ puts "unknown command"
4
4
  end
5
5
 
6
- set :help do
7
- cliprint "put helpdocs here"
6
+ set :com do |args|
7
+ flag(:help => 'h'){
8
+ puts 'help docs for this command'
9
+ }
10
+ flag(:name => 'n'){ |value|
11
+ puts "the name you gave was #{value}"
12
+ }
13
+ key(:test){
14
+ puts 'good. the test option is running.'
15
+ }
16
+ key(:best){ puts 'great. now the best one is.' }
17
+
18
+ process args
19
+
20
+ # now have access to remaining arguments as follows:
21
+ puts "\nremaining individual arguments (after flags): #{remaining_arguments.inspect}"
22
+ puts "\njoined remaining arguments (after flags): #{remaining_argument}"
23
+
24
+ # and also the active keys and flags
25
+ puts "\nactive options: #{active_options}"
8
26
  end
9
27
 
10
- set :corey_is_awesome do
11
- cliprint "corey is awesome"
28
+ set :clear do
29
+ system 'clear'
12
30
  end
13
-
31
+
32
+ set :help do
33
+ puts "put helpdocs here"
34
+ end
35
+
14
36
  set :quit do
15
37
  exit
16
38
  end
@@ -14,5 +14,12 @@ div do
14
14
  end
15
15
  end
16
16
  end
17
+ div :id=>"test" do
18
+ i "test"
19
+ end
17
20
  include "sublist/sublist"
18
- end
21
+ end
22
+
23
+ include "sublist/sublist"
24
+
25
+ div { i 'what' }
@@ -21,3 +21,5 @@ xhtml :doctype => {:type=>:xhtml, :version=>"1.0", :strict=>false} do
21
21
  include "partial"
22
22
  end
23
23
  end
24
+
25
+
@@ -1,7 +1,13 @@
1
+
2
+ require 'cli_tools'
3
+
1
4
  module Rbml
2
5
  module Language
3
6
  module Cli
4
7
  module Cli
8
+ include CliTools
9
+ include Flagger
10
+
5
11
  DEFINITION = {"unknown_command" => lambda {puts "unknown command type 'help' for instructions"}}
6
12
 
7
13
  def set(method, &proc)
@@ -10,24 +16,16 @@ module Rbml
10
16
  end
11
17
 
12
18
  def call(method, *args)
19
+ clear_arguments
13
20
  begin
14
- mymethod = DEFINITION.fetch(method)
15
- if args.length == 0 && mymethod.arity == -1
16
- mymethod.call
17
- elsif mymethod.arity.abs == args.length
18
- mymethod.call(*args)
19
- else
20
- puts "bad syntax"
21
- end
21
+ args.empty? ? DEFINITION.fetch(method)[nil] : DEFINITION.fetch(method)[args]
22
22
  rescue
23
- DEFINITION.fetch("unknown_command").call
23
+ DEFINITION.fetch("unknown_command")[args]
24
+ ensure
25
+ puts "\n"
24
26
  end
25
27
  end
26
-
27
- def cliprint(string)
28
- string
29
- end
30
28
  end
31
29
  end
32
30
  end
33
- end
31
+ end
@@ -2,20 +2,6 @@ module Rbml
2
2
  module Language
3
3
  module Doc
4
4
  module Base
5
- def find_partial(str)
6
- arr = str.split("/")
7
- arr.last[0,0] = "_"
8
- find_local_file(arr.join("/") + '.rbml')
9
- end
10
-
11
- def find_local_file(filename)
12
- find_file($template_dir +'/' + filename)
13
- end
14
-
15
- def find_file(filename)
16
- __instance_eval__ File.read(filename)
17
- end
18
-
19
5
  def print(doc)
20
6
  puts doc
21
7
  end
@@ -3,6 +3,13 @@ require 'redcloth'
3
3
  require 'doc/xml'
4
4
  require 'rexml/document'
5
5
 
6
+
7
+ module Inclusion
8
+ def include(file)
9
+ run_file [$template_dir, file.as_partial].join('/')+'.rbml'
10
+ end
11
+ end
12
+
6
13
  module Rbml
7
14
  module Language
8
15
  module Doc
@@ -10,7 +17,7 @@ module Rbml
10
17
  include Xml
11
18
  ::Kernel.send(:undef_method, :p)
12
19
 
13
- def tags; %w(body title head p div ul li html a br span)end
20
+ def tags; %w(body title head p div ul li html a br span h1 h2 h3 h4 h5 h6 strong img i u b pre kbd code cite strong em ins sup sub del table tr td th ol blockquote)end
14
21
 
15
22
  def stylesheets *sheets
16
23
  all_sheets = ''
@@ -38,14 +45,11 @@ module Rbml
38
45
  def end_tag *options
39
46
  "</html>"
40
47
  end
41
-
42
- def include(str)
43
- find_partial(str)
44
- end
45
48
 
46
49
  def format(doc)
47
50
  fdoc = REXML::Document.new doc.assemble_doc
48
51
  fdoc.write doc.formatted_doc, 1
52
+ doc.formatted_doc
49
53
  end
50
54
 
51
55
  def textilize(str)
@@ -9,9 +9,9 @@ module Rbml
9
9
 
10
10
  def instance_eval_each(code, &blk)
11
11
  $breaker = BlockBreaker.new do |name, args, block|
12
- yield @dsl.__send__(name, *args, &block)
13
- end
14
- $breaker.__instance_eval__ &code
12
+ yield @dsl.__send__(name, *args, &block)
13
+ end
14
+ $breaker.__instance_eval__ &code
15
15
  end
16
16
  end
17
17
  end
data/lib/cli.rb CHANGED
@@ -2,16 +2,14 @@ module Rbml
2
2
  class Cli < Base
3
3
  def self.render(language, options, &block)
4
4
  d = Cli.new(language)
5
- display = lambda do |result|
6
- puts "#{result}\n" unless result.nil?
7
- end
5
+ display = lambda { |result| result }
8
6
  loop do
9
7
  begin
10
8
  printf options[:prompt]
11
- d.instance_eval_each(block, &display)
9
+ d.instance_eval_each(block, &display)
12
10
  obj = IO.new(0, "w+")
13
11
  args = obj.gets.split
14
- d.dsl.__send__("call", *args)
12
+ d.dsl.__send__("call", *args) unless args.empty?
15
13
  rescue Interrupt
16
14
  puts "\nExiting #{options[:name]}..."
17
15
  break
@@ -19,4 +17,4 @@ module Rbml
19
17
  end
20
18
  end
21
19
  end
22
- end
20
+ end
@@ -0,0 +1,139 @@
1
+
2
+ class String
3
+ def flag?; self[0,1]=='-' end
4
+ def shift; self.slice! 0,1 end
5
+ end
6
+
7
+ class Array
8
+ def duplicate; *copy = *self.map{|a|a.dup} end
9
+ end
10
+
11
+ module CliTools
12
+ def request_value words=nil
13
+ printf words+' ' if words
14
+ $stdin.gets
15
+ end
16
+ end
17
+
18
+ module Flagger
19
+ def clear_arguments
20
+ @flags ={}
21
+ @active_keys = {}
22
+ @active_flags = {}
23
+ @potential_flags = {}
24
+ @associated_blocks = {}
25
+ @remaining_argument = []
26
+ @potential_keywords = []
27
+ end
28
+
29
+ def process(args=nil)
30
+ seperate_arguments_from(args) if args
31
+ process_command_line_input
32
+ end
33
+ def seperate_arguments_from(args)
34
+ args = args.duplicate
35
+ while !args.empty? and not args.first.flag?
36
+ if @potential_keywords.include?(args.first.to_sym)
37
+ @active_keys.merge! args.shift.to_sym => nil
38
+ else
39
+ @remaining_argument << args.shift
40
+ end
41
+ end
42
+ @flags = args
43
+ end
44
+
45
+ def process_command_line_input &blk
46
+ flags = parse_flags(@flags)
47
+ run_flags @active_keys
48
+ run_flags flags
49
+ end
50
+
51
+ def trip_flag which, with_value=nil
52
+ start_flag_checking
53
+ @active_flags.merge!({which => (with_value || true)})
54
+ end
55
+
56
+ def start_flag_checking
57
+ @active_flags ||= {}
58
+ end
59
+
60
+ def parse_flags(args)
61
+ start_flag_checking
62
+ while not args.empty?
63
+ flag_set = args.shift
64
+ flag_set.shift
65
+ unless flag_set.flag?
66
+ while not flag_set.empty?
67
+ @active_flags.merge!({flag_key_for(flag_set.shift) => (flag_set.empty? && args.first) ? (args.first.flag? or args.shift ) : true})
68
+ end
69
+ else
70
+ flag_set.shift
71
+ @active_flags.merge!({flag_key_for(flag_set) => (args.first ? (args.first.flag? or args.shift) : true) })
72
+ end
73
+ end
74
+ @active_flags
75
+ end
76
+
77
+ def flag_key_for(which)
78
+ return which.to_sym if @potential_flags.member? which.to_sym
79
+ try = @potential_flags.invert
80
+ return try[which] if try.member? which
81
+ return nil
82
+ end
83
+
84
+ def flag option, &blk
85
+ set_flag option
86
+ set_block option, blk
87
+ end
88
+ alias key flag
89
+
90
+ def flag_and_key option, &blk
91
+ flag option, &blk
92
+ option.each { |k, v| flag k, &blk }
93
+ end
94
+
95
+ def set_flag(option)
96
+ if option.respond_to? :merge!
97
+ @potential_flags.merge! option
98
+ else
99
+ @potential_keywords << option
100
+ end
101
+ end
102
+
103
+ def set_block(option, blk=nil)
104
+ @associated_blocks||= {}
105
+ blk ||= lambda{}
106
+ tmp = {}
107
+ if option.kind_of? Symbol
108
+ tmp[option] = blk
109
+ else
110
+ option.each {|key, value| tmp[key] = blk}
111
+ end
112
+ @associated_blocks.merge! tmp
113
+ end
114
+
115
+ def run_flags(options)
116
+ options.each { |key, value|
117
+ @associated_blocks[key.to_sym][value] rescue help_docs
118
+ }
119
+ end
120
+
121
+ def help_docs
122
+ exit
123
+ end
124
+
125
+ def active_options
126
+ flags = @active_flags || {}
127
+ keys = @active_keys || {}
128
+ flags.merge keys
129
+ end
130
+ def remaining_arguments
131
+ @remaining_argument||[]
132
+ end
133
+ def remaining_argument
134
+ @remaining_argument.join(' ')
135
+ end
136
+
137
+ end
138
+
139
+
File without changes
File without changes
@@ -1,3 +1,13 @@
1
+ module Inclusion
2
+ def run_file(file)
3
+ __instance_eval__ ::Rbml::Processor.read(file)
4
+ end
5
+
6
+ def include(file)
7
+ run_file file+'.rbml'
8
+ end
9
+ end
10
+
1
11
  module Primitives
2
12
  class BlankSlate #:nodoc:
3
13
  alias :__instance_eval__ :instance_eval
@@ -15,6 +25,8 @@ module Primitives
15
25
  end
16
26
 
17
27
  class BlockBreaker < BlankSlate #:nodoc:
28
+ include Inclusion
29
+
18
30
  def initialize(&block)
19
31
  if block_given?
20
32
  @handler = block
@@ -22,12 +34,11 @@ module Primitives
22
34
  raise NoBlockGiven, "Must be a block to break!"
23
35
  end
24
36
  end
25
-
26
37
  def method_missing(name, *args, &block)
27
- @handler.call(name, args, block)
38
+ @handler.call(name, args, block)
28
39
  end
29
40
  end
30
41
 
31
42
  class NoBlockGiven < StandardError #:nodoc:
32
43
  end
33
- end
44
+ end
@@ -11,4 +11,9 @@ class String
11
11
  def camelize
12
12
  self[0,1].upcase + self[1, self.length]
13
13
  end
14
- end
14
+ def as_partial
15
+ arr = self.split("/")
16
+ arr.last[0,0] = "_"
17
+ arr.join("/")
18
+ end
19
+ end
@@ -9,20 +9,37 @@ module Rbml
9
9
  ROUTES.fetch(name)
10
10
  end
11
11
 
12
- def spawn(options, &block)
13
- require "#{route_for(method_name.to_sym).downcase}/#{method_name}"
14
- language = "Language::#{route_for(method_name.to_sym)}::#{method_name.camelize}".to_m
15
- Rbml.const_get(route_for(method_name.to_sym)).render(language, options, &block)
16
- end
12
+ def method_name; caller[0][/`([^']*)'/, 1]; end
17
13
 
18
- ROUTES.each_key do |k|
19
- alias_method k, :spawn
14
+ def spawn(options, *args, &block)
15
+ language = if args.first.kind_of?(Hash) and args.first[:as_language]
16
+ args[:as_language]
17
+ else
18
+ method_name rescue $script_extention
19
+ end
20
+ language = load_language(language)
21
+ render(method_name, language, options, &block)
20
22
  end
21
23
 
22
- def method_name; caller[0][/`([^']*)'/, 1]; end
24
+ def render(method_name, language, options, &block)
25
+ Rbml.const_get(route_for(method_name.to_sym)).render(language, options, &block)
26
+ end
27
+
28
+ def load_language(language)
29
+ require "#{route_for(language.to_sym).downcase}/#{language}"
30
+ "Language::#{route_for(language.to_sym)}::#{language.camelize}".to_m
31
+ end
32
+
33
+ def self.read(file)
34
+ File.read(file)
35
+ end
23
36
 
24
37
  def self.run(argv)
25
- new.instance_eval File.readlines(argv.first).join
38
+ new.instance_eval File.read(argv)
26
39
  end
40
+
41
+ ROUTES.each_key do |k|
42
+ alias_method k, :spawn
43
+ end
27
44
  end
28
45
  end
@@ -1,8 +1,8 @@
1
- $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
2
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)) + "/../languages")
2
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module Rbml
5
- VERSION = '0.0.5.9.2'
5
+ VERSION = '0.0.5.9.3'
6
6
  end
7
7
  require 'extensions/kernel'
8
8
  require 'extensions/primitives'
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rbml
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.5.9.2
7
- date: 2007-03-06 00:00:00 -05:00
6
+ version: 0.0.5.9.3
7
+ date: 2007-05-01 00:00:00 -04:00
8
8
  summary: Rbml is a dsl framework for writing other languages in ruby
9
9
  require_paths:
10
10
  - lib
@@ -56,6 +56,9 @@ files:
56
56
  - lib/processor.rb
57
57
  - lib/rbml.rb
58
58
  - lib/shell.rb
59
+ - lib/cli_tools.rb
60
+ - lib/cli_tools/array.rb
61
+ - lib/cli_tools/string.rb
59
62
  - spec/doc_spec.rb
60
63
  - spec/object_spec.rb
61
64
  - spec/rbml_spec.rb
@@ -80,5 +83,5 @@ dependencies:
80
83
  requirements:
81
84
  - - ">="
82
85
  - !ruby/object:Gem::Version
83
- version: 1.1.7
86
+ version: 1.2.0
84
87
  version: