restly 0.0.1.alpha.1 → 0.0.1.alpha.2

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.
Files changed (75) hide show
  1. data/.rspec +2 -0
  2. data/README.md +63 -3
  3. data/lib/generators/restly_config_generator.rb +13 -0
  4. data/lib/generators/restly_model_generator.rb +18 -0
  5. data/lib/generators/templates/config.yml.erb +32 -0
  6. data/lib/generators/templates/model.rb.erb +9 -0
  7. data/lib/restly/associations/base.rb +83 -12
  8. data/lib/restly/associations/belongs_to.rb +23 -6
  9. data/lib/restly/associations/embeddable_resources/embeds_many.rb +4 -0
  10. data/lib/restly/associations/embeddable_resources/embeds_one.rb +4 -0
  11. data/lib/restly/associations/embeddable_resources.rb +15 -4
  12. data/lib/restly/associations/has_many.rb +0 -9
  13. data/lib/restly/associations/has_one.rb +0 -9
  14. data/lib/restly/associations.rb +75 -15
  15. data/lib/restly/base/generic_methods.rb +10 -2
  16. data/lib/restly/base/includes.rb +0 -22
  17. data/lib/restly/base/instance/attributes.rb +26 -16
  18. data/lib/restly/base/instance/persistence.rb +6 -1
  19. data/lib/restly/base/{write_callbacks.rb → instance/write_callbacks.rb} +1 -1
  20. data/lib/restly/base/instance.rb +15 -9
  21. data/lib/restly/base.rb +3 -4
  22. data/lib/restly/client.rb +2 -2
  23. data/lib/restly/collection/pagination.rb +1 -1
  24. data/lib/restly/concerned_inheritance.rb +30 -0
  25. data/lib/restly/configuration.rb +20 -18
  26. data/lib/restly/error.rb +18 -20
  27. data/lib/restly/nested_attributes.rb +4 -3
  28. data/lib/restly/proxies/{auth.rb → authorization.rb} +1 -1
  29. data/lib/restly/proxies/base.rb +4 -0
  30. data/lib/restly/proxies/{params.rb → with_params.rb} +1 -1
  31. data/lib/restly/proxies/with_path.rb +24 -0
  32. data/lib/restly/proxies.rb +3 -4
  33. data/lib/restly/railtie.rb +5 -0
  34. data/lib/restly/version.rb +1 -1
  35. data/lib/restly.rb +2 -0
  36. data/restly.gemspec +0 -1
  37. data/spec/restly/associations/base_spec.rb +8 -0
  38. data/spec/restly/associations/belongs_to_spec.rb +8 -0
  39. data/spec/restly/associations/embeddable_resources/embeds_many_spec.rb +8 -0
  40. data/spec/restly/associations/embeddable_resources/embeds_one_spec.rb +8 -0
  41. data/spec/restly/associations/embeddable_resources_spec.rb +8 -0
  42. data/spec/restly/associations/has_many_spec.rb +8 -0
  43. data/spec/restly/associations/has_one_spec.rb +8 -0
  44. data/spec/restly/associations_spec.rb +8 -0
  45. data/spec/restly/base/fields_spec.rb +8 -0
  46. data/spec/restly/base/generic_methods_spec.rb +8 -0
  47. data/spec/restly/base/includes_spec.rb +8 -0
  48. data/spec/restly/base/instance/actions_spec.rb +8 -0
  49. data/spec/restly/base/instance/attributes_spec.rb +8 -0
  50. data/spec/restly/base/instance/persistence_spec.rb +8 -0
  51. data/spec/restly/base/instance/write_callbacks_spec.rb +8 -0
  52. data/spec/restly/base/instance_spec.rb +8 -0
  53. data/spec/restly/base/mass_assignment_security_spec.rb +8 -0
  54. data/spec/restly/base/resource/finders_spec.rb +8 -0
  55. data/spec/restly/base/resource_spec.rb +8 -0
  56. data/spec/restly/base_spec.rb +5 -51
  57. data/spec/restly/client_spec.rb +8 -0
  58. data/spec/restly/collection/pagination_spec.rb +8 -0
  59. data/spec/restly/collection_spec.rb +8 -0
  60. data/spec/restly/concearned_inheritance_spec.rb +8 -0
  61. data/spec/restly/configuration_spec.rb +8 -0
  62. data/spec/restly/connection_spec.rb +8 -0
  63. data/spec/restly/controller_methods_spec.rb +8 -0
  64. data/spec/restly/middleware_spec.rb +8 -0
  65. data/spec/restly/nested_attributes_spec.rb +8 -0
  66. data/spec/restly/proxies/associations/collection_spec.rb +8 -0
  67. data/spec/restly/proxies/associations/instance_spec.rb +8 -0
  68. data/spec/restly/proxies/authorization_spec.rb +8 -0
  69. data/spec/restly/proxies/base_spec.rb +8 -0
  70. data/spec/restly/proxies/with_params_spec.rb +8 -0
  71. data/spec/restly/thread_local_spec.rb +8 -0
  72. data/spec/{helper.rb → spec_helper.rb} +0 -3
  73. metadata +82 -26
  74. data/lib/restly/associations/builder.rb +0 -30
  75. data/spec/fakewebs.rb +0 -0
@@ -12,26 +12,34 @@ module Restly::Base::Instance::Attributes
12
12
  end
13
13
 
14
14
  def attributes
15
- nil_values = fields.inject({}) do |hash, key|
16
- hash[key] = nil
15
+ fields.reduce(HashWithIndifferentAccess.new) do |hash, key|
16
+ hash[key] = read_attribute key, autoload: false
17
17
  hash
18
18
  end
19
- @attributes.reverse_merge!(nil_values)
20
19
  end
21
20
 
22
21
  def write_attribute(attr, val)
23
22
  if fields.include?(attr)
24
23
  send("#{attr}_will_change!".to_sym) unless val == @attributes[attr.to_sym] || !@loaded
25
24
  @attributes[attr.to_sym] = val
25
+
26
+ elsif (association = klass.reflect_on_resource_association attr).present?
27
+ set_association attr, association.stub(self, val) unless (@association_attributes ||= {}.with_indifferent_access)[attr].present?
28
+
26
29
  else
27
30
  puts "WARNING: Attribute `#{attr}` not written. ".colorize(:yellow) +
28
31
  "To fix this add the following the the model. -- field :#{attr}"
29
32
  end
30
33
  end
31
34
 
32
- def read_attribute(attr)
33
- raise NoMethodError, "undefined method #{attr} for #{klass}" unless fields.include?(attr)
34
- attributes[attr.to_sym]
35
+ def read_attribute(attr, options={})
36
+ options.reverse_merge!({autoload: true})
37
+ if @attributes[attr.to_sym].nil? && !!options[:autoload] && !loaded?
38
+ load!
39
+ read_attribute(attr)
40
+ else
41
+ @attributes[attr.to_sym]
42
+ end
35
43
  end
36
44
 
37
45
  alias :attribute :read_attribute
@@ -51,10 +59,18 @@ module Restly::Base::Instance::Attributes
51
59
  attribute(attr)
52
60
  end
53
61
 
62
+ def respond_to_attribute?(m)
63
+ !!(/(?<attr>\w+)(?<setter>=)?$/ =~ m.to_s) && associations.include?(attr)
64
+ end
65
+
66
+ def respond_to?(m, include_private = false)
67
+ respond_to_attribute?(m) || super
68
+ end
69
+
54
70
  private
55
71
 
56
72
  def attribute_for_inspect(attr_name)
57
- value = attribute(attr_name)
73
+ value = attribute(attr_name, autoload: false)
58
74
  if value.is_a?(String) && value.length > 50
59
75
  "#{value[0..50]}...".inspect
60
76
  else
@@ -63,26 +79,20 @@ module Restly::Base::Instance::Attributes
63
79
  end
64
80
 
65
81
  def set_attributes_from_response(response=self.response)
66
- parsed = response.parsed || {}
67
- parsed = parsed[resource_name] if parsed.is_a?(Hash) && parsed[resource_name]
68
- self.attributes = parsed
82
+ self.attributes = parsed_response(response)
69
83
  end
70
84
 
71
85
  def method_missing(m, *args, &block)
72
86
  if !!(/(?<attr>\w+)(?<setter>=)?$/ =~ m.to_s) && fields.include?(m)
73
87
  case !!setter
74
88
  when true
75
- write_attribute(m, *args)
89
+ write_attribute(attr, *args)
76
90
  when false
77
- read_attribute(m)
91
+ read_attribute(attr)
78
92
  end
79
93
  else
80
94
  super(m, *args, &block)
81
95
  end
82
96
  end
83
97
 
84
- def respond_to_missing?(method_name, include_private = false)
85
- !!(/(?<attr>\w+)=?$/ =~ method_name.to_s) && fields.include?(method_name)
86
- end
87
-
88
98
  end
@@ -14,7 +14,12 @@ module Restly::Base::Instance::Persistence
14
14
  end
15
15
 
16
16
  def reload!
17
- self.class.send :instance_from_response, connection.get(path, force: true)
17
+ raise Restly::Error::MissingId, "Cannot reload #{resource_name}, either it hasn't been created or it is missing an ID." unless id
18
+ set_attributes_from_response connection.get(path, force: true)
19
+ @loaded = true
20
+ self
18
21
  end
19
22
 
23
+ alias :load! :reload!
24
+
20
25
  end
@@ -1,4 +1,4 @@
1
- module Restly::Base::WriteCallbacks
1
+ module Restly::Base::Instance::WriteCallbacks
2
2
  extend ActiveSupport::Concern
3
3
 
4
4
  included do
@@ -4,11 +4,13 @@ module Restly::Base::Instance
4
4
  autoload :Actions
5
5
  autoload :Attributes
6
6
  autoload :Persistence
7
+ autoload :WriteCallbacks
7
8
 
8
9
  include Restly::Base::GenericMethods
9
10
  include Actions
10
11
  include Attributes
11
12
  include Persistence
13
+ include WriteCallbacks
12
14
 
13
15
  included do
14
16
  attr_reader :init_options, :response
@@ -43,8 +45,8 @@ module Restly::Base::Instance
43
45
 
44
46
  end
45
47
 
46
- def pry_in
47
- binding.pry
48
+ def loaded?
49
+ @loaded
48
50
  end
49
51
 
50
52
  def set_response(response)
@@ -52,7 +54,16 @@ module Restly::Base::Instance
52
54
  @response = response
53
55
  if response.try(:body)
54
56
  set_attributes_from_response
55
- stub_associations_from_response
57
+ end
58
+ end
59
+
60
+ def parsed_response(response=self.response)
61
+ return {} unless response
62
+ parsed = response.parsed || {}
63
+ if parsed.is_a?(Hash) && parsed[resource_name]
64
+ parsed[resource_name]
65
+ else
66
+ parsed
56
67
  end
57
68
  end
58
69
 
@@ -61,12 +72,7 @@ module Restly::Base::Instance
61
72
  end
62
73
 
63
74
  def connection=(val)
64
- @connection
65
- end
66
-
67
- # Todo: Needed?
68
- def instance
69
- self
75
+ @connection = val
70
76
  end
71
77
 
72
78
  def klass
data/lib/restly/base.rb CHANGED
@@ -2,13 +2,10 @@ module Restly
2
2
  class Base
3
3
  # Autoload
4
4
  extend ActiveSupport::Autoload
5
- #autoload :Pagination # Todo!
6
5
  autoload :Resource
7
6
  autoload :Instance
8
- autoload :Collection
9
7
  autoload :GenericMethods
10
8
  autoload :Includes
11
- autoload :WriteCallbacks
12
9
  autoload :MassAssignmentSecurity
13
10
  autoload :Fields
14
11
 
@@ -32,13 +29,15 @@ module Restly
32
29
  # Set Up Callbacks
33
30
  define_model_callbacks :create, :save, :delete, :update, :initialize
34
31
 
32
+ # Concerned Inheritance
33
+ include Restly::ConcernedInheritance
34
+
35
35
  # Actions & Callbacks
36
36
  extend Resource
37
37
  include Includes
38
38
  include Instance
39
39
  include Fields
40
40
  include MassAssignmentSecurity
41
- include WriteCallbacks
42
41
 
43
42
  # Relationships
44
43
  include Restly::Associations
data/lib/restly/client.rb CHANGED
@@ -5,8 +5,8 @@ class Restly::Client < OAuth2::Client
5
5
 
6
6
  def initialize(*args, &block)
7
7
  opts = args.extract_options!
8
- self.id = args[0] || Restly::Configuration.client_id
9
- self.secret = args[1] || Restly::Configuration.client_secret
8
+ self.id = args[0] || Restly::Configuration.oauth_options[:client_id]
9
+ self.secret = args[1] || Restly::Configuration.oauth_options[:client_secret]
10
10
  self.site = opts.delete(:site) || Restly::Configuration.site
11
11
  self.options = Restly::Configuration.client_options.merge(opts)
12
12
  self.ssl = opts.delete(:ssl) || Restly::Configuration.ssl
@@ -1,4 +1,4 @@
1
- module Restly::Base::Collection::Pagination
1
+ module Restly::Collection::Pagination
2
2
 
3
3
  def page(num)
4
4
  with_params(page: num, per_page: per_page).all.paginate(page: num, per_page: per_page)
@@ -0,0 +1,30 @@
1
+ module Restly::ConcernedInheritance
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ extend ClassMethods
6
+
7
+ class_attribute :inherited_callbacks
8
+ self.inherited_callbacks = []
9
+
10
+ inherited do
11
+ self.inherited_callbacks = inherited_callbacks
12
+ end
13
+
14
+ end
15
+
16
+ module ClassMethods
17
+
18
+ private
19
+
20
+ def inherited(subclass = nil, &block)
21
+ self.inherited_callbacks << block and return if block_given?
22
+
23
+ inherited_callbacks.each do |call_block|
24
+ subclass.class_eval(&call_block)
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -4,30 +4,31 @@ module Restly::Configuration
4
4
  defaults = {
5
5
  session_key: :access_token,
6
6
  load_middleware: true,
7
- :authorize_url => '/oauth/authorize',
8
- :token_url => '/oauth/token',
9
- :token_method => :post,
10
- :connection_opts => {},
11
- :max_redirects => 5,
12
- :raise_errors => true
7
+ use_oauth: false,
8
+ cache: false,
9
+ default_format: :json,
10
+ oauth_options: {
11
+ :authorize_url => '/oauth/authorize',
12
+ :token_url => '/oauth/token',
13
+ :token_method => :post,
14
+ },
15
+ client_options: {
16
+ :connection_opts => {},
17
+ :max_redirects => 5,
18
+ :raise_errors => true
19
+ }
13
20
  }
14
- defaults.merge(@config || {})
21
+ config = defaults.deep_merge(@config || {})
22
+ config.assert_valid_keys(:session_key, :load_middleware, :oauth_options, :use_oauth, :cache, :cache_options, :client_options, :site, :default_format)
23
+ config
15
24
  end
16
25
 
17
26
  def self.client_options
18
- config.select do |k,v|
19
- [ :authorize_url,
20
- :token_url,
21
- :token_method,
22
- :connection_opts,
23
- :max_redirects,
24
- :raise_errors
25
- ].include?(k.to_sym)
26
- end
27
+ config[:client_options].merge(config[:oauth_options])
27
28
  end
28
29
 
29
30
  def self.load_config(hash)
30
- @config = hash
31
+ @config = hash.symbolize_keys
31
32
  end
32
33
 
33
34
  def self.method_missing(m, *args, &block)
@@ -38,6 +39,7 @@ module Restly::Configuration
38
39
  true
39
40
  end
40
41
 
41
- load_config YAML.load_file(File.join(Rails.root, 'config', 'restly.yml'))[Rails.env] if defined? Rails
42
+ config_file = File.join(Rails.root, 'config', 'restly.yml')
43
+ load_config YAML.load_file(config_file)[Rails.env] if defined?(Rails) && File.exists?(config_file)
42
44
 
43
45
  end
data/lib/restly/error.rb CHANGED
@@ -1,30 +1,28 @@
1
1
  module Restly::Error
2
2
 
3
- class NotAnRestly < StandardError
4
- end
5
-
6
- class RecordNotFound < StandardError
7
- end
3
+ class StandardError < ::StandardError
8
4
 
9
- class WrongResourceType < StandardError
10
- end
11
-
12
- class InvalidParentAssociation < StandardError
13
- end
5
+ def message
6
+ super.red
7
+ end
14
8
 
15
- class InvalidJoinerAssociation < StandardError
16
9
  end
17
10
 
18
- class InvalidObject < StandardError
19
- end
20
-
21
- class InvalidToken < StandardError
22
- end
23
-
24
- class InvalidConnection < StandardError
25
- end
11
+ errors = %w{
12
+ RecordNotFound
13
+ WrongResourceType
14
+ InvalidParentAssociation
15
+ InvalidJoinerAssociation
16
+ InvalidObject
17
+ InvalidToken
18
+ InvalidConnection
19
+ MissingId
20
+ InvalidSpec
21
+ AssociationError
22
+ }
26
23
 
27
- class InvalidSpec < StandardError
24
+ errors.each do |error|
25
+ const_set(error.to_sym, Class.new(StandardError))
28
26
  end
29
27
 
30
28
  end
@@ -15,8 +15,9 @@ module Restly::NestedAttributes
15
15
  # One To One Association
16
16
  def assign_nested_attributes_for_one_to_one_resource_association(association_name, attributes, assignment_opts = {})
17
17
  options = self.nested_attributes_options[association_name]
18
- association_attributes = attributes.delete("#{association_name}_attributes") || {}
19
- associated_instance = send(association_name) || self.class.reflect_on_resource_association(association_name).build
18
+ association_attributes[association_name] = attributes.delete("#{association_name}_attributes") || {}
19
+ associated_instance = send(association_name) ||
20
+ self.class.reflect_on_resource_association(association_name).build(self)
20
21
  associated_instance.attributes = association_attributes
21
22
  end
22
23
 
@@ -42,7 +43,7 @@ module Restly::NestedAttributes
42
43
  attributes_collection.each do |attributes|
43
44
  attributes = attributes.with_indifferent_access
44
45
  if attributes[:id].blank?
45
- send(association_name) << association.build(attributes.except(:id))
46
+ send(association_name) << association.build(self, attributes.except(:id))
46
47
  elsif existing_record = existing_records.find{ |record| record.id.to_s == attributes['id'].to_s }
47
48
  existing_record.attributes = attributes
48
49
  end
@@ -1,4 +1,4 @@
1
- class Restly::Proxies::Auth < Restly::Proxies::Base
1
+ class Restly::Proxies::Authorization < Restly::Proxies::Base
2
2
 
3
3
  def initialize(receiver, token)
4
4
  super(receiver)
@@ -36,4 +36,8 @@ class Restly::Proxies::Base < SimpleDelegator
36
36
  @receiver.class
37
37
  end
38
38
 
39
+ def proxied?
40
+ true
41
+ end
42
+
39
43
  end
@@ -1,4 +1,4 @@
1
- class Restly::Proxies::Params < Restly::Proxies::Base
1
+ class Restly::Proxies::WithParams < Restly::Proxies::Base
2
2
 
3
3
  def initialize(receiver, params)
4
4
  super(receiver)
@@ -0,0 +1,24 @@
1
+ class Restly::Proxies::WithPath < Restly::Proxies::Base
2
+
3
+ def initialize(receiver, *args)
4
+ super(receiver)
5
+ @options = args.extract_options!
6
+ @options.assert_valid_keys(:prepend, :append)
7
+ self.path = args.first
8
+ adjust_path_from_options! if @options.present?
9
+ end
10
+
11
+ def adjust_path_from_options!
12
+ prepend = if @options[:prepend]
13
+ @options[:prepend].gsub(/^([^\/])/, "/\\1").gsub(/\/$/, "")
14
+ end
15
+
16
+ append = if @options[:append]
17
+ @options[:append].gsub(/^\//, "").gsub(/\/$/, "")
18
+ end
19
+
20
+ self.path = [prepend, path, append].compact.join('/')
21
+
22
+ end
23
+
24
+ end
@@ -1,10 +1,9 @@
1
1
  module Restly::Proxies
2
2
  extend ActiveSupport::Autoload
3
3
 
4
- autoload :Auth
5
- autoload :AssociatedInstance
6
- autoload :AssociatedCollection
7
- autoload :Params
4
+ autoload :Authorization
5
+ autoload :WithParams
6
+ autoload :WithPath
8
7
  autoload :Base
9
8
 
10
9
  module Associations
@@ -1,6 +1,11 @@
1
1
  module Restly
2
2
  class Railtie < ::Rails::Railtie
3
3
 
4
+ generators do
5
+ require "generators/restly_model_generator"
6
+ require "generators/restly_config_generator"
7
+ end
8
+
4
9
  initializer "my_engine.add_middleware" do |app|
5
10
  app.middleware.use "Restly::Middleware" if Restly::Configuration.load_middleware
6
11
  end
@@ -1,3 +1,3 @@
1
1
  module Restly
2
- VERSION = "0.0.1.alpha.1"
2
+ VERSION = "0.0.1.alpha.2"
3
3
  end
data/lib/restly.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "colorize"
2
+ require "active_support"
2
3
  require "restly/version"
3
4
  require "oauth2"
4
5
 
@@ -18,6 +19,7 @@ module Restly
18
19
  autoload :Middleware
19
20
  autoload :ThreadLocal
20
21
  autoload :Client
22
+ autoload :ConcernedInheritance
21
23
 
22
24
  end
23
25
 
data/restly.gemspec CHANGED
@@ -23,6 +23,5 @@ Gem::Specification.new do |gem|
23
23
 
24
24
  gem.add_development_dependency "rspec"
25
25
  gem.add_development_dependency "pry"
26
- gem.add_development_dependency "fakeweb"
27
26
 
28
27
  end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::Base do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::BelongsTo do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::EmbeddableResources::EmbedsMany do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::EmbeddableResources::EmbedsOne do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::EmbeddableResources do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::HasMany do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations::HasOne do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Associations do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Fields do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::GenericMethods do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Includes do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Instance::Actions do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Instance::Attributes do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Instance::Persistence do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Instance::WriteCallbacks do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Instance do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::MassAssignmentSecurity do
5
+
6
+ it "should have specs"
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ require "rspec"
2
+ require "spec_helper"
3
+
4
+ describe Restly::Base::Resource::Finders do
5
+
6
+ it "should have specs"
7
+
8
+ end