api_resource 0.3.13 → 0.3.14
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/VERSION +1 -1
- data/api_resource.gemspec +6 -3
- data/lib/api_resource/associations.rb +7 -4
- data/lib/api_resource/base.rb +61 -24
- data/lib/api_resource/scopes.rb +4 -4
- data/spec/lib/associations_spec.rb +2 -2
- data/spec/lib/base_spec.rb +4 -1
- data/spec/lib/prefixes_spec.rb +107 -0
- data/spec/support/mocks/prefix_model_mocks.rb +5 -0
- data/spec/support/requests/prefix_model_requests.rb +7 -0
- data/spec/support/test_resource.rb +5 -1
- metadata +57 -179
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.14
|
data/api_resource.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "api_resource"
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.14"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ethan Langevin"]
|
12
|
-
s.date = "2012-09-
|
12
|
+
s.date = "2012-09-24"
|
13
13
|
s.description = "A replacement for ActiveResource for RESTful APIs that handles associated object and multiple data sources"
|
14
14
|
s.email = "ejl6266@gmail.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -71,12 +71,15 @@ Gem::Specification.new do |s|
|
|
71
71
|
"spec/lib/local_spec.rb",
|
72
72
|
"spec/lib/mocks_spec.rb",
|
73
73
|
"spec/lib/model_errors_spec.rb",
|
74
|
+
"spec/lib/prefixes_spec.rb",
|
74
75
|
"spec/spec_helper.rb",
|
75
76
|
"spec/support/mocks/association_mocks.rb",
|
76
77
|
"spec/support/mocks/error_resource_mocks.rb",
|
78
|
+
"spec/support/mocks/prefix_model_mocks.rb",
|
77
79
|
"spec/support/mocks/test_resource_mocks.rb",
|
78
80
|
"spec/support/requests/association_requests.rb",
|
79
81
|
"spec/support/requests/error_resource_requests.rb",
|
82
|
+
"spec/support/requests/prefix_model_requests.rb",
|
80
83
|
"spec/support/requests/test_resource_requests.rb",
|
81
84
|
"spec/support/test_resource.rb",
|
82
85
|
"spec/tmp/DIR"
|
@@ -84,7 +87,7 @@ Gem::Specification.new do |s|
|
|
84
87
|
s.homepage = "http://github.com/ejlangev/resource"
|
85
88
|
s.licenses = ["MIT"]
|
86
89
|
s.require_paths = ["lib"]
|
87
|
-
s.rubygems_version = "1.8.
|
90
|
+
s.rubygems_version = "1.8.17"
|
88
91
|
s.summary = "A replacement for ActiveResource for RESTful APIs that handles associated object and multiple data sources"
|
89
92
|
|
90
93
|
if s.respond_to? :specification_version then
|
@@ -119,14 +119,14 @@ module ApiResource
|
|
119
119
|
|
120
120
|
def association?(assoc)
|
121
121
|
self.related_objects.any? do |key, value|
|
122
|
-
next if key.to_s == "
|
122
|
+
next if key.to_s == "scopes"
|
123
123
|
value.detect { |k,v| k.to_sym == assoc.to_sym }
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
127
127
|
def association_names
|
128
128
|
# structure is {:has_many => {"myname" => "ClassName"}}
|
129
|
-
self.related_objects.clone.delete_if{|k,v| k.to_s == "
|
129
|
+
self.related_objects.clone.delete_if{|k,v| k.to_s == "scopes"}.collect{|k,v| v.keys.collect(&:to_sym)}.flatten
|
130
130
|
end
|
131
131
|
|
132
132
|
def association_class_name(assoc)
|
@@ -145,7 +145,9 @@ module ApiResource
|
|
145
145
|
self.association_types.keys.each do |type|
|
146
146
|
self.related_objects[type] = RelatedObjectHash.new({})
|
147
147
|
end
|
148
|
-
|
148
|
+
|
149
|
+
# TODO :Remove scopes from related_objects.
|
150
|
+
self.related_objects[:scopes] = RelatedObjectHash.new({})
|
149
151
|
end
|
150
152
|
|
151
153
|
def clone_related_objects
|
@@ -154,7 +156,8 @@ module ApiResource
|
|
154
156
|
self.association_types.keys.each do |type|
|
155
157
|
self.related_objects[type] = self.related_objects[type].clone
|
156
158
|
end
|
157
|
-
|
159
|
+
# TODO :Remove scopes from related_objects.
|
160
|
+
self.related_objects[:scopes] = self.related_objects[:scopes].clone
|
158
161
|
end
|
159
162
|
|
160
163
|
def define_association_as_attribute(assoc_type, assoc_name)
|
data/lib/api_resource/base.rb
CHANGED
@@ -26,8 +26,6 @@ module ApiResource
|
|
26
26
|
class_attribute :primary_key
|
27
27
|
self.primary_key = "id"
|
28
28
|
|
29
|
-
attr_accessor :prefix_options
|
30
|
-
|
31
29
|
class << self
|
32
30
|
|
33
31
|
# writers - accessors with defaults were not working
|
@@ -240,16 +238,33 @@ module ApiResource
|
|
240
238
|
|
241
239
|
def element_path(id, prefix_options = {}, query_options = nil)
|
242
240
|
prefix_options, query_options = split_options(prefix_options) if query_options.nil?
|
243
|
-
|
241
|
+
|
242
|
+
# If we have a prefix, we need a foreign key id
|
243
|
+
# This regex detects '//', which means no foreign key id is present.
|
244
|
+
if prefix(prefix_options) =~ /\/\/$/
|
245
|
+
"/#{collection_name}/#{URI.escape id.to_s}.#{format.extension}#{query_string(query_options)}"
|
246
|
+
else
|
247
|
+
# Fall back on this rather than search without the id
|
248
|
+
"#{prefix(prefix_options)}#{collection_name}/#{URI.escape id.to_s}.#{format.extension}#{query_string(query_options)}"
|
249
|
+
end
|
244
250
|
end
|
245
251
|
|
246
|
-
|
247
|
-
|
252
|
+
# TODO: Add back in support for non-dynamic prefix paths (e.g. /subdir/resources/new.json)
|
253
|
+
def new_element_path
|
254
|
+
"/#{collection_name}/new.#{format.extension}"
|
248
255
|
end
|
249
256
|
|
250
257
|
def collection_path(prefix_options = {}, query_options = nil)
|
251
258
|
prefix_options, query_options = split_options(prefix_options) if query_options.nil?
|
252
|
-
|
259
|
+
|
260
|
+
# If we have a prefix, we need a foreign key id
|
261
|
+
# This regex detects '//', which means no foreign key id is present.
|
262
|
+
if prefix(prefix_options) =~ /\/\/$/
|
263
|
+
"/#{collection_name}.#{format.extension}#{query_string(query_options)}"
|
264
|
+
else
|
265
|
+
# Fall back on this rather than search without the id
|
266
|
+
"#{prefix(prefix_options)}#{collection_name}.#{format.extension}#{query_string(query_options)}"
|
267
|
+
end
|
253
268
|
end
|
254
269
|
|
255
270
|
def build(attributes = {})
|
@@ -344,7 +359,7 @@ module ApiResource
|
|
344
359
|
else
|
345
360
|
prefix_options, query_options = split_options(options[:params])
|
346
361
|
path = collection_path(prefix_options, query_options)
|
347
|
-
instantiate_collection( (connection.get(path, headers) || [])
|
362
|
+
instantiate_collection( (connection.get(path, headers) || []))
|
348
363
|
end
|
349
364
|
rescue ApiResource::ResourceNotFound
|
350
365
|
# Swallowing ResourceNotFound exceptions and return nil - as per
|
@@ -368,17 +383,15 @@ module ApiResource
|
|
368
383
|
def find_single(scope, options)
|
369
384
|
prefix_options, query_options = split_options(options[:params])
|
370
385
|
path = element_path(scope, prefix_options, query_options)
|
371
|
-
instantiate_record(connection.get(path, headers)
|
386
|
+
instantiate_record(connection.get(path, headers))
|
372
387
|
end
|
373
388
|
|
374
|
-
def instantiate_collection(collection
|
375
|
-
collection.collect! { |record| instantiate_record(record
|
389
|
+
def instantiate_collection(collection)
|
390
|
+
collection.collect! { |record| instantiate_record(record) }
|
376
391
|
end
|
377
392
|
|
378
|
-
def instantiate_record(record
|
379
|
-
new(record)
|
380
|
-
resource.prefix_options = prefix_options
|
381
|
-
end
|
393
|
+
def instantiate_record(record)
|
394
|
+
new(record)
|
382
395
|
end
|
383
396
|
|
384
397
|
|
@@ -421,7 +434,6 @@ module ApiResource
|
|
421
434
|
end
|
422
435
|
|
423
436
|
def initialize(attributes = {})
|
424
|
-
@prefix_options = {}
|
425
437
|
# if we initialize this class, load the attributes
|
426
438
|
unless self.class.instance_variable_defined?(:@class_data)
|
427
439
|
self.class.set_class_attributes_upon_load
|
@@ -450,7 +462,7 @@ module ApiResource
|
|
450
462
|
end
|
451
463
|
|
452
464
|
def ==(other)
|
453
|
-
other.equal?(self) || (other.instance_of?(self.class) && other.id == self.id
|
465
|
+
other.equal?(self) || (other.instance_of?(self.class) && other.id == self.id)
|
454
466
|
end
|
455
467
|
|
456
468
|
def eql?(other)
|
@@ -464,7 +476,6 @@ module ApiResource
|
|
464
476
|
def dup
|
465
477
|
self.class.new.tap do |resource|
|
466
478
|
resource.attributes = self.attributes
|
467
|
-
resource.prefix_options = @prefix_options
|
468
479
|
end
|
469
480
|
end
|
470
481
|
|
@@ -499,11 +510,25 @@ module ApiResource
|
|
499
510
|
# We can't use alias_method here, because method 'id' optimizes itself on the fly.
|
500
511
|
id && id.to_s # Be sure to stringify the id for routes
|
501
512
|
end
|
513
|
+
|
514
|
+
def prefix_options
|
515
|
+
return {} unless self.class.prefix_source =~ /\:/
|
516
|
+
ret = {}
|
517
|
+
self.prefix_attribute_names.each do |name|
|
518
|
+
ret[name] = self.send(name)
|
519
|
+
end
|
520
|
+
ret
|
521
|
+
end
|
522
|
+
|
523
|
+
def prefix_attribute_names
|
524
|
+
return [] unless self.class.prefix_source =~ /\:/
|
525
|
+
self.class.prefix_source.scan(/\:(\w+)/).collect{|match| match.first.to_sym}
|
526
|
+
end
|
502
527
|
|
503
528
|
def load(attributes)
|
504
529
|
return if attributes.nil?
|
505
530
|
raise ArgumentError, "expected an attributes Hash, got #{attributes.inspect}" unless attributes.is_a?(Hash)
|
506
|
-
|
531
|
+
|
507
532
|
attributes.symbolize_keys.each do |key, value|
|
508
533
|
# If this attribute doesn't exist define it as a protected attribute
|
509
534
|
self.class.define_protected_attributes(key) unless self.respond_to?(key)
|
@@ -571,7 +596,12 @@ module ApiResource
|
|
571
596
|
# If this is an association and it's in include_associations then include it
|
572
597
|
if options[:include_extras].include?(key.to_sym)
|
573
598
|
accum.merge(key => val)
|
574
|
-
elsif options[:except].include?(key.to_sym)
|
599
|
+
elsif options[:except].include?(key.to_sym)
|
600
|
+
accum
|
601
|
+
# this attribute is already accounted for in the URL
|
602
|
+
elsif self.prefix_attribute_names.include?(key.to_sym)
|
603
|
+
accum
|
604
|
+
elsif(!include_nil_attributes && val.nil? && self.changes[key].blank?)
|
575
605
|
accum
|
576
606
|
else
|
577
607
|
!self.attribute?(key) || self.protected_attribute?(key) ? accum : accum.merge(key => val)
|
@@ -594,8 +624,12 @@ module ApiResource
|
|
594
624
|
load(response)
|
595
625
|
end
|
596
626
|
|
597
|
-
def element_path(id,
|
598
|
-
self.class.element_path(
|
627
|
+
def element_path(id, prefix_override_options = {}, query_options = nil)
|
628
|
+
self.class.element_path(
|
629
|
+
id,
|
630
|
+
self.prefix_options.merge(prefix_override_options),
|
631
|
+
query_options
|
632
|
+
)
|
599
633
|
end
|
600
634
|
|
601
635
|
# list of all attributes that are not nil
|
@@ -611,8 +645,11 @@ module ApiResource
|
|
611
645
|
self.class.new_element_path(prefix_options)
|
612
646
|
end
|
613
647
|
|
614
|
-
def collection_path(
|
615
|
-
self.class.collection_path(
|
648
|
+
def collection_path(override_prefix_options = {},query_options = nil)
|
649
|
+
self.class.collection_path(
|
650
|
+
self.prefix_options.merge(override_prefix_options),
|
651
|
+
query_options
|
652
|
+
)
|
616
653
|
end
|
617
654
|
|
618
655
|
def create(*args)
|
@@ -639,7 +676,7 @@ module ApiResource
|
|
639
676
|
def update(*args)
|
640
677
|
body = setup_update_call(*args)
|
641
678
|
# We can just ignore the response
|
642
|
-
connection.put(element_path(self.id
|
679
|
+
connection.put(element_path(self.id), body, self.class.headers).tap do |response|
|
643
680
|
load_attributes_from_response(response)
|
644
681
|
end
|
645
682
|
end
|
data/lib/api_resource/scopes.rb
CHANGED
@@ -5,12 +5,12 @@ module ApiResource
|
|
5
5
|
|
6
6
|
module ClassMethods
|
7
7
|
def scopes
|
8
|
-
return self.related_objects[:
|
8
|
+
return self.related_objects[:scopes]
|
9
9
|
end
|
10
10
|
|
11
11
|
def scope(name, hsh)
|
12
12
|
raise ArgumentError, "Expecting an attributes hash given #{hsh.inspect}" unless hsh.is_a?(Hash)
|
13
|
-
self.related_objects[:
|
13
|
+
self.related_objects[:scopes][name.to_sym] = hsh
|
14
14
|
# we also need to define a class method for each scope
|
15
15
|
self.instance_eval <<-EOE, __FILE__, __LINE__ + 1
|
16
16
|
def #{name}(*args)
|
@@ -20,12 +20,12 @@ module ApiResource
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def scope?(name)
|
23
|
-
self.related_objects[:
|
23
|
+
self.related_objects[:scopes][name.to_sym].present?
|
24
24
|
end
|
25
25
|
|
26
26
|
def scope_attributes(name)
|
27
27
|
raise "No such scope #{name}" unless self.scope?(name)
|
28
|
-
self.related_objects[:
|
28
|
+
self.related_objects[:scopes][name.to_sym]
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -225,7 +225,7 @@ describe "Associations" do
|
|
225
225
|
describe "Multi Object Associations" do
|
226
226
|
|
227
227
|
before(:all) do
|
228
|
-
TestResource.related_objects[:
|
228
|
+
TestResource.related_objects[:scopes].clear
|
229
229
|
end
|
230
230
|
|
231
231
|
after(:each) do
|
@@ -658,7 +658,7 @@ describe "Associations" do
|
|
658
658
|
end
|
659
659
|
end
|
660
660
|
it "should add remote associations to related objects" do
|
661
|
-
TestAR.related_objects.should eql({"has_many_remote"=>{}, "belongs_to_remote"=>{"my_favorite_thing"=>"TestClassYay"}, "has_one_remote"=>{}, "
|
661
|
+
TestAR.related_objects.should eql({"has_many_remote"=>{}, "belongs_to_remote"=>{"my_favorite_thing"=>"TestClassYay"}, "has_one_remote"=>{}, "scopes"=>{}})
|
662
662
|
end
|
663
663
|
context "Not Overriding Scopes" do
|
664
664
|
it "should not override scopes, which would raise an error with lambda-style scopes" do
|
data/spec/lib/base_spec.rb
CHANGED
@@ -643,7 +643,10 @@ describe "Base" do
|
|
643
643
|
end
|
644
644
|
|
645
645
|
it "should not load the resource definition when respond_to? is called
|
646
|
-
if the definition has already been loaded"
|
646
|
+
if the definition has already been loaded" do
|
647
|
+
TestResource.expects(:set_class_attributes_upon_load).never
|
648
|
+
TestResource.send(:respond_to?, :some_method)
|
649
|
+
end
|
647
650
|
|
648
651
|
end
|
649
652
|
|
@@ -0,0 +1,107 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "With Prefixes" do
|
4
|
+
|
5
|
+
let(:prefix_model) do
|
6
|
+
PrefixModel.new({:foreign_key_id => "123", :name => "test"})
|
7
|
+
end
|
8
|
+
|
9
|
+
before(:each) do
|
10
|
+
PrefixModel.reload_class_attributes
|
11
|
+
end
|
12
|
+
|
13
|
+
context ".find" do
|
14
|
+
|
15
|
+
it "should use the prefix to find a single record when given as a param" do
|
16
|
+
PrefixModel.connection.expects(:get)
|
17
|
+
.with(
|
18
|
+
"/foreign/123/prefix_models/456.json",
|
19
|
+
instance_of(Hash)
|
20
|
+
)
|
21
|
+
.returns({})
|
22
|
+
PrefixModel.find(456, :params => {:foreign_key_id => 123})
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should not use the prefix to find a single record when not given as a param to avoid automatic failure" do
|
26
|
+
PrefixModel.connection.expects(:get)
|
27
|
+
.with(
|
28
|
+
"/prefix_models/456.json",
|
29
|
+
instance_of(Hash)
|
30
|
+
)
|
31
|
+
.returns({})
|
32
|
+
PrefixModel.find(456)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "#create" do
|
37
|
+
|
38
|
+
it "should use the prefix to create a new record" do
|
39
|
+
prefix_model.send(:connection).expects(:post)
|
40
|
+
.with(
|
41
|
+
"/foreign/123/prefix_models.json",
|
42
|
+
{"prefix_model" => {"name" => "test"}}.to_json,
|
43
|
+
instance_of(Hash)
|
44
|
+
)
|
45
|
+
prefix_model.save
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
context "#first" do
|
51
|
+
|
52
|
+
it "should use the prefix to find records" do
|
53
|
+
prefix_model.send(:connection).expects(:get)
|
54
|
+
.with(
|
55
|
+
"/foreign/123/prefix_models.json",
|
56
|
+
instance_of(Hash)
|
57
|
+
)
|
58
|
+
.returns([])
|
59
|
+
PrefixModel.first(:params => {:foreign_key_id => 123})
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should not use the prefix to find records when not given as a param to avoid automatic failure" do
|
63
|
+
prefix_model.send(:connection).expects(:get)
|
64
|
+
.with(
|
65
|
+
"/prefix_models.json",
|
66
|
+
instance_of(Hash)
|
67
|
+
)
|
68
|
+
.returns([])
|
69
|
+
PrefixModel.first
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
context "#destroy" do
|
75
|
+
|
76
|
+
it "should use the prefix to destroy a record" do
|
77
|
+
|
78
|
+
prefix_model.id = 456
|
79
|
+
prefix_model.send(:connection).expects(:delete)
|
80
|
+
.with(
|
81
|
+
"/foreign/123/prefix_models/456.json",
|
82
|
+
instance_of(Hash)
|
83
|
+
)
|
84
|
+
prefix_model.destroy
|
85
|
+
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
context "#update" do
|
91
|
+
|
92
|
+
it "should use the prefix to update a record" do
|
93
|
+
prefix_model.id = 456
|
94
|
+
prefix_model.name = "changed name"
|
95
|
+
prefix_model.send(:connection).expects(:put)
|
96
|
+
.with(
|
97
|
+
"/foreign/123/prefix_models/456.json",
|
98
|
+
{"prefix_model" => {"name" => "changed name"}}.to_json,
|
99
|
+
instance_of(Hash)
|
100
|
+
)
|
101
|
+
prefix_model.save
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
@@ -31,6 +31,10 @@ class ErrorResource < ApiResource::Base
|
|
31
31
|
|
32
32
|
end
|
33
33
|
|
34
|
+
class PrefixModel < ApiResource::Base
|
35
|
+
self.prefix = "/foreign/:foreign_key_id/"
|
36
|
+
end
|
37
|
+
|
34
38
|
class ScopeResource < ApiResource::Base
|
35
39
|
|
36
40
|
end
|
@@ -65,4 +69,4 @@ module TestMod
|
|
65
69
|
|
66
70
|
end
|
67
71
|
|
68
|
-
end
|
72
|
+
end
|
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.3.
|
4
|
+
version: 0.3.14
|
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-09-
|
12
|
+
date: 2012-09-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70347987239000 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: '3'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3'
|
24
|
+
version_requirements: *70347987239000
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: hash_dealer
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70347987235820 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ! '>='
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: '0'
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
35
|
+
version_requirements: *70347987235820
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: rest-client
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70347987225660 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ! '>='
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: '0'
|
54
44
|
type: :runtime
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ! '>='
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
46
|
+
version_requirements: *70347987225660
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: log4r
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70347987223380 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ! '>='
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: '0'
|
70
55
|
type: :runtime
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ! '>='
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
57
|
+
version_requirements: *70347987223380
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: differ
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70347987220520 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ! '>='
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: '0'
|
86
66
|
type: :runtime
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0'
|
68
|
+
version_requirements: *70347987220520
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: colorize
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70347987217700 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ! '>='
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: '0'
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ! '>='
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: '0'
|
79
|
+
version_requirements: *70347987217700
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: json
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70347987214900 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ! '>='
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: '0'
|
118
88
|
type: :runtime
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ! '>='
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: '0'
|
90
|
+
version_requirements: *70347987214900
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: pry
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70347987213800 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ! '>='
|
@@ -133,15 +98,10 @@ dependencies:
|
|
133
98
|
version: '0'
|
134
99
|
type: :development
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ! '>='
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: '0'
|
101
|
+
version_requirements: *70347987213800
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: pry-doc
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &70347987211500 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ! '>='
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: '0'
|
150
110
|
type: :development
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ! '>='
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: '0'
|
112
|
+
version_requirements: *70347987211500
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: pry-nav
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &70347987210040 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ! '>='
|
@@ -165,15 +120,10 @@ dependencies:
|
|
165
120
|
version: '0'
|
166
121
|
type: :development
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ! '>='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: '0'
|
123
|
+
version_requirements: *70347987210040
|
174
124
|
- !ruby/object:Gem::Dependency
|
175
125
|
name: rspec
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &70347987208920 !ruby/object:Gem::Requirement
|
177
127
|
none: false
|
178
128
|
requirements:
|
179
129
|
- - ! '>='
|
@@ -181,15 +131,10 @@ dependencies:
|
|
181
131
|
version: '0'
|
182
132
|
type: :development
|
183
133
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ! '>='
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: '0'
|
134
|
+
version_requirements: *70347987208920
|
190
135
|
- !ruby/object:Gem::Dependency
|
191
136
|
name: ruby-debug19
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
+
requirement: &70347987207660 !ruby/object:Gem::Requirement
|
193
138
|
none: false
|
194
139
|
requirements:
|
195
140
|
- - ! '>='
|
@@ -197,15 +142,10 @@ dependencies:
|
|
197
142
|
version: '0'
|
198
143
|
type: :development
|
199
144
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ! '>='
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: '0'
|
145
|
+
version_requirements: *70347987207660
|
206
146
|
- !ruby/object:Gem::Dependency
|
207
147
|
name: growl
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirement: &70347987206540 !ruby/object:Gem::Requirement
|
209
149
|
none: false
|
210
150
|
requirements:
|
211
151
|
- - ! '>='
|
@@ -213,15 +153,10 @@ dependencies:
|
|
213
153
|
version: '0'
|
214
154
|
type: :development
|
215
155
|
prerelease: false
|
216
|
-
version_requirements:
|
217
|
-
none: false
|
218
|
-
requirements:
|
219
|
-
- - ! '>='
|
220
|
-
- !ruby/object:Gem::Version
|
221
|
-
version: '0'
|
156
|
+
version_requirements: *70347987206540
|
222
157
|
- !ruby/object:Gem::Dependency
|
223
158
|
name: rspec-rails
|
224
|
-
requirement: !ruby/object:Gem::Requirement
|
159
|
+
requirement: &70347987204880 !ruby/object:Gem::Requirement
|
225
160
|
none: false
|
226
161
|
requirements:
|
227
162
|
- - ! '>='
|
@@ -229,15 +164,10 @@ dependencies:
|
|
229
164
|
version: '0'
|
230
165
|
type: :development
|
231
166
|
prerelease: false
|
232
|
-
version_requirements:
|
233
|
-
none: false
|
234
|
-
requirements:
|
235
|
-
- - ! '>='
|
236
|
-
- !ruby/object:Gem::Version
|
237
|
-
version: '0'
|
167
|
+
version_requirements: *70347987204880
|
238
168
|
- !ruby/object:Gem::Dependency
|
239
169
|
name: factory_girl
|
240
|
-
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirement: &70347987192680 !ruby/object:Gem::Requirement
|
241
171
|
none: false
|
242
172
|
requirements:
|
243
173
|
- - ! '>='
|
@@ -245,15 +175,10 @@ dependencies:
|
|
245
175
|
version: '0'
|
246
176
|
type: :development
|
247
177
|
prerelease: false
|
248
|
-
version_requirements:
|
249
|
-
none: false
|
250
|
-
requirements:
|
251
|
-
- - ! '>='
|
252
|
-
- !ruby/object:Gem::Version
|
253
|
-
version: '0'
|
178
|
+
version_requirements: *70347987192680
|
254
179
|
- !ruby/object:Gem::Dependency
|
255
180
|
name: simplecov
|
256
|
-
requirement: !ruby/object:Gem::Requirement
|
181
|
+
requirement: &70347987190600 !ruby/object:Gem::Requirement
|
257
182
|
none: false
|
258
183
|
requirements:
|
259
184
|
- - ! '>='
|
@@ -261,15 +186,10 @@ dependencies:
|
|
261
186
|
version: '0'
|
262
187
|
type: :development
|
263
188
|
prerelease: false
|
264
|
-
version_requirements:
|
265
|
-
none: false
|
266
|
-
requirements:
|
267
|
-
- - ! '>='
|
268
|
-
- !ruby/object:Gem::Version
|
269
|
-
version: '0'
|
189
|
+
version_requirements: *70347987190600
|
270
190
|
- !ruby/object:Gem::Dependency
|
271
191
|
name: faker
|
272
|
-
requirement: !ruby/object:Gem::Requirement
|
192
|
+
requirement: &70347987188780 !ruby/object:Gem::Requirement
|
273
193
|
none: false
|
274
194
|
requirements:
|
275
195
|
- - ! '>='
|
@@ -277,15 +197,10 @@ dependencies:
|
|
277
197
|
version: '0'
|
278
198
|
type: :development
|
279
199
|
prerelease: false
|
280
|
-
version_requirements:
|
281
|
-
none: false
|
282
|
-
requirements:
|
283
|
-
- - ! '>='
|
284
|
-
- !ruby/object:Gem::Version
|
285
|
-
version: '0'
|
200
|
+
version_requirements: *70347987188780
|
286
201
|
- !ruby/object:Gem::Dependency
|
287
202
|
name: guard-bundler
|
288
|
-
requirement: !ruby/object:Gem::Requirement
|
203
|
+
requirement: &70347987187280 !ruby/object:Gem::Requirement
|
289
204
|
none: false
|
290
205
|
requirements:
|
291
206
|
- - ! '>='
|
@@ -293,15 +208,10 @@ dependencies:
|
|
293
208
|
version: '0'
|
294
209
|
type: :development
|
295
210
|
prerelease: false
|
296
|
-
version_requirements:
|
297
|
-
none: false
|
298
|
-
requirements:
|
299
|
-
- - ! '>='
|
300
|
-
- !ruby/object:Gem::Version
|
301
|
-
version: '0'
|
211
|
+
version_requirements: *70347987187280
|
302
212
|
- !ruby/object:Gem::Dependency
|
303
213
|
name: guard-rspec
|
304
|
-
requirement: !ruby/object:Gem::Requirement
|
214
|
+
requirement: &70347987185260 !ruby/object:Gem::Requirement
|
305
215
|
none: false
|
306
216
|
requirements:
|
307
217
|
- - ! '>='
|
@@ -309,15 +219,10 @@ dependencies:
|
|
309
219
|
version: '0'
|
310
220
|
type: :development
|
311
221
|
prerelease: false
|
312
|
-
version_requirements:
|
313
|
-
none: false
|
314
|
-
requirements:
|
315
|
-
- - ! '>='
|
316
|
-
- !ruby/object:Gem::Version
|
317
|
-
version: '0'
|
222
|
+
version_requirements: *70347987185260
|
318
223
|
- !ruby/object:Gem::Dependency
|
319
224
|
name: guard-spork
|
320
|
-
requirement: !ruby/object:Gem::Requirement
|
225
|
+
requirement: &70347987183440 !ruby/object:Gem::Requirement
|
321
226
|
none: false
|
322
227
|
requirements:
|
323
228
|
- - ! '>='
|
@@ -325,15 +230,10 @@ dependencies:
|
|
325
230
|
version: '0'
|
326
231
|
type: :development
|
327
232
|
prerelease: false
|
328
|
-
version_requirements:
|
329
|
-
none: false
|
330
|
-
requirements:
|
331
|
-
- - ! '>='
|
332
|
-
- !ruby/object:Gem::Version
|
333
|
-
version: '0'
|
233
|
+
version_requirements: *70347987183440
|
334
234
|
- !ruby/object:Gem::Dependency
|
335
235
|
name: mocha
|
336
|
-
requirement: !ruby/object:Gem::Requirement
|
236
|
+
requirement: &70347987181200 !ruby/object:Gem::Requirement
|
337
237
|
none: false
|
338
238
|
requirements:
|
339
239
|
- - ! '>='
|
@@ -341,15 +241,10 @@ dependencies:
|
|
341
241
|
version: '0'
|
342
242
|
type: :development
|
343
243
|
prerelease: false
|
344
|
-
version_requirements:
|
345
|
-
none: false
|
346
|
-
requirements:
|
347
|
-
- - ! '>='
|
348
|
-
- !ruby/object:Gem::Version
|
349
|
-
version: '0'
|
244
|
+
version_requirements: *70347987181200
|
350
245
|
- !ruby/object:Gem::Dependency
|
351
246
|
name: bundler
|
352
|
-
requirement: !ruby/object:Gem::Requirement
|
247
|
+
requirement: &70347987176960 !ruby/object:Gem::Requirement
|
353
248
|
none: false
|
354
249
|
requirements:
|
355
250
|
- - ! '>='
|
@@ -357,15 +252,10 @@ dependencies:
|
|
357
252
|
version: '0'
|
358
253
|
type: :development
|
359
254
|
prerelease: false
|
360
|
-
version_requirements:
|
361
|
-
none: false
|
362
|
-
requirements:
|
363
|
-
- - ! '>='
|
364
|
-
- !ruby/object:Gem::Version
|
365
|
-
version: '0'
|
255
|
+
version_requirements: *70347987176960
|
366
256
|
- !ruby/object:Gem::Dependency
|
367
257
|
name: jeweler
|
368
|
-
requirement: !ruby/object:Gem::Requirement
|
258
|
+
requirement: &70347987171880 !ruby/object:Gem::Requirement
|
369
259
|
none: false
|
370
260
|
requirements:
|
371
261
|
- - ~>
|
@@ -373,15 +263,10 @@ dependencies:
|
|
373
263
|
version: 1.6.4
|
374
264
|
type: :development
|
375
265
|
prerelease: false
|
376
|
-
version_requirements:
|
377
|
-
none: false
|
378
|
-
requirements:
|
379
|
-
- - ~>
|
380
|
-
- !ruby/object:Gem::Version
|
381
|
-
version: 1.6.4
|
266
|
+
version_requirements: *70347987171880
|
382
267
|
- !ruby/object:Gem::Dependency
|
383
268
|
name: activerecord
|
384
|
-
requirement: !ruby/object:Gem::Requirement
|
269
|
+
requirement: &70347987162100 !ruby/object:Gem::Requirement
|
385
270
|
none: false
|
386
271
|
requirements:
|
387
272
|
- - ~>
|
@@ -389,15 +274,10 @@ dependencies:
|
|
389
274
|
version: '3'
|
390
275
|
type: :development
|
391
276
|
prerelease: false
|
392
|
-
version_requirements:
|
393
|
-
none: false
|
394
|
-
requirements:
|
395
|
-
- - ~>
|
396
|
-
- !ruby/object:Gem::Version
|
397
|
-
version: '3'
|
277
|
+
version_requirements: *70347987162100
|
398
278
|
- !ruby/object:Gem::Dependency
|
399
279
|
name: sqlite3
|
400
|
-
requirement: !ruby/object:Gem::Requirement
|
280
|
+
requirement: &70347987161120 !ruby/object:Gem::Requirement
|
401
281
|
none: false
|
402
282
|
requirements:
|
403
283
|
- - ! '>='
|
@@ -405,12 +285,7 @@ dependencies:
|
|
405
285
|
version: '0'
|
406
286
|
type: :development
|
407
287
|
prerelease: false
|
408
|
-
version_requirements:
|
409
|
-
none: false
|
410
|
-
requirements:
|
411
|
-
- - ! '>='
|
412
|
-
- !ruby/object:Gem::Version
|
413
|
-
version: '0'
|
288
|
+
version_requirements: *70347987161120
|
414
289
|
description: A replacement for ActiveResource for RESTful APIs that handles associated
|
415
290
|
object and multiple data sources
|
416
291
|
email: ejl6266@gmail.com
|
@@ -474,12 +349,15 @@ files:
|
|
474
349
|
- spec/lib/local_spec.rb
|
475
350
|
- spec/lib/mocks_spec.rb
|
476
351
|
- spec/lib/model_errors_spec.rb
|
352
|
+
- spec/lib/prefixes_spec.rb
|
477
353
|
- spec/spec_helper.rb
|
478
354
|
- spec/support/mocks/association_mocks.rb
|
479
355
|
- spec/support/mocks/error_resource_mocks.rb
|
356
|
+
- spec/support/mocks/prefix_model_mocks.rb
|
480
357
|
- spec/support/mocks/test_resource_mocks.rb
|
481
358
|
- spec/support/requests/association_requests.rb
|
482
359
|
- spec/support/requests/error_resource_requests.rb
|
360
|
+
- spec/support/requests/prefix_model_requests.rb
|
483
361
|
- spec/support/requests/test_resource_requests.rb
|
484
362
|
- spec/support/test_resource.rb
|
485
363
|
- spec/tmp/DIR
|
@@ -498,7 +376,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
498
376
|
version: '0'
|
499
377
|
segments:
|
500
378
|
- 0
|
501
|
-
hash:
|
379
|
+
hash: -500623177238346967
|
502
380
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
503
381
|
none: false
|
504
382
|
requirements:
|
@@ -507,7 +385,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
507
385
|
version: '0'
|
508
386
|
requirements: []
|
509
387
|
rubyforge_project:
|
510
|
-
rubygems_version: 1.8.
|
388
|
+
rubygems_version: 1.8.17
|
511
389
|
signing_key:
|
512
390
|
specification_version: 3
|
513
391
|
summary: A replacement for ActiveResource for RESTful APIs that handles associated
|