jsont 0.1.1 → 0.1.2

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,3 +1,7 @@
1
+ == 0.1.2 2008-11-27
2
+
3
+ * Added Proc support for rules
4
+
1
5
  == 0.1.1 2008-11-27
2
6
 
3
7
  * Removed JSON dependency. You'll have to parse the rules and input before you send it in.
@@ -8,12 +8,15 @@ Port of javascript JsonT transformation library. http://goessner.net/articles/js
8
8
 
9
9
  == FEATURES/PROBLEMS:
10
10
 
11
- Conforms to most of the JsonT spec minus the javascript function ability. Need something better there.
11
+ Conforms to most of the JsonT spec minus the javascript function ability. (Have to use Proc's instead)
12
12
 
13
13
  == SYNOPSIS:
14
14
 
15
15
  Jsont.new({'self' => '<div>{$.test}</div>', 'test' => '<p>{$.x} {$.y}</p>'}).transform({'test' => {'x' => 1, 'y' => 2}})
16
- => <div><p>1 2</p></div>
16
+ => <div><p>1 2</p></div>
17
+
18
+ Jsont.new({'self' => '<div>{$.test}</div>', 'test' => Proc.new{|t, opts| t['x']+t['y']}}).transform({'test' => {'x' => 1, 'y' => 2}})
19
+ => <div>3</div>
17
20
 
18
21
  == INSTALL:
19
22
 
data/Rakefile CHANGED
@@ -8,10 +8,7 @@ $hoe = Hoe.new('jsont', Jsont::VERSION) do |p|
8
8
  p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
9
9
  p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
10
10
  p.rubyforge_name = p.name # TODO this is default value
11
- p.extra_dev_deps = [
12
- ['newgem', ">= #{::Newgem::VERSION}"],
13
- ['json']
14
- ]
11
+ p.extra_dev_deps = []
15
12
 
16
13
  p.clean_globs |= %w[**/.DS_Store tmp *.log]
17
14
  path = (p.rubyforge_name == p.name) ? p.rubyforge_name : "\#{p.rubyforge_name}/\#{p.name}"
@@ -2,7 +2,7 @@ $:.unshift(File.dirname(__FILE__)) unless
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  class Jsont
5
- VERSION = '0.1.1'
5
+ VERSION = '0.1.2'
6
6
 
7
7
  def initialize(rules)
8
8
  @rules = rules
@@ -31,27 +31,31 @@ class Jsont
31
31
  end
32
32
 
33
33
  if (rule = @rules[target_path])
34
- rule.gsub(/\{([a-z0-9\$\.]+)\}/i) do |match|
35
- path = match[1,match.size - 2]
36
- n = case path[0]
37
- when ?$
38
- target
39
- else
40
- @parent
41
- end
42
- path.gsub!(/^\$\.?/,'')
34
+ if rule.respond_to?(:call)
35
+ rule.call(target, :target_path => target_path)
36
+ else
37
+ rule.gsub(/\{([a-z0-9\$\.]+)\}/i) do |match|
38
+ path = match[1,match.size - 2]
39
+ n = case path[0]
40
+ when ?$
41
+ target
42
+ else
43
+ @parent
44
+ end
45
+ path.gsub!(/^\$\.?/,'')
43
46
 
44
- if path.size > 0
45
- path.split('.').each do |piece|
46
- n = case piece
47
- when /^[0-9]+$/
48
- n[Integer(piece)]
49
- else
50
- n[piece]
47
+ if path.size > 0
48
+ path.split('.').each do |piece|
49
+ n = case piece
50
+ when /^[0-9]+$/
51
+ n[Integer(piece)]
52
+ else
53
+ n[piece]
54
+ end
51
55
  end
52
56
  end
57
+ n
53
58
  end
54
- n
55
59
  end
56
60
  else
57
61
  target
@@ -66,6 +66,13 @@ class TestJsont < Test::Unit::TestCase
66
66
  }), '<div id="topNav"><ul id="mainNav"><li class="dropdown research"><a class="navLabel" href="http://localhost/research/databases.php">Research</a>
67
67
  <ul class="clearfix"><li class="dropDownItem"><a href="http://localhost/research/databases.php">Databases</a></li><li class="dropDownItem"><a href="http://localhost/research/homework-help.php">Homework Help</a></li><li class="dropDownItem"><a href="http://localhost/research/government.php">Government</a></li><li class="dropDownItem"><a href="http://localhost/research/local-history.php">Local/Family History</a></li><li class="dropDownItem"><a href="http://localhost/research/teacher-resources.php">Teacher Resources</a></li><li class="dropDownItem"><a href="http://localhost/research/business.php">Business</a></li><li class="dropDownItem"><a href="http://localhost/research/investing.php">Investing</a></li><li class="dropDownItem"><a href="http://localhost/research/careers.php">Careers</a></li></ul></li></ul><ul id="subNav"><div class="research"><li><a class="" href="http://localhost/research/databases.php">Databases</a></li><li><a class="" href="http://localhost/research/homework-help.php">Homework Help</a></li><li><a class="" href="http://localhost/research/government.php">Government</a></li><li><a class="" href="http://localhost/research/local-history.php">Local/Family History</a></li><li><a class="" href="http://localhost/research/teacher-resources.php">Teacher Resources</a></li><li><a class="" href="http://localhost/research/business.php">Business</a></li><li><a class="" href="http://localhost/research/investing.php">Investing</a></li><li><a class="" href="http://localhost/research/careers.php">Careers</a></li></div></ul></div>')
68
68
 
69
+ assert_equal(
70
+ Jsont.new(
71
+ {'self' => '<div>{$.test}</div>',
72
+ 'test' => Proc.new{|t, opts| t['x']+t['y']}}
73
+ ).transform(
74
+ {'test' => {'x' => 1, 'y' => 2}}
75
+ ), '<div>3</div>')
69
76
 
70
77
 
71
78
  end
metadata CHANGED
@@ -56,30 +56,10 @@ test_files:
56
56
  - test/test_helper.rb
57
57
  - test/test_jsont.rb
58
58
  version: !ruby/object:Gem::Version
59
- version: 0.1.1
59
+ version: 0.1.2
60
60
  require_paths:
61
61
  - lib
62
62
  dependencies:
63
- - !ruby/object:Gem::Dependency
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - '>='
67
- - !ruby/object:Gem::Version
68
- version: 1.1.0
69
- version:
70
- type: :development
71
- version_requirement:
72
- name: newgem
73
- - !ruby/object:Gem::Dependency
74
- version_requirements: !ruby/object:Gem::Requirement
75
- requirements:
76
- - - '>='
77
- - !ruby/object:Gem::Version
78
- version: !str 0
79
- version:
80
- type: :development
81
- version_requirement:
82
- name: json
83
63
  - !ruby/object:Gem::Dependency
84
64
  version_requirements: !ruby/object:Gem::Requirement
85
65
  requirements: