Module: ModelView

Defined in:
lib/model_view.rb,
lib/model_view/updater.rb,
lib/model_view/version.rb,
lib/model_view/resolver.rb

Defined Under Namespace

Classes: Resolver, Updater

Constant Summary collapse

ROOT =
:__root__
VERSION =
"0.6.2"

Instance Method Summary collapse

Instance Method Details

#after_update(&block) ⇒ Object



42
43
44
45
# File 'lib/model_view.rb', line 42

def after_update(&block)
  scope_name = @current_scope || ROOT
  add_after_update scope_name, block
end

#as_hash(object, opts = {}) ⇒ Object



51
52
53
54
55
# File 'lib/model_view.rb', line 51

def as_hash(object, opts={})
  scope = opts[:scope] || ROOT
  context = opts[:context] || {}
  ModelView::Resolver.resolve(object, @scopes, scope , context)
end

#extend_scope(*scope) ⇒ Object

Raises:

  • (Exception)


37
38
39
40
# File 'lib/model_view.rb', line 37

def extend_scope(*scope)
  raise Exception.new("Root scope can not extend another scope") if @current_scope.nil? || @current_scope == ROOT
  scope.flatten.each { |s| @scopes[@current_scope][:extends] << s }
end

#field(field_name, arg = {}, &block) ⇒ Object



9
10
11
12
# File 'lib/model_view.rb', line 9

def field(field_name, arg={}, &block)
  scope_name = @current_scope || ROOT
  add_field scope_name, field_name, arg, block
end

#fields(*fields) ⇒ Object



14
15
16
# File 'lib/model_view.rb', line 14

def fields(*fields)
  fields.flatten.each { |f| field f }
end

#include_scope(*scope) ⇒ Object

Raises:

  • (Exception)


32
33
34
35
# File 'lib/model_view.rb', line 32

def include_scope(*scope)
  raise Exception.new("Root scope can not include another scope") if @current_scope.nil? || @current_scope == ROOT
  scope.flatten.each { |s| @scopes[@current_scope][:includes] << s }
end

#model(model_class) ⇒ Object



62
63
64
65
66
67
68
69
# File 'lib/model_view.rb', line 62

def model(model_class)
  model_view_class = self
  model_class.class_eval do
    define_method(:as_hash) do |opts|
      model_view_class.as_hash(self, opts)
    end
  end
end

#scope(scope_name, &block) ⇒ Object



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

def scope(scope_name, &block)
  sym_scope_name = scope_name.to_sym
  add_scope(sym_scope_name)

  @current_scope = sym_scope_name
  instance_eval &block
  @current_scope = nil
end

#scopesObject



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

def scopes
  @scopes
end

#setter(field_name, arg = {}, &block) ⇒ Object



27
28
29
30
# File 'lib/model_view.rb', line 27

def setter(field_name, arg={}, &block)
  scope_name = @current_scope || ROOT
  add_setter scope_name, field_name, arg, block
end

#update(object, data, opts = {}) ⇒ Object



57
58
59
60
# File 'lib/model_view.rb', line 57

def update(object, data, opts={})
  scope = opts[:scope] || ROOT
  ModelView::Updater.update(object, @scopes, data , scope)
end