/
resource_mockery.rb
57 lines (46 loc) · 1.24 KB
/
resource_mockery.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
require 'ostruct'
require 'delegate'
require 'active_support/concern'
require 'active_support/core_ext/hash/deep_merge'
class Frenetic
module ResourceMockery
extend Forwardable
extend ActiveSupport::Concern
def_delegators :@params, :to_json
included do
# I'm sure this violates some sort of CS principle or best practice,
# but it solves the problem for now.
superclass.send :instance_variable_set, '@mock_class', self
end
def attributes
@params
end
def properties
@params.each_with_object({}) do |(k,v), props|
props[k] = v.class.to_s.underscore
end
end
def default_attributes
self.class.default_attributes
end
module ClassMethods
def api_client
superclass.api_client
end
# Provides a place for a Resources that are mocked to declare reasonable
# default values for Mock Resources
def default_attributes
{}
end
end
private
def build_params( p )
raw_params = (p || {}).with_indifferent_access
defaults = default_attributes.with_indifferent_access
@params = defaults.deep_merge(raw_params)
end
def build_structure
@structure = OpenStruct.new( @attrs )
end
end
end