daylight 0.9.0.rc1 → 0.9.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -0
- data/doc/develop.md +3 -3
- data/doc/principles.md +3 -3
- data/doc/usage.md +18 -6
- data/lib/daylight/api.rb +6 -3
- data/lib/daylight/associations.rb +2 -2
- data/lib/daylight/client_reloader.rb +1 -1
- data/lib/daylight/mock.rb +16 -3
- data/lib/daylight/refinements.rb +1 -1
- data/lib/daylight/version.rb +1 -1
- data/rails/daylight/api_controller.rb +8 -7
- data/rails/daylight/refiners.rb +22 -25
- data/rails/daylight/server.rb +5 -3
- data/rails/extensions/read_only_attributes.rb +2 -4
- data/spec/config/test_api.rb +1 -1
- data/spec/helpers/documentation_helper_spec.rb +1 -1
- data/spec/lib/daylight/api_spec.rb +18 -5
- data/spec/lib/daylight/associations_spec.rb +2 -4
- data/spec/lib/daylight/collection_spec.rb +0 -2
- data/spec/lib/daylight/mock_spec.rb +13 -6
- data/spec/lib/daylight/read_only_spec.rb +0 -2
- data/spec/lib/daylight/refinements_spec.rb +0 -2
- data/spec/lib/daylight/reflection_ext_spec.rb +2 -2
- data/spec/lib/daylight/resource_proxy_spec.rb +3 -11
- data/spec/rails/daylight/api_controller_spec.rb +4 -4
- data/spec/rails/daylight/refiners_spec.rb +13 -2
- data/spec/spec_helper.rb +3 -0
- metadata +16 -18
- data/spec/config/dependencies.rb +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bf59fd5ce024afa3fc59ddb2d66363f8f5d5209
|
4
|
+
data.tar.gz: 7dfddabc42f86705bf30f51cdbe41cd879e58bb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97b17af7fc52458bf4f0b255aaf404fa55821ca6b28b2be6885ecadd3618a22ccbc613b8c64ef011aebc4b12e905164ce29619598fd6b63ed19a0c169d28d5c9
|
7
|
+
data.tar.gz: 757ffe41b8d52bc4fd6e373a3a2041541c1549e8f7878d88fa9c45d5d5ccdca7b546a58164588e59c30c52a62433adf5321bb4b889efe543bcc20dd1f4aed39a
|
data/README.md
CHANGED
@@ -1,5 +1,8 @@
|
|
1
1
|
# Daylight
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/daylight.svg)](http://badge.fury.io/rb/daylight)
|
4
|
+
[![Build Status](https://travis-ci.org/att-cloud/daylight.svg?branch=master)](https://travis-ci.org/att-cloud/daylight)
|
5
|
+
|
3
6
|
Daylight extends Rails and ActiveResource to allow your client API to perform
|
4
7
|
akin to ActiveRecord
|
5
8
|
|
data/doc/develop.md
CHANGED
@@ -681,7 +681,7 @@ Once all client models are setup, associationed models will be fetched and
|
|
681
681
|
initialized:
|
682
682
|
|
683
683
|
````ruby
|
684
|
-
post =
|
684
|
+
post = API::V1::Post.first
|
685
685
|
|
686
686
|
post.blog #=> #<API::V1::Blog:0x007fd8ca4717d8 ...>
|
687
687
|
post.comments #=> [#<API::V1::Comment:0x007fd8ca538ce8...>, ...]
|
@@ -705,7 +705,7 @@ in `ActiveRecord`:
|
|
705
705
|
The `User` will be correctly retrieved for the `author` association:
|
706
706
|
|
707
707
|
````ruby
|
708
|
-
|
708
|
+
API::V1::Post.first.author #=> #<API::V1::User:0x007fd8ca543e90 ...>
|
709
709
|
````
|
710
710
|
|
711
711
|
#### Through Associations
|
@@ -774,7 +774,7 @@ associations.
|
|
774
774
|
|
775
775
|
#### Scopes and Remoted Methods
|
776
776
|
|
777
|
-
Adding
|
777
|
+
Adding scopes and remoted methods is very simple.
|
778
778
|
|
779
779
|
|
780
780
|
Given the `ActiveRecord` model setup:
|
data/doc/principles.md
CHANGED
@@ -25,9 +25,9 @@ be reviewed and changed as the need arises.
|
|
25
25
|
|
26
26
|
4. Expected behavior of dependent software _should_ not change when extended
|
27
27
|
* Developers should not be surprised by unexpected results from software they know and love
|
28
|
-
* Exception is to fix exposed problems in the underlying software or if the benefits are highly valueble
|
29
|
-
* Changes to the underlying software can be triggered through configuration
|
30
|
-
* **Examples**:`AutosaveAssociationFix`, `ActiveResource::Base#has_one`, `ReflectionExt`
|
28
|
+
* Exception is to fix exposed problems in the underlying software or if the benefits are highly valueble, consistant
|
29
|
+
* Changes to the underlying software (or default behavior) can be triggered through configuration
|
30
|
+
* **Examples**:`AutosaveAssociationFix`, `ActiveResource::Base#has_one`, `ReflectionExt`, `Daylight::Association::ClassMethods#has_many`
|
31
31
|
|
32
32
|
5. Extend dependent software (gems) by including changes using `ActiveSupport::Concerns`
|
33
33
|
* Concerns show in ancestor lists and can chain to original methods via `super`
|
data/doc/usage.md
CHANGED
@@ -53,8 +53,8 @@ refer to these client models in the following `Post` example:
|
|
53
53
|
|
54
54
|
has_one :company, through: :blog
|
55
55
|
|
56
|
-
has_many :comments
|
57
|
-
has_many :commenters,
|
56
|
+
has_many :comments, use: 'resource'
|
57
|
+
has_many :commenters, class_name: 'api/v1/user'
|
58
58
|
|
59
59
|
remote :top_comments, class_name: 'api/v1/comment'
|
60
60
|
end
|
@@ -354,9 +354,9 @@ original result set.
|
|
354
354
|
|
355
355
|
## Associations
|
356
356
|
|
357
|
-
Associations work as they do today in `ActiveResource`
|
358
|
-
exception
|
359
|
-
|
357
|
+
Associations work as they do today in `ActiveResource` with one notable
|
358
|
+
exception: client models will perform the lookup for associated objects
|
359
|
+
server-side.
|
360
360
|
|
361
361
|
> NOTE: This is useful if conditions or configuration is defined on the
|
362
362
|
> server-side model to perform correctly. Refer to
|
@@ -371,6 +371,18 @@ Daylight adds additional functionality directly on the association:
|
|
371
371
|
Currently, `ActiveResource` will only let you associate a resource by setting
|
372
372
|
the `foreign_key` directly on a model.
|
373
373
|
|
374
|
+
If you want to use the original behavior where the `foreign_key` is used to
|
375
|
+
lookup up associated objects, you can pass the `use: 'resource'` to the
|
376
|
+
`has_many` association.
|
377
|
+
|
378
|
+
````ruby
|
379
|
+
has_many :comments, use: 'resource'
|
380
|
+
````
|
381
|
+
|
382
|
+
Like the default `ActiveResource` behavior, this will return a
|
383
|
+
`ActiveResource::Collection` that cannot be [chained](#chaining), nor can
|
384
|
+
[nested resources](#nested-resources) be set in the collection.
|
385
|
+
|
374
386
|
### Nested Resources
|
375
387
|
|
376
388
|
When manipulating resources on an association, we call these _Nested Resources_.
|
@@ -829,7 +841,7 @@ Given the client model:
|
|
829
841
|
scopes :published
|
830
842
|
remote :top_comments
|
831
843
|
|
832
|
-
has_many :author
|
844
|
+
has_many :author
|
833
845
|
end
|
834
846
|
````
|
835
847
|
|
data/lib/daylight/api.rb
CHANGED
@@ -151,10 +151,13 @@ class Daylight::API < ActiveResource::Base
|
|
151
151
|
raise "Unsupported version #{v} is not one of #{versions.join(', ')}"
|
152
152
|
end
|
153
153
|
|
154
|
-
|
155
|
-
|
154
|
+
# Set the version string as the path prefix.
|
155
|
+
#
|
156
|
+
# Explicitly adding the endpoint.path here because ActiveResource ignores it
|
157
|
+
# when a prefix path has been set.
|
158
|
+
set_prefix "/#{endpoint.path}/#{v.downcase}/".gsub(/\/+/, '/')
|
156
159
|
|
157
|
-
|
160
|
+
@version = v.upcase
|
158
161
|
end
|
159
162
|
|
160
163
|
##
|
@@ -55,8 +55,8 @@ module Daylight::Associations
|
|
55
55
|
# ActiveResource::Associations#has_many
|
56
56
|
|
57
57
|
def has_many name, options={}
|
58
|
-
through = options.delete(:
|
59
|
-
return super
|
58
|
+
through = options.delete(:use).to_s
|
59
|
+
return super if through == 'resource'
|
60
60
|
|
61
61
|
create_reflection(:has_many, name, options).tap do |reflection|
|
62
62
|
nested_attribute_key = "#{reflection.name}_attributes"
|
data/lib/daylight/mock.rb
CHANGED
@@ -90,6 +90,8 @@ module Daylight
|
|
90
90
|
:created
|
91
91
|
when :put
|
92
92
|
:updated
|
93
|
+
when :patch
|
94
|
+
:patched
|
93
95
|
when :delete
|
94
96
|
:deleted
|
95
97
|
end
|
@@ -97,6 +99,9 @@ module Daylight
|
|
97
99
|
|
98
100
|
private
|
99
101
|
def model_class(model_name)
|
102
|
+
candidate_name = [Daylight::API.namespace, Daylight::API.version, model_name.classify].join("::")
|
103
|
+
candidate_name.constantize
|
104
|
+
rescue
|
100
105
|
model_name.classify.constantize
|
101
106
|
end
|
102
107
|
|
@@ -141,6 +146,14 @@ module Daylight
|
|
141
146
|
respond_with(status: 201)
|
142
147
|
end
|
143
148
|
|
149
|
+
def process_patched
|
150
|
+
clazz = model_class(path_parts.resource)
|
151
|
+
data = post_data[path_parts.resource.singularize]
|
152
|
+
@target_object = new_record(clazz, data.merge(id: path_parts.id.to_i))
|
153
|
+
|
154
|
+
respond_with(status: 204)
|
155
|
+
end
|
156
|
+
|
144
157
|
def process_deleted
|
145
158
|
clazz = model_class(path_parts.resource)
|
146
159
|
@target_object = new_record(clazz, id: path_parts.id.to_i)
|
@@ -190,7 +203,7 @@ module Daylight
|
|
190
203
|
end
|
191
204
|
end
|
192
205
|
|
193
|
-
%w[created updated associated indexed shown deleted].each do |action|
|
206
|
+
%w[created updated patched associated indexed shown deleted].each do |action|
|
194
207
|
define_method action do |resource|
|
195
208
|
@storage[action.to_s][resource.to_s.pluralize]
|
196
209
|
end
|
@@ -243,7 +256,7 @@ module Daylight
|
|
243
256
|
def setup_minitest
|
244
257
|
require 'webmock/minitest'
|
245
258
|
|
246
|
-
clazz = MiniTest::Test rescue
|
259
|
+
clazz = MiniTest::Test rescue Minitest::Test
|
247
260
|
|
248
261
|
clazz.class_eval do
|
249
262
|
include Daylight::Mock
|
@@ -274,7 +287,7 @@ module Daylight
|
|
274
287
|
# it does matching.
|
275
288
|
def site_with_credentials
|
276
289
|
@site_with_credentials ||= Daylight::API.site.dup.tap do |site|
|
277
|
-
site.userinfo =
|
290
|
+
site.userinfo = [Daylight::API.user, Daylight::API.password].compact.join(':')
|
278
291
|
site.to_s
|
279
292
|
end
|
280
293
|
end
|
data/lib/daylight/refinements.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
##
|
2
|
-
# Support for handling ActiveRecord-like
|
2
|
+
# Support for handling ActiveRecord-like refinements and chaining them together
|
3
3
|
# These refinements include: +where+, +find_by+, +order+, +limit+, and +offset+
|
4
4
|
# Named +scopes+ are also supported.
|
5
5
|
module Daylight::Refinements
|
data/lib/daylight/version.rb
CHANGED
@@ -34,8 +34,8 @@
|
|
34
34
|
# controller name. If you need to customize these, you can change them:
|
35
35
|
#
|
36
36
|
# class ExampleController < APIController
|
37
|
-
#
|
38
|
-
#
|
37
|
+
# set_model_name :news
|
38
|
+
# set_record_name :post
|
39
39
|
#
|
40
40
|
# handles :index
|
41
41
|
# end
|
@@ -50,11 +50,7 @@ class Daylight::APIController < ApplicationController
|
|
50
50
|
include VersionedUrlFor
|
51
51
|
|
52
52
|
API_ACTIONS = [:index, :create, :show, :update, :destroy, :associated, :remoted].freeze
|
53
|
-
class_attribute :record_name, :collection_name, :model_name
|
54
|
-
|
55
|
-
alias_method :set_record_name, :record_name= #:nodoc:
|
56
|
-
alias_method :set_collection_name, :collection_name= #:nodoc:
|
57
|
-
alias_method :set_model_name, :model_name= #:nodoc:
|
53
|
+
class_attribute :record_name, :collection_name, :model_name, instance_predicate: false
|
58
54
|
|
59
55
|
##
|
60
56
|
# Ensure messaging when sending unknown attributes or improper SQL
|
@@ -87,6 +83,11 @@ class Daylight::APIController < ApplicationController
|
|
87
83
|
|
88
84
|
|
89
85
|
class << self
|
86
|
+
|
87
|
+
alias_method :set_record_name, :record_name= #:nodoc:
|
88
|
+
alias_method :set_collection_name, :collection_name= #:nodoc:
|
89
|
+
alias_method :set_model_name, :model_name= #:nodoc:
|
90
|
+
|
90
91
|
protected
|
91
92
|
##
|
92
93
|
# Turns on common actions based on subclass needs (sets them as public methods).
|
data/rails/daylight/refiners.rb
CHANGED
@@ -1,22 +1,27 @@
|
|
1
1
|
##
|
2
2
|
# Methods in which to refine a query by a model's scopes or attributes
|
3
3
|
module Daylight::Refiners
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
##
|
11
|
-
# Extends subclasses of ActiveRecord::Base with the Daylight::Refiners features
|
12
|
-
# This hooks into the `inherited` method chain to perform this extension.
|
13
|
-
def inherited active_record
|
14
|
-
active_record.send(:include, Daylight::Refiners)
|
15
|
-
super
|
16
|
-
end
|
4
|
+
|
5
|
+
##
|
6
|
+
# Prepend class methods onto ActiveResource
|
7
|
+
def self.prepended(base)
|
8
|
+
class << base
|
9
|
+
prepend ClassMethods
|
17
10
|
end
|
18
11
|
end
|
19
12
|
|
13
|
+
##
|
14
|
+
# Helper to follow a named association if it exists
|
15
|
+
def associated name
|
16
|
+
raise ArgumentError, "Unknown association: #{name}" unless self.class.reflection_names.include? name.to_s
|
17
|
+
public_send(name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def remoted method
|
21
|
+
raise ArgumentError, "Unknown remote: #{method}" unless self.class.remoted?(method)
|
22
|
+
public_send(method)
|
23
|
+
end
|
24
|
+
|
20
25
|
##
|
21
26
|
# Helper to determine whether a request to use an attribute is valid or invalid
|
22
27
|
# Keeps track of which attributes are part of the request.
|
@@ -170,17 +175,9 @@ module Daylight::Refiners
|
|
170
175
|
end
|
171
176
|
end
|
172
177
|
|
173
|
-
|
174
|
-
##
|
175
|
-
# Helper to follow a named association if it exists
|
176
|
-
def associated name
|
177
|
-
raise ArgumentError, "Unknown association: #{name}" unless self.class.reflection_names.include? name.to_s
|
178
|
-
public_send(name)
|
179
|
-
end
|
178
|
+
end
|
180
179
|
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
end
|
185
|
-
end
|
180
|
+
# Mix into ActiveRecord::Base
|
181
|
+
ActiveSupport.on_load :active_record do
|
182
|
+
prepend Daylight::Refiners
|
186
183
|
end
|
data/rails/daylight/server.rb
CHANGED
@@ -18,12 +18,14 @@ module Daylight
|
|
18
18
|
|
19
19
|
autoload :Helpers
|
20
20
|
autoload :Params
|
21
|
-
autoload :Refiners
|
22
21
|
autoload :APIController
|
22
|
+
|
23
|
+
eager_autoload do
|
24
|
+
autoload :Refiners
|
25
|
+
end
|
23
26
|
end
|
24
27
|
|
25
28
|
# A convinience alias that will avoids any name collisions
|
26
29
|
APIController = Daylight::APIController unless defined?(APIController)
|
27
30
|
|
28
|
-
|
29
|
-
ActiveRecord::Base.send(:include, Daylight::Refiners::Extension)
|
31
|
+
Daylight.eager_load!
|
@@ -3,10 +3,8 @@ module ReadOnlyAttributes
|
|
3
3
|
|
4
4
|
included do
|
5
5
|
# place the read_only attributes along side the other class_attributes for a Serializer
|
6
|
-
|
7
|
-
|
8
|
-
self._read_only = []
|
9
|
-
end
|
6
|
+
class_attribute :_read_only
|
7
|
+
self._read_only = []
|
10
8
|
end
|
11
9
|
|
12
10
|
module ClassMethods
|
data/spec/config/test_api.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Daylight::API.setup! namespace: 'test_api',
|
1
|
+
Daylight::API.setup! namespace: 'test_api', endpoint: 'http://daylight.test', version: 'v1'
|
@@ -5,7 +5,7 @@ describe DaylightDocumentation::DocumentationHelper do
|
|
5
5
|
class TestModel < ActiveRecord::Base
|
6
6
|
include Daylight::Associations
|
7
7
|
|
8
|
-
has_many :users
|
8
|
+
has_many :users, use: 'resource'
|
9
9
|
|
10
10
|
# override attribute names so we don't have to mock
|
11
11
|
# out the database table
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class TestDescendant < Daylight::API
|
4
|
-
self.password = nil
|
5
|
-
|
6
4
|
has_one :child, class_name: 'TestDescendant'
|
7
5
|
end
|
8
6
|
|
@@ -53,13 +51,28 @@ describe Daylight::API do
|
|
53
51
|
|
54
52
|
it 'sets up site and prefix' do
|
55
53
|
silence_warnings do
|
56
|
-
Daylight::API.setup! endpoint: 'http://api.
|
54
|
+
Daylight::API.setup! endpoint: 'http://api.daylight.test/', version: 'v1'
|
57
55
|
end
|
58
56
|
|
59
|
-
Daylight::API.site.to_s.should == 'http://api.
|
57
|
+
Daylight::API.site.to_s.should == 'http://api.daylight.test/'
|
60
58
|
Daylight::API.prefix.should == '/v1/'
|
61
59
|
end
|
62
60
|
|
61
|
+
it 'handles sites with paths' do
|
62
|
+
silence_warnings do
|
63
|
+
Daylight::API.setup! endpoint: 'http://api.daylight.test/myapi', version: 'v1'
|
64
|
+
end
|
65
|
+
|
66
|
+
Daylight::API.site.to_s.should == 'http://api.daylight.test/myapi'
|
67
|
+
Daylight::API.prefix.should == '/myapi/v1/'
|
68
|
+
|
69
|
+
stub_request(:get, %r{#{TestDescendant.site}}).to_return(body: {}.to_json)
|
70
|
+
|
71
|
+
TestDescendant.find(1)
|
72
|
+
|
73
|
+
assert_requested :get, 'http://api.daylight.test/myapi/v1/test_descendants/1.json'
|
74
|
+
end
|
75
|
+
|
63
76
|
it 'sets request_root_in_json to true by default' do
|
64
77
|
Daylight::API.request_root_in_json.should == true
|
65
78
|
TestAPIDescendantJSON.request_root_in_json.should == true
|
@@ -146,7 +159,7 @@ describe Daylight::API do
|
|
146
159
|
describe 'metadata' do
|
147
160
|
before do
|
148
161
|
data = {
|
149
|
-
test_descendant: { name: "foo", immutable: "readme"},
|
162
|
+
test_descendant: { id: 1, name: "foo", immutable: "readme"},
|
150
163
|
meta: { test_descendant: { read_only: ["immutable"], nested_resources: ["test_resource"] } }
|
151
164
|
}
|
152
165
|
|
@@ -3,16 +3,14 @@ require 'spec_helper'
|
|
3
3
|
describe Daylight::Associations do
|
4
4
|
|
5
5
|
class RelatedTestClass < Daylight::API
|
6
|
-
self.password = nil
|
7
6
|
self.include_format_in_path = false
|
8
7
|
end
|
9
8
|
|
10
9
|
class AssociationsTestClass < Daylight::API
|
11
|
-
self.password = nil
|
12
10
|
self.include_format_in_path = false
|
13
11
|
|
14
|
-
has_many :related_test_classes
|
15
|
-
has_many :things, class_name: 'RelatedTestClass'
|
12
|
+
has_many :related_test_classes
|
13
|
+
has_many :things, class_name: 'RelatedTestClass'
|
16
14
|
belongs_to :parent, class_name: 'RelatedTestClass'
|
17
15
|
has_one :grandparent, class_name: 'RelatedTestClass', through: :parent
|
18
16
|
has_one :associate, class_name: 'RelatedTestClass'
|
@@ -2,11 +2,11 @@ require 'spec_helper'
|
|
2
2
|
require 'daylight/mock'
|
3
3
|
|
4
4
|
describe Daylight::Mock do
|
5
|
-
class
|
6
|
-
class
|
5
|
+
class Minitest::Spec ; end
|
6
|
+
class Minitest::Test ; end
|
7
7
|
|
8
8
|
class TestClient < Daylight::API
|
9
|
-
has_many :test_client_children,
|
9
|
+
has_many :test_client_children, class_name: 'TestClientChild'
|
10
10
|
end
|
11
11
|
|
12
12
|
class TestClientChild < Daylight::API ; end
|
@@ -64,6 +64,15 @@ describe Daylight::Mock do
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
+
describe 'patch' do
|
68
|
+
let(:data) { {test_client: {name: 'wibble'}}.to_json }
|
69
|
+
|
70
|
+
it "updates the attributes" do
|
71
|
+
object = TestClient.find(1)
|
72
|
+
object.patch(:test, {}, data).should be_true
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
67
76
|
describe 'create' do
|
68
77
|
it "returns the created object" do
|
69
78
|
object = TestClient.new(name: 'foo')
|
@@ -125,11 +134,10 @@ describe Daylight::Mock do
|
|
125
134
|
daylight_mock.last_created(:test_clients).target_object.code.should == 'foo'
|
126
135
|
end
|
127
136
|
end
|
128
|
-
|
129
137
|
end
|
130
138
|
|
131
139
|
describe 'minitest setup' do
|
132
|
-
let(:minitest) { Minitest::Test.new }
|
140
|
+
let(:minitest) { Minitest::Test.new(:foo) rescue MiniTest::Test.new }
|
133
141
|
|
134
142
|
it "adds our mock methods to Minitest::Test" do
|
135
143
|
minitest.should respond_to(:daylight_mock)
|
@@ -140,5 +148,4 @@ describe Daylight::Mock do
|
|
140
148
|
minitest.before_setup
|
141
149
|
end
|
142
150
|
end
|
143
|
-
|
144
151
|
end
|
@@ -11,8 +11,8 @@ describe Daylight::ReflectionExt do
|
|
11
11
|
class TestAPI::V1::Comment < Daylight::API; end
|
12
12
|
|
13
13
|
class TestAPI::V1::Post < Daylight::API
|
14
|
-
has_many :comments
|
15
|
-
has_many :top_comments, class_name: 'test_api/v1/comment'
|
14
|
+
has_many :comments, use: 'resource'
|
15
|
+
has_many :top_comments, use: 'resource', class_name: 'test_api/v1/comment'
|
16
16
|
|
17
17
|
belongs_to :test_fallback
|
18
18
|
end
|
@@ -3,10 +3,8 @@ require 'spec_helper'
|
|
3
3
|
describe Daylight::ResourceProxy do
|
4
4
|
|
5
5
|
class ProxyTestClass < Daylight::API
|
6
|
-
self.password = nil
|
7
|
-
|
8
6
|
scopes :foo, :bar
|
9
|
-
has_many :related_proxy_test_classes
|
7
|
+
has_many :related_proxy_test_classes
|
10
8
|
|
11
9
|
def self.wibble
|
12
10
|
'wibble'
|
@@ -15,17 +13,11 @@ describe Daylight::ResourceProxy do
|
|
15
13
|
|
16
14
|
class RelatedProxyTestClass < Daylight::API
|
17
15
|
scopes :baz
|
18
|
-
|
19
|
-
self.password = nil
|
20
16
|
end
|
21
17
|
|
22
|
-
class ProxyTestClass1 < Daylight::API
|
23
|
-
self.password = nil
|
24
|
-
end
|
18
|
+
class ProxyTestClass1 < Daylight::API ; end
|
25
19
|
|
26
|
-
class ProxyTestClass2 < Daylight::API
|
27
|
-
self.password = nil
|
28
|
-
end
|
20
|
+
class ProxyTestClass2 < Daylight::API ; end
|
29
21
|
|
30
22
|
before do
|
31
23
|
data = [{name: 'one'}, {name: 'two'}]
|
@@ -27,16 +27,16 @@ end
|
|
27
27
|
class TestCasesController < Daylight::APIController
|
28
28
|
handles :create, :update, :destroy
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
set_model_name :case
|
31
|
+
set_record_name :result
|
32
|
+
set_collection_name :results
|
33
33
|
end
|
34
34
|
|
35
35
|
class TestAppRecord < ActiveResource::Base
|
36
36
|
end
|
37
37
|
|
38
38
|
class TestErrorsController < Daylight::APIController
|
39
|
-
|
39
|
+
set_model_name :test_app_record
|
40
40
|
|
41
41
|
def raise_argument_error
|
42
42
|
raise ArgumentError.new('this is my message')
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
class RefinerMockActiveRecordBase
|
4
|
-
|
4
|
+
prepend Daylight::Refiners
|
5
5
|
|
6
6
|
def self.scope(name, body, &block); end
|
7
7
|
def self.where(*args); end
|
@@ -56,10 +56,21 @@ describe Daylight::Refiners::AttributeSeive do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
describe Daylight::Refiners do
|
59
|
+
class AnotherRefinersTestClass < RefinerMockActiveRecordBase
|
60
|
+
scope :scope_c, -> { 'c' }
|
61
|
+
end
|
62
|
+
|
59
63
|
it 'tracks registered scopes' do
|
60
64
|
RefinersTestClass.registered_scopes.should == %w[scope_a scope_b]
|
61
65
|
end
|
62
66
|
|
67
|
+
it 'keeps track of different scopes on different classes' do
|
68
|
+
RefinersTestClass.registered_scopes.should == %w[scope_a scope_b]
|
69
|
+
AnotherRefinersTestClass.registered_scopes.should == %w[scope_c]
|
70
|
+
|
71
|
+
RefinerMockActiveRecordBase.scope :scope_x, -> { 'x' }
|
72
|
+
end
|
73
|
+
|
63
74
|
it 'returns true if scoped? finds a match' do
|
64
75
|
RefinersTestClass.should be_scoped(:scope_a)
|
65
76
|
RefinersTestClass.should_not be_scoped(:foo)
|
@@ -100,7 +111,7 @@ describe Daylight::Refiners do
|
|
100
111
|
end
|
101
112
|
|
102
113
|
it 'raises an error if an unknown attribute is supplied' do
|
103
|
-
expect { RefinersTestClass.filter_by(baz: 'wibble') }.to raise_error(ArgumentError,
|
114
|
+
expect { RefinersTestClass.filter_by(baz: 'wibble') }.to raise_error(ArgumentError, /Unknown key: "?baz"?/)
|
104
115
|
end
|
105
116
|
|
106
117
|
it 'applies where clause for all supplied attributes' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: daylight
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.
|
4
|
+
version: 0.9.0.rc2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid MacDonald
|
@@ -9,22 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-07-
|
12
|
+
date: 2014-07-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: rails
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
17
|
-
requirements:
|
18
|
-
- - ~>
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: 4.0.1
|
21
|
-
type: :runtime
|
22
|
-
prerelease: false
|
23
|
-
version_requirements: !ruby/object:Gem::Requirement
|
24
|
-
requirements:
|
25
|
-
- - ~>
|
26
|
-
- !ruby/object:Gem::Version
|
27
|
-
version: 4.0.1
|
28
14
|
- !ruby/object:Gem::Dependency
|
29
15
|
name: activeresource
|
30
16
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,6 +179,20 @@ dependencies:
|
|
193
179
|
- - '>='
|
194
180
|
- !ruby/object:Gem::Version
|
195
181
|
version: '0'
|
182
|
+
- !ruby/object:Gem::Dependency
|
183
|
+
name: rake
|
184
|
+
requirement: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - '>='
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
type: :development
|
190
|
+
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - '>='
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
196
|
description: |2
|
197
197
|
Daylight extends Rails on the server and ActiveResource in the client to
|
198
198
|
allow your ActiveResource client API to perform more like to ActiveRecord
|
@@ -263,7 +263,6 @@ files:
|
|
263
263
|
- doc/testing.md
|
264
264
|
- doc/usage.md
|
265
265
|
- README.md
|
266
|
-
- spec/config/dependencies.rb
|
267
266
|
- spec/config/factory_girl.rb
|
268
267
|
- spec/config/simplecov_rcov.rb
|
269
268
|
- spec/config/test_api.rb
|
@@ -354,7 +353,6 @@ signing_key:
|
|
354
353
|
specification_version: 4
|
355
354
|
summary: Allow ActiveResource to function more like ActiveRecord
|
356
355
|
test_files:
|
357
|
-
- spec/config/dependencies.rb
|
358
356
|
- spec/config/factory_girl.rb
|
359
357
|
- spec/config/simplecov_rcov.rb
|
360
358
|
- spec/config/test_api.rb
|
data/spec/config/dependencies.rb
DELETED