Module: RingStrongParameters::Model::ClassMethods

Defined in:
lib/kojac/ring_strong_parameters.rb

Instance Method Summary collapse

Instance Method Details

#permitted(aAbility, aRing) ⇒ Object



109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/kojac/ring_strong_parameters.rb', line 109

def permitted(aAbility,aRing)
  aRing = RingStrongParameters.lookup_ring(aRing)
  return [] unless aRing and rings_fields = self.respond_to?(:rings_fields).to_nil && self.rings_fields

  fields = []
  aRing.upto(rings_fields.length-1) do |i|
    next unless ring_rec = rings_fields[i]
    if af = ring_rec[aAbility.to_sym]
      fields += af if af.is_a?(Array)
    end
  end
  fields.uniq!
  fields.sort!
  fields
end

#permitted_associations(aAbility, aRing) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/kojac/ring_strong_parameters.rb', line 131

def permitted_associations(aAbility, aRing)
  aRing = RingStrongParameters.lookup_ring(aRing)
  return [] unless aRing and rings_fields = self.respond_to?(:rings_fields).to_nil && self.rings_fields

  associations = self.reflections.keys

  fields = []
  aRing.upto(rings_fields.length-1) do |i|
    next unless ring_rec = rings_fields[i]
    if af = ring_rec[aAbility.to_sym]
      fields += associations & af
    end
  end
  fields.uniq!
  fields.sort!
  fields
end

#permitted_fields(aAbility, aRing) ⇒ Object



125
126
127
128
129
# File 'lib/kojac/ring_strong_parameters.rb', line 125

def permitted_fields(aAbility, aRing)
  result = self.permitted(aAbility, aRing)
  result.delete_if { |f| self.reflections.has_key? f }
  result
end

#ring(aRing, aAbilities) ⇒ Object

supports different formats : ring :sales, :write => [:name,:address] ie. sales can write the name and address fields ring :sales, :read ie. sales can read this model ring :sales, [:read, :create, :destroy] ie. sales can read, create and destroy this model



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/kojac/ring_strong_parameters.rb', line 78

def ring(aRing,aAbilities)
  aRing = RingStrongParameters.lookup_ring(aRing)
  raise "aRing must be a number or a symbol defined in RingStrongParameters.config.ring_names" if !aRing.is_a?(Fixnum)

  if aAbilities.is_a? Hash    # eg. fields like :write => [:name,:address]
    ring_rec = self.rings_fields[aRing] || {}
    aAbilities.each do |abilities,fields|
      abilities = [abilities] unless abilities.is_a?(Array)
      fields = [fields] unless fields.is_a?(Array)
      abilities.each do |a|
        a = a.to_sym
        ring_fields = ring_rec[a] || []
        ring_fields = ring_fields + fields.map(&:to_sym)
        ring_fields.uniq!
        ring_fields.sort!
        ring_rec[a] = ring_fields
      end
    end
    self.rings_fields[aRing] = ring_rec
  elsif aAbilities.is_a?(Array) || aAbilities.is_a?(Symbol)   # eg. abilities like :sales, [:read, :create, :destroy]
    aAbilities = [aAbilities] unless aAbilities.is_a?(Array)
    ring_ab = self.rings_abilities[aRing] || []
    aAbilities.each do |ability|
      ring_ab << ability.to_sym
    end
    ring_ab.uniq!
    ring_ab.sort!
    self.rings_abilities[aRing] = ring_ab
  end
end

#ring_can?(aAbility, aRing) ⇒ Boolean

Returns:

  • (Boolean)


149
150
151
152
153
154
155
156
157
158
159
# File 'lib/kojac/ring_strong_parameters.rb', line 149

def ring_can?(aAbility, aRing)
  aRing = RingStrongParameters.lookup_ring(aRing)
  return [] unless aRing and rings_abilities = self.respond_to?(:rings_abilities).to_nil && self.rings_abilities

  fields = []
  aRing.upto(rings_abilities.length-1) do |i|
    next unless ring_ab = rings_abilities[i]
    return true if ring_ab.include?(aAbility)
  end
  return false
end