charisma 0.3.3 → 0.3.4
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.markdown +4 -0
- data/Rakefile +5 -7
- data/charisma.gemspec +1 -1
- data/lib/charisma/curator.rb +8 -8
- data/lib/charisma/curator/curation.rb +14 -3
- data/lib/charisma/measurement.rb +10 -0
- data/lib/charisma/version.rb +1 -1
- data/test/support/planet.rb +4 -0
- data/test/test_charisma.rb +9 -1
- metadata +21 -23
data/README.markdown
CHANGED
@@ -147,6 +147,10 @@ irb(main):001:0> Foo.new(:size => 10).characteristics[:size].feet
|
|
147
147
|
=> 32.808399000000003
|
148
148
|
```
|
149
149
|
|
150
|
+
## JSON
|
151
|
+
|
152
|
+
Charisma now provides `#as_json` for characteristics---convert to actual JSON with your favorite JSON library's `#to_json`.
|
153
|
+
|
150
154
|
## Copyright
|
151
155
|
|
152
156
|
Copyright (c) 2011 Andy Rossmeissl. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -18,6 +18,11 @@ require 'rake'
|
|
18
18
|
require 'bueller'
|
19
19
|
Bueller::Tasks.new
|
20
20
|
|
21
|
+
task :start_coverage do
|
22
|
+
SimpleCov.start
|
23
|
+
end
|
24
|
+
task :coverage => [:start_coverage, :test]
|
25
|
+
|
21
26
|
require 'rake/testtask'
|
22
27
|
Rake::TestTask.new(:test) do |test|
|
23
28
|
test.libs << 'lib' << 'test'
|
@@ -25,13 +30,6 @@ Rake::TestTask.new(:test) do |test|
|
|
25
30
|
test.verbose = true
|
26
31
|
end
|
27
32
|
|
28
|
-
require 'rcov/rcovtask'
|
29
|
-
Rcov::RcovTask.new do |test|
|
30
|
-
test.libs << 'test'
|
31
|
-
test.pattern = 'test/**/test_*.rb'
|
32
|
-
test.verbose = true
|
33
|
-
end
|
34
|
-
|
35
33
|
task :default => :test
|
36
34
|
|
37
35
|
require 'rake/rdoctask'
|
data/charisma.gemspec
CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_development_dependency 'bundler'
|
33
33
|
s.add_development_dependency 'bueller'
|
34
34
|
s.add_development_dependency 'rake'
|
35
|
-
s.add_development_dependency '
|
35
|
+
s.add_development_dependency 'simplecov'
|
36
36
|
s.add_development_dependency 'supermodel'
|
37
37
|
end
|
38
38
|
|
data/lib/charisma/curator.rb
CHANGED
@@ -23,17 +23,17 @@ module Charisma
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
|
-
# The
|
26
|
+
# The special hash wrapped by the curator that actually stores the computed characteristics.
|
27
27
|
def characteristics
|
28
|
-
return @characteristics
|
28
|
+
return @characteristics if @characteristics
|
29
29
|
|
30
|
-
|
30
|
+
hsh = Hash.new do |_, key|
|
31
31
|
if characterization = subject.class.characterization[key]
|
32
32
|
Curation.new nil, characterization
|
33
33
|
end
|
34
34
|
end
|
35
|
-
|
36
|
-
@characteristics
|
35
|
+
hsh.extend LooseEquality
|
36
|
+
@characteristics = hsh
|
37
37
|
end
|
38
38
|
|
39
39
|
# Store a late-defined characteristic, with a Charisma wrapper.
|
@@ -51,13 +51,13 @@ module Charisma
|
|
51
51
|
# (see #inpsect)
|
52
52
|
def to_s; inspect end
|
53
53
|
|
54
|
-
# Provide a hash of
|
54
|
+
# Provide a hash of the plain values (dropping presentation information).
|
55
55
|
#
|
56
|
-
#
|
56
|
+
# Previous versions of leap returned a hash of display-friendly representations; this was rather surprising and not especially useful.
|
57
57
|
# @return [Hash]
|
58
58
|
def to_hash
|
59
59
|
characteristics.inject({}) do |memo, (k, v)|
|
60
|
-
memo[k] = v.
|
60
|
+
memo[k] = v.value
|
61
61
|
memo
|
62
62
|
end
|
63
63
|
end
|
@@ -26,7 +26,7 @@ module Charisma
|
|
26
26
|
self.value = value
|
27
27
|
end
|
28
28
|
|
29
|
-
def_delegators :
|
29
|
+
def_delegators :render_string, :to_s
|
30
30
|
|
31
31
|
def ==(other)
|
32
32
|
a = self.value
|
@@ -57,18 +57,29 @@ module Charisma
|
|
57
57
|
characteristic.try(:measurement_class).try(:unit_abbreviation)
|
58
58
|
end
|
59
59
|
|
60
|
+
# Render a JSON-like object for later conversion to JSON
|
61
|
+
def as_json(*)
|
62
|
+
if characteristic.measurement
|
63
|
+
characteristic.measurement_class.new(value).as_json
|
64
|
+
elsif value.respond_to? :as_json
|
65
|
+
value.as_json
|
66
|
+
else
|
67
|
+
value
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
60
71
|
private
|
61
72
|
|
62
73
|
# If this curation deals with a measured characteristic, this method will delegate appropriate unit-name methods like <tt>#kilograms</tt> to <tt>#render</tt>.
|
63
74
|
def establish_units_methods
|
64
75
|
if characteristic and characteristic.measurement and conversions = Conversions.conversions[units.to_sym]
|
65
|
-
self.class.def_delegators :
|
76
|
+
self.class.def_delegators :render_string, *conversions.keys
|
66
77
|
end
|
67
78
|
end
|
68
79
|
|
69
80
|
# Provide a display-friendly presentation of the computed characteristic's value.
|
70
81
|
# @return [String]
|
71
|
-
def
|
82
|
+
def render_string
|
72
83
|
return value unless characteristic
|
73
84
|
if characteristic.proc
|
74
85
|
render_proc
|
data/lib/charisma/measurement.rb
CHANGED
@@ -52,6 +52,16 @@ module Charisma
|
|
52
52
|
super
|
53
53
|
end
|
54
54
|
end
|
55
|
+
|
56
|
+
# Provide a hash form
|
57
|
+
def to_hash
|
58
|
+
{ :value => value, :units => units.to_s }
|
59
|
+
end
|
60
|
+
|
61
|
+
# Provide a hash for later conversion to JSON
|
62
|
+
def as_json
|
63
|
+
to_hash
|
64
|
+
end
|
55
65
|
|
56
66
|
class << self
|
57
67
|
# Define the units used with this measurement.
|
data/lib/charisma/version.rb
CHANGED
data/test/support/planet.rb
CHANGED
data/test/test_charisma.rb
CHANGED
@@ -127,7 +127,7 @@ class TestCharisma < Test::Unit::TestCase
|
|
127
127
|
|
128
128
|
def test_020_to_hash
|
129
129
|
spaceship = Spaceship.new :name => 'Amaroq', :window_count => 2, :size => 10
|
130
|
-
assert_equal({:name => 'Amaroq', :window_count =>
|
130
|
+
assert_equal({:name => 'Amaroq', :window_count => 2, :size => 10}, spaceship.characteristics.to_hash)
|
131
131
|
end
|
132
132
|
|
133
133
|
def test_021_dup
|
@@ -144,4 +144,12 @@ class TestCharisma < Test::Unit::TestCase
|
|
144
144
|
assert_equal nil, spaceship.characteristics[:name].units
|
145
145
|
assert_equal :hollagrams, spaceship.characteristics[:weight].units
|
146
146
|
end
|
147
|
+
|
148
|
+
def test_023_json
|
149
|
+
planet = Planet.create :name => 'Pluto'
|
150
|
+
spaceship = Spaceship.new :weight => 100, :window_count => 3, :destination => planet
|
151
|
+
assert_equal({:value => 100, :units => 'hollagrams'}, spaceship.characteristics[:weight].as_json)
|
152
|
+
assert_equal 3, spaceship.characteristics[:window_count].as_json
|
153
|
+
assert_equal({:name => 'Pluto'}, spaceship.characteristics[:destination].as_json)
|
154
|
+
end
|
147
155
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: charisma
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,11 +10,11 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2011-09-29 00:00:00.
|
13
|
+
date: 2011-09-29 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
17
|
-
requirement: &
|
17
|
+
requirement: &2164435900 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
@@ -22,10 +22,10 @@ dependencies:
|
|
22
22
|
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *2164435900
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: blockenspiel
|
28
|
-
requirement: &
|
28
|
+
requirement: &2164435100 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,10 +33,10 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *2164435100
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: conversions
|
39
|
-
requirement: &
|
39
|
+
requirement: &2164434200 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
@@ -44,10 +44,10 @@ dependencies:
|
|
44
44
|
version: '0'
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
|
-
version_requirements: *
|
47
|
+
version_requirements: *2164434200
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: bundler
|
50
|
-
requirement: &
|
50
|
+
requirement: &2164432560 !ruby/object:Gem::Requirement
|
51
51
|
none: false
|
52
52
|
requirements:
|
53
53
|
- - ! '>='
|
@@ -55,10 +55,10 @@ dependencies:
|
|
55
55
|
version: '0'
|
56
56
|
type: :development
|
57
57
|
prerelease: false
|
58
|
-
version_requirements: *
|
58
|
+
version_requirements: *2164432560
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: bueller
|
61
|
-
requirement: &
|
61
|
+
requirement: &2164385780 !ruby/object:Gem::Requirement
|
62
62
|
none: false
|
63
63
|
requirements:
|
64
64
|
- - ! '>='
|
@@ -66,10 +66,10 @@ dependencies:
|
|
66
66
|
version: '0'
|
67
67
|
type: :development
|
68
68
|
prerelease: false
|
69
|
-
version_requirements: *
|
69
|
+
version_requirements: *2164385780
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
|
-
requirement: &
|
72
|
+
requirement: &2164382980 !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
74
74
|
requirements:
|
75
75
|
- - ! '>='
|
@@ -77,10 +77,10 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
type: :development
|
79
79
|
prerelease: false
|
80
|
-
version_requirements: *
|
80
|
+
version_requirements: *2164382980
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
|
-
name:
|
83
|
-
requirement: &
|
82
|
+
name: simplecov
|
83
|
+
requirement: &2164381740 !ruby/object:Gem::Requirement
|
84
84
|
none: false
|
85
85
|
requirements:
|
86
86
|
- - ! '>='
|
@@ -88,10 +88,10 @@ dependencies:
|
|
88
88
|
version: '0'
|
89
89
|
type: :development
|
90
90
|
prerelease: false
|
91
|
-
version_requirements: *
|
91
|
+
version_requirements: *2164381740
|
92
92
|
- !ruby/object:Gem::Dependency
|
93
93
|
name: supermodel
|
94
|
-
requirement: &
|
94
|
+
requirement: &2164379660 !ruby/object:Gem::Requirement
|
95
95
|
none: false
|
96
96
|
requirements:
|
97
97
|
- - ! '>='
|
@@ -99,7 +99,7 @@ dependencies:
|
|
99
99
|
version: '0'
|
100
100
|
type: :development
|
101
101
|
prerelease: false
|
102
|
-
version_requirements: *
|
102
|
+
version_requirements: *2164379660
|
103
103
|
description: Define strategies for accessing and displaying a subset of your classes'
|
104
104
|
attributes
|
105
105
|
email: andy@rossmeissl.net
|
@@ -151,9 +151,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
151
151
|
- - ! '>='
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0'
|
154
|
-
segments:
|
155
|
-
- 0
|
156
|
-
hash: -4326195820228354583
|
157
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
155
|
none: false
|
159
156
|
requirements:
|
@@ -162,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
159
|
version: 1.3.7
|
163
160
|
requirements: []
|
164
161
|
rubyforge_project:
|
165
|
-
rubygems_version: 1.8.
|
162
|
+
rubygems_version: 1.8.15
|
166
163
|
signing_key:
|
167
164
|
specification_version: 3
|
168
165
|
summary: Curate your rich Ruby objects' attributes
|
@@ -176,3 +173,4 @@ test_files:
|
|
176
173
|
- test/support/spaceship_fuel.rb
|
177
174
|
- test/support/spaceship_make.rb
|
178
175
|
- test/test_charisma.rb
|
176
|
+
has_rdoc:
|