liquify 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,72 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- liquify (0.2)
4
+ liquify (0.2.1)
5
5
  liquid (>= 2.2.2)
6
6
 
7
7
  GEM
8
8
  remote: http://rubygems.org/
9
9
  specs:
10
- abstract (1.0.0)
11
- actionmailer (3.0.3)
12
- actionpack (= 3.0.3)
13
- mail (~> 2.2.9)
14
- actionpack (3.0.3)
15
- activemodel (= 3.0.3)
16
- activesupport (= 3.0.3)
17
- builder (~> 2.1.2)
18
- erubis (~> 2.6.6)
19
- i18n (~> 0.4)
20
- rack (~> 1.2.1)
21
- rack-mount (~> 0.6.13)
22
- rack-test (~> 0.5.6)
23
- tzinfo (~> 0.3.23)
24
- activemodel (3.0.3)
25
- activesupport (= 3.0.3)
26
- builder (~> 2.1.2)
27
- i18n (~> 0.4)
28
- activerecord (3.0.3)
29
- activemodel (= 3.0.3)
30
- activesupport (= 3.0.3)
31
- arel (~> 2.0.2)
32
- tzinfo (~> 0.3.23)
33
- activeresource (3.0.3)
34
- activemodel (= 3.0.3)
35
- activesupport (= 3.0.3)
36
- activesupport (3.0.3)
37
- arel (2.0.6)
38
- builder (2.1.2)
39
10
  diff-lcs (1.1.2)
40
- erubis (2.6.6)
41
- abstract (>= 1.0.0)
42
- i18n (0.5.0)
43
11
  liquid (2.2.2)
44
- mail (2.2.13)
45
- activesupport (>= 2.3.6)
46
- i18n (>= 0.4.0)
47
- mime-types (~> 1.16)
48
- treetop (~> 1.4.8)
49
- mime-types (1.16)
50
- polyglot (0.3.1)
51
- rack (1.2.1)
52
- rack-mount (0.6.13)
53
- rack (>= 1.0.0)
54
- rack-test (0.5.6)
55
- rack (>= 1.0)
56
- rails (3.0.3)
57
- actionmailer (= 3.0.3)
58
- actionpack (= 3.0.3)
59
- activerecord (= 3.0.3)
60
- activeresource (= 3.0.3)
61
- activesupport (= 3.0.3)
62
- bundler (~> 1.0)
63
- railties (= 3.0.3)
64
- railties (3.0.3)
65
- actionpack (= 3.0.3)
66
- activesupport (= 3.0.3)
67
- rake (>= 0.8.7)
68
- thor (~> 0.14.4)
69
- rake (0.8.7)
70
12
  rspec (2.3.0)
71
13
  rspec-core (~> 2.3.0)
72
14
  rspec-expectations (~> 2.3.0)
@@ -75,22 +17,10 @@ GEM
75
17
  rspec-expectations (2.3.0)
76
18
  diff-lcs (~> 1.1.2)
77
19
  rspec-mocks (2.3.0)
78
- rspec-rails (2.3.1)
79
- actionpack (~> 3.0)
80
- activesupport (~> 3.0)
81
- railties (~> 3.0)
82
- rspec (~> 2.3.0)
83
- thor (0.14.6)
84
- treetop (1.4.9)
85
- polyglot (>= 0.3.1)
86
- tzinfo (0.3.23)
87
20
 
88
21
  PLATFORMS
89
22
  ruby
90
23
 
91
24
  DEPENDENCIES
92
- liquid (>= 2.2.2)
93
25
  liquify!
94
- rails (~> 3.0.1)
95
26
  rspec (~> 2.3.0)
96
- rspec-rails (~> 2.3.0)
data/lib/liquify/drop.rb CHANGED
@@ -1,5 +1,108 @@
1
1
  module Liquify
2
2
  class Drop < Liquid::Drop
3
- include Liquify::Methods
3
+ class << self
4
+ def build(obj, values)
5
+ obj.class.class_eval <<-STR
6
+ class DynamicDrop < Liquify::Drop
7
+ def initialize(obj, values)
8
+ @object = obj
9
+ @blocks = {}
10
+
11
+ values.each do |value|
12
+ if value.is_a? Hash
13
+ value.each { |key, val| @blocks[key] = val }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ STR
19
+
20
+ obj.class::DynamicDrop.class_eval do
21
+ values.each do |item|
22
+ if item.is_a? Hash
23
+ item.each do |key, value|
24
+ define_method key do
25
+ block = @blocks[key]
26
+ block.arity.zero? ? block.call : block.call(@object)
27
+ end
28
+ end
29
+ else
30
+ define_method item do
31
+ @object.send item
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ obj.class::DynamicDrop.new(obj, values)
38
+ end
39
+ end
4
40
  end
5
41
  end
42
+ =begin
43
+ private
44
+ def build_hash
45
+ @values.each do |key, value|
46
+ self.class.class_eval do
47
+ define_method(key) { @values[key] }
48
+ end
49
+ end
50
+ end
51
+
52
+ def build_default
53
+ @values.each do |item|
54
+ if item.is_a? Hash
55
+ item.each do |key, value|
56
+ self.class.class_eval do
57
+ define_method key do
58
+ value.arity.zero? ? value.call : value.call(@obj)
59
+ end
60
+ end
61
+ end
62
+ else
63
+ self.class.class_eval do
64
+ define_method(item) { @obj.send(item) }
65
+ end
66
+ end
67
+ end
68
+ end
69
+ =end
70
+ =begin
71
+ def build(obj, values, options={})
72
+ case options[:as]
73
+ when :hash
74
+ build_hash
75
+ else
76
+ build_default
77
+ end
78
+ self
79
+ end
80
+
81
+ private
82
+ def build_hash
83
+ @values.each do |key, value|
84
+ self.class.class_eval do
85
+ define_method(key) { @values[key] }
86
+ end
87
+ end
88
+ end
89
+
90
+ def build_default
91
+ @values.each do |item|
92
+ if item.is_a? Hash
93
+ item.each do |key, value|
94
+ self.class.class_eval do
95
+ define_method key do
96
+ value.arity.zero? ? value.call : value.call(@obj)
97
+ end
98
+ end
99
+ end
100
+ else
101
+ self.class.class_eval do
102
+ define_method(item) { @obj.send(item) }
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ =end
@@ -12,40 +12,15 @@ module Liquify
12
12
  #
13
13
  #
14
14
  def liquify_method(*args)
15
- liquify_args = instance_variable_get :@liquify_args
16
- liquify_args ||= {}
17
-
18
- args.each do |arg|
19
- key, value = arg, :self
20
-
21
- if Hash === arg
22
- arg.each { |k, v| liquify_args[k.to_s] = v }
23
- else
24
- liquify_args[key.to_s] = value
25
- end
26
- end
27
- instance_variable_set :@liquify_args, liquify_args
15
+ class_variable_set(:@@liquify_methods, args)
28
16
  end
17
+
18
+ alias :liquify_methods :liquify_method
29
19
  end
30
20
 
31
21
  module InstanceMethods
32
- unless method_defined? :to_liquid
33
- def to_liquid #:nodoc:
34
- liquify_args = self.class.instance_variable_get(:@liquify_args) || {}
35
- liquify_output = instance_variable_get(:@liquify_output) || {}
36
-
37
- if liquify_output.empty?
38
- liquify_args.each do |key, value|
39
- if value.respond_to?(:call)
40
- liquify_output[key] = value.arity.zero? ? value.call : value.call(self)
41
- else
42
- liquify_output[key] = self.send(key)
43
- end
44
- end
45
- end
46
-
47
- liquify_output
48
- end
22
+ def to_liquid
23
+ Liquify::Drop.build self, self.class.class_variable_get(:@@liquify_methods)
49
24
  end
50
25
  end
51
26
  end
@@ -1,3 +1,3 @@
1
1
  module Liquify
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -0,0 +1,34 @@
1
+ require 'spec_helper'
2
+
3
+ describe Liquify::Methods do
4
+ before(:each) do
5
+ @baz_1 = Baz.new('baz -1')
6
+ @baz_2 = Baz.new('baz -2')
7
+ end
8
+
9
+ context 'when exposing a value as a lambda' do
10
+ it 'is scoped to that object instance' do
11
+ @baz_1.to_liquid['name']['value'].should == @baz_1.name
12
+ @baz_2.to_liquid['name']['value'].should == @baz_2.name
13
+ end
14
+ end
15
+
16
+ context 'when the template is rendered' do
17
+ it 'contains values for both baz_1 and baz_2' do
18
+ Liquify.setup do |c|
19
+ c.register_drop :baz, lambda { [@baz_1, @baz_2] }
20
+ end
21
+
22
+ content = <<-STR
23
+ {% for b in baz %}
24
+ <p>{{ b.name.value }}</p>
25
+ {% endfor %}
26
+ STR
27
+
28
+ output = Liquify.invoke(content)
29
+
30
+ output.should =~ /<p>#{@baz_1.name}<\/p>/
31
+ output.should =~ /<p>#{@baz_2.name}<\/p>/
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Liquify::Methods do
4
+ context 'when a hash with a lambda value is passed' do
5
+ before(:all) do
6
+ @cux_1 = Cux.new('John', 'Smith', {'age' => 25, 'gender' => 'M'})
7
+ @cux_2 = Cux.new('Jane', 'Doe', {'age' => 22, 'gender' => 'F'})
8
+
9
+ content = <<-STR
10
+ {% for item in items %}
11
+ <p>{{ item.full_name }}</p>
12
+ <p>{{ item.options.age }}</p>
13
+ {% endfor %}
14
+ STR
15
+
16
+ Liquify.setup do |c|
17
+ c.register_drop :items, lambda { [@cux_1, @cux_2] }
18
+ end
19
+
20
+ @output = Liquify.invoke(content)
21
+ end
22
+
23
+ it 'returns values scoped to the first item' do
24
+ @output.should =~ /<p>#{@cux_1.first_name} #{@cux_1.last_name}<\/p>/
25
+ @output.should =~ /<p>#{@cux_1.options['age']}<\/p>/
26
+ end
27
+
28
+ it 'returns values scoped to the second item' do
29
+ @output.should =~ /<p>#{@cux_2.first_name} #{@cux_2.last_name}<\/p>/
30
+ @output.should =~ /<p>#{@cux_2.options['age']}<\/p>/
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,24 @@
1
+ class Baz
2
+ include Liquify::Methods
3
+ attr_reader :name
4
+ liquify_method :name => lambda { |b| NameDrop.new(b) }
5
+
6
+ def initialize(name)
7
+ @name = name
8
+ end
9
+ end
10
+
11
+ class NameDrop < Liquify::Drop
12
+ def initialize(obj)
13
+ @obj = obj
14
+ @values = {'value' => @obj.name}
15
+ end
16
+
17
+ def [](key)
18
+ @values[key]
19
+ end
20
+ end
21
+
22
+ # liquify_method
23
+ # create drop
24
+ # create methods
@@ -0,0 +1,24 @@
1
+ class Cux
2
+ include Liquify::Methods
3
+ attr_reader :first_name, :last_name, :options
4
+ liquify_methods :full_name => lambda {|c| "#{c.first_name} #{c.last_name}"},
5
+ :options => lambda {|c| OptionDrop.new(c) }
6
+
7
+ def initialize(first_name, last_name, options)
8
+ @first_name = last_name
9
+ @last_name = first_name
10
+ @options = options
11
+ end
12
+ end
13
+
14
+ class OptionDrop < Liquid::Drop
15
+ def initialize(cux)
16
+ @cux = cux
17
+ end
18
+
19
+ def invoke_drop(key)
20
+ @cux.options[key]
21
+ end
22
+
23
+ alias :[] :invoke_drop
24
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: liquify
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.1
5
+ version: 0.2.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dane Harrigan
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-27 00:00:00 -04:00
13
+ date: 2011-03-31 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -63,6 +63,8 @@ files:
63
63
  - liquify.gemspec
64
64
  - spec/liquify/active_record_hook_spec.rb
65
65
  - spec/liquify/drop_spec.rb
66
+ - spec/liquify/liquify_methods_spec.rb
67
+ - spec/liquify/liquify_methods_with_lambdas_spec.rb
66
68
  - spec/liquify/parameter_spec.rb
67
69
  - spec/liquify/tag_spec.rb
68
70
  - spec/liquify_spec.rb
@@ -70,6 +72,8 @@ files:
70
72
  - spec/support/liquid/foo_drop.rb
71
73
  - spec/support/liquid/foo_filters.rb
72
74
  - spec/support/liquify/bar_drop.rb
75
+ - spec/support/liquify/baz_drop.rb
76
+ - spec/support/liquify/cux_drop.rb
73
77
  - spec/support/liquify/foo_tag.rb
74
78
  - spec/support/rails/foo.rb
75
79
  - spec/v0.1/liquify/active_record_hook_spec.rb
@@ -106,6 +110,8 @@ summary: A wrapper for Liquid Markup to make it easier to use
106
110
  test_files:
107
111
  - spec/liquify/active_record_hook_spec.rb
108
112
  - spec/liquify/drop_spec.rb
113
+ - spec/liquify/liquify_methods_spec.rb
114
+ - spec/liquify/liquify_methods_with_lambdas_spec.rb
109
115
  - spec/liquify/parameter_spec.rb
110
116
  - spec/liquify/tag_spec.rb
111
117
  - spec/liquify_spec.rb
@@ -113,6 +119,8 @@ test_files:
113
119
  - spec/support/liquid/foo_drop.rb
114
120
  - spec/support/liquid/foo_filters.rb
115
121
  - spec/support/liquify/bar_drop.rb
122
+ - spec/support/liquify/baz_drop.rb
123
+ - spec/support/liquify/cux_drop.rb
116
124
  - spec/support/liquify/foo_tag.rb
117
125
  - spec/support/rails/foo.rb
118
126
  - spec/v0.1/liquify/active_record_hook_spec.rb