api_resource 0.2.5 → 0.2.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -1
- data/Gemfile.lock +1 -1
- data/VERSION +1 -1
- data/api_resource.gemspec +15 -14
- data/lib/api_resource/associations/association_proxy.rb +5 -1
- data/lib/api_resource/associations/multi_object_proxy.rb +10 -0
- data/lib/api_resource/associations/single_object_proxy.rb +6 -0
- data/lib/api_resource/associations.rb +7 -2
- data/lib/api_resource/attributes.rb +7 -5
- data/lib/api_resource/base.rb +34 -6
- data/lib/api_resource/mocks.rb +1 -1
- data/nohup.out +63 -0
- data/spec/lib/base_spec.rb +8 -1
- data/spec/lib/mocks_spec.rb +1 -1
- data/spec/support/requests/test_resource_requests.rb +0 -4
- metadata +49 -48
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.6
|
data/api_resource.gemspec
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.2.
|
7
|
+
s.name = "api_resource"
|
8
|
+
s.version = "0.2.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = [
|
12
|
-
s.date =
|
13
|
-
s.description =
|
14
|
-
s.email =
|
11
|
+
s.authors = ["Ethan Langevin"]
|
12
|
+
s.date = "2012-03-15"
|
13
|
+
s.description = "A replacement for ActiveResource for RESTful APIs that handles associated object and multiple data sources"
|
14
|
+
s.email = "ejl6266@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE.txt",
|
17
17
|
"README.rdoc"
|
@@ -59,6 +59,7 @@ Gem::Specification.new do |s|
|
|
59
59
|
"lib/api_resource/observing.rb",
|
60
60
|
"lib/api_resource/railtie.rb",
|
61
61
|
"lib/api_resource/scopes.rb",
|
62
|
+
"nohup.out",
|
62
63
|
"spec/lib/associations_spec.rb",
|
63
64
|
"spec/lib/attributes_spec.rb",
|
64
65
|
"spec/lib/base_spec.rb",
|
@@ -76,11 +77,11 @@ Gem::Specification.new do |s|
|
|
76
77
|
"spec/support/requests/test_resource_requests.rb",
|
77
78
|
"spec/support/test_resource.rb"
|
78
79
|
]
|
79
|
-
s.homepage =
|
80
|
-
s.licenses = [
|
81
|
-
s.require_paths = [
|
82
|
-
s.rubygems_version =
|
83
|
-
s.summary =
|
80
|
+
s.homepage = "http://github.com/ejlangev/resource"
|
81
|
+
s.licenses = ["MIT"]
|
82
|
+
s.require_paths = ["lib"]
|
83
|
+
s.rubygems_version = "1.8.11"
|
84
|
+
s.summary = "A replacement for ActiveResource for RESTful APIs that handles associated object and multiple data sources"
|
84
85
|
|
85
86
|
if s.respond_to? :specification_version then
|
86
87
|
s.specification_version = 3
|
@@ -103,7 +104,7 @@ Gem::Specification.new do |s|
|
|
103
104
|
s.add_development_dependency(%q<guard>, [">= 0"])
|
104
105
|
s.add_development_dependency(%q<guard-rspec>, [">= 0"])
|
105
106
|
s.add_development_dependency(%q<mocha>, [">= 0"])
|
106
|
-
s.add_development_dependency(%q<bundler>, ["
|
107
|
+
s.add_development_dependency(%q<bundler>, [">= 0"])
|
107
108
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
|
108
109
|
s.add_development_dependency(%q<activerecord>, ["= 3.0.9"])
|
109
110
|
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
@@ -125,7 +126,7 @@ Gem::Specification.new do |s|
|
|
125
126
|
s.add_dependency(%q<guard>, [">= 0"])
|
126
127
|
s.add_dependency(%q<guard-rspec>, [">= 0"])
|
127
128
|
s.add_dependency(%q<mocha>, [">= 0"])
|
128
|
-
s.add_dependency(%q<bundler>, ["
|
129
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
129
130
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
130
131
|
s.add_dependency(%q<activerecord>, ["= 3.0.9"])
|
131
132
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
@@ -148,7 +149,7 @@ Gem::Specification.new do |s|
|
|
148
149
|
s.add_dependency(%q<guard>, [">= 0"])
|
149
150
|
s.add_dependency(%q<guard-rspec>, [">= 0"])
|
150
151
|
s.add_dependency(%q<mocha>, [">= 0"])
|
151
|
-
s.add_dependency(%q<bundler>, ["
|
152
|
+
s.add_dependency(%q<bundler>, [">= 0"])
|
152
153
|
s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
|
153
154
|
s.add_dependency(%q<activerecord>, ["= 3.0.9"])
|
154
155
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
@@ -70,7 +70,11 @@ module ApiResource
|
|
70
70
|
def inspect
|
71
71
|
self.internal_object.inspect
|
72
72
|
end
|
73
|
-
|
73
|
+
|
74
|
+
def ==(other)
|
75
|
+
raise "Not Implemented: This method must be implemented in a subclass"
|
76
|
+
end
|
77
|
+
|
74
78
|
protected
|
75
79
|
# This method loads a particular scope with a set of options from the remote server
|
76
80
|
def load_scope_with_options(scope, options)
|
@@ -15,6 +15,16 @@ module ApiResource
|
|
15
15
|
def each(*args, &block)
|
16
16
|
self.internal_object.each(*args, &block)
|
17
17
|
end
|
18
|
+
|
19
|
+
def ==(other)
|
20
|
+
return false if self.class != other.class
|
21
|
+
if self.internal_object.is_a?(Array)
|
22
|
+
self.internal_object.sort.each_with_index do |elem, i|
|
23
|
+
return false if other.internal_object.sort[i].attributes != elem.attributes
|
24
|
+
end
|
25
|
+
end
|
26
|
+
return true
|
27
|
+
end
|
18
28
|
|
19
29
|
def serializable_hash(options)
|
20
30
|
self.internal_object.collect{|obj| obj.serializable_hash(options) }
|
@@ -24,6 +24,12 @@ module ApiResource
|
|
24
24
|
def present?
|
25
25
|
return @internal_object.present?
|
26
26
|
end
|
27
|
+
|
28
|
+
def ==(other)
|
29
|
+
return false if self.class != other.class
|
30
|
+
return false if other.internal_object.attributes != self.internal_object.attributes
|
31
|
+
return true
|
32
|
+
end
|
27
33
|
|
28
34
|
protected
|
29
35
|
def load_scope_with_options(scope, options)
|
@@ -97,7 +97,7 @@ module ApiResource
|
|
97
97
|
|
98
98
|
def association_names
|
99
99
|
# structure is {:has_many => {"myname" => "ClassName"}}
|
100
|
-
self.related_objects.clone.delete_if{|k,v| k.to_s == "scope"}.collect{|k,v| v.keys.
|
100
|
+
self.related_objects.clone.delete_if{|k,v| k.to_s == "scope"}.collect{|k,v| v.keys.collect(&:to_sym)}.flatten
|
101
101
|
end
|
102
102
|
|
103
103
|
def association_class_name(assoc)
|
@@ -116,13 +116,18 @@ module ApiResource
|
|
116
116
|
|
117
117
|
protected
|
118
118
|
def define_association_as_attribute(assoc_type, assoc_name)
|
119
|
+
# set up dirty tracking for associations
|
120
|
+
|
119
121
|
self.class_eval <<-EOE, __FILE__, __LINE__ + 1
|
120
122
|
def #{assoc_name}
|
121
123
|
self.attributes[:#{assoc_name}] ||= #{self.association_types[assoc_type.to_sym].to_s.classify}ObjectProxy.new(self.association_class_name('#{assoc_name}'), nil, self)
|
122
124
|
end
|
123
125
|
def #{assoc_name}=(val)
|
124
|
-
#
|
126
|
+
# get old internal object
|
127
|
+
old_internal_object = self.#{assoc_name}.internal_object
|
125
128
|
self.#{assoc_name}.internal_object = val
|
129
|
+
#{assoc_name}_will_change! unless self.#{assoc_name} == old_internal_object
|
130
|
+
self.#{assoc_name}.internal_object
|
126
131
|
end
|
127
132
|
def #{assoc_name}?
|
128
133
|
self.#{assoc_name}.internal_object.present?
|
@@ -36,15 +36,12 @@ module ApiResource
|
|
36
36
|
module ClassMethods
|
37
37
|
|
38
38
|
def define_attributes(*args)
|
39
|
-
# This is provided by ActiveModel::AttributeMethods, it should define the basic methods
|
40
|
-
# but we need to override all the setters so we do dirty tracking
|
41
|
-
define_attribute_methods args
|
42
39
|
args.each do |arg|
|
43
40
|
if arg.is_a?(Array)
|
44
41
|
self.define_attribute_type(arg.first, arg.second)
|
45
42
|
arg = arg.first
|
46
43
|
end
|
47
|
-
|
44
|
+
|
48
45
|
self.attribute_names << arg.to_sym
|
49
46
|
self.public_attribute_names << arg.to_sym
|
50
47
|
|
@@ -70,8 +67,13 @@ module ApiResource
|
|
70
67
|
end
|
71
68
|
|
72
69
|
def define_protected_attributes(*args)
|
73
|
-
define_attribute_methods args
|
74
70
|
args.each do |arg|
|
71
|
+
|
72
|
+
if arg.is_a?(Array)
|
73
|
+
self.define_attribute_type(arg.first, arg.second)
|
74
|
+
arg = arg.first
|
75
|
+
end
|
76
|
+
|
75
77
|
self.attribute_names << arg.to_sym
|
76
78
|
self.protected_attribute_names << arg.to_sym
|
77
79
|
|
data/lib/api_resource/base.rb
CHANGED
@@ -39,11 +39,19 @@ module ApiResource
|
|
39
39
|
def set_class_attributes_upon_load
|
40
40
|
return true if self == ApiResource::Base
|
41
41
|
begin
|
42
|
-
class_data = self.connection.get(
|
42
|
+
class_data = self.connection.get(
|
43
|
+
self.new_element_path, self.headers
|
44
|
+
)
|
43
45
|
# Attributes go first
|
44
46
|
if class_data["attributes"]
|
45
|
-
|
46
|
-
|
47
|
+
|
48
|
+
define_attributes(
|
49
|
+
*(class_data["attributes"]["public"] || [])
|
50
|
+
)
|
51
|
+
define_protected_attributes(
|
52
|
+
*(class_data["attributes"]["protected"] || [])
|
53
|
+
)
|
54
|
+
|
47
55
|
end
|
48
56
|
# Then scopes
|
49
57
|
if class_data["scopes"]
|
@@ -59,13 +67,32 @@ module ApiResource
|
|
59
67
|
end
|
60
68
|
end
|
61
69
|
end
|
70
|
+
|
71
|
+
# This is provided by ActiveModel::AttributeMethods, it should
|
72
|
+
# define the basic methods but we need to override all the setters
|
73
|
+
# so we do dirty tracking
|
74
|
+
attrs = []
|
75
|
+
if class_data["attributes"] && class_data["attributes"]["public"]
|
76
|
+
attrs += class_data["attributes"]["public"].collect{|v|
|
77
|
+
v.is_a?(Array) ? v.first : v
|
78
|
+
}.flatten
|
79
|
+
end
|
80
|
+
if class_data["associations"]
|
81
|
+
attrs += class_data["associations"].values.collect(&:keys).flatten
|
82
|
+
end
|
83
|
+
define_attribute_methods(attrs)
|
84
|
+
|
62
85
|
# Swallow up any loading errors because the site may be incorrect
|
63
86
|
rescue Exception => e
|
64
87
|
if ApiResource.raise_missing_definition_error
|
65
88
|
raise e
|
66
89
|
end
|
67
|
-
ApiResource.logger.warn(
|
68
|
-
|
90
|
+
ApiResource.logger.warn(
|
91
|
+
"#{self} accessing #{self.new_element_path}"
|
92
|
+
)
|
93
|
+
ApiResource.logger.warn(
|
94
|
+
"#{self}: #{e.message[0..60].gsub(/[\n\r]/, '')} ...\n"
|
95
|
+
)
|
69
96
|
ApiResource.logger.debug(e.backtrace.pretty_inspect)
|
70
97
|
return e.respond_to?(:request) ? e.request : nil
|
71
98
|
end
|
@@ -446,6 +473,7 @@ module ApiResource
|
|
446
473
|
attributes.symbolize_keys.each do |key, value|
|
447
474
|
# If this attribute doesn't exist define it as a protected attribute
|
448
475
|
self.class.define_protected_attributes(key) unless self.respond_to?(key)
|
476
|
+
#self.send("#{key}_will_change!") if self.respond_to?("#{key}_will_change!")
|
449
477
|
self.attributes[key] =
|
450
478
|
case value
|
451
479
|
when Array
|
@@ -499,7 +527,7 @@ module ApiResource
|
|
499
527
|
end
|
500
528
|
|
501
529
|
def serializable_hash(options = {})
|
502
|
-
options[:include_associations] = options[:include_associations] ? options[:include_associations].symbolize_array :
|
530
|
+
options[:include_associations] = options[:include_associations] ? options[:include_associations].symbolize_array : self.changes.keys.symbolize_array.select{|k| self.association?(k)}
|
503
531
|
options[:include_extras] = options[:include_extras] ? options[:include_extras].symbolize_array : []
|
504
532
|
options[:except] ||= []
|
505
533
|
ret = self.attributes.inject({}) do |accum, (key,val)|
|
data/lib/api_resource/mocks.rb
CHANGED
@@ -254,7 +254,7 @@ module ApiResource
|
|
254
254
|
response[:response].tap{|resp| resp.generate_response(response[:params])}
|
255
255
|
else
|
256
256
|
raise ApiResource::ResourceNotFound.new(
|
257
|
-
MockResponse.new(
|
257
|
+
MockResponse.new({}, {:headers => {"Content-type" => "application/json"}, :status_code => 404}),
|
258
258
|
:message => "\nCould not find a response recorded for \#{request.pretty_inspect}\n" +
|
259
259
|
"Potential Responses Are:\n" +
|
260
260
|
"\#{Array.wrap(Mocks.responses_for_path(request.path)[:responses]).collect(&:first).pretty_inspect}"
|
data/nohup.out
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/choice-0.1.4/lib/choice/parser.rb:108: warning: Hash#index is deprecated; use Hash#key
|
2
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
3
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid 18804 exit 2> (RuntimeError)
|
4
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:96:in `project_path='
|
5
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
6
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:86:in `start'
|
7
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/bin/cijoe:50:in `<top (required)>'
|
8
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `load'
|
9
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `<main>'
|
10
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/choice-0.1.4/lib/choice/parser.rb:108: warning: Hash#index is deprecated; use Hash#key
|
11
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
12
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid 19377 exit 2> (RuntimeError)
|
13
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:96:in `project_path='
|
14
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
15
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:86:in `start'
|
16
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/bin/cijoe:50:in `<top (required)>'
|
17
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `load'
|
18
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `<main>'
|
19
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/choice-0.1.4/lib/choice/parser.rb:108: warning: Hash#index is deprecated; use Hash#key
|
20
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
21
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid 19463 exit 2> (RuntimeError)
|
22
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:96:in `project_path='
|
23
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
24
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:86:in `start'
|
25
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/bin/cijoe:50:in `<top (required)>'
|
26
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `load'
|
27
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `<main>'
|
28
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/choice-0.1.4/lib/choice/parser.rb:108: warning: Hash#index is deprecated; use Hash#key
|
29
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
30
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid 19730 exit 2> (RuntimeError)
|
31
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:96:in `project_path='
|
32
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
33
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:86:in `start'
|
34
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/bin/cijoe:50:in `<top (required)>'
|
35
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `load'
|
36
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `<main>'
|
37
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/choice-0.1.4/lib/choice/parser.rb:108: warning: Hash#index is deprecated; use Hash#key
|
38
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
39
|
+
/home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid 19738 exit 2> (RuntimeError)
|
40
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:96:in `project_path='
|
41
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
42
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/lib/cijoe/server.rb:86:in `start'
|
43
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/gems/cijoe-0.9.2/bin/cijoe:50:in `<top (required)>'
|
44
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `load'
|
45
|
+
from /home/bb/.rvm/gems/ruby-1.9.2-p290/bin/cijoe:19:in `<main>'
|
46
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
47
|
+
/usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/../lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid=19748,exited(2)> (RuntimeError)
|
48
|
+
from /usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/../lib/cijoe/server.rb:96:in `project_path='
|
49
|
+
from /usr/lib/ruby/gems/1.8/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `__send__'
|
50
|
+
from /usr/lib/ruby/gems/1.8/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
51
|
+
from /usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/../lib/cijoe/server.rb:86:in `start'
|
52
|
+
from /usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/cijoe:50
|
53
|
+
from /usr/bin/cijoe:19:in `load'
|
54
|
+
from /usr/bin/cijoe:19
|
55
|
+
cd: 1: can't cd to /vol/www/releases/api_resource/api_resource
|
56
|
+
/usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/../lib/cijoe/config.rb:25:in `to_s': Error calling git config, is a recent version of git installed? Command: "cd /vol/www/releases/api_resource/api_resource && git config cijoe.user", Error: "", Status: #<Process::Status: pid=19909,exited(2)> (RuntimeError)
|
57
|
+
from /usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/../lib/cijoe/server.rb:96:in `project_path='
|
58
|
+
from /usr/lib/ruby/gems/1.8/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `__send__'
|
59
|
+
from /usr/lib/ruby/gems/1.8/gems/sinatra-1.2.7/lib/sinatra/base.rb:964:in `set'
|
60
|
+
from /usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/../lib/cijoe/server.rb:86:in `start'
|
61
|
+
from /usr/lib/ruby/gems/1.8/gems/cijoe-0.9.2/bin/cijoe:50
|
62
|
+
from /usr/bin/cijoe:19:in `load'
|
63
|
+
from /usr/bin/cijoe:19
|
data/spec/lib/base_spec.rb
CHANGED
@@ -201,7 +201,7 @@ describe "Base" do
|
|
201
201
|
hash["test_resource"].should_not be_nil
|
202
202
|
end
|
203
203
|
|
204
|
-
it "should not include associations by default" do
|
204
|
+
it "should not include associations by default if they have not changed" do
|
205
205
|
tst = TestResource.new({:attr1 => "attr1", :attr2 => "attr2", :has_many_objects => []})
|
206
206
|
hash = JSON.parse(tst.to_json)
|
207
207
|
hash["has_many_objects"].should be_nil
|
@@ -213,6 +213,13 @@ describe "Base" do
|
|
213
213
|
hash["has_many_objects"].should_not be_nil
|
214
214
|
end
|
215
215
|
|
216
|
+
it "should include associations by default if they have changed" do
|
217
|
+
tst = TestResource.new({:attr1 => "attr1", :attr2 => "attr2", :has_many_objects => []})
|
218
|
+
tst.has_many_objects = [{:name => "test"}]
|
219
|
+
hash = JSON.parse(tst.to_json)
|
220
|
+
hash["has_many_objects"].should_not be_nil
|
221
|
+
end
|
222
|
+
|
216
223
|
it "should not include unknown attributes unless they are passed in via the include_extras array" do
|
217
224
|
tst = TestResource.new({:attr1 => "attr1", :attr2 => "attr2", :attr3 => "attr3"})
|
218
225
|
hash = JSON.parse(tst.to_json)
|
data/spec/lib/mocks_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe Mocks do
|
|
8
8
|
# we set up the mocks in spec helper, so we can just assert this
|
9
9
|
it "should hijack the connection" do
|
10
10
|
ApiResource::Mocks::Interface.any_instance.expects(:get).once.returns(
|
11
|
-
ApiResource::Mocks::MockResponse.new(
|
11
|
+
ApiResource::Mocks::MockResponse.new({}, {:headers => {"Content-type" => "application/json"}, :status_code => 200})
|
12
12
|
)
|
13
13
|
TestResource.reload_class_attributes
|
14
14
|
end
|
@@ -12,10 +12,6 @@ HashDealer.define(:new_test_object) do
|
|
12
12
|
:belongs_to => {:belongs_to_object => {}, :custom_name => {:class_name => "BelongsToObject"}},
|
13
13
|
:has_one => {:has_one_object => {}},
|
14
14
|
})
|
15
|
-
# Think of a use case for this
|
16
|
-
options({
|
17
|
-
|
18
|
-
})
|
19
15
|
end
|
20
16
|
|
21
17
|
HashDealer.define(:test_resource) do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api_resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-03-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: &
|
16
|
+
requirement: &2165270300 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - =
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.9
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2165270300
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: hash_dealer
|
27
|
-
requirement: &
|
27
|
+
requirement: &2165256520 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2165256520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rest-client
|
38
|
-
requirement: &
|
38
|
+
requirement: &2165233680 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2165233680
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: log4r
|
49
|
-
requirement: &
|
49
|
+
requirement: &2165231660 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2165231660
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: differ
|
60
|
-
requirement: &
|
60
|
+
requirement: &2165230180 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2165230180
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: colorize
|
71
|
-
requirement: &
|
71
|
+
requirement: &2165229340 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *2165229340
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: json
|
82
|
-
requirement: &
|
82
|
+
requirement: &2165228280 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *2165228280
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: rspec
|
93
|
-
requirement: &
|
93
|
+
requirement: &2165227400 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,10 +98,10 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *2165227400
|
102
102
|
- !ruby/object:Gem::Dependency
|
103
103
|
name: ruby-debug19
|
104
|
-
requirement: &
|
104
|
+
requirement: &2165226420 !ruby/object:Gem::Requirement
|
105
105
|
none: false
|
106
106
|
requirements:
|
107
107
|
- - ! '>='
|
@@ -109,10 +109,10 @@ dependencies:
|
|
109
109
|
version: '0'
|
110
110
|
type: :development
|
111
111
|
prerelease: false
|
112
|
-
version_requirements: *
|
112
|
+
version_requirements: *2165226420
|
113
113
|
- !ruby/object:Gem::Dependency
|
114
114
|
name: growl
|
115
|
-
requirement: &
|
115
|
+
requirement: &2165225600 !ruby/object:Gem::Requirement
|
116
116
|
none: false
|
117
117
|
requirements:
|
118
118
|
- - ! '>='
|
@@ -120,10 +120,10 @@ dependencies:
|
|
120
120
|
version: '0'
|
121
121
|
type: :development
|
122
122
|
prerelease: false
|
123
|
-
version_requirements: *
|
123
|
+
version_requirements: *2165225600
|
124
124
|
- !ruby/object:Gem::Dependency
|
125
125
|
name: rspec-rails
|
126
|
-
requirement: &
|
126
|
+
requirement: &2165225020 !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
129
129
|
- - ! '>='
|
@@ -131,10 +131,10 @@ dependencies:
|
|
131
131
|
version: '0'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
|
-
version_requirements: *
|
134
|
+
version_requirements: *2165225020
|
135
135
|
- !ruby/object:Gem::Dependency
|
136
136
|
name: factory_girl
|
137
|
-
requirement: &
|
137
|
+
requirement: &2165224220 !ruby/object:Gem::Requirement
|
138
138
|
none: false
|
139
139
|
requirements:
|
140
140
|
- - ! '>='
|
@@ -142,10 +142,10 @@ dependencies:
|
|
142
142
|
version: '0'
|
143
143
|
type: :development
|
144
144
|
prerelease: false
|
145
|
-
version_requirements: *
|
145
|
+
version_requirements: *2165224220
|
146
146
|
- !ruby/object:Gem::Dependency
|
147
147
|
name: simplecov
|
148
|
-
requirement: &
|
148
|
+
requirement: &2165223520 !ruby/object:Gem::Requirement
|
149
149
|
none: false
|
150
150
|
requirements:
|
151
151
|
- - ! '>='
|
@@ -153,10 +153,10 @@ dependencies:
|
|
153
153
|
version: '0'
|
154
154
|
type: :development
|
155
155
|
prerelease: false
|
156
|
-
version_requirements: *
|
156
|
+
version_requirements: *2165223520
|
157
157
|
- !ruby/object:Gem::Dependency
|
158
158
|
name: faker
|
159
|
-
requirement: &
|
159
|
+
requirement: &2165222520 !ruby/object:Gem::Requirement
|
160
160
|
none: false
|
161
161
|
requirements:
|
162
162
|
- - ! '>='
|
@@ -164,10 +164,10 @@ dependencies:
|
|
164
164
|
version: '0'
|
165
165
|
type: :development
|
166
166
|
prerelease: false
|
167
|
-
version_requirements: *
|
167
|
+
version_requirements: *2165222520
|
168
168
|
- !ruby/object:Gem::Dependency
|
169
169
|
name: guard
|
170
|
-
requirement: &
|
170
|
+
requirement: &2165220880 !ruby/object:Gem::Requirement
|
171
171
|
none: false
|
172
172
|
requirements:
|
173
173
|
- - ! '>='
|
@@ -175,10 +175,10 @@ dependencies:
|
|
175
175
|
version: '0'
|
176
176
|
type: :development
|
177
177
|
prerelease: false
|
178
|
-
version_requirements: *
|
178
|
+
version_requirements: *2165220880
|
179
179
|
- !ruby/object:Gem::Dependency
|
180
180
|
name: guard-rspec
|
181
|
-
requirement: &
|
181
|
+
requirement: &2165220040 !ruby/object:Gem::Requirement
|
182
182
|
none: false
|
183
183
|
requirements:
|
184
184
|
- - ! '>='
|
@@ -186,10 +186,10 @@ dependencies:
|
|
186
186
|
version: '0'
|
187
187
|
type: :development
|
188
188
|
prerelease: false
|
189
|
-
version_requirements: *
|
189
|
+
version_requirements: *2165220040
|
190
190
|
- !ruby/object:Gem::Dependency
|
191
191
|
name: mocha
|
192
|
-
requirement: &
|
192
|
+
requirement: &2165218740 !ruby/object:Gem::Requirement
|
193
193
|
none: false
|
194
194
|
requirements:
|
195
195
|
- - ! '>='
|
@@ -197,21 +197,21 @@ dependencies:
|
|
197
197
|
version: '0'
|
198
198
|
type: :development
|
199
199
|
prerelease: false
|
200
|
-
version_requirements: *
|
200
|
+
version_requirements: *2165218740
|
201
201
|
- !ruby/object:Gem::Dependency
|
202
202
|
name: bundler
|
203
|
-
requirement: &
|
203
|
+
requirement: &2165217560 !ruby/object:Gem::Requirement
|
204
204
|
none: false
|
205
205
|
requirements:
|
206
|
-
- -
|
206
|
+
- - ! '>='
|
207
207
|
- !ruby/object:Gem::Version
|
208
|
-
version:
|
208
|
+
version: '0'
|
209
209
|
type: :development
|
210
210
|
prerelease: false
|
211
|
-
version_requirements: *
|
211
|
+
version_requirements: *2165217560
|
212
212
|
- !ruby/object:Gem::Dependency
|
213
213
|
name: jeweler
|
214
|
-
requirement: &
|
214
|
+
requirement: &2165216380 !ruby/object:Gem::Requirement
|
215
215
|
none: false
|
216
216
|
requirements:
|
217
217
|
- - ~>
|
@@ -219,10 +219,10 @@ dependencies:
|
|
219
219
|
version: 1.6.4
|
220
220
|
type: :development
|
221
221
|
prerelease: false
|
222
|
-
version_requirements: *
|
222
|
+
version_requirements: *2165216380
|
223
223
|
- !ruby/object:Gem::Dependency
|
224
224
|
name: activerecord
|
225
|
-
requirement: &
|
225
|
+
requirement: &2165215240 !ruby/object:Gem::Requirement
|
226
226
|
none: false
|
227
227
|
requirements:
|
228
228
|
- - =
|
@@ -230,10 +230,10 @@ dependencies:
|
|
230
230
|
version: 3.0.9
|
231
231
|
type: :development
|
232
232
|
prerelease: false
|
233
|
-
version_requirements: *
|
233
|
+
version_requirements: *2165215240
|
234
234
|
- !ruby/object:Gem::Dependency
|
235
235
|
name: sqlite3
|
236
|
-
requirement: &
|
236
|
+
requirement: &2165214200 !ruby/object:Gem::Requirement
|
237
237
|
none: false
|
238
238
|
requirements:
|
239
239
|
- - ! '>='
|
@@ -241,7 +241,7 @@ dependencies:
|
|
241
241
|
version: '0'
|
242
242
|
type: :development
|
243
243
|
prerelease: false
|
244
|
-
version_requirements: *
|
244
|
+
version_requirements: *2165214200
|
245
245
|
description: A replacement for ActiveResource for RESTful APIs that handles associated
|
246
246
|
object and multiple data sources
|
247
247
|
email: ejl6266@gmail.com
|
@@ -293,6 +293,7 @@ files:
|
|
293
293
|
- lib/api_resource/observing.rb
|
294
294
|
- lib/api_resource/railtie.rb
|
295
295
|
- lib/api_resource/scopes.rb
|
296
|
+
- nohup.out
|
296
297
|
- spec/lib/associations_spec.rb
|
297
298
|
- spec/lib/attributes_spec.rb
|
298
299
|
- spec/lib/base_spec.rb
|
@@ -324,7 +325,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
324
325
|
version: '0'
|
325
326
|
segments:
|
326
327
|
- 0
|
327
|
-
hash:
|
328
|
+
hash: -2414595039217114624
|
328
329
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
329
330
|
none: false
|
330
331
|
requirements:
|
@@ -333,7 +334,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
333
334
|
version: '0'
|
334
335
|
requirements: []
|
335
336
|
rubyforge_project:
|
336
|
-
rubygems_version: 1.8.
|
337
|
+
rubygems_version: 1.8.11
|
337
338
|
signing_key:
|
338
339
|
specification_version: 3
|
339
340
|
summary: A replacement for ActiveResource for RESTful APIs that handles associated
|