representable 3.0.2 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -6
- data/CHANGES.md +4 -0
- data/Gemfile +3 -1
- data/lib/representable.rb +2 -1
- data/lib/representable/config.rb +2 -2
- data/lib/representable/definition.rb +1 -2
- data/lib/representable/version.rb +1 -1
- data/lib/representable/yaml.rb +1 -0
- data/representable.gemspec +5 -3
- data/test/as_test.rb +1 -1
- data/test/cached_test.rb +38 -28
- data/test/definition_test.rb +3 -3
- data/test/json_test.rb +1 -0
- data/test/test_helper.rb +0 -2
- metadata +34 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7190988a0107b8fdf04b353f9e4ce2839edbc63
|
4
|
+
data.tar.gz: 4822a18cbbccd0b1953d24223dba3adcbfc7bd43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f58b1085876a04fc2ebeb076d94323b1ad45039cfb987693ebc9ddd957bdb367c02b5b64792e570981fe549eafae4c5390886613992187f5106b1d380c079ab
|
7
|
+
data.tar.gz: db17d2feb4dfe80e37c2a3934218ef6101478fa1c4ab167cd9876710de4a9a30c8798a8914f9f9ff95cdf6642c7fbe8b650ae8d46855f642e364c1badeb88bf4
|
data/.travis.yml
CHANGED
@@ -2,9 +2,13 @@ language: ruby
|
|
2
2
|
cache: bundler
|
3
3
|
sudo: false
|
4
4
|
rvm:
|
5
|
-
- 1.9.3
|
6
|
-
- 2.0.0
|
7
|
-
- 2.1.
|
8
|
-
- 2.
|
9
|
-
|
10
|
-
-
|
5
|
+
- 1.9.3-p551
|
6
|
+
- 2.0.0-p648
|
7
|
+
- 2.1.9
|
8
|
+
- 2.2.6
|
9
|
+
- 2.3.3
|
10
|
+
- 2.4.0
|
11
|
+
matrix:
|
12
|
+
include:
|
13
|
+
- rvm: jruby-9.1.5.0
|
14
|
+
env: JRUBY_OPTS="--profile.api"
|
data/CHANGES.md
CHANGED
data/Gemfile
CHANGED
@@ -3,10 +3,12 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :test do
|
6
|
-
gem
|
6
|
+
gem 'nokogiri', '~> 1.6.8', require: false
|
7
7
|
gem "multi_json", require: false
|
8
8
|
gem "minitest-line"
|
9
9
|
end
|
10
10
|
|
11
11
|
# gem "declarative", path: "../declarative"
|
12
12
|
# gem "declarative", github: "apotonick/declarative"
|
13
|
+
|
14
|
+
# gem "uber","0.0.15" #, path: "../uber"
|
data/lib/representable.rb
CHANGED
data/lib/representable/config.rb
CHANGED
@@ -20,14 +20,14 @@ module Representable
|
|
20
20
|
|
21
21
|
def wrap=(value)
|
22
22
|
value = value.to_s if value.is_a?(Symbol)
|
23
|
-
@wrap =
|
23
|
+
@wrap = ::Declarative::Option(value, instance_exec: true, callable: Uber::Callable)
|
24
24
|
end
|
25
25
|
|
26
26
|
# Computes the wrap string or returns false.
|
27
27
|
def wrap_for(represented, *args, &block)
|
28
28
|
return unless @wrap
|
29
29
|
|
30
|
-
value = @wrap.
|
30
|
+
value = @wrap.(represented, *args)
|
31
31
|
|
32
32
|
return value if value != true
|
33
33
|
infer_name_for(represented.class.name)
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require "uber/options"
|
2
1
|
require "representable/populator"
|
3
2
|
|
4
3
|
module Representable
|
@@ -102,7 +101,7 @@ module Representable
|
|
102
101
|
@runtime_options = {}
|
103
102
|
|
104
103
|
for name, value in options
|
105
|
-
value =
|
104
|
+
value = ::Declarative::Option(value, instance_exec: true, callable: Uber::Callable) if dynamic_options.include?(name)
|
106
105
|
@runtime_options[name] = value
|
107
106
|
end
|
108
107
|
end
|
data/lib/representable/yaml.rb
CHANGED
data/representable.gemspec
CHANGED
@@ -21,12 +21,14 @@ Gem::Specification.new do |spec|
|
|
21
21
|
|
22
22
|
spec.required_ruby_version = '>= 1.9.3'
|
23
23
|
|
24
|
-
spec.add_dependency "uber",
|
25
|
-
spec.add_dependency "declarative",
|
24
|
+
spec.add_dependency "uber", "< 0.2.0"
|
25
|
+
spec.add_dependency "declarative", "< 0.1.0"
|
26
|
+
spec.add_dependency "declarative-option", "< 0.2.0"
|
26
27
|
|
27
28
|
spec.add_development_dependency "rake"
|
28
29
|
spec.add_development_dependency "test_xml", "0.1.6"
|
29
30
|
spec.add_development_dependency "minitest"
|
30
31
|
spec.add_development_dependency "virtus"
|
31
|
-
spec.add_development_dependency "
|
32
|
+
spec.add_development_dependency "multi_json"
|
33
|
+
spec.add_development_dependency "ruby-prof" if RUBY_ENGINE == "ruby" # mri
|
32
34
|
end
|
data/test/as_test.rb
CHANGED
data/test/cached_test.rb
CHANGED
@@ -1,5 +1,28 @@
|
|
1
1
|
require "test_helper"
|
2
|
-
|
2
|
+
|
3
|
+
class Profiler
|
4
|
+
def self.profile(&block)
|
5
|
+
case RUBY_ENGINE
|
6
|
+
when "ruby"
|
7
|
+
require 'ruby-prof'
|
8
|
+
|
9
|
+
output = StringIO.new
|
10
|
+
profile_result = RubyProf.profile(&block)
|
11
|
+
printer = RubyProf::FlatPrinter.new(profile_result)
|
12
|
+
printer.print(output)
|
13
|
+
output.string
|
14
|
+
when "jruby"
|
15
|
+
require 'jruby/profiler'
|
16
|
+
|
17
|
+
output_stream = java.io.ByteArrayOutputStream.new
|
18
|
+
print_stream = java.io.PrintStream.new(output_stream)
|
19
|
+
profile_result = JRuby::Profiler.profile(&block)
|
20
|
+
printer = JRuby::Profiler::FlatProfilePrinter.new(profile_result)
|
21
|
+
printer.printProfile(print_stream)
|
22
|
+
output_stream.toString
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
3
26
|
|
4
27
|
class CachedTest < MiniTest::Spec
|
5
28
|
# TODO: also test with feature(Cached)
|
@@ -55,28 +78,23 @@ class CachedTest < MiniTest::Spec
|
|
55
78
|
it do
|
56
79
|
representer.to_hash
|
57
80
|
|
58
|
-
|
59
|
-
representer.to_hash
|
60
|
-
res = RubyProf.stop
|
61
|
-
|
62
|
-
printer = RubyProf::FlatPrinter.new(res)
|
63
|
-
|
64
|
-
data = StringIO.new
|
65
|
-
printer.print(data)
|
66
|
-
data = data.string
|
67
|
-
|
68
|
-
printer.print(STDOUT)
|
81
|
+
data = Profiler.profile { representer.to_hash }
|
69
82
|
|
70
83
|
# 3 songs get decorated.
|
71
|
-
data.must_match
|
84
|
+
data.must_match /3\s*Representable::Function::Decorate#call/m
|
85
|
+
# These weird Regexp bellow are a quick workaround to accomodate
|
86
|
+
# the different profiler result formats.
|
87
|
+
# - "3 <Class::Representable::Decorator>#prepare" -> At MRI Ruby
|
88
|
+
# - "3 Representable::Decorator.prepare" -> At JRuby
|
89
|
+
|
72
90
|
# 3 nested decorator is instantiated for 3 Songs, though.
|
73
|
-
data.must_match
|
91
|
+
data.must_match /3\s*(<Class::)?Representable::Decorator\>?[\#.]prepare/m
|
74
92
|
# no Binding is instantiated at runtime.
|
75
93
|
data.wont_match "Representable::Binding#initialize"
|
76
94
|
# 2 mappers for Album, Song
|
77
95
|
# data.must_match "2 Representable::Mapper::Methods#initialize"
|
78
96
|
# title, songs, 3x title, composer
|
79
|
-
data.must_match
|
97
|
+
data.must_match /8\s*Representable::Binding[#\.]render_pipeline/m
|
80
98
|
data.wont_match "render_functions"
|
81
99
|
data.wont_match "Representable::Binding::Factories#render_functions"
|
82
100
|
end
|
@@ -116,25 +134,17 @@ class CachedTest < MiniTest::Spec
|
|
116
134
|
representer = AlbumRepresenter.new(Model::Album.new)
|
117
135
|
representer.from_hash(album_hash)
|
118
136
|
|
119
|
-
|
120
|
-
# puts "#{representer.class.representable_attrs.get(:songs).representer_module.representable_attrs.inspect}"
|
121
|
-
representer.from_hash(album_hash)
|
122
|
-
res = RubyProf.stop
|
123
|
-
|
124
|
-
printer = RubyProf::FlatPrinter.new(res)
|
125
|
-
|
126
|
-
data = StringIO.new
|
127
|
-
printer.print(data)
|
128
|
-
data = data.string
|
137
|
+
data = Profiler.profile { representer.from_hash(album_hash) }
|
129
138
|
|
130
139
|
# only 2 nested decorators are instantiated, Song, and Artist.
|
131
|
-
|
140
|
+
# Didn't like the regexp?
|
141
|
+
# MRI and JRuby has different output formats. See note above.
|
142
|
+
data.must_match /5\s*(<Class::)?Representable::Decorator>?[#\.]prepare/
|
132
143
|
# a total of 5 properties in the object graph.
|
133
144
|
data.wont_match "Representable::Binding#initialize"
|
134
145
|
|
135
|
-
|
136
146
|
data.wont_match "parse_functions" # no pipeline creation.
|
137
|
-
data.must_match
|
147
|
+
data.must_match /10\s*Representable::Binding[#\.]parse_pipeline/
|
138
148
|
# three mappers for Album, Song, composer
|
139
149
|
# data.must_match "3 Representable::Mapper::Methods#initialize"
|
140
150
|
# # 6 deserializers as the songs collection uses 2.
|
data/test/definition_test.rb
CHANGED
@@ -87,7 +87,7 @@ class DefinitionTest < MiniTest::Spec
|
|
87
87
|
describe "#delete!" do
|
88
88
|
let (:definition) { Definition.new(:song, serialize: "remove me!") }
|
89
89
|
|
90
|
-
before { definition[:serialize].
|
90
|
+
before { definition[:serialize].(nil).must_equal "remove me!" }
|
91
91
|
|
92
92
|
it { definition.delete!(:serialize)[:serialize].must_equal nil }
|
93
93
|
end
|
@@ -158,10 +158,10 @@ class DefinitionTest < MiniTest::Spec
|
|
158
158
|
|
159
159
|
|
160
160
|
describe "#clone" do
|
161
|
-
subject { Representable::Definition.new(:title, :volume => 9, :clonable =>
|
161
|
+
subject { Representable::Definition.new(:title, :volume => 9, :clonable => Declarative::Option(1)) }
|
162
162
|
|
163
163
|
it { subject.clone.must_be_kind_of Representable::Definition }
|
164
|
-
it { subject.clone[:clonable].
|
164
|
+
it { subject.clone[:clonable].(nil).must_equal 1 }
|
165
165
|
|
166
166
|
it "clones @options" do
|
167
167
|
@def.merge!(:volume => 9)
|
data/test/json_test.rb
CHANGED
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,22 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: representable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.
|
4
|
+
version: 3.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uber
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 0.0.15
|
20
17
|
- - "<"
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: 0.2.0
|
@@ -24,9 +21,6 @@ dependencies:
|
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.0.15
|
30
24
|
- - "<"
|
31
25
|
- !ruby/object:Gem::Version
|
32
26
|
version: 0.2.0
|
@@ -34,16 +28,30 @@ dependencies:
|
|
34
28
|
name: declarative
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.1.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "<"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.1.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: declarative-option
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "<"
|
38
46
|
- !ruby/object:Gem::Version
|
39
|
-
version: 0.0
|
47
|
+
version: 0.2.0
|
40
48
|
type: :runtime
|
41
49
|
prerelease: false
|
42
50
|
version_requirements: !ruby/object:Gem::Requirement
|
43
51
|
requirements:
|
44
|
-
- - "
|
52
|
+
- - "<"
|
45
53
|
- !ruby/object:Gem::Version
|
46
|
-
version: 0.0
|
54
|
+
version: 0.2.0
|
47
55
|
- !ruby/object:Gem::Dependency
|
48
56
|
name: rake
|
49
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,6 +108,20 @@ dependencies:
|
|
100
108
|
- - ">="
|
101
109
|
- !ruby/object:Gem::Version
|
102
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: multi_json
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
103
125
|
- !ruby/object:Gem::Dependency
|
104
126
|
name: ruby-prof
|
105
127
|
requirement: !ruby/object:Gem::Requirement
|