faceted 1.0.4 → 1.0.5
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.md +2 -1
- data/VERSION +1 -1
- data/faceted.gemspec +2 -2
- data/lib/faceted/has_object.rb +7 -4
- data/lib/faceted/model.rb +2 -1
- data/spec/presenter_spec.rb +19 -6
- metadata +3 -3
data/README.md
CHANGED
@@ -18,10 +18,11 @@ Let's say that you have an ActiveRecord model called Musician, and you want to e
|
|
18
18
|
presents :musician
|
19
19
|
field :name
|
20
20
|
field :genre
|
21
|
+
field :instrument, :default => 'guitar'
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
|
-
That's actually all you have to do. The `presents` method maps your Musician presenter to a root-level class called `Musician`, and the `field` methods map to attributes *or* methods on the associated AR Musician instance.
|
25
|
+
That's actually all you have to do. The `presents` method maps your Musician presenter to a root-level class called `Musician`, and the `field` methods map to attributes *or* methods on the associated AR Musician instance. If a default is set for a field, that default value will be stored when the presenter is used to create a record, unless overridden.
|
25
26
|
|
26
27
|
What's that, you say? How is the appropriate AR Musican record associated? Simple. Invoke an instance of the `MyApi::Musician` passing in an `:id` parameter, and it just works:
|
27
28
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.5
|
data/faceted.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "faceted"
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Corey Ehmke", "Max Thom Stahl"]
|
12
|
-
s.date = "2012-
|
12
|
+
s.date = "2012-11-16"
|
13
13
|
s.description = "Faceted provides set of tools, patterns, and modules for use in API implementations."
|
14
14
|
s.email = "corey@trunkclub.com"
|
15
15
|
s.extra_rdoc_files = [
|
data/lib/faceted/has_object.rb
CHANGED
@@ -22,14 +22,17 @@ module Faceted
|
|
22
22
|
# Instance methods =======================================================
|
23
23
|
|
24
24
|
def initialize(args={})
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
unless args.empty?
|
26
|
+
self.id = args[:id]
|
27
|
+
initialize_with_object
|
28
|
+
args.symbolize_keys.delete_if{|k,v| v.nil?}.each{|k,v| self.send("#{k}=", v) if self.respond_to?("#{k}=") && ! v.nil? }
|
29
|
+
end
|
28
30
|
self.errors = []
|
29
31
|
self.success = true
|
30
32
|
end
|
31
33
|
|
32
34
|
def reinitialize_with_object(obj)
|
35
|
+
obj.reload
|
33
36
|
schema_fields.each{ |k| self.send("#{k}=", obj.send(k)) if obj.respond_to?(k) && self.send(:settable_field?, k) }
|
34
37
|
end
|
35
38
|
|
@@ -54,7 +57,7 @@ module Faceted
|
|
54
57
|
|
55
58
|
def initialize_with_object
|
56
59
|
return unless object
|
57
|
-
schema_fields.each{
|
60
|
+
schema_fields.each{|k| self.send("#{k}=", object.send(k)) if object.respond_to?(k) && self.respond_to?("#{k}=") }
|
58
61
|
end
|
59
62
|
|
60
63
|
def object
|
data/lib/faceted/model.rb
CHANGED
@@ -29,7 +29,8 @@ module Faceted
|
|
29
29
|
def field(name, args={})
|
30
30
|
fields << name
|
31
31
|
define_method :"#{name}" do
|
32
|
-
instance_variable_get("@#{name}")
|
32
|
+
val = instance_variable_get("@#{name}")
|
33
|
+
val.nil? ? args[:default] : val
|
33
34
|
end
|
34
35
|
unless args[:read_only]
|
35
36
|
define_method :"#{name}=" do |val|
|
data/spec/presenter_spec.rb
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class Musician # pretend that this is an AR model
|
4
|
-
attr_accessor :id, :name, :rating, :errors, :birthplace_id
|
4
|
+
attr_accessor :id, :name, :rating, :errors, :birthplace_id, :alive
|
5
5
|
def initialize(params={}); params.each{|k,v| self.send("#{k}=",v) if self.respond_to?(k)}; end
|
6
|
-
def attributes; {:id => self.id, :name => self.name, :rating => self.rating}; end
|
6
|
+
def attributes; {:id => self.id, :name => self.name, :rating => self.rating, :alive => self.alive}; end
|
7
|
+
def reload; self; end
|
7
8
|
end
|
8
9
|
|
9
10
|
class Birthplace # another make-believe AR model
|
10
11
|
attr_accessor :id, :city, :state
|
11
12
|
def initialize(params={}); params.each{|k,v| self.send("#{k}=",v) if self.respond_to?(k)}; end
|
12
13
|
def attributes; {:id => self.id, :city => self.city, :state => self.state}; end
|
14
|
+
def reload; self; end
|
13
15
|
end
|
14
16
|
|
15
17
|
module MyApi
|
@@ -27,13 +29,14 @@ module MyApi
|
|
27
29
|
field :name
|
28
30
|
field :rating
|
29
31
|
field :birthplace_id
|
32
|
+
field :alive
|
30
33
|
end
|
31
34
|
|
32
35
|
describe Musician do
|
33
36
|
|
34
37
|
before do
|
35
38
|
|
36
|
-
@ar_musician = ::Musician.new(:id => 1, :name => 'Johnny Cash', :rating => 'Good')
|
39
|
+
@ar_musician = ::Musician.new(:id => 1, :name => 'Johnny Cash', :rating => 'Good', :alive => false)
|
37
40
|
::Musician.stub(:find) { @ar_musician }
|
38
41
|
|
39
42
|
@ar_birthplace = ::Birthplace.new(:id => 1, :city => 'Kingsland', :state => 'Arkansas')
|
@@ -43,9 +46,19 @@ module MyApi
|
|
43
46
|
|
44
47
|
describe 'initialized with a presented object' do
|
45
48
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
+
describe 'inherits values from its AR counterpart' do
|
50
|
+
|
51
|
+
it 'normal values' do
|
52
|
+
musician = MyApi::Musician.new(:id => 1)
|
53
|
+
musician.name.should == 'Johnny Cash'
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'boolean values' do
|
57
|
+
musician = MyApi::Musician.new(:id => 1)
|
58
|
+
musician.alive.should be_false
|
59
|
+
musician.alive.should_not be_nil
|
60
|
+
end
|
61
|
+
|
49
62
|
end
|
50
63
|
|
51
64
|
it 'overwrites values from its AR counterpart' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: faceted
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-11-16 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activesupport
|
@@ -181,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
181
181
|
version: '0'
|
182
182
|
segments:
|
183
183
|
- 0
|
184
|
-
hash:
|
184
|
+
hash: -3357536951405815517
|
185
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
186
186
|
none: false
|
187
187
|
requirements:
|