rufus-dollar 1.0.2 → 1.0.3

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,6 +1,12 @@
1
1
 
2
2
  = rufus-dollar CHANGELOG.txt
3
3
 
4
+
5
+ == rufus-dollar - 1.0.3 released 2010/12/22
6
+
7
+ - ${'key} and ${"key} produce '"value"'
8
+
9
+
4
10
  == rufus-dollar - 1.0.2 released 2009/02/04
5
11
 
6
12
  - code cleanup
@@ -1,5 +1,5 @@
1
1
 
2
- Copyright (c) 2006-2008, John Mettraux, jmettraux@gmail.com
2
+ Copyright (c) 2006-2011, John Mettraux, jmettraux@gmail.com
3
3
 
4
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
5
5
  of this software and associated documentation files (the "Software"), to deal
data/README.txt CHANGED
@@ -6,7 +6,7 @@ A one-method library for substituting ${stuff} in text strings.
6
6
 
7
7
  == getting it
8
8
 
9
- sudo gem install rufus-dollar
9
+ gem install rufus-dollar
10
10
 
11
11
  or at
12
12
 
@@ -33,6 +33,11 @@ http://rubyforge.org/frs/?group_id=4812
33
33
  puts Rufus::dsub "${${left}${right}}", h
34
34
  # => "${name}" => "Fred Brooks"
35
35
 
36
+ # prefixing the key with a ' or a " makes it quotable
37
+
38
+ puts Rufus::dsub "${name} wrote ${'title}", h
39
+ # => 'Fred Brooks wrote "Silver Bullet"'
40
+
36
41
 
37
42
  == dependencies
38
43
 
@@ -0,0 +1,85 @@
1
+
2
+ $:.unshift('.') # 1.9.2
3
+
4
+ require 'rubygems'
5
+
6
+ require 'rake'
7
+ require 'rake/clean'
8
+ require 'rake/rdoctask'
9
+
10
+
11
+ #
12
+ # clean
13
+
14
+ CLEAN.include('pkg', 'rdoc')
15
+
16
+
17
+ #
18
+ # test / spec
19
+
20
+ #task :spec => :check_dependencies do
21
+ task :spec do
22
+ sh 'rspec spec/'
23
+ end
24
+ task :test => :spec
25
+
26
+ task :default => :spec
27
+
28
+
29
+ #
30
+ # gem
31
+
32
+ GEMSPEC_FILE = Dir['*.gemspec'].first
33
+ GEMSPEC = eval(File.read(GEMSPEC_FILE))
34
+ GEMSPEC.validate
35
+
36
+
37
+ desc %{
38
+ builds the gem and places it in pkg/
39
+ }
40
+ task :build do
41
+
42
+ sh "gem build #{GEMSPEC_FILE}"
43
+ sh "mkdir pkg" rescue nil
44
+ sh "mv #{GEMSPEC.name}-#{GEMSPEC.version}.gem pkg/"
45
+ end
46
+
47
+ desc %{
48
+ builds the gem and pushes it to rubygems.org
49
+ }
50
+ task :push => :build do
51
+
52
+ sh "gem push pkg/#{GEMSPEC.name}-#{GEMSPEC.version}.gem"
53
+ end
54
+
55
+
56
+ #
57
+ # rdoc
58
+ #
59
+ # make sure to have rdoc 2.5.x to run that
60
+
61
+ Rake::RDocTask.new do |rd|
62
+
63
+ rd.main = 'README.txt'
64
+ rd.rdoc_dir = 'rdoc'
65
+
66
+ rd.rdoc_files.include('README.txt', 'CHANGELOG.txt', 'lib/**/*.rb')
67
+
68
+ rd.title = "#{GEMSPEC.name} #{GEMSPEC.version}"
69
+ end
70
+
71
+
72
+ #
73
+ # upload_rdoc
74
+
75
+ desc %{
76
+ upload the rdoc to rubyforge
77
+ }
78
+ task :upload_rdoc => [ :clean, :rdoc ] do
79
+
80
+ account = 'jmettraux@rubyforge.org'
81
+ webdir = "/var/www/gforge-projects/rufus"
82
+
83
+ sh "rsync -azv -e ssh rdoc/#{GEMSPEC.name} #{account}:#{webdir}/"
84
+ end
85
+
@@ -1,6 +1,5 @@
1
- #
2
1
  #--
3
- # Copyright (c) 2006-2009, John Mettraux, jmettraux@gmail.com
2
+ # Copyright (c) 2006-2011, John Mettraux, jmettraux@gmail.com
4
3
  #
5
4
  # Permission is hereby granted, free of charge, to any person obtaining a copy
6
5
  # of this software and associated documentation files (the "Software"), to deal
@@ -20,76 +19,93 @@
20
19
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
20
  # THE SOFTWARE.
22
21
  #++
23
- #
24
-
25
- #
26
- # "made in Japan"
27
- #
28
- # John Mettraux at openwfe.org
29
- #
30
22
 
31
23
 
32
24
  module Rufus
33
25
 
34
- #
35
26
  # Performs 'dollar substitution' on a piece of text with a given
36
27
  # dictionary.
37
28
  #
38
- # require 'rubygems'
39
- # require 'rufus/dollar'
40
- #
41
- # h = {
42
- # "name" => "Fred Brooke",
43
- # "title" => "Silver Bullet"
44
- # }
29
+ # Please use Rufus::Dollar.dsub instead, this Rufus.dsub is kept
30
+ # for backward compatibility.
45
31
  #
46
- # puts Rufus::dsub "${name} wrote '${title}'", h
47
- # # => "Fred Brooke wrote 'Silver Bullet'"
48
- #
49
- def self.dsub (text, dict, offset=nil)
32
+ def self.dsub(text, dict)
50
33
 
51
- text = text.to_s
34
+ Rufus::Dollar.dsub(text, dict)
35
+ end
52
36
 
53
- j = text.index('}', offset || 0)
37
+ module Dollar
54
38
 
55
- return text unless j
39
+ VERSION = '1.0.3'
56
40
 
57
- t = text[0, j]
41
+ # Performs 'dollar substitution' on a piece of text with a given
42
+ # dictionary.
43
+ #
44
+ # require 'rubygems'
45
+ # require 'rufus/dollar'
46
+ #
47
+ # h = {
48
+ # "name" => "Fred Brooke",
49
+ # "title" => "Silver Bullet"
50
+ # }
51
+ #
52
+ # puts Rufus::Dollar.dsub "${name} wrote '${title}'", h
53
+ # # => "Fred Brooke wrote 'Silver Bullet'"
54
+ #
55
+ # == ${'key} or ${"key}
56
+ #
57
+ # puts Rufus::Dollar.dsub "${name} wrote ${title}", h
58
+ # # => "Fred Brooke wrote Silver Bullet"
59
+ #
60
+ # puts Rufus::Dollar.dsub "${name} wrote ${'title}", h
61
+ # # => 'Fred Brooke wrote "Silver Bullet"'
62
+ #
63
+ def self.dsub(text, dict, offset=nil)
58
64
 
59
- i = t.rindex('${')
60
- ii = t.rindex("\\${")
65
+ text = text.to_s
61
66
 
62
- iii = t.rindex('{')
63
- iii = nil if offset
67
+ j = text.index('}', offset || 0)
64
68
 
65
- return text unless i
66
- return dsub(text, dict, j+1) if (iii) and (iii-1 > i)
69
+ return text unless j
67
70
 
68
- return unescape(text) if (i) and (i != 0) and (ii == i-1)
69
- #
70
- # found "\${"
71
+ t = text[0, j]
71
72
 
72
- key = text[i+2..j-1]
73
+ i = t.rindex('${')
74
+ ii = t.rindex("\\${")
73
75
 
74
- value = dict[key]
76
+ iii = t.rindex('{')
77
+ iii = nil if offset
75
78
 
76
- value = if value
77
- value.to_s
78
- else
79
- dict.has_key?(key) ? 'false' : ''
80
- end
79
+ return text unless i
80
+ return dsub(text, dict, j+1) if (iii) and (iii-1 > i)
81
81
 
82
- pre = (i > 0) ? text[0..i-1] : ''
82
+ return unescape(text) if (i) and (i != 0) and (ii == i-1)
83
+ #
84
+ # found "\${"
83
85
 
84
- dsub("#{pre}#{value}#{text[j+1..-1]}", dict)
85
- end
86
+ key = text[i+2..j-1]
87
+ quote = false
86
88
 
87
- private
89
+ if m = key.match(/^['"](.+)$/)
90
+ key = m[1]
91
+ quote = true
92
+ end
88
93
 
89
- def self.unescape (text)
94
+ value = dict[key]
95
+ value = value.nil? ? '' : value.to_s
96
+ value = value.inspect if quote
90
97
 
91
- text.gsub("\\\\\\$\\{", "\\${")
92
- end
98
+ pre = (i > 0) ? text[0..i-1] : ''
99
+
100
+ dsub("#{pre}#{value}#{text[j+1..-1]}", dict)
101
+ end
93
102
 
103
+ private
104
+
105
+ def self.unescape(text)
106
+
107
+ text.gsub("\\\\\\$\\{", "\\${")
108
+ end
109
+ end
94
110
  end
95
111
 
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ Gem::Specification.new do |s|
4
+
5
+ s.name = 'rufus-dollar'
6
+ s.version = File.read('lib/rufus/dollar.rb').match(/VERSION = '([^']+)'/)[1]
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = [ 'John Mettraux' ]
9
+ s.email = [ 'jmettraux@gmail.com' ]
10
+ s.homepage = 'http://rufus.rubyforge.org'
11
+ s.rubyforge_project = 'rufus'
12
+ s.summary = '${xxx} substitutions'
13
+ s.description = %{
14
+ ${xxx} substitutions
15
+ }
16
+
17
+ #s.files = `git ls-files`.split("\n")
18
+ s.files = Dir[
19
+ 'Rakefile',
20
+ 'lib/**/*.rb', 'spec/**/*.rb', 'test/**/*.rb',
21
+ '*.gemspec', '*.txt', '*.rdoc', '*.md'
22
+ ]
23
+
24
+ #s.add_runtime_dependency 'rufus-json', '>= 0.2.5'
25
+
26
+ s.add_development_dependency 'rake'
27
+ s.add_development_dependency 'rspec', ">= 2.0"
28
+
29
+ s.require_path = 'lib'
30
+ end
31
+
@@ -0,0 +1,118 @@
1
+
2
+ #
3
+ # Specifying rufus-dollar
4
+ #
5
+ # Tue Dec 21 15:48:43 JST 2010
6
+ #
7
+
8
+ require File.join(File.dirname(__FILE__), 'spec_base')
9
+
10
+
11
+ describe Rufus::Dollar do
12
+
13
+ context 'simple usage' do
14
+
15
+ let(:dict) do
16
+ {
17
+ 'renard' => 'goupil',
18
+ 'cane' => 'oie',
19
+ 'oie blanche' => 'poule',
20
+ 'x' => 'y'
21
+ }
22
+ end
23
+
24
+ describe '.dsub' do
25
+
26
+ it "doesn't substitute if there are no ${}" do
27
+
28
+ dsub("le petit renard").should == "le petit renard"
29
+ end
30
+
31
+ it "doesn't substitute if there is only {}" do
32
+
33
+ dsub("le petit {renard}").should == "le petit {renard}"
34
+ end
35
+
36
+ it "substitutes at the end" do
37
+
38
+ dsub("le petit ${renard}").should == "le petit goupil"
39
+ end
40
+
41
+ it "substitutes in the middle" do
42
+
43
+ dsub("le petit ${renard} noir").should == "le petit goupil noir"
44
+ end
45
+
46
+ it "substitutes when there are two ${}" do
47
+
48
+ dsub("le ${renard} et la ${cane}").should == "le goupil et la oie"
49
+ # excuse my french
50
+ end
51
+
52
+ it "doesn't substitute when escaped \\\\${renard}" do
53
+
54
+ dsub("le petit \\${renard} noir").should == "le petit \\${renard} noir"
55
+ end
56
+
57
+ it "leaves \\n untouched" do
58
+
59
+ dsub("\n").should == "\n"
60
+ end
61
+
62
+ it "substitutes to a blank when there is no entry in the dict" do
63
+
64
+ dsub("le petit ${chien} suisse").should == "le petit suisse"
65
+ end
66
+ end
67
+ end
68
+
69
+ #def test_0
70
+ # dotest " ${a${b}e} ", {}, " "
71
+ # dotest " ${a{b}e} ", {}, " "
72
+ # dotest "${a{b}e}", {}, ""
73
+ # dotest " \\${a{b}e} ", {}, " \\${a{b}e} "
74
+ # dotest "{a${b}c}", { "b" => 2 }, "{a2c}"
75
+ #end
76
+ # no need to integrate that for now
77
+
78
+ context 'nested brackets' do
79
+
80
+ let(:dict) do
81
+ {
82
+ 'B' => 'b',
83
+ 'ab' => 'ok'
84
+ }
85
+ end
86
+
87
+ describe '.dsub' do
88
+
89
+ it 'substitutes successively' do
90
+
91
+ dsub("${a${B}}").should == 'ok'
92
+ end
93
+ end
94
+ end
95
+
96
+ context 'dollar bracket double-quote' do
97
+
98
+ let(:dict) do
99
+ {
100
+ 'renard' => 'goupil',
101
+ }
102
+ end
103
+
104
+ describe '.dsub' do
105
+
106
+ it 'encloses in double-quotes when ${\'renard}' do
107
+
108
+ dsub("${'renard}").should == '"goupil"'
109
+ end
110
+
111
+ it 'encloses in double-quotes when ${"renard}' do
112
+
113
+ dsub('${"renard}').should == '"goupil"'
114
+ end
115
+ end
116
+ end
117
+ end
118
+
@@ -0,0 +1,15 @@
1
+
2
+ $:.unshift(File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib')))
3
+
4
+ require 'rufus-dollar'
5
+
6
+
7
+ #
8
+ # rspec helpers
9
+
10
+ Dir[File.join(File.dirname(__FILE__), 'support/*.rb')].each { |f| require(f) }
11
+
12
+ RSpec.configure do |config|
13
+ config.include DollarHelper
14
+ end
15
+
@@ -0,0 +1,9 @@
1
+
2
+ module DollarHelper
3
+
4
+ def dsub(template)
5
+
6
+ Rufus::Dollar.dsub(template, dict)
7
+ end
8
+ end
9
+
metadata CHANGED
@@ -1,64 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rufus-dollar
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 0
8
+ - 3
9
+ version: 1.0.3
5
10
  platform: ruby
6
11
  authors:
7
- - John Mettraux
12
+ - John Mettraux
8
13
  autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2009-02-04 00:00:00 +09:00
17
+ date: 2010-12-22 00:00:00 +09:00
13
18
  default_executable:
14
- dependencies: []
15
-
16
- description:
17
- email: jmettraux@gmail.com
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rake
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :development
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: rspec
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 2
41
+ - 0
42
+ version: "2.0"
43
+ type: :development
44
+ version_requirements: *id002
45
+ description: "\n\
46
+ ${xxx} substitutions\n "
47
+ email:
48
+ - jmettraux@gmail.com
18
49
  executables: []
19
50
 
20
51
  extensions: []
21
52
 
22
- extra_rdoc_files:
23
- - README.txt
24
- - CHANGELOG.txt
25
- - LICENSE.txt
53
+ extra_rdoc_files: []
54
+
26
55
  files:
27
- - lib/rufus
28
- - lib/rufus/dollar.rb
29
- - lib/rufus-dollar.rb
30
- - test/dollar_test.rb
31
- - test/nested_test.rb
32
- - test/test.rb
33
- - test/test_base.rb
34
- - README.txt
35
- - CHANGELOG.txt
36
- - LICENSE.txt
56
+ - Rakefile
57
+ - lib/rufus-dollar.rb
58
+ - lib/rufus/dollar.rb
59
+ - spec/dollar_spec.rb
60
+ - spec/spec_base.rb
61
+ - spec/support/dollar_helper.rb
62
+ - rufus-dollar.gemspec
63
+ - CHANGELOG.txt
64
+ - LICENSE.txt
65
+ - README.txt
37
66
  has_rdoc: true
38
- homepage: http://rufus.rubyforge.org/rufus-dollar
67
+ homepage: http://rufus.rubyforge.org
68
+ licenses: []
69
+
39
70
  post_install_message:
40
71
  rdoc_options: []
41
72
 
42
73
  require_paths:
43
- - lib
74
+ - lib
44
75
  required_ruby_version: !ruby/object:Gem::Requirement
45
76
  requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: "0"
49
- version:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
50
82
  required_rubygems_version: !ruby/object:Gem::Requirement
51
83
  requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: "0"
55
- version:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ segments:
87
+ - 0
88
+ version: "0"
56
89
  requirements: []
57
90
 
58
- rubyforge_project:
59
- rubygems_version: 1.3.1
91
+ rubyforge_project: rufus
92
+ rubygems_version: 1.3.6
60
93
  signing_key:
61
- specification_version: 2
94
+ specification_version: 3
62
95
  summary: ${xxx} substitutions
63
- test_files:
64
- - test/test.rb
96
+ test_files: []
97
+
@@ -1,80 +0,0 @@
1
-
2
- #
3
- # Testing rufus-dollar
4
- #
5
- # John Mettraux at openwfe.org
6
- #
7
- # Mon Oct 9 22:19:44 JST 2006
8
- #
9
-
10
- require 'test/unit'
11
- require File.dirname(__FILE__) + '/test_base'
12
-
13
-
14
- class DollarTest < Test::Unit::TestCase
15
- include TestBase
16
-
17
- #def setup
18
- #end
19
-
20
- #def teardown
21
- #end
22
-
23
- def test_0
24
-
25
- dict = {}
26
-
27
- dict['renard'] = 'goupil'
28
- dict['cane'] = 'oie'
29
- dict['oie blanche'] = 'poule'
30
-
31
- dotest "le petit renard", dict, "le petit renard"
32
- dotest "le petit {renard}", dict, "le petit {renard}"
33
- dotest "le petit ${renard}", dict, "le petit goupil"
34
- dotest "le petit ${renard} noir", dict, "le petit goupil noir"
35
-
36
- dotest "la grande ${${cane} blanche}", dict, "la grande poule"
37
-
38
- dotest "le ${renard} et la ${cane}", dict, "le goupil et la oie"
39
- #
40
- # excuse my french...
41
-
42
- dotest "le \\${renard} encore", dict, "le \\${renard} encore"
43
-
44
- dotest "", dict, ""
45
-
46
- dotest("""
47
- """, dict, """
48
- """)
49
- dotest("""
50
- """, dict, """
51
- """)
52
- end
53
-
54
- def test_1
55
-
56
- dict = {}
57
- dict['x'] = 'y'
58
-
59
- dotest "${x}", dict, "y"
60
- dotest "\\${x}", dict, "\\${x}"
61
- end
62
-
63
- def test_2
64
-
65
- dict = {}
66
- dict['A'] = 'a'
67
- dict['B'] = 'b'
68
- dict['ab'] = 'ok'
69
-
70
- dotest "${${A}${B}}", dict, "ok"
71
- end
72
-
73
- #def test_3
74
- # assert_equal OpenWFE.unescape("toto and ${toto}"), "toto and ${toto}"
75
- # assert_equal OpenWFE.unescape("toto & \${toto}"), "toto & ${toto}"
76
- # assert_equal "toto & \\${toto}", "toto & ${toto}"
77
- # #assert_equal OpenWFE.unescape('toto & \${toto}'), "toto & ${toto}"
78
- #end
79
-
80
- end
@@ -1,30 +0,0 @@
1
-
2
- #
3
- # Testing rufus-dollar
4
- #
5
- # John Mettraux at openwfe.org
6
- #
7
- # Mon Feb 18 23:32:12 JST 2008
8
- #
9
-
10
- require File.dirname(__FILE__) + '/test_base'
11
-
12
-
13
- class NestedTest < Test::Unit::TestCase
14
- include TestBase
15
-
16
- #def setup
17
- #end
18
-
19
- #def teardown
20
- #end
21
-
22
- def test_0
23
-
24
- dotest " ${a${b}e} ", {}, " "
25
- dotest " ${a{b}e} ", {}, " "
26
- dotest "${a{b}e}", {}, ""
27
- dotest " \\${a{b}e} ", {}, " \\${a{b}e} "
28
- dotest "{a${b}c}", { "b" => 2 }, "{a2c}"
29
- end
30
- end
@@ -1,4 +0,0 @@
1
-
2
- require File.dirname(__FILE__) + '/dollar_test'
3
- require File.dirname(__FILE__) + '/nested_test'
4
-
@@ -1,27 +0,0 @@
1
-
2
- #
3
- # Testing rufus-dollar
4
- #
5
- # John Mettraux at openwfe.org
6
- #
7
- # Mon Feb 18 23:30:37 JST 2008
8
- #
9
-
10
- $:.unshift File.dirname(__FILE__) + '/../lib/'
11
-
12
- require 'test/unit'
13
- require 'rufus/dollar'
14
-
15
-
16
- module TestBase
17
-
18
- protected
19
-
20
- def dotest (text, dict, target)
21
-
22
- result = Rufus.dsub(text, dict)
23
-
24
- assert_equal target, result
25
- end
26
- end
27
-