Module: ASModel::ModelScoping::ClassMethods

Defined in:
backend/app/model/ASModel_scoping.rb

Instance Method Summary (collapse)

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?

Returns:

  • (Boolean)


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?

Returns:

  • (Boolean)


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?

Returns:

  • (Boolean)


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