roda-component 0.1.7 → 0.1.8

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: fb40f8e16ac85061c67bd1682713ccb3f2b2ac5d
4
- data.tar.gz: a59a3965324bc99366e09b30cd35c78ac6e0b1c8
3
+ metadata.gz: 4d2295718996694bcaf5a8f826f77ee2f488b415
4
+ data.tar.gz: d4232e47a4af010f6cbec1f8d3231fc8975b9f2d
5
5
  SHA512:
6
- metadata.gz: 87300a93107f87aacde85afb7b8cf0c1348c8e4abe8cec88a0d4b639564e9c977263b795bfc5aee45d9c3e18ef2d215ee9ecb73ba46b0fa68137eeab77938a59
7
- data.tar.gz: 86bcf3339b5abdda5341041f44689dadd60ea80a77516c47eb38fe0962df4f2cf5738ba6baa1492f72c3a2d07616c9371cd1924ec16217949d89be414e682aad
6
+ metadata.gz: a1404cb9742440c6f27210f56e2904c01543240aad4a675a8c0e6f8b11773fb2b165390886ec2fe46b7f66333cf58ea94955b5d1e548cfc994710be73cbe71d9
7
+ data.tar.gz: 327320da0c95ea40a015a8516627c730cc6e7fb2e7020d5bb78e556b2d9036cc371c5815272e3dbbddb629e272fe0e30e44a1a7891a895ba12a14f5617cc9337
@@ -40,7 +40,7 @@ class Roda
40
40
  $faye.subscribe "/components/#{self.class._name}" do |msg|
41
41
  msg = Native(msg)
42
42
 
43
- trigger :"#{msg[:type]}", msg unless $faye.public_id == msg[:public_id]
43
+ trigger :"#{msg[:type]}", msg['local'], msg unless $faye.public_id == msg[:public_id]
44
44
  end
45
45
 
46
46
  $faye.on 'transport:up' do
@@ -1,12 +1,12 @@
1
1
  class Roda
2
2
  class Component
3
3
  class Events < Struct.new(:klass, :component_opts, :scope, :request)
4
- def on name, options = {}, &block
4
+ def on name, options = {}, extra_opts = false, &block
5
5
  if client? && options.is_a?(String)
6
6
  class_name = klass._name
7
7
  class_events = (events[class_name] ||= {})
8
8
  event = (class_events[:_jquery_events] ||= [])
9
- event << [block, class_name, options, name]
9
+ event << [block, class_name, options, extra_opts, name]
10
10
  elsif options.is_a?(Hash)
11
11
  limit_if = options.delete(:if) || []
12
12
  limit_if = [limit_if] unless limit_if.is_a? Array
@@ -28,16 +28,48 @@ class Roda
28
28
  return unless e = events[klass._name]
29
29
 
30
30
  (e[:_jquery_events] || []).each do |event|
31
- block, comp, selector, name = event
31
+ block, comp, selector, opts, name = event
32
32
 
33
33
  name = name.to_s
34
34
 
35
- if name != 'ready'
36
- Document.on name, selector do |evt|
37
- Component::Instance.new(component(comp), scope).instance_exec evt.current_target, evt, &block
35
+ case name.to_s
36
+ when 'ready'
37
+ el = Element.find(selector)
38
+
39
+ Component::Instance.new(component(comp), scope).instance_exec el, &block
40
+ when 'form'
41
+ klass = opts.delete :class
42
+ warn 'missing form class option' unless klass
43
+
44
+ el = DOM.new Element.find(selector)
45
+
46
+ el.on :submit do |evt|
47
+ evt.prevent_default
48
+
49
+ params = {}
50
+ el.find('.field-error').remove
51
+
52
+ # loop through all the forum values
53
+ el.serialize_array.each do |row|
54
+ field, _ = row
55
+
56
+ # we need to make it native to access it like ruby
57
+ field = Native(field)
58
+ name = field['name']
59
+ value = field['value']
60
+
61
+ params[name] = value
62
+ end
63
+
64
+ form = klass.new params, dom: el
65
+
66
+ Component::Instance.new(component(comp), scope).instance_exec form, evt.current_target, evt, &block
38
67
  end
39
68
  else
40
- Component::Instance.new(component(comp), scope).instance_exec Document.find(selector), nil, &block
69
+ Document.on name, selector do |evt|
70
+ el = evt.current_target
71
+ Component::Instance.new(component(comp), scope).instance_exec el, evt, &block
72
+ end
41
73
  end
42
74
  end
43
75
  end
@@ -34,7 +34,9 @@ class Roda
34
34
  # # Now it's safe to initialize the model.
35
35
  # post = Post.new(edit.attributes)
36
36
  # post.save
37
- def initialize(atts)
37
+ def initialize(atts, options = {})
38
+ @_options = options
39
+
38
40
  atts.each do |key, val|
39
41
  send(:"#{key}=", val)
40
42
  end
@@ -44,7 +46,8 @@ class Roda
44
46
  def attributes
45
47
  Hash.new.tap do |atts|
46
48
  instance_variables.each do |ivar|
47
- next if ivar == :@errors
49
+ # todo: figure out why it's setting @constructor and @toString
50
+ next if ivar == :@errors || ivar == :@_options || ivar == :@_dom || ivar == :@constructor || ivar == :@toString
48
51
 
49
52
  att = ivar[1..-1].to_sym
50
53
  atts[att] = send(att)
@@ -59,6 +62,47 @@ class Roda
59
62
  end
60
63
  end
61
64
  end
65
+
66
+ def display_errors options = {}
67
+ if extra_errors = options.delete(:errors)
68
+ extra_errors.each do |key, value|
69
+ errors[key] = value
70
+ end
71
+ end
72
+
73
+ errors.each do |key, error|
74
+ error = error.first
75
+ field_error_dom = options.delete :tmpl
76
+ field_error_dom = DOM.new('<span class="field-error"><span>') unless field_error_dom
77
+ field_error_dom.html _error_name(key, error)
78
+
79
+ field = _dom.find("input[name='#{key}']")
80
+ field.before field_error_dom.dom
81
+ end
82
+ end
83
+
84
+ protected
85
+
86
+ def _options
87
+ @_options
88
+ end
89
+
90
+ def _dom
91
+ @_dom ||= @_options[:dom]
92
+ end
93
+
94
+ def _error_name key, error
95
+ case error.to_sym
96
+ when :not_email
97
+ 'Email Isn\'t Valid.'
98
+ when :not_present
99
+ 'Required.'
100
+ when :not_equal
101
+ 'Password does not match.'
102
+ else
103
+ error
104
+ end
105
+ end
62
106
  end
63
107
  end
64
108
  end
@@ -1,5 +1,5 @@
1
1
  class Roda
2
2
  class Component
3
- VERSION = "0.1.7"
3
+ VERSION = "0.1.8"
4
4
  end
5
5
  end
@@ -14,6 +14,12 @@ class ChatComponent < Roda::Component
14
14
  end
15
15
  end
16
16
 
17
+ on :server do
18
+ def get_user_list
19
+
20
+ end
21
+ end
22
+
17
23
  on :reconnect do
18
24
  puts 'reconnected'
19
25
  end
@@ -50,76 +50,29 @@ class LoginComponent < Roda::Component
50
50
  end
51
51
  end
52
52
 
53
- on :ready, 'form.main-form' do |el|
54
- el.on :submit do |evt|
55
- evt.prevent_default
56
-
57
- params = {}
58
- el.find('.field-error').remove
59
-
60
- # loop through all the forum values
61
- el.serialize_array.each do |row|
62
- field, _ = row
63
-
64
- # we need to make it native to access it like ruby
65
- field = Native(field)
66
- name = field['name']
67
- value = field['value']
68
-
69
- params[name] = value
70
- end
71
-
72
- form = Forms::Login.new params
73
-
74
- if form.valid?
75
- login_with params do |res|
76
- if res['success']
77
- # redirect them to the chatroom
78
- `window.location.replace("/")`
53
+ on :form, 'form.main-form', class: Forms::Login do |form, el, evt|
54
+ if form.valid?
55
+ login_with form.attributes do |res|
56
+ if res['success']
57
+ # redirect them to the chatroom
58
+ `window.location.replace("/")`
59
+ else
60
+ case res['reason']
61
+ when /doesn't exist/
62
+ # Add fields for them to signup with
63
+ container = el.find('.field-container')
64
+ container.prepend('<input name="signup" type="hidden" value=true>')
65
+ container.prepend('<input name="last_name" type="text" placeholder="Last Name">')
66
+ container.prepend('<input name="first_name" type="text" placeholder="First Name">')
67
+ container.find("[name='password']").after('<input name="password_confirmation" type="password" placeholder="Confirm Password">')
79
68
  else
80
- case res['reason']
81
- when /doesn't exist/
82
- # Add fields for them to signup with
83
- container = el.find('.field-container')
84
- container.prepend('<input name="signup" type="hidden" value=true>')
85
- container.prepend('<input name="last_name" type="text" placeholder="Last Name">')
86
- container.prepend('<input name="first_name" type="text" placeholder="First Name">')
87
- container.find("[name='password']").after('<input name="password_confirmation" type="password" placeholder="Confirm Password">')
88
- else
89
- # Show server errors
90
- display_errors res['errors']
91
- end
69
+ # Show server errors
70
+ form.display_errors tmpl: tmpl(:field_error), errors: res['errors']
92
71
  end
93
72
  end
94
- else
95
- display_errors form.errors
96
73
  end
97
- end
98
- end
99
-
100
- protected
101
-
102
- def display_errors errors
103
- errors.each do |key, error|
104
- error = error.first
105
- field_error = tmpl :field_error
106
- field_error.html error_name(key, error)
107
-
108
- field = dom.find("input[name='#{key}']")
109
- field.before field_error.dom
110
- end
111
- end
112
-
113
- def error_name key, error
114
- case error.to_sym
115
- when :not_email
116
- 'Email Isn\'t Valid.'
117
- when :not_present
118
- 'Required.'
119
- when :not_equal
120
- 'Password does not match.'
121
74
  else
122
- error
75
+ form.display_errors tmpl: tmpl(:field_error)
123
76
  end
124
77
  end
125
78
  end
@@ -11,6 +11,7 @@ Unreloader.require './models'
11
11
  Unreloader.require '../../lib/roda/component/dom.rb'
12
12
  Unreloader.require '../../lib/roda/component/faye.rb'
13
13
  Unreloader.require '../../lib/roda/component/form.rb'
14
+ Unreloader.require '../../lib/roda/component/events.rb'
14
15
  Unreloader.require '../../lib/roda/component/form/validations.rb'
15
16
  Unreloader.require '../../lib/roda/component.rb'
16
17
  Unreloader.require '../../lib/roda/plugins/component.rb'
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda-component
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - cj
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-16 00:00:00.000000000 Z
11
+ date: 2015-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal