representative 0.1.2 → 0.1.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.
- data/Rakefile +2 -20
- data/lib/representative/object_inspector.rb +15 -0
- data/lib/representative/version.rb +1 -1
- data/lib/representative/xml.rb +43 -29
- data/spec/representative/xml_spec.rb +9 -0
- metadata +30 -26
- data/.document +0 -3
- data/.gitignore +0 -6
- data/init.rb +0 -1
- data/representative.gemspec +0 -58
data/Rakefile
CHANGED
@@ -2,10 +2,6 @@ require "rubygems"
|
|
2
2
|
require "rake"
|
3
3
|
require "rake/clean"
|
4
4
|
|
5
|
-
require File.dirname(__FILE__) + "/lib/representative/version.rb"
|
6
|
-
|
7
|
-
task :default => :spec
|
8
|
-
|
9
5
|
def with_gem(gem_name, lib = gem_name)
|
10
6
|
begin
|
11
7
|
require(lib)
|
@@ -16,22 +12,6 @@ def with_gem(gem_name, lib = gem_name)
|
|
16
12
|
yield
|
17
13
|
end
|
18
14
|
|
19
|
-
with_gem "jeweler" do
|
20
|
-
|
21
|
-
Jeweler::Tasks.new do |gem|
|
22
|
-
gem.name = "representative"
|
23
|
-
gem.version = Representative::VERSION
|
24
|
-
gem.summary = "Builds XML representations of your Ruby objects"
|
25
|
-
gem.email = "mdub@dogbiscuit.org"
|
26
|
-
gem.homepage = "http://github.com/mdub/representative"
|
27
|
-
gem.authors = ["Mike Williams"]
|
28
|
-
gem.add_dependency("activesupport", ">= 2.2.2")
|
29
|
-
end
|
30
|
-
|
31
|
-
Jeweler::GemcutterTasks.new
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
15
|
require "spec/rake/spectask"
|
36
16
|
|
37
17
|
Spec::Rake::SpecTask.new(:spec) do |spec|
|
@@ -39,6 +19,8 @@ Spec::Rake::SpecTask.new(:spec) do |spec|
|
|
39
19
|
spec.spec_files = FileList['spec/**/*_spec.rb']
|
40
20
|
end
|
41
21
|
|
22
|
+
task :default => :spec
|
23
|
+
|
42
24
|
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
43
25
|
spec.libs << 'lib' << 'spec'
|
44
26
|
spec.spec_files = FileList['spec/**/*_spec.rb']
|
data/lib/representative/xml.rb
CHANGED
@@ -1,14 +1,17 @@
|
|
1
|
+
require "active_support/core_ext/array"
|
2
|
+
require "active_support/core_ext/string"
|
1
3
|
require "builder"
|
2
|
-
require "active_support"
|
3
4
|
require "representative/empty"
|
5
|
+
require "representative/object_inspector"
|
4
6
|
|
5
7
|
module Representative
|
6
8
|
|
7
9
|
class Xml < BlankSlate
|
8
10
|
|
9
|
-
def initialize(xml_builder, subject = nil)
|
11
|
+
def initialize(xml_builder, subject = nil, options = {})
|
10
12
|
@xml = xml_builder
|
11
13
|
@subjects = [subject]
|
14
|
+
@inspector = options[:inspector] || ObjectInspector.new
|
12
15
|
yield self if block_given?
|
13
16
|
end
|
14
17
|
|
@@ -16,7 +19,7 @@ module Representative
|
|
16
19
|
if name.to_s =~ /!$/
|
17
20
|
super
|
18
21
|
else
|
19
|
-
|
22
|
+
attribute!(name, *args, &block)
|
20
23
|
end
|
21
24
|
end
|
22
25
|
|
@@ -24,18 +27,25 @@ module Representative
|
|
24
27
|
@subjects.last
|
25
28
|
end
|
26
29
|
|
27
|
-
def
|
30
|
+
def attribute!(subject_attribute_name, *args, &block)
|
28
31
|
|
29
|
-
|
30
|
-
value_generator = args.empty?
|
32
|
+
element_attributes = args.extract_options!
|
33
|
+
value_generator = if args.empty?
|
34
|
+
lambda do |subject|
|
35
|
+
@inspector.get_value(subject, subject_attribute_name)
|
36
|
+
end
|
37
|
+
else
|
38
|
+
args.shift
|
39
|
+
end
|
31
40
|
raise ArgumentError, "too many arguments" unless args.empty?
|
32
41
|
|
33
|
-
element_name =
|
42
|
+
element_name = subject_attribute_name.to_s.dasherize
|
34
43
|
|
35
|
-
value =
|
36
|
-
|
44
|
+
value = resolve_value(value_generator)
|
45
|
+
resolved_element_attributes = resolve_element_attributes(element_attributes, value)
|
46
|
+
resolved_element_attributes.merge!(@inspector.get_metadata(subject!, subject_attribute_name))
|
37
47
|
|
38
|
-
element!(element_name, value,
|
48
|
+
element!(element_name, value, resolved_element_attributes, &block)
|
39
49
|
|
40
50
|
end
|
41
51
|
|
@@ -59,36 +69,40 @@ module Representative
|
|
59
69
|
@xml.tag!(element_name, *tag_args, &content_generator)
|
60
70
|
end
|
61
71
|
|
62
|
-
def list_of!(
|
72
|
+
def list_of!(attribute_name, *args, &block)
|
63
73
|
|
64
74
|
options = args.extract_options!
|
65
|
-
value_generator = args.empty? ?
|
75
|
+
value_generator = args.empty? ? attribute_name : args.shift
|
66
76
|
raise ArgumentError, "too many arguments" unless args.empty?
|
67
77
|
|
68
|
-
list_name =
|
69
|
-
|
78
|
+
list_name = attribute_name.to_s.dasherize
|
79
|
+
list_element_attributes = options[:list_attributes] || {}
|
70
80
|
item_name = options[:item_name] || list_name.singularize
|
71
|
-
|
81
|
+
item_element_attributes = options[:item_attributes] || {}
|
82
|
+
|
83
|
+
items = resolve_value(value_generator)
|
84
|
+
if items.nil?
|
85
|
+
return @xml.tag!(list_name)
|
86
|
+
end
|
72
87
|
|
73
|
-
|
74
|
-
resolved_list_attributes = resolve_attributes(list_attributes, items)
|
88
|
+
resolved_list_element_attributes = resolve_element_attributes(list_element_attributes, items)
|
75
89
|
|
76
|
-
@xml.tag!(list_name,
|
90
|
+
@xml.tag!(list_name, resolved_list_element_attributes.merge(:type => "array")) do
|
77
91
|
items.each do |item|
|
78
|
-
|
79
|
-
element!(item_name, item,
|
92
|
+
resolved_item_element_attributes = resolve_element_attributes(item_element_attributes, item)
|
93
|
+
element!(item_name, item, resolved_item_element_attributes, &block)
|
80
94
|
end
|
81
95
|
end
|
82
96
|
|
83
97
|
end
|
84
98
|
|
85
|
-
def empty!(
|
86
|
-
|
99
|
+
def empty!(attribute_name, *args)
|
100
|
+
attribute!(attribute_name, *args, &Representative::EMPTY)
|
87
101
|
end
|
88
102
|
|
89
103
|
private
|
90
104
|
|
91
|
-
def
|
105
|
+
def resolve_value(value_generator, subject = subject!)
|
92
106
|
if value_generator == :self
|
93
107
|
subject
|
94
108
|
elsif value_generator.respond_to?(:to_proc)
|
@@ -98,16 +112,16 @@ module Representative
|
|
98
112
|
end
|
99
113
|
end
|
100
114
|
|
101
|
-
def
|
102
|
-
if
|
103
|
-
|
104
|
-
resolved_value =
|
105
|
-
resolved[
|
115
|
+
def resolve_element_attributes(element_attributes, subject)
|
116
|
+
if element_attributes
|
117
|
+
element_attributes.inject({}) do |resolved, (name, value_generator)|
|
118
|
+
resolved_value = resolve_value(value_generator, subject)
|
119
|
+
resolved[name.to_s.dasherize] = resolved_value unless resolved_value.nil?
|
106
120
|
resolved
|
107
121
|
end
|
108
122
|
end
|
109
123
|
end
|
110
|
-
|
124
|
+
|
111
125
|
end
|
112
126
|
|
113
127
|
end
|
@@ -200,6 +200,15 @@ describe Representative::Xml do
|
|
200
200
|
end
|
201
201
|
end
|
202
202
|
|
203
|
+
describe "with an argument that resolves to nil" do
|
204
|
+
|
205
|
+
it "omits the attribute" do
|
206
|
+
represent.list_of!(:flags)
|
207
|
+
resulting_xml.should == %(<flags/>)
|
208
|
+
end
|
209
|
+
|
210
|
+
end
|
211
|
+
|
203
212
|
describe "with a block" do
|
204
213
|
|
205
214
|
it "generates a nested element for each list element" do
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: representative
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 3
|
9
|
+
version: 0.1.3
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Mike Williams
|
@@ -9,72 +14,71 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
17
|
+
date: 2010-06-24 00:00:00 +10:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: activesupport
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 2
|
29
|
+
- 2
|
30
|
+
- 2
|
23
31
|
version: 2.2.2
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
description:
|
26
35
|
email: mdub@dogbiscuit.org
|
27
36
|
executables: []
|
28
37
|
|
29
38
|
extensions: []
|
30
39
|
|
31
|
-
extra_rdoc_files:
|
32
|
-
|
33
|
-
- README.markdown
|
40
|
+
extra_rdoc_files: []
|
41
|
+
|
34
42
|
files:
|
35
|
-
- .document
|
36
|
-
- .gitignore
|
37
|
-
- LICENSE
|
38
|
-
- README.markdown
|
39
|
-
- Rakefile
|
40
|
-
- examples/xml_demo.rb
|
41
|
-
- init.rb
|
42
|
-
- lib/representative.rb
|
43
43
|
- lib/representative/empty.rb
|
44
|
+
- lib/representative/object_inspector.rb
|
44
45
|
- lib/representative/version.rb
|
45
46
|
- lib/representative/xml.rb
|
46
|
-
- representative.
|
47
|
-
-
|
48
|
-
-
|
47
|
+
- lib/representative.rb
|
48
|
+
- examples/xml_demo.rb
|
49
|
+
- README.markdown
|
50
|
+
- LICENSE
|
49
51
|
has_rdoc: true
|
50
52
|
homepage: http://github.com/mdub/representative
|
51
53
|
licenses: []
|
52
54
|
|
53
55
|
post_install_message:
|
54
|
-
rdoc_options:
|
55
|
-
|
56
|
+
rdoc_options: []
|
57
|
+
|
56
58
|
require_paths:
|
57
59
|
- lib
|
58
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
59
61
|
requirements:
|
60
62
|
- - ">="
|
61
63
|
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 0
|
62
66
|
version: "0"
|
63
|
-
version:
|
64
67
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
65
68
|
requirements:
|
66
69
|
- - ">="
|
67
70
|
- !ruby/object:Gem::Version
|
71
|
+
segments:
|
72
|
+
- 0
|
68
73
|
version: "0"
|
69
|
-
version:
|
70
74
|
requirements: []
|
71
75
|
|
72
76
|
rubyforge_project:
|
73
|
-
rubygems_version: 1.3.
|
77
|
+
rubygems_version: 1.3.6
|
74
78
|
signing_key:
|
75
79
|
specification_version: 3
|
76
80
|
summary: Builds XML representations of your Ruby objects
|
77
81
|
test_files:
|
78
82
|
- spec/representative/xml_spec.rb
|
79
83
|
- spec/spec_helper.rb
|
80
|
-
-
|
84
|
+
- Rakefile
|
data/.document
DELETED
data/.gitignore
DELETED
data/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require "representative"
|
data/representative.gemspec
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = %q{representative}
|
8
|
-
s.version = "0.1.2"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Mike Williams"]
|
12
|
-
s.date = %q{2009-12-03}
|
13
|
-
s.email = %q{mdub@dogbiscuit.org}
|
14
|
-
s.extra_rdoc_files = [
|
15
|
-
"LICENSE",
|
16
|
-
"README.markdown"
|
17
|
-
]
|
18
|
-
s.files = [
|
19
|
-
".document",
|
20
|
-
".gitignore",
|
21
|
-
"LICENSE",
|
22
|
-
"README.markdown",
|
23
|
-
"Rakefile",
|
24
|
-
"examples/xml_demo.rb",
|
25
|
-
"init.rb",
|
26
|
-
"lib/representative.rb",
|
27
|
-
"lib/representative/empty.rb",
|
28
|
-
"lib/representative/version.rb",
|
29
|
-
"lib/representative/xml.rb",
|
30
|
-
"representative.gemspec",
|
31
|
-
"spec/representative/xml_spec.rb",
|
32
|
-
"spec/spec_helper.rb"
|
33
|
-
]
|
34
|
-
s.homepage = %q{http://github.com/mdub/representative}
|
35
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
36
|
-
s.require_paths = ["lib"]
|
37
|
-
s.rubygems_version = %q{1.3.5}
|
38
|
-
s.summary = %q{Builds XML representations of your Ruby objects}
|
39
|
-
s.test_files = [
|
40
|
-
"spec/representative/xml_spec.rb",
|
41
|
-
"spec/spec_helper.rb",
|
42
|
-
"examples/xml_demo.rb"
|
43
|
-
]
|
44
|
-
|
45
|
-
if s.respond_to? :specification_version then
|
46
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
47
|
-
s.specification_version = 3
|
48
|
-
|
49
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
50
|
-
s.add_runtime_dependency(%q<activesupport>, [">= 2.2.2"])
|
51
|
-
else
|
52
|
-
s.add_dependency(%q<activesupport>, [">= 2.2.2"])
|
53
|
-
end
|
54
|
-
else
|
55
|
-
s.add_dependency(%q<activesupport>, [">= 2.2.2"])
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|