Class: StrongResources::StrongResource

Inherits:
Object
  • Object
show all
Defined in:
lib/strong_resources/strong_resource.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ StrongResource

Returns a new instance of StrongResource.



19
20
21
22
23
24
25
# File 'lib/strong_resources/strong_resource.rb', line 19

def initialize(name)
  @name = name
  @jsonapi_type = name.to_s.pluralize
  @customized_actions = {}
  self.attributes = {}
  self.relations = {}
end

Instance Attribute Details

#attributesObject

Returns the value of attribute attributes.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def attributes
  @attributes
end

#customized_actionsObject (readonly)

Returns the value of attribute customized_actions.



8
9
10
# File 'lib/strong_resources/strong_resource.rb', line 8

def customized_actions
  @customized_actions
end

#deleteObject

Returns the value of attribute delete.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def delete
  @delete
end

#destroyObject

Returns the value of attribute destroy.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def destroy
  @destroy
end

#exceptObject

Returns the value of attribute except.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def except
  @except
end

#jsonapi_type(type = nil) ⇒ Object (readonly)

Returns the value of attribute jsonapi_type.



8
9
10
# File 'lib/strong_resources/strong_resource.rb', line 8

def jsonapi_type
  @jsonapi_type
end

#nameObject (readonly)

Returns the value of attribute name.



8
9
10
# File 'lib/strong_resources/strong_resource.rb', line 8

def name
  @name
end

#onlyObject

Returns the value of attribute only.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def only
  @only
end

#relation_typeObject

Returns the value of attribute relation_type.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def relation_type
  @relation_type
end

#relationsObject

Returns the value of attribute relations.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def relations
  @relations
end

#requireObject

Returns the value of attribute require.



3
4
5
# File 'lib/strong_resources/strong_resource.rb', line 3

def require
  @require
end

Class Method Details

.from(name, opts = {}, &blk) ⇒ Object



10
11
12
13
14
15
16
17
# File 'lib/strong_resources/strong_resource.rb', line 10

def self.from(name, opts = {}, &blk)
  config   = StrongResources.config.strong_resources[name]
  resource = new(name)
  resource.require = opts[:require]
  resource.instance_eval(&config[:base])
  resource.instance_eval(&blk) if blk
  resource
end

Instance Method Details

#attribute(name, type, opts = {}) ⇒ Object



43
44
45
# File 'lib/strong_resources/strong_resource.rb', line 43

def attribute(name, type, opts = {})
  self.attributes[name] = { type: type, if: opts[:if] }
end

#belongs_to(name, resource: nil, only: nil, except: nil, delete: false, destroy: false, &blk) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
# File 'lib/strong_resources/strong_resource.rb', line 73

def belongs_to(name,
               resource: nil,
               only: nil,
               except: nil,
               delete: false,
               destroy: false,
               &blk)
  resource_name = resource || name
  related_resource = self.class.from(resource_name, &blk)
  add_relation(name, related_resource, only, except, delete, destroy)
end

#delete?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'lib/strong_resources/strong_resource.rb', line 35

def delete?
  !!@delete
end

#destroy?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'lib/strong_resources/strong_resource.rb', line 39

def destroy?
  !!@destroy
end

#has_many(name, resource: nil, only: nil, except: nil, delete: false, destroy: false, &blk) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/strong_resources/strong_resource.rb', line 59

def has_many(name,
             resource: nil,
             only: nil,
             except: nil,
             delete: false,
             destroy: false,
             &blk)
  resource_name = resource || name.to_s.singularize.to_sym
  related_resource = self.class.from(resource_name)
  related_resource.instance_eval(&blk) if block_given?
  related_resource.relation_type = :has_many
  add_relation(name, related_resource, only, except, delete, destroy)
end

#has_many?Boolean

Returns:

  • (Boolean)


55
56
57
# File 'lib/strong_resources/strong_resource.rb', line 55

def has_many?
  relation_type == :has_many
end

#has_one(*args, &blk) ⇒ Object



85
86
87
# File 'lib/strong_resources/strong_resource.rb', line 85

def has_one(*args, &blk)
  belongs_to(*args, &blk)
end

#on(action_name, &blk) ⇒ Object



51
52
53
# File 'lib/strong_resources/strong_resource.rb', line 51

def on(action_name, &blk)
  self.customized_actions[action_name] = blk
end

#permits(controller) ⇒ Object



89
90
91
92
93
94
95
96
97
98
# File 'lib/strong_resources/strong_resource.rb', line 89

def permits(controller)
  base_permits(self, controller).tap do |permits|
    self.relations.each_pair do |relation_name, opts|
      related_resource = opts[:resource]
      related = related_permits(related_resource, controller)

      permits.merge!(:"#{relation_name}_attributes" => related)
    end
  end
end

#remove_attribute(name) ⇒ Object



47
48
49
# File 'lib/strong_resources/strong_resource.rb', line 47

def remove_attribute(name)
  self.attributes.delete(name)
end