Module: ASModel::ModelScoping::ClassMethods
- Defined in:
- backend/app/model/ASModel_scoping.rb
Instance Method Summary (collapse)
-
- (Object) active_repository
-
- (Object) enable_suppression
-
- (Boolean) enforce_suppression?
-
- (Object) handle_publish_flag(ids, val)
-
- (Object) handle_suppressed(ids, val)
-
- (Object) model_scope(noerror = false)
-
- (Object) parse_reference(uri, opts)
Like JSONModel.parse_reference, but enforce repository restrictions.
-
- (Boolean) publishable?
-
- (Object) set_model_scope(value)
-
- (Boolean) suppressible?
-
- (Object) uri_for(jsonmodel, id, opts = {})
Instance Method Details
- (Object) active_repository
176 177 178 179 180 181 182 183 184 |
# File 'backend/app/model/ASModel_scoping.rb', line 176 def active_repository repo = RequestContext.get(:repo_id) if model_scope == :repository and repo.nil? raise "Missing repo_id for request!" end repo end |
- (Object) enable_suppression
68 69 70 |
# File 'backend/app/model/ASModel_scoping.rb', line 68 def enable_suppression @suppressible = true end |
- (Boolean) enforce_suppression?
73 74 75 |
# File 'backend/app/model/ASModel_scoping.rb', line 73 def enforce_suppression? RequestContext.get(:enforce_suppression) end |
- (Object) handle_publish_flag(ids, val)
94 95 96 |
# File 'backend/app/model/ASModel_scoping.rb', line 94 def handle_publish_flag(ids, val) ASModel.update_publish_flag(self.filter(:id => ids), val) end |
- (Object) handle_suppressed(ids, val)
82 83 84 85 86 |
# File 'backend/app/model/ASModel_scoping.rb', line 82 def handle_suppressed(ids, val) if suppressible? ASModel.update_suppressed_flag(self.filter(:id => ids), val) end end |
- (Object) model_scope(noerror = false)
149 150 151 152 153 154 155 156 |
# File 'backend/app/model/ASModel_scoping.rb', line 149 def model_scope(noerror = false) @model_scope or if noerror nil else raise "set_model_scope definition missing for model #{self}" end end |
- (Object) parse_reference(uri, opts)
Like JSONModel.parse_reference, but enforce repository restrictions
160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
# File 'backend/app/model/ASModel_scoping.rb', line 160 def parse_reference(uri, opts) ref = JSONModel.parse_reference(uri, opts) return nil if !ref # If the current model is repository scoped, and the reference is a # repository-scoped URI, make sure they're talking about the same # repository. if self.model_scope == :repository && ref[:repository] && ref[:repository] != JSONModel(:repository).uri_for(active_repository) raise ReferenceError.new("Invalid URI reference for this (#{active_repository}) repo: '#{uri}'") end ref end |
- (Boolean) publishable?
89 90 91 |
# File 'backend/app/model/ASModel_scoping.rb', line 89 def publishable? self.columns.include?(:publish) end |
- (Object) set_model_scope(value)
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'backend/app/model/ASModel_scoping.rb', line 99 def set_model_scope(value) if ![:repository, :global].include?(value) raise "Failure for #{self}: Model scope must be set as :repository or :global" end if value == :repository model = self orig_ds = self.dataset.clone # Provide a new '.this_repo' method on this model class that only # returns records that belong to the current repository. def_dataset_method(:this_repo) do filter = model.columns.include?(:repo_id) ? {:repo_id => model.active_repository} : {} if model.suppressible? && model.enforce_suppression? filter[:suppressed] = 0 end orig_ds.filter(filter) end # And another that will return records from any repository def_dataset_method(:any_repo) do if model.suppressible? && model.enforce_suppression? orig_ds.filter(:suppressed => 0) else orig_ds end end # Replace the default row_proc with one that fetches the request row, # but blows up if that row isn't from the currently active repository. orig_row_proc = self.dataset.row_proc self.dataset.row_proc = proc do |row| if row.has_key?(:repo_id) && row[:repo_id] != model.active_repository raise ("ASSERTION FAILED: #{row.inspect} has a repo_id of " + "#{row[:repo_id]} but the active repository is #{model.active_repository}") end orig_row_proc.call(row) end end @model_scope = value end |
- (Boolean) suppressible?
78 79 80 |
# File 'backend/app/model/ASModel_scoping.rb', line 78 def suppressible? @suppressible end |
- (Object) uri_for(jsonmodel, id, opts = {})
187 188 189 |
# File 'backend/app/model/ASModel_scoping.rb', line 187 def uri_for(jsonmodel, id, opts = {}) JSONModel(jsonmodel).uri_for(id, opts.merge(:repo_id => self.active_repository)) end |