fancydata 1.1.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.
data/README ADDED
@@ -0,0 +1,20 @@
1
+ Fancydata
2
+ =========
3
+
4
+ Use in one of two ways, plain old ruby:
5
+
6
+ FancyData <<-END
7
+ person:
8
+ name: Robert
9
+ END
10
+
11
+ @person.name #=> "Robert"
12
+
13
+ and as a haml filter
14
+
15
+ :data
16
+ person:
17
+ name: Robert
18
+ END
19
+
20
+ %h1= @person.name
@@ -0,0 +1,21 @@
1
+ task :default => :test
2
+
3
+ desc "Run tests"
4
+ task :test do
5
+ dir = File.dirname(__FILE__)
6
+ system "cd #{dir} && ruby test/test.rb"
7
+ end
8
+
9
+ begin
10
+ require 'jeweler'
11
+ Jeweler::Tasks.new do |gs|
12
+ gs.name = "fancydata"
13
+ gs.homepage = "http://github.com/quackingduck/fancydata"
14
+ gs.summary = "Quickly build objects from yaml"
15
+ gs.email = "myles@myles.id.au"
16
+ gs.authors = ["Myles Byrne"]
17
+ end
18
+ Jeweler::GemcutterTasks.new
19
+ rescue LoadError
20
+ puts "Install jeweler to build gem"
21
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.1.0
Binary file
@@ -0,0 +1,28 @@
1
+ require 'yaml'
2
+ require 'ostruct'
3
+
4
+ # TODO: replace ostruct with something that understands #respond_to?
5
+
6
+ def OpenStruct.deep(obj)
7
+ case obj
8
+ when Array
9
+ obj.map {|e| OpenStruct.deep(e)}
10
+ when Hash
11
+ OpenStruct.new( obj.each do |k,v|
12
+ obj[k] = OpenStruct.deep(v)
13
+ end )
14
+ else
15
+ obj
16
+ end
17
+ end
18
+
19
+ module FancyData
20
+ def self.version() File.read(__FILE__.sub('lib/fancydata.rb','VERSION')) end
21
+ end
22
+
23
+ # data must be a hash
24
+ def FancyData(data)
25
+ YAML.load(data).each do |key, val|
26
+ instance_variable_set("@#{key}", OpenStruct.deep(val))
27
+ end
28
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__),'..','fancydata')
2
+
3
+ module FancyData
4
+
5
+ module Filter
6
+ include Haml::Filters::Base
7
+
8
+ def compile(precompiler, text)
9
+ precompiler.send :push_silent, %(FancyData(#{text.inspect}))
10
+ end
11
+ end
12
+
13
+ ::Haml::Filters.defined['data'] = Filter
14
+
15
+ end
@@ -0,0 +1,41 @@
1
+ require 'haml'
2
+ require 'test/unit'
3
+
4
+ require File.dirname(__FILE__) + '/../lib/sinatra/fancydata'
5
+
6
+ $yaml = <<-END
7
+ a_string: foo
8
+ a_num: 1
9
+ a_array:
10
+ - a
11
+ - b
12
+ - c
13
+ a_hash:
14
+ foo: bar
15
+ array_of_hashes:
16
+ - bool: true
17
+ END
18
+
19
+ $haml = <<-END
20
+ :data
21
+ a_string: foo
22
+ = @a_string
23
+ END
24
+
25
+ class FancyDataTest < Test::Unit::TestCase
26
+
27
+ def test_fancydata
28
+ FancyData($yaml)
29
+ assert_equal('foo', @a_string)
30
+ assert_equal(1, @a_num)
31
+ assert_equal('a', @a_array.first)
32
+ assert_equal('bar', @a_hash.foo)
33
+ assert_equal(true, @array_of_hashes.first.bool)
34
+ end
35
+
36
+ def test_haml
37
+ out = Haml::Engine.new($haml).render
38
+ assert('foo',out)
39
+ end
40
+
41
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fancydata
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Myles Byrne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-10-16 00:00:00 +11:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description:
17
+ email: myles@myles.id.au
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README
24
+ files:
25
+ - README
26
+ - Rakefile
27
+ - VERSION
28
+ - dist/fancydata-1.0.gem
29
+ - lib/fancydata.rb
30
+ - lib/sinatra/fancydata.rb
31
+ - test/test.rb
32
+ has_rdoc: true
33
+ homepage: http://github.com/quackingduck/fancydata
34
+ licenses: []
35
+
36
+ post_install_message:
37
+ rdoc_options:
38
+ - --charset=UTF-8
39
+ require_paths:
40
+ - lib
41
+ required_ruby_version: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ version:
47
+ required_rubygems_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: "0"
52
+ version:
53
+ requirements: []
54
+
55
+ rubyforge_project:
56
+ rubygems_version: 1.3.5
57
+ signing_key:
58
+ specification_version: 3
59
+ summary: Quickly build objects from yaml
60
+ test_files:
61
+ - test/test.rb