rest_model 0.2.1 → 0.2.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/.travis.yml +5 -0
- data/README.md +1 -1
- data/Rakefile +1 -1
- data/examples/embeds_many/simple.rb +2 -0
- data/lib/rest_model/configuration.rb +4 -4
- data/lib/rest_model/errors.rb +1 -1
- data/lib/rest_model/key/embeddable.rb +1 -1
- data/lib/rest_model/key/href/response.rb +1 -1
- data/lib/rest_model/key/property/retriever.rb +1 -1
- data/lib/rest_model/key/property/sender.rb +1 -1
- data/lib/rest_model/key/relation/response.rb +1 -1
- data/lib/rest_model/key/relation.rb +4 -0
- data/lib/rest_model/key.rb +4 -0
- data/lib/rest_model/response.rb +3 -4
- data/lib/rest_model/serialization/boolean.rb +2 -2
- data/lib/rest_model/serialization/date.rb +3 -3
- data/lib/rest_model/serialization/date_time.rb +3 -3
- data/lib/rest_model/serialization/enumerable.rb +2 -2
- data/lib/rest_model/serialization/float.rb +2 -2
- data/lib/rest_model/serialization/integer.rb +6 -4
- data/lib/rest_model/serialization/string.rb +2 -2
- data/lib/rest_model/serialization/symbol.rb +2 -2
- data/lib/rest_model/version.rb +1 -1
- data/lib/rest_model.rb +2 -1
- data/rest_model.gemspec +4 -6
- data/spec/spec_helper.rb +0 -1
- data/spec/support/examples.rb +14 -20
- data/spec/unit/configuration_spec.rb +4 -6
- data/spec/unit/key/association_spec.rb +18 -42
- data/spec/unit/key/embeddable/response_spec.rb +1 -1
- data/spec/unit/key/embeddable_spec.rb +23 -0
- data/spec/unit/key/property/response_spec.rb +6 -6
- data/spec/unit/key/property/retriever_spec.rb +2 -2
- data/spec/unit/key/relation/response_spec.rb +97 -1
- data/spec/unit/key/relation_spec.rb +13 -52
- data/spec/unit/key_spec.rb +13 -9
- data/spec/unit/response_spec.rb +43 -5
- data/spec/unit/serialization/date_spec.rb +4 -0
- data/spec/unit/serialization/date_time_spec.rb +4 -0
- data/spec/unit/serialization/integer_spec.rb +8 -0
- data/spec/unit/source/path_spec.rb +3 -3
- data/spec/unit/source/retriever_spec.rb +9 -9
- metadata +31 -71
- data/Guardfile +0 -7
data/.travis.yml
ADDED
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
require
|
1
|
+
require "bundler"
|
2
2
|
Bundler::GemHelper.install_tasks
|
@@ -6,6 +6,10 @@ class RestModel
|
|
6
6
|
|
7
7
|
DefaultHandler = proc {|keys| keys}
|
8
8
|
|
9
|
+
def configure
|
10
|
+
yield self if block_given?
|
11
|
+
end
|
12
|
+
|
9
13
|
def convert_input_keys
|
10
14
|
@convert_input_keys || DefaultHandler
|
11
15
|
end
|
@@ -45,9 +49,5 @@ class RestModel
|
|
45
49
|
def date_time_format=(format)
|
46
50
|
@date_time_format = format
|
47
51
|
end
|
48
|
-
|
49
|
-
def configure
|
50
|
-
yield self if block_given?
|
51
|
-
end
|
52
52
|
end
|
53
53
|
end
|
data/lib/rest_model/errors.rb
CHANGED
@@ -3,7 +3,7 @@ class RestModel
|
|
3
3
|
module Response
|
4
4
|
def to_resource(parent)
|
5
5
|
id_key = parent.class.id_key.name
|
6
|
-
{name => "#{RestModel::Configuration.host}/#{parent.class.resource_name}/#{parent.send(id_key)}"}
|
6
|
+
{name => URI.escape("#{RestModel::Configuration.host}/#{parent.class.resource_name}/#{parent.send(id_key)}")}
|
7
7
|
end
|
8
8
|
end
|
9
9
|
end
|
@@ -4,7 +4,7 @@ class RestModel
|
|
4
4
|
def from_source(item, resource = nil)
|
5
5
|
value = digg(item)
|
6
6
|
translation.translates_from_source? ? translation.translate_from_source(value, resource)
|
7
|
-
: serializer.serialize(value)
|
7
|
+
: serializer.serialize(value, self.options)
|
8
8
|
end
|
9
9
|
|
10
10
|
def digg(input)
|
@@ -4,7 +4,7 @@ class RestModel
|
|
4
4
|
def to_source!(value, resource, options = {})
|
5
5
|
source_value = begin
|
6
6
|
translation.translates_to_source? ? translation.translate_to_source(value, resource)
|
7
|
-
: serializer.desserialize(value)
|
7
|
+
: serializer.desserialize(value, self.options)
|
8
8
|
|
9
9
|
rescue TranslationError, SerializationError => error
|
10
10
|
raise error if options[:fail] and validates?(value)
|
data/lib/rest_model/key.rb
CHANGED
data/lib/rest_model/response.rb
CHANGED
@@ -10,15 +10,14 @@ class RestModel
|
|
10
10
|
buffer.merge!(key.to_resource(self))
|
11
11
|
end
|
12
12
|
|
13
|
-
if
|
14
|
-
links
|
15
|
-
resource.merge!({link: links}) if links.any?
|
13
|
+
if (links = build_links).any? && !options[:summarize]
|
14
|
+
resource.merge!(link: links)
|
16
15
|
end
|
17
16
|
end
|
18
17
|
end
|
19
18
|
|
20
19
|
def build_links
|
21
|
-
self.class.relations.map {|key| key.to_relation(self)}.
|
20
|
+
self.class.relations.map {|key| key.to_relation(self)}.compact
|
22
21
|
end
|
23
22
|
|
24
23
|
def resource_keys(options)
|
@@ -25,13 +25,13 @@ class RestModel
|
|
25
25
|
nil => false
|
26
26
|
}.freeze
|
27
27
|
|
28
|
-
def self.serialize(value)
|
28
|
+
def self.serialize(value, options = {})
|
29
29
|
MAPPINGS[value].tap do |bool|
|
30
30
|
fail SerializationError, "value '#{value}' is not boolean" if bool.nil?
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
def self.desserialize(value)
|
34
|
+
def self.desserialize(value, options = {})
|
35
35
|
fail SerializationError, "value '#{value}' is not boolean" unless boolean?(value)
|
36
36
|
|
37
37
|
value ? RestModel::Configuration.true_value
|
@@ -1,15 +1,15 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class Date
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
::Date.parse value
|
6
6
|
rescue
|
7
7
|
raise SerializationError, "value '#{value}' is an invalid date"
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.desserialize(value)
|
10
|
+
def self.desserialize(value, options = {})
|
11
11
|
date = value.kind_of?(::Date) ? value : ::Date.parse(value)
|
12
|
-
format = RestModel::Configuration.date_format
|
12
|
+
format = options.fetch(:format, RestModel::Configuration.date_format)
|
13
13
|
format ? date.strftime(format) : date.to_s
|
14
14
|
rescue
|
15
15
|
raise SerializationError, "value '#{value}' is an invalid date"
|
@@ -1,15 +1,15 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class DateTime
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
::DateTime.parse value
|
6
6
|
rescue
|
7
7
|
raise SerializationError, "value '#{value}' is an invalid date time"
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.desserialize(value)
|
10
|
+
def self.desserialize(value, options = {})
|
11
11
|
date_time = value.kind_of?(::DateTime) ? value : ::DateTime.parse(value)
|
12
|
-
format = RestModel::Configuration.date_time_format
|
12
|
+
format = options.fetch(:format, RestModel::Configuration.date_time_format)
|
13
13
|
format ? date_time.strftime(format) : date_time.to_s
|
14
14
|
rescue
|
15
15
|
raise SerializationError, "value '#{value}' is an invalid date time"
|
@@ -1,13 +1,13 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class Enumerable
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
fail SerializationError, "value '#{value}' is not an enumerable" unless value.kind_of?(::Enumerable)
|
6
6
|
|
7
7
|
value
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.desserialize(value)
|
10
|
+
def self.desserialize(value, options = {})
|
11
11
|
fail SerializationError, "value '#{value}' is not an enumerable" unless value.kind_of?(::Enumerable)
|
12
12
|
|
13
13
|
value
|
@@ -1,13 +1,13 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class Float
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
Float(value)
|
6
6
|
rescue
|
7
7
|
raise SerializationError, "value '#{value}' is not a float"
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.desserialize(value)
|
10
|
+
def self.desserialize(value, options = {})
|
11
11
|
Float(value)
|
12
12
|
rescue
|
13
13
|
raise SerializationError, "value '#{value}' is not a float"
|
@@ -1,10 +1,10 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class Integer
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
case value
|
6
6
|
when ::String
|
7
|
-
if value =~
|
7
|
+
if value =~ /^\-?\d+$/
|
8
8
|
value.to_i
|
9
9
|
else
|
10
10
|
raise
|
@@ -16,8 +16,10 @@ class RestModel
|
|
16
16
|
raise SerializationError, "value '#{value}' is not an integer"
|
17
17
|
end
|
18
18
|
|
19
|
-
def self.desserialize(value)
|
20
|
-
|
19
|
+
def self.desserialize(value, options = {})
|
20
|
+
length = options.fetch(:padding_zeros, 0)
|
21
|
+
return serialize(value) if length == 0
|
22
|
+
serialize(value).to_s.rjust(length, "0")
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class String
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
value.nil? ? nil : value.to_s
|
6
6
|
rescue
|
7
7
|
raise SerializationError, "value '#{value}' is not a string"
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.desserialize(value)
|
10
|
+
def self.desserialize(value, options = {})
|
11
11
|
serialize(value)
|
12
12
|
end
|
13
13
|
end
|
@@ -1,13 +1,13 @@
|
|
1
1
|
class RestModel
|
2
2
|
module Serialization
|
3
3
|
class Symbol
|
4
|
-
def self.serialize(value)
|
4
|
+
def self.serialize(value, options = {})
|
5
5
|
value.to_s.to_sym
|
6
6
|
rescue
|
7
7
|
raise SerializationError, "value '#{value}' is not a symbol"
|
8
8
|
end
|
9
9
|
|
10
|
-
def self.desserialize(value)
|
10
|
+
def self.desserialize(value, options = {})
|
11
11
|
serialize(value)
|
12
12
|
end
|
13
13
|
end
|
data/lib/rest_model/version.rb
CHANGED
data/lib/rest_model.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "date"
|
2
|
+
require "uri"
|
2
3
|
require "active_support/inflector"
|
3
4
|
require "active_support/concern"
|
4
5
|
require "active_support/core_ext/object"
|
@@ -96,7 +97,7 @@ class RestModel
|
|
96
97
|
end
|
97
98
|
|
98
99
|
def self.relations
|
99
|
-
|
100
|
+
keys.find_all(&:relation?)
|
100
101
|
end
|
101
102
|
|
102
103
|
def self.resource_name(custom_name = nil)
|
data/rest_model.gemspec
CHANGED
@@ -17,10 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
|
20
|
-
s.add_dependency "activesupport",
|
21
|
-
s.add_dependency "i18n",
|
22
|
-
s.add_development_dependency "rspec",
|
23
|
-
s.add_development_dependency "
|
24
|
-
s.add_development_dependency "guard-rspec", "~> 0.4"
|
25
|
-
s.add_development_dependency "growl", "~> 1.0"
|
20
|
+
s.add_dependency "activesupport", "~> 3.2"
|
21
|
+
s.add_dependency "i18n", ">= 0.6"
|
22
|
+
s.add_development_dependency "rspec", "~> 2.6"
|
23
|
+
s.add_development_dependency "rake"
|
26
24
|
end
|
data/spec/spec_helper.rb
CHANGED
data/spec/support/examples.rb
CHANGED
@@ -1,27 +1,21 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
EXAMPLES_CONSTANTS = %w(Root Item Customer Entry
|
2
|
+
Service Billing Developer Upcasing
|
3
|
+
Camelizing Product Address Phone)
|
3
4
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
before :all do
|
11
|
-
CONSTANTS.each do |klass|
|
12
|
-
self.class.ancestors.concat([self.class, Examples]).each do |mod|
|
13
|
-
mod.send(:remove_const, klass) if mod.const_defined?(klass, false)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
RestModel::Configuration.configure do |c|
|
18
|
-
c.convert_input_keys = RestModel::Configuration::DefaultHandler
|
19
|
-
end
|
5
|
+
def describe_example(file, tags = {}, &block)
|
6
|
+
describe "example #{file}", tags do
|
7
|
+
before :all do
|
8
|
+
EXAMPLES_CONSTANTS.each do |klass|
|
9
|
+
Object.send(:remove_const, klass) if Object.const_defined?(klass, false)
|
10
|
+
end
|
20
11
|
|
21
|
-
|
12
|
+
RestModel::Configuration.configure do |c|
|
13
|
+
c.convert_input_keys = RestModel::Configuration::DefaultHandler
|
22
14
|
end
|
23
15
|
|
24
|
-
|
16
|
+
silently {eval File.read("examples/#{file}.rb")}
|
25
17
|
end
|
18
|
+
|
19
|
+
instance_eval &block if block
|
26
20
|
end
|
27
21
|
end
|
@@ -1,24 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RestModel::Configuration do
|
4
|
-
after(:all)
|
5
|
-
RestModel::Configuration.convert_input_keys = nil
|
6
|
-
end
|
4
|
+
after(:all) {subject.convert_input_keys = nil}
|
7
5
|
|
8
6
|
context "when no custom input keys converter is set" do
|
9
7
|
it "returns default key converter" do
|
10
8
|
default_handler = RestModel::Configuration::DefaultHandler
|
11
|
-
|
9
|
+
subject.convert_input_keys.should == default_handler
|
12
10
|
end
|
13
11
|
end
|
14
12
|
|
15
13
|
context "when a custom input keys converter is set" do
|
16
14
|
let(:custom_convert_input_keys) {lambda {|keys| keys}}
|
17
15
|
|
18
|
-
before {
|
16
|
+
before {subject.convert_input_keys = custom_convert_input_keys}
|
19
17
|
|
20
18
|
it "returns custom key converter" do
|
21
|
-
|
19
|
+
subject.convert_input_keys.should == custom_convert_input_keys
|
22
20
|
end
|
23
21
|
end
|
24
22
|
end
|
@@ -2,67 +2,43 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe RestModel::Association do
|
4
4
|
describe "#initialize" do
|
5
|
-
context "class_name" do
|
6
|
-
context "when
|
5
|
+
context "options[:class_name]" do
|
6
|
+
context "when it's passed" do
|
7
7
|
subject do
|
8
8
|
RestModel::Association.new(:login, class_name: :some_class)
|
9
9
|
end
|
10
10
|
|
11
|
-
it "sets
|
11
|
+
it "sets class_name" do
|
12
12
|
subject.instance_variable_get("@class_name").should == "SomeClass"
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
context "when
|
16
|
+
context "when it isn't passed" do
|
17
17
|
subject {RestModel::Association.new(:login)}
|
18
18
|
|
19
|
-
it "
|
19
|
+
it "uses default class_name" do
|
20
20
|
subject.instance_variable_get("@class_name").should == "Login"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
context "many" do
|
26
|
-
context "when
|
27
|
-
subject
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
it "returns false to one?" do
|
32
|
-
subject.one?.should be_false
|
33
|
-
end
|
34
|
-
|
35
|
-
it "returns true to many?" do
|
36
|
-
subject.many?.should be_true
|
37
|
-
end
|
25
|
+
context "options[:many]" do
|
26
|
+
context "when it's true" do
|
27
|
+
subject {RestModel::Association.new(:login, many: true)}
|
28
|
+
its(:one?) {should be_false}
|
29
|
+
its(:many?) {should be_true}
|
38
30
|
end
|
39
31
|
|
40
|
-
context "when
|
41
|
-
subject
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
it "returns true to one?" do
|
46
|
-
subject.one?.should be_true
|
47
|
-
end
|
48
|
-
|
49
|
-
it "returns false to many?" do
|
50
|
-
subject.many?.should be_false
|
51
|
-
end
|
32
|
+
context "when it's false" do
|
33
|
+
subject {RestModel::Association.new(:login, many: false)}
|
34
|
+
its(:one?) {should be_true}
|
35
|
+
its(:many?) {should be_false}
|
52
36
|
end
|
53
37
|
|
54
|
-
context "when
|
55
|
-
subject
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
it "returns true to one?" do
|
60
|
-
subject.one?.should be_true
|
61
|
-
end
|
62
|
-
|
63
|
-
it "returns false to many?" do
|
64
|
-
subject.many?.should be_false
|
65
|
-
end
|
38
|
+
context "when it isn't passed" do
|
39
|
+
subject {RestModel::Association.new(:login)}
|
40
|
+
its(:one?) {should be_true}
|
41
|
+
its(:many?) {should be_false}
|
66
42
|
end
|
67
43
|
end
|
68
44
|
end
|
@@ -19,7 +19,7 @@ describe RestModel::Embeddable::Response do
|
|
19
19
|
|
20
20
|
context "when this key shouldn't be visible on resource" do
|
21
21
|
it "returns an empty hash" do
|
22
|
-
subject.should_receive(:visible?)
|
22
|
+
subject.should_receive(:visible?) {false}
|
23
23
|
subject.to_resource(example).should == {}
|
24
24
|
end
|
25
25
|
end
|
@@ -4,4 +4,27 @@ describe RestModel::Embeddable do
|
|
4
4
|
it "is a relation" do
|
5
5
|
RestModel::Embeddable.superclass.should == RestModel::Association
|
6
6
|
end
|
7
|
+
|
8
|
+
describe "#raw?" do
|
9
|
+
context "when class_name is array" do
|
10
|
+
subject {RestModel::Embeddable.new(:example, class_name: :array)}
|
11
|
+
its(:raw?) {should be_true}
|
12
|
+
end
|
13
|
+
|
14
|
+
context "when class_name is hash" do
|
15
|
+
subject {RestModel::Embeddable.new(:example, class_name: :hash)}
|
16
|
+
its(:raw?) {should be_true}
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when class_name isn't hash nor array" do
|
20
|
+
subject {RestModel::Embeddable.new(:example)}
|
21
|
+
its(:raw?) {should be_false}
|
22
|
+
end
|
23
|
+
|
24
|
+
context "when fields are defined" do
|
25
|
+
subject {RestModel::Embeddable.new(:example, fields: %w(a b c))}
|
26
|
+
its(:raw?) {should be_true}
|
27
|
+
its(:fields) {should == %w(a b c)}
|
28
|
+
end
|
29
|
+
end
|
7
30
|
end
|
@@ -1,22 +1,22 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RestModel::Property::Response do
|
4
|
-
class
|
4
|
+
class User
|
5
5
|
attr_accessor :login
|
6
6
|
end
|
7
7
|
|
8
8
|
subject {RestModel::Property.new(:login)}
|
9
9
|
|
10
10
|
it "returns a pair with property name and value" do
|
11
|
-
|
12
|
-
subject.to_resource(
|
11
|
+
user = User.new.tap {|u| u.login = "jackiechan2010"}
|
12
|
+
subject.to_resource(user).should == {login: "jackiechan2010"}
|
13
13
|
end
|
14
14
|
|
15
15
|
context "when this key shouldn't be visible on resource" do
|
16
16
|
it "returns an empty hash" do
|
17
|
-
subject.should_receive(:visible?)
|
18
|
-
|
19
|
-
subject.to_resource(
|
17
|
+
subject.should_receive(:visible?) {false}
|
18
|
+
user = User.new.tap {|u| u.login = "jackiechan2010"}
|
19
|
+
subject.to_resource(user).should == {}
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
@@ -7,11 +7,11 @@ describe RestModel::Property::Retriever do
|
|
7
7
|
let(:serializer_mock) {mock :serializer}
|
8
8
|
|
9
9
|
before do
|
10
|
-
subject.stub!(:serializer)
|
10
|
+
subject.stub!(:serializer) {serializer_mock}
|
11
11
|
end
|
12
12
|
|
13
13
|
it "tries to serialize value" do
|
14
|
-
serializer_mock.should_receive(:serialize).with(item[:login])
|
14
|
+
serializer_mock.should_receive(:serialize).with(item[:login], instance_of(Hash)) {item[:login]}
|
15
15
|
subject.from_source(item)
|
16
16
|
end
|
17
17
|
|
@@ -11,7 +11,7 @@ describe RestModel::Response do
|
|
11
11
|
context "#to_resource" do
|
12
12
|
context "when the key shouldn't be visible on resource" do
|
13
13
|
it "returns an empty hash" do
|
14
|
-
subject.should_receive(:visible?)
|
14
|
+
subject.should_receive(:visible?) {false}
|
15
15
|
subject.to_resource(example).should == {}
|
16
16
|
end
|
17
17
|
end
|
@@ -49,6 +49,31 @@ describe RestModel::Response do
|
|
49
49
|
it_behaves_like "a relation"
|
50
50
|
end
|
51
51
|
|
52
|
+
context "when has one (with :href option)" do
|
53
|
+
before do
|
54
|
+
class ExampleChild < RestModel
|
55
|
+
id
|
56
|
+
belongs_to :example
|
57
|
+
end
|
58
|
+
|
59
|
+
class Example < RestModel
|
60
|
+
id
|
61
|
+
has_one :example_child, href: proc {example_child_link}
|
62
|
+
|
63
|
+
def example_child_link
|
64
|
+
"http://example.com/examples/#{id}/example_custom_child"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
subject {Example.keys[1]}
|
70
|
+
|
71
|
+
let(:example) {Example.new(id: 100)}
|
72
|
+
let(:result) {{rel: :example_child, href: "http://example.com/examples/100/example_custom_child"}}
|
73
|
+
|
74
|
+
it_behaves_like "a relation"
|
75
|
+
end
|
76
|
+
|
52
77
|
context "when has many" do
|
53
78
|
before do
|
54
79
|
class ExampleChild < RestModel
|
@@ -70,6 +95,31 @@ describe RestModel::Response do
|
|
70
95
|
it_behaves_like "a relation"
|
71
96
|
end
|
72
97
|
|
98
|
+
context "when has many (with :href option)" do
|
99
|
+
before do
|
100
|
+
class ExampleChild < RestModel
|
101
|
+
id
|
102
|
+
belongs_to :example
|
103
|
+
end
|
104
|
+
|
105
|
+
class Example < RestModel
|
106
|
+
id
|
107
|
+
has_many :example_children, href: proc {example_child_link}
|
108
|
+
|
109
|
+
def example_child_link
|
110
|
+
"http://example.com/api/examples/#{id}/example_custom_children"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
subject {Example.keys[1]}
|
116
|
+
|
117
|
+
let(:example) {Example.new(id: 200)}
|
118
|
+
let(:result) {{rel: :example_children, href: "http://example.com/api/examples/200/example_custom_children"}}
|
119
|
+
|
120
|
+
it_behaves_like "a relation"
|
121
|
+
end
|
122
|
+
|
73
123
|
context "when belongs to one" do
|
74
124
|
before do
|
75
125
|
class ExampleChild < RestModel
|
@@ -91,6 +141,52 @@ describe RestModel::Response do
|
|
91
141
|
it_behaves_like "a relation"
|
92
142
|
end
|
93
143
|
|
144
|
+
context "when belongs to one (with :href option)" do
|
145
|
+
before do
|
146
|
+
class ExampleChild < RestModel
|
147
|
+
id
|
148
|
+
belongs_to :example, href: proc {example_link}
|
149
|
+
|
150
|
+
def example_link
|
151
|
+
"http://example.com/api/examples/#{example_id}"
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
class Example < RestModel
|
156
|
+
id
|
157
|
+
has_many :example_children
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
subject {ExampleChild.keys[1]}
|
162
|
+
|
163
|
+
let(:example) {ExampleChild.new(id: 200, example_id: 123)}
|
164
|
+
let(:result) {{rel: :example, href: "http://example.com/api/examples/123"}}
|
165
|
+
|
166
|
+
it_behaves_like "a relation"
|
167
|
+
end
|
168
|
+
|
169
|
+
context "escaped href" do
|
170
|
+
before do
|
171
|
+
class ExampleChild < RestModel
|
172
|
+
id
|
173
|
+
belongs_to :example
|
174
|
+
end
|
175
|
+
|
176
|
+
class Example < RestModel
|
177
|
+
id
|
178
|
+
has_many :example_children
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
subject {ExampleChild.keys[1]}
|
183
|
+
|
184
|
+
let(:example) {ExampleChild.new(id: 200, example_id: "Some Id")}
|
185
|
+
let(:result) {{rel: :example, href: "http://example.com/examples/Some%20Id"}}
|
186
|
+
|
187
|
+
it_behaves_like "a relation"
|
188
|
+
end
|
189
|
+
|
94
190
|
context "when using forbidden key names" do
|
95
191
|
[:resource_id, :resource].each do |forbidden_name|
|
96
192
|
it "raises an exception for #{forbidden_name}" do
|
@@ -5,67 +5,28 @@ describe RestModel::Relation do
|
|
5
5
|
RestModel::Relation.superclass.should == RestModel::Association
|
6
6
|
end
|
7
7
|
|
8
|
-
describe "#has?" do
|
8
|
+
describe "#has? and #belongs?" do
|
9
9
|
context "when it has one resource" do
|
10
|
-
subject
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
it "returns true" do
|
15
|
-
subject.has?.should be_true
|
16
|
-
end
|
10
|
+
subject {RestModel::Relation.new(:service, many: false, has: true)}
|
11
|
+
its(:has?) {should be_true}
|
12
|
+
its(:belongs?) {should be_false}
|
17
13
|
end
|
18
14
|
|
19
15
|
context "when it has many resources" do
|
20
|
-
subject
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
it "returns true" do
|
25
|
-
subject.has?.should be_true
|
26
|
-
end
|
16
|
+
subject {RestModel::Relation.new(:service, many: true, has: true)}
|
17
|
+
its(:has?) {should be_true}
|
18
|
+
its(:belongs?) {should be_false}
|
27
19
|
end
|
28
20
|
|
29
21
|
context "when it belongs to a resource" do
|
30
|
-
subject
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
it "returns true" do
|
35
|
-
subject.has?.should be_false
|
36
|
-
end
|
22
|
+
subject {RestModel::Relation.new(:service, many: false, has: false)}
|
23
|
+
its(:has?) {should be_false}
|
24
|
+
its(:belongs?) {should be_true}
|
37
25
|
end
|
38
26
|
end
|
39
27
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
RestModel::Relation.new(:service, many: false, has: false)
|
44
|
-
end
|
45
|
-
|
46
|
-
it "returns true" do
|
47
|
-
subject.belongs?.should be_true
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "when it has one resource" do
|
52
|
-
subject do
|
53
|
-
RestModel::Relation.new(:service, many: false, has: true)
|
54
|
-
end
|
55
|
-
|
56
|
-
it "returns true" do
|
57
|
-
subject.belongs?.should be_false
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "when it has many resources" do
|
62
|
-
subject do
|
63
|
-
RestModel::Relation.new(:service, many: true, has: true)
|
64
|
-
end
|
65
|
-
|
66
|
-
it "returns true" do
|
67
|
-
subject.belongs?.should be_false
|
68
|
-
end
|
69
|
-
end
|
28
|
+
context "#relation?" do
|
29
|
+
subject {RestModel::Relation.new(:example)}
|
30
|
+
its(:relation?) {should be_true}
|
70
31
|
end
|
71
32
|
end
|
data/spec/unit/key_spec.rb
CHANGED
@@ -19,14 +19,14 @@ describe RestModel::Key do
|
|
19
19
|
describe "#visible?" do
|
20
20
|
context "when :visible option was defined" do
|
21
21
|
context "and :if option was defined with false" do
|
22
|
-
subject {RestModel::Property.new(name,
|
22
|
+
subject {RestModel::Property.new(name, if: proc {false}, visible: true)}
|
23
23
|
it "return false even when visible is true" do
|
24
24
|
subject.visible?(nil).should be_false
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
28
|
context "and it evaluates to false" do
|
29
|
-
subject {RestModel::Property.new(name,
|
29
|
+
subject {RestModel::Property.new(name, visible: false)}
|
30
30
|
|
31
31
|
it "returns false" do
|
32
32
|
subject.visible?(nil).should be_false
|
@@ -34,7 +34,7 @@ describe RestModel::Key do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
context "and it evaluates to true" do
|
37
|
-
subject {RestModel::Property.new(name,
|
37
|
+
subject {RestModel::Property.new(name, visible: true)}
|
38
38
|
|
39
39
|
it "returns true" do
|
40
40
|
subject.visible?(nil).should be_true
|
@@ -43,21 +43,21 @@ describe RestModel::Key do
|
|
43
43
|
|
44
44
|
context "with a proc" do
|
45
45
|
context "and it evaluates true" do
|
46
|
-
subject {RestModel::Property.new(name,
|
46
|
+
subject {RestModel::Property.new(name, visible: proc {true})}
|
47
47
|
it "returns true" do
|
48
48
|
subject.visible?("a").should be_true
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
context "and it evaluates false" do
|
53
|
-
subject {RestModel::Property.new(name,
|
53
|
+
subject {RestModel::Property.new(name, visible: proc {false})}
|
54
54
|
it "returns false" do
|
55
55
|
subject.visible?("a").should be_false
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
context "and it depends on resource instance" do
|
60
|
-
subject {RestModel::Property.new(name,
|
60
|
+
subject {RestModel::Property.new(name, visible: proc {show})}
|
61
61
|
|
62
62
|
it "uses it" do
|
63
63
|
resource = OpenStruct.new
|
@@ -72,7 +72,7 @@ describe RestModel::Key do
|
|
72
72
|
describe "#present?" do
|
73
73
|
context "when :if option was defined with a proc" do
|
74
74
|
context "and it evaluates to false" do
|
75
|
-
subject {RestModel::Property.new(name,
|
75
|
+
subject {RestModel::Property.new(name, if: proc {false})}
|
76
76
|
|
77
77
|
it "returns false" do
|
78
78
|
subject.present?(nil).should be_false
|
@@ -80,7 +80,7 @@ describe RestModel::Key do
|
|
80
80
|
end
|
81
81
|
|
82
82
|
context "and it evaluates to true" do
|
83
|
-
subject {RestModel::Property.new(name,
|
83
|
+
subject {RestModel::Property.new(name, if: proc {true})}
|
84
84
|
|
85
85
|
it "returns true" do
|
86
86
|
subject.present?(nil).should be_true
|
@@ -88,7 +88,7 @@ describe RestModel::Key do
|
|
88
88
|
end
|
89
89
|
|
90
90
|
context "and it depends on resource instance" do
|
91
|
-
subject {RestModel::Property.new(name,
|
91
|
+
subject {RestModel::Property.new(name, if: proc {show})}
|
92
92
|
|
93
93
|
it "uses it" do
|
94
94
|
resource = OpenStruct.new
|
@@ -98,4 +98,8 @@ describe RestModel::Key do
|
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
101
|
+
|
102
|
+
describe "#relation?" do
|
103
|
+
its(:relation?) {should be_false}
|
104
|
+
end
|
101
105
|
end
|
data/spec/unit/response_spec.rb
CHANGED
@@ -12,6 +12,14 @@ describe RestModel::Response do
|
|
12
12
|
property :street
|
13
13
|
property :city
|
14
14
|
end
|
15
|
+
|
16
|
+
class SummarizeExample < RestModel
|
17
|
+
id
|
18
|
+
property :name
|
19
|
+
property :login
|
20
|
+
|
21
|
+
summarizes :id, :name, :login
|
22
|
+
end
|
15
23
|
end
|
16
24
|
|
17
25
|
let(:input) do
|
@@ -34,11 +42,41 @@ describe RestModel::Response do
|
|
34
42
|
end
|
35
43
|
|
36
44
|
context "when a list of resources is received" do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
context "with sumarize options" do
|
46
|
+
it "returns some resources in an entries array" do
|
47
|
+
model = 3.times.map {Example.parse(input).first}
|
48
|
+
result = {entries: 3.times.map {input}}
|
49
|
+
Example.normalize(model).with_indifferent_access.should == result.with_indifferent_access
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "without sumarize options" do
|
54
|
+
let(:input) do
|
55
|
+
{
|
56
|
+
id: "Escape This",
|
57
|
+
name: "My name is",
|
58
|
+
login: "my_login"
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
let(:expected) do
|
63
|
+
{
|
64
|
+
entries: [
|
65
|
+
{
|
66
|
+
id: "Escape This",
|
67
|
+
name: "My name is",
|
68
|
+
login: "my_login",
|
69
|
+
href: "http://example.com/summarize_examples/Escape%20This"
|
70
|
+
}
|
71
|
+
]
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
it "returns some resources in an entries array" do
|
76
|
+
model = SummarizeExample.parse(input)
|
77
|
+
SummarizeExample.normalize(model).with_indifferent_access.should == expected.with_indifferent_access
|
78
|
+
end
|
41
79
|
end
|
42
80
|
end
|
43
81
|
end
|
44
|
-
end
|
82
|
+
end
|
@@ -5,6 +5,10 @@ describe RestModel::Serialization::Date do
|
|
5
5
|
subject.class.serialize('2011-07-01').should == Date.new(2011, 07, 01)
|
6
6
|
end
|
7
7
|
|
8
|
+
it "desserializes to date respecting the provided format" do
|
9
|
+
subject.class.desserialize(Date.new(2038, 1, 19), format: "%a %b %d %Y").should == "Tue Jan 19 2038"
|
10
|
+
end
|
11
|
+
|
8
12
|
context "when an invalid value is serialized" do
|
9
13
|
it "raises an error" do
|
10
14
|
expect {subject.class.serialize("not a date")}.to raise_error
|
@@ -5,6 +5,10 @@ describe RestModel::Serialization::DateTime do
|
|
5
5
|
subject.class.serialize('2011-07-01T10:20:30').should == DateTime.new(2011, 07, 01, 10, 20, 30)
|
6
6
|
end
|
7
7
|
|
8
|
+
it "desserializes to date time respecting the provided format" do
|
9
|
+
subject.class.desserialize(DateTime.new(2012, 12, 31, 12, 0, 0), format: "%a %b %d %H:%M:%S %Y").should == "Mon Dec 31 12:00:00 2012"
|
10
|
+
end
|
11
|
+
|
8
12
|
context "when an invalid value is serialized" do
|
9
13
|
it "raises an error" do
|
10
14
|
expect {subject.class.serialize("not a date time")}.to raise_error
|
@@ -1,10 +1,18 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe RestModel::Serialization::Integer do
|
4
|
+
it "adds leading zeros from options while desserializing" do
|
5
|
+
subject.class.desserialize('1200', padding_zeros: 12).should == "000000001200"
|
6
|
+
end
|
7
|
+
|
4
8
|
it "converts to integer" do
|
5
9
|
subject.class.serialize('1200').should == 1200
|
6
10
|
end
|
7
11
|
|
12
|
+
it "converts negative number to negative integer" do
|
13
|
+
subject.class.serialize('-1').should == -1
|
14
|
+
end
|
15
|
+
|
8
16
|
context "when an invalid value is serialized" do
|
9
17
|
it "raises an error" do
|
10
18
|
expect {subject.class.serialize("not an integer")}.to raise_error
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
module
|
3
|
+
module InputKeysConverterStrategy
|
4
4
|
def self.call(keys)
|
5
5
|
keys.map {|key| key.to_s.upcase}
|
6
6
|
end
|
@@ -21,7 +21,7 @@ describe RestModel::Source::Path do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
context "and there is a custom keys input converter" do
|
24
|
-
subject {RestModel::Key.new(:name, convert_input_keys:
|
24
|
+
subject {RestModel::Key.new(:name, convert_input_keys: InputKeysConverterStrategy)}
|
25
25
|
let(:path) {['NAME']}
|
26
26
|
it_behaves_like "an input path"
|
27
27
|
end
|
@@ -53,7 +53,7 @@ describe RestModel::Source::Path do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
context "and there is a custom keys input converter" do
|
56
|
-
let(:options) {{start_key: 'yay.upcase.path', convert_input_keys:
|
56
|
+
let(:options) {{start_key: 'yay.upcase.path', convert_input_keys: InputKeysConverterStrategy}}
|
57
57
|
subject {RestModel::Key.new(:name, options)}
|
58
58
|
let(:path) {['YAY', 'UPCASE', 'PATH']}
|
59
59
|
it_behaves_like "an input path"
|
@@ -7,7 +7,7 @@ describe RestModel::Source::Retriever do
|
|
7
7
|
property :login
|
8
8
|
end
|
9
9
|
|
10
|
-
models = Example.parse(
|
10
|
+
models = Example.parse(login: 'jackiechan2010')
|
11
11
|
models.should be_an(Array)
|
12
12
|
models.first.login.should == 'jackiechan2010'
|
13
13
|
end
|
@@ -17,7 +17,7 @@ describe RestModel::Source::Retriever do
|
|
17
17
|
property :login, field: :customer_login
|
18
18
|
end
|
19
19
|
|
20
|
-
models = Example.parse(
|
20
|
+
models = Example.parse(customer_login: 'jackiechan2010')
|
21
21
|
models.should be_an(Array)
|
22
22
|
models.first.login.should == 'jackiechan2010'
|
23
23
|
end
|
@@ -31,12 +31,12 @@ describe RestModel::Source::Retriever do
|
|
31
31
|
end
|
32
32
|
|
33
33
|
it "returns true when value is 'X'" do
|
34
|
-
models = Example.parse(
|
34
|
+
models = Example.parse(can_merge: 'X')
|
35
35
|
models.first.can_merge.should be_true
|
36
36
|
end
|
37
37
|
|
38
38
|
it "returns false when value isn't 'X'" do
|
39
|
-
models = Example.parse(
|
39
|
+
models = Example.parse(can_merge: '')
|
40
40
|
models.first.can_merge.should be_false
|
41
41
|
end
|
42
42
|
end
|
@@ -47,7 +47,7 @@ describe RestModel::Source::Retriever do
|
|
47
47
|
property :issue_date, type: Date
|
48
48
|
end
|
49
49
|
|
50
|
-
models = Example.parse(
|
50
|
+
models = Example.parse(issue_date: '2011-01-01')
|
51
51
|
models.first.issue_date.should == Date.parse('2011-01-01')
|
52
52
|
end
|
53
53
|
end
|
@@ -58,7 +58,7 @@ describe RestModel::Source::Retriever do
|
|
58
58
|
property :amount, type: Float
|
59
59
|
end
|
60
60
|
|
61
|
-
models = Example.parse(
|
61
|
+
models = Example.parse(amount: '1234.5')
|
62
62
|
models.first.amount.should == 1234.5
|
63
63
|
end
|
64
64
|
end
|
@@ -72,20 +72,20 @@ describe RestModel::Source::Retriever do
|
|
72
72
|
end
|
73
73
|
|
74
74
|
it "returns key when value was mapped" do
|
75
|
-
models = Example.from_source!(
|
75
|
+
models = Example.from_source!(status: '02')
|
76
76
|
models.first.status.should == :unpaid
|
77
77
|
end
|
78
78
|
|
79
79
|
context "when calling from_source" do
|
80
80
|
it "returns nil when value wasn't mapped" do
|
81
|
-
models = Example.from_source(
|
81
|
+
models = Example.from_source(status: '03')
|
82
82
|
models.first.status.should be_nil
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
86
86
|
context "when calling from_source!" do
|
87
87
|
it "fails when value wasn't mapped" do
|
88
|
-
expect {Example.from_source!(
|
88
|
+
expect {Example.from_source!(status: '03')}.to raise_error
|
89
89
|
end
|
90
90
|
end
|
91
91
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,33 +11,43 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2013-05-02 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
18
|
-
requirement:
|
18
|
+
requirement: !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '3.
|
23
|
+
version: '3.2'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements:
|
26
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
|
+
none: false
|
28
|
+
requirements:
|
29
|
+
- - ~>
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '3.2'
|
27
32
|
- !ruby/object:Gem::Dependency
|
28
33
|
name: i18n
|
29
|
-
requirement:
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
30
35
|
none: false
|
31
36
|
requirements:
|
32
37
|
- - ! '>='
|
33
38
|
- !ruby/object:Gem::Version
|
34
|
-
version: '0.
|
39
|
+
version: '0.6'
|
35
40
|
type: :runtime
|
36
41
|
prerelease: false
|
37
|
-
version_requirements:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.6'
|
38
48
|
- !ruby/object:Gem::Dependency
|
39
49
|
name: rspec
|
40
|
-
requirement:
|
50
|
+
requirement: !ruby/object:Gem::Requirement
|
41
51
|
none: false
|
42
52
|
requirements:
|
43
53
|
- - ~>
|
@@ -45,40 +55,28 @@ dependencies:
|
|
45
55
|
version: '2.6'
|
46
56
|
type: :development
|
47
57
|
prerelease: false
|
48
|
-
version_requirements:
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: guard
|
51
|
-
requirement: &70119443530980 !ruby/object:Gem::Requirement
|
58
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
59
|
none: false
|
53
60
|
requirements:
|
54
61
|
- - ~>
|
55
62
|
- !ruby/object:Gem::Version
|
56
|
-
version: '
|
57
|
-
type: :development
|
58
|
-
prerelease: false
|
59
|
-
version_requirements: *70119443530980
|
63
|
+
version: '2.6'
|
60
64
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
62
|
-
requirement:
|
65
|
+
name: rake
|
66
|
+
requirement: !ruby/object:Gem::Requirement
|
63
67
|
none: false
|
64
68
|
requirements:
|
65
|
-
- -
|
69
|
+
- - ! '>='
|
66
70
|
- !ruby/object:Gem::Version
|
67
|
-
version: '0
|
71
|
+
version: '0'
|
68
72
|
type: :development
|
69
73
|
prerelease: false
|
70
|
-
version_requirements:
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: growl
|
73
|
-
requirement: &70119443530060 !ruby/object:Gem::Requirement
|
74
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
75
|
none: false
|
75
76
|
requirements:
|
76
|
-
- -
|
77
|
+
- - ! '>='
|
77
78
|
- !ruby/object:Gem::Version
|
78
|
-
version: '
|
79
|
-
type: :development
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: *70119443530060
|
79
|
+
version: '0'
|
82
80
|
description: ''
|
83
81
|
email:
|
84
82
|
- victorcrodrigues@gmail.com
|
@@ -89,8 +87,8 @@ extensions: []
|
|
89
87
|
extra_rdoc_files: []
|
90
88
|
files:
|
91
89
|
- .gitignore
|
90
|
+
- .travis.yml
|
92
91
|
- Gemfile
|
93
|
-
- Guardfile
|
94
92
|
- README.md
|
95
93
|
- Rakefile
|
96
94
|
- examples/all.rb
|
@@ -245,46 +243,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
245
243
|
version: '0'
|
246
244
|
requirements: []
|
247
245
|
rubyforge_project:
|
248
|
-
rubygems_version: 1.8.
|
246
|
+
rubygems_version: 1.8.23
|
249
247
|
signing_key:
|
250
248
|
specification_version: 3
|
251
249
|
summary: ''
|
252
|
-
test_files:
|
253
|
-
- spec/integration/belongs_to_spec.rb
|
254
|
-
- spec/integration/embeds_many_spec.rb
|
255
|
-
- spec/integration/embeds_one_spec.rb
|
256
|
-
- spec/integration/has_many_spec.rb
|
257
|
-
- spec/integration/has_one_spec.rb
|
258
|
-
- spec/integration/property_spec.rb
|
259
|
-
- spec/integration/summarization_spec.rb
|
260
|
-
- spec/integration/to_source_spec.rb
|
261
|
-
- spec/integration/update_attributes_spec.rb
|
262
|
-
- spec/integration/validations_spec.rb
|
263
|
-
- spec/spec_helper.rb
|
264
|
-
- spec/support/examples.rb
|
265
|
-
- spec/support/out.rb
|
266
|
-
- spec/support/shared_examples.rb
|
267
|
-
- spec/unit/configuration_spec.rb
|
268
|
-
- spec/unit/key/association_spec.rb
|
269
|
-
- spec/unit/key/embeddable/builder_spec.rb
|
270
|
-
- spec/unit/key/embeddable/response_spec.rb
|
271
|
-
- spec/unit/key/embeddable/retriever_spec.rb
|
272
|
-
- spec/unit/key/embeddable_spec.rb
|
273
|
-
- spec/unit/key/property/builder_spec.rb
|
274
|
-
- spec/unit/key/property/response_spec.rb
|
275
|
-
- spec/unit/key/property/retriever_spec.rb
|
276
|
-
- spec/unit/key/property_spec.rb
|
277
|
-
- spec/unit/key/relation/builder_spec.rb
|
278
|
-
- spec/unit/key/relation/response_spec.rb
|
279
|
-
- spec/unit/key/relation_spec.rb
|
280
|
-
- spec/unit/key_spec.rb
|
281
|
-
- spec/unit/response_spec.rb
|
282
|
-
- spec/unit/rest_model_spec.rb
|
283
|
-
- spec/unit/serialization/boolean_spec.rb
|
284
|
-
- spec/unit/serialization/date_spec.rb
|
285
|
-
- spec/unit/serialization/date_time_spec.rb
|
286
|
-
- spec/unit/serialization/float_spec.rb
|
287
|
-
- spec/unit/serialization/integer_spec.rb
|
288
|
-
- spec/unit/serialization/string_spec.rb
|
289
|
-
- spec/unit/source/path_spec.rb
|
290
|
-
- spec/unit/source/retriever_spec.rb
|
250
|
+
test_files: []
|