rabl 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -101,6 +101,13 @@ This will generate a json response based on the result of the code block:
101
101
  u.first_name + " " + u.last_name
102
102
  end
103
103
 
104
+ or a custom node that exists only if a condition is true:
105
+
106
+ # m is the object being rendered, also supports :unless
107
+ code(:foo, :if => lambda { |m| m.has_foo? }) do |m|
108
+ m.foo
109
+ end
110
+
104
111
  You can use custom "code" nodes to create flexible representations of a value utilizing all the data from the model.
105
112
 
106
113
  ### Partials ###
@@ -15,8 +15,8 @@ module Rabl
15
15
  attribute(attribute, :as => name)
16
16
  end if @options.has_key?(:attributes)
17
17
  # Code
18
- @options[:code].each_pair do |name, block|
19
- code(name, &block)
18
+ @options[:code].each_pair do |name, settings|
19
+ code(name, settings[:options], &settings[:block])
20
20
  end if @options.has_key?(:code)
21
21
  # Children
22
22
  @options[:child].each do |settings|
@@ -51,10 +51,13 @@ module Rabl
51
51
  alias_method :attributes, :attribute
52
52
 
53
53
  # Creates an arbitrary code node that is included in the json output
54
+ # node(:foo) { "bar" }
54
55
  # code(:foo) { "bar" }
55
- def code(name, &block)
56
- @_result[name] = block.call(@_object)
56
+ # code(:foo, :if => lambda { |m| m.foo.present? }) { "bar" }
57
+ def code(name, options={}, &block)
58
+ @_result[name] = block.call(@_object) if resolve_condition(options)
57
59
  end
60
+ alias_method :node, :code
58
61
 
59
62
  # Creates a child node that is included in json output
60
63
  # child(@user) { attribute :full_name }
@@ -106,5 +109,15 @@ module Rabl
106
109
  return data.first.class.model_name.element.pluralize if data.respond_to?(:first) && data.first.respond_to?(:valid?)
107
110
  data.class.model_name.element
108
111
  end
112
+
113
+ # resolve_condition(:if => true) => true
114
+ # resolve_condition(:if => lambda { |m| false }) => false
115
+ # resolve_condition(:unless => lambda { |m| true }) => true
116
+ def resolve_condition(options)
117
+ return true if options[:if].nil? && options[:unless].nil?
118
+ result = options[:if] == true || (options[:if].respond_to?(:call) && options[:if].call(@_object)) if options.has_key?(:if)
119
+ result = options[:unless] == false || (options[:unless].respond_to?(:call) && !options[:unless].call(@_object)) if options.has_key?(:unless)
120
+ result
121
+ end
109
122
  end
110
123
  end
@@ -42,9 +42,10 @@ module Rabl
42
42
 
43
43
  # Creates an arbitrary code node that is included in the json output
44
44
  # code(:foo) { "bar" }
45
- def code(name, &block)
45
+ # code(:foo, :if => lambda { ... }) { "bar" }
46
+ def code(name, options={}, &block)
46
47
  @_options[:code] ||= {}
47
- @_options[:code][name] = block
48
+ @_options[:code][name] = { :options => options, :block => block }
48
49
  end
49
50
 
50
51
  # Creates a child node that is included in json output
@@ -1,3 +1,3 @@
1
1
  module Rabl
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rabl
3
3
  version: !ruby/object:Gem::Version
4
- hash: 17
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nathan Esquenazi