express_templates 0.9.1 → 0.9.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1109260a4e3712f661862ccaf73d360615b0e82d
4
- data.tar.gz: d8c7f19fc269deb4c10271d1a94a0b017177780f
3
+ metadata.gz: 9e93820b0563b5a327dea57ec300ff2878641cb3
4
+ data.tar.gz: 5a5f7d0954ca6be289f8e0ba6de35e7b01c04988
5
5
  SHA512:
6
- metadata.gz: 0fc7364a8cb7b63065305d51836f2a3a09c00aea1859494a52187382a4b934d475baec312fb04b9277bab6d2decff77bdb99c4ec4c99e57e7468735ff26b92c8
7
- data.tar.gz: c0e5c279e140b09026eff54e8b69cee86b3296fd94fab7520d66d590857d4de4a9a9f4b4aa31b93344ce9d162b91a64b4754fbafd40e71a92cff0aef1efaec2c
6
+ metadata.gz: 03b9541ab3544bbbb721f1efd2b92adafdd1c68bb33626702b9623ebcb0e314cb21ecdd7fa205aa991b70a9c731c9583bb7d267c07f2989204cf4b2e494c58b6
7
+ data.tar.gz: 3e262ad21e99a696376ba705a33103c1bf375cd83e8bb8643b3052b41e44722df3a8c23e1e1341dd0eb343ef6284e83163c82420688c3e64a8dce8e0393b7136
@@ -29,7 +29,8 @@ class Proc
29
29
  tokens = Ripper.lex File.read(file)
30
30
  tokens_on_line = tokens.select {|pos, lbl, str| pos[0].eql?(line_no) }
31
31
  starting_token = tokens_on_line.detect do |pos, lbl, str|
32
- TOKEN_PAIRS.keys.include? [lbl, str]
32
+ TOKEN_PAIRS.keys.include?([lbl, str]) &&
33
+ _actually_starting_a_proc?(tokens, [pos, lbl, str])
33
34
  end
34
35
  starting_token_type = [starting_token[1], starting_token[2]]
35
36
  ending_token_type = TOKEN_PAIRS[starting_token_type]
@@ -54,6 +55,17 @@ class Proc
54
55
  end
55
56
  end
56
57
 
58
+ def _actually_starting_a_proc?(tokens, tok)
59
+ return true if tokens.index(tok).eql?(0)
60
+ look_back = tokens.slice(0..tokens.index(tok)-1)
61
+ look_back.pop if look_back.last.try(:[], 1).eql? :on_sp
62
+ if [:on_tlambeg, :on_tlambda].include?(tok[1])
63
+ true
64
+ else
65
+ ![:on_comma, :on_lparen, :on_label].include?(look_back.last.try(:[], 1))
66
+ end
67
+ end
68
+
57
69
  # Examines the source of a proc to extract the body by
58
70
  # removing the outermost block delimiters and any surrounding.
59
71
  # whitespace.
@@ -12,6 +12,9 @@ module ExpressTemplates
12
12
  #
13
13
  class Base < Arbre::Component
14
14
 
15
+ class_attribute :before_build_hooks
16
+ self.before_build_hooks = []
17
+
15
18
  def self.builder_method_and_class(method_name, klass)
16
19
  Arbre::Element::BuilderMethods.class_eval <<-EOF, __FILE__, __LINE__
17
20
  def #{method_name}(*args, &block)
@@ -45,19 +48,21 @@ module ExpressTemplates
45
48
  _default_attributes.merge!(attribs)
46
49
  end
47
50
 
48
- def self.before_build(proc_or_symbol = nil, &block)
49
- if proc_or_symbol.kind_of?(Symbol)
50
- define_method(:_before_build) do
51
- self.send(proc_or_symbol)
52
- end
51
+ def self.before_build(proc_or_symbol = nil, exclusive: false, &block)
52
+ hook = (proc_or_symbol || block)
53
+ unless hook.kind_of?(Symbol) or hook.respond_to?(:call)
54
+ raise "before_build requires symbol (method_name), proc or block"
55
+ end
56
+ if exclusive
57
+ self.before_build_hooks = [hook]
53
58
  else
54
- define_method(:_before_build, &(proc_or_symbol || block))
59
+ self.before_build_hooks += [hook]
55
60
  end
56
61
  end
57
62
 
58
63
  def build(*args, &block)
59
64
  _extract_class!(args)
60
- _before_build if respond_to?(:_before_build)
65
+ _run_before_build_hooks
61
66
  super(*args) {
62
67
  _build_body(&block) if respond_to?(:_build_body)
63
68
  }
@@ -68,7 +73,15 @@ module ExpressTemplates
68
73
  end
69
74
 
70
75
  def self.inherited(subclass)
71
- builder_method_and_class subclass.to_s.demodulize.underscore, subclass
76
+ builder_method_and_class subclass.builder_method_name, subclass
77
+ end
78
+
79
+ def self.builder_method_name
80
+ to_s.demodulize.underscore
81
+ end
82
+
83
+ def builder_method_name
84
+ self.class.builder_method_name
72
85
  end
73
86
 
74
87
  def self.descendants
@@ -82,6 +95,15 @@ module ExpressTemplates
82
95
 
83
96
 
84
97
  private
98
+ def _run_before_build_hooks
99
+ before_build_hooks.each do |hook|
100
+ if hook.kind_of?(Symbol)
101
+ self.send(hook)
102
+ else
103
+ instance_exec &hook
104
+ end
105
+ end
106
+ end
85
107
  def _extract_class!(args)
86
108
  add_class args.last.delete(:class) if args.last.try(:kind_of?, Hash)
87
109
  end
@@ -6,6 +6,7 @@ module ExpressTemplates
6
6
 
7
7
  def self.included(base)
8
8
  base.class_eval do
9
+ has_argument :id, "The name of the collection", type: :symbol, optional: false
9
10
  has_option :collection, 'Provide an explicit collection as a resource.'
10
11
  has_option :collection_path, 'Provide an explicit path for the collection resource.'
11
12
  has_option :resource_class, 'Overrides namespaced resource_class for using resources from a different module or namespace.'
@@ -99,7 +99,13 @@ module ExpressTemplates
99
99
  else
100
100
  definition[:type] || []
101
101
  end
102
- valid_type_names.map(&:to_s).map(&:classify).map(&:constantize)
102
+ valid_type_names.map do |type_name|
103
+ if type_name.eql?(:boolean)
104
+ type_name
105
+ else
106
+ type_name.to_s.classify.constantize
107
+ end
108
+ end
103
109
  end
104
110
 
105
111
  def _is_valid?(value, definition)
@@ -108,6 +114,9 @@ module ExpressTemplates
108
114
  true
109
115
  elsif valid_types.include?(value.class)
110
116
  true
117
+ elsif valid_types.include?(:boolean) &&
118
+ [1, 0, true, false].include?(value)
119
+ true
111
120
  else
112
121
  false
113
122
  end
@@ -11,16 +11,15 @@ module ExpressTemplates
11
11
  submit_tag(value, input_attributes)
12
12
  }
13
13
 
14
- before_build -> {
15
- # if we are not part of a form, we don't get a default id
16
- begin
17
- super()
18
- rescue
19
- add_class(config[:wrapper_class])
20
- remove_class('submit')
21
- end
14
+ before_build(exclusive: true) {
15
+ add_class(config[:wrapper_class])
16
+ remove_class('submit')
22
17
  }
23
18
 
19
+ def resource_name
20
+ parent_form ? super : nil
21
+ end
22
+
24
23
  def value
25
24
  config[:value]
26
25
  end
@@ -1,3 +1,3 @@
1
1
  module ExpressTemplates
2
- VERSION = "0.9.1"
2
+ VERSION = "0.9.3"
3
3
  end
@@ -68,7 +68,7 @@ class ProcTest < ActiveSupport::TestCase
68
68
  assert_equal 'foo', Proc.from_source(src).call
69
69
  end
70
70
 
71
- test ".source_body captures full body when parens around parameters not provided" do
71
+ test "#source_body captures full body when parens around parameters not provided" do
72
72
  block = return_block { something(:one, "two") }
73
73
  assert_equal 'something(:one, "two")', block.source_body
74
74
  block = return_block -> { something :one, "two" }
@@ -78,4 +78,13 @@ class ProcTest < ActiveSupport::TestCase
78
78
  # assert_equal 'something :one, "two"', block.source_body
79
79
  end
80
80
 
81
+ def return_proc_value(*args, options)
82
+ options.values.first.values.first
83
+ end
84
+
85
+ test "#source works when a proc is inside a hash literal" do
86
+ block = return_proc_value(:one, two: {a: -> {'proc_inside'}})
87
+ assert_equal "-> {'proc_inside'}", block.source
88
+ end
89
+
81
90
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: express_templates
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Talcott Smith
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-07-24 00:00:00.000000000 Z
12
+ date: 2015-07-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport