sequent-sinatra 0.1.3 → 0.1.4

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: d4de24041294b04ecf9a92547e74e53a476ab37c
4
- data.tar.gz: 0c1c4e5ce725830548554ea59e012f12aedea973
3
+ metadata.gz: ff3009b374b8b75cad6de45571b76487c92a691d
4
+ data.tar.gz: 8fa9e461c0c80a3f7b2610c8af6eeb915287165e
5
5
  SHA512:
6
- metadata.gz: d6703e46cf329713855289c5e45873b3ac894d106ec28945b48801fba6f7085e5c3098572ff1f63f7864f8dc547b49448e97866fa3c5b39a37321017f7058f9e
7
- data.tar.gz: 219ac73516d0956b3fde4d32f5cc2e695265ea244963a617c5a98801e73c648c608deb1f015a37130f3ff19c33ff09dd2bc41f49df79856279399832665f506d
6
+ metadata.gz: eecf5a4b6e328bad1282f225248d01b1a7c239cae5b55e6b917ae4feb824845b234283af491765cfec2bece2b85c63eca2d7611f61cb9cc0a875dcff05eae175
7
+ data.tar.gz: 4ce04e459bde7fe61d229495795e2595b135b67821dfda16a426fa0c4c50f71b57796419679f2faee1a03c226380103351002a28bd9f73fad4ade20fa6fc2951
@@ -21,10 +21,16 @@ module Sequent
21
21
  app.helpers Sequent::Core::Helpers::UuidHelper
22
22
  app.helpers Sequent::Web::Sinatra::FormHelpers
23
23
  app.helpers Sequent::Web::Sinatra::SimpleCommandServiceHelpers
24
+ app.set :sequent_config_dir, app.root unless app.respond_to?(:sequent_config_dir)
24
25
 
25
26
  app.before do
26
- require File.join(app.sequent_config_dir || app.root, 'initializers/sequent')
27
- @command_service = Sequent::Core::CommandService.instance
27
+ config_file = File.join(app.sequent_config_dir, 'initializers/sequent')
28
+ if File.exist?("#{config_file}.rb") || File.exist?("#{config_file}")
29
+ require config_file
30
+ else
31
+ raise "Unable to initialize Sequent. Config file #{config_file} not found.\nInitialize Sequent correctly? First set the 'sequent_config_dir' or the 'root', then register Sequent::Web::Sinatra in your Sinatra application"
32
+ end
33
+ @command_service = Sequent.command_service
28
34
  end
29
35
 
30
36
  end
@@ -9,15 +9,25 @@ module Sequent
9
9
 
10
10
  attr_reader :path, :parent
11
11
 
12
+ def postfix
13
+ nil
14
+ end
15
+
12
16
  def initialize(parent, path, params, errors, options = {})
13
17
  raise "params are empty while creating new fieldset path #{path}" unless params
14
- @values = params.has_key?(path) ? (params[path] || {}) : {}
18
+ @values = params[path] || {}
15
19
  @parent = parent
16
20
  @path = path.to_s.gsub(/\W+/, '')
17
21
  @errors = errors
18
22
  @options = options
19
23
  end
20
24
 
25
+ def nested_array(name)
26
+ (@values[name] || [{}]).each do |value|
27
+ yield FieldsetInArray.new(self, name, { name => value }, @errors, @options)
28
+ end
29
+ end
30
+
21
31
  def nested(name)
22
32
  yield Fieldset.new(self, name, @values, @errors, @options)
23
33
  end
@@ -29,9 +39,13 @@ module Sequent
29
39
  def path_for(field_name)
30
40
  css_id @path, field_name
31
41
  end
32
-
33
42
  end
34
43
 
44
+ class FieldsetInArray < Fieldset
45
+ def postfix
46
+ "[]"
47
+ end
48
+ end
35
49
  end
36
50
  end
37
51
  end
@@ -4,21 +4,49 @@ require 'rack/csrf'
4
4
  module Sequent
5
5
  module Web
6
6
  module Sinatra
7
+ ##
8
+ # Various form helpers to help bind html forms to `Sequent::Core::Command`s
9
+ #
7
10
  module FormHelpers
11
+ ##
12
+ # Creates a form not bound to any Command
13
+ #
14
+ # Parameters
15
+ # +action+ the action attribute of the <form> tag
16
+ # +method+ the method attribute of the <form> tag.
17
+ # :delete and :update will result in an extra hidden field _method to be set so sinatra will call the corresponding `delete '/' {}` or `update `/` {}` methods in your application.
18
+ # +options+ options hash
19
+ #
8
20
  def html_form(action, method=:get, options={}, &block)
9
21
  html_form_for nil, action, method, options, &block
10
22
  end
11
23
 
24
+ ##
25
+ # Creates a for bound to an object that respond_to :as_params. This is typically a `Sequent::Core::Command` or a `Sequent::Core::ValueObject`.
26
+ #
27
+ # Parameters
28
+ # +for_object+ The form backing object. This object must `include` Sequent::Core::Helpers::ParamSupport
29
+ # +action+ the action attribute of the <form> tag
30
+ # +method+ the method attribute of the <form> tag.
31
+ # :delete and :update will result in an extra hidden field _method to be set so sinatra will call the corresponding `delete '/' {}` or `update `/` {}` methods in your application.
32
+ # +options+ options hash
33
+ #
12
34
  def html_form_for(for_object, action, method=:get, options={}, &block)
13
35
  raise "Given object of class #{for_object.class} does not respond to :as_params. Are you including Sequent::Core::Helpers::ParamSupport?" if (for_object and !for_object.respond_to? :as_params)
14
36
  form = Form.new(self, for_object, action, method, options.merge(role: "form"))
15
37
  form.render(&block)
16
38
  end
17
39
 
40
+ ##
41
+ # Shorthand for Rack::Utils.escape_html(text)
42
+ #
18
43
  def h(text)
19
44
  Rack::Utils.escape_html(text)
20
45
  end
21
46
 
47
+ ##
48
+ # Shorthand for Rack::Csrf.csrf_tag(env)
49
+ #
22
50
  def csrf_tag
23
51
  raise "You must enable sessions to use FormHelpers" unless env
24
52
  Rack::Csrf.csrf_tag(env)
@@ -1,7 +1,18 @@
1
1
  module Sequent
2
2
  module Web
3
3
  module Sinatra
4
+ ##
5
+ # Exposes various helper methods for creating form tags
6
+ #
4
7
  module TagHelper
8
+ ##
9
+ # creates a <input type=checkbox>
10
+ #
11
+ # Parameters
12
+ # +field+ the name of the attribute within the current object.
13
+ # +options+ Hash with optional attributes.
14
+ # :value - the default checked value if the current object has none
15
+ # :class - the css class
5
16
  def raw_checkbox(field, options={})
6
17
  id = css_id(@path, field)
7
18
  value = param_or_default(field, options[:value]) || id
@@ -13,14 +24,39 @@ module Sequent
13
24
  )
14
25
  end
15
26
 
27
+ ##
28
+ # Creates a <input type=text>
29
+ #
30
+ # Parameters
31
+ # +field+ the name of the attribute within the current object.
32
+ # +options+ Hash with optional attributes.
33
+ # :value - the default value if the current object has none
34
+ # :class - the css class
16
35
  def raw_input(field, options={})
17
36
  raw_field(field, "text", options)
18
37
  end
19
38
 
39
+ ##
40
+ # Creates a <input type=password>
41
+ #
42
+ # Parameters
43
+ # +field+ the name of the attribute within the current object.
44
+ # +options+ Hash with optional attributes.
45
+ # :value - the default value if the current object has none
46
+ # :class - the css class
20
47
  def raw_password(field, options={})
21
48
  raw_field(field, "password", options)
22
49
  end
23
50
 
51
+ ##
52
+ # Creates a <textarea>
53
+ #
54
+ # Parameters
55
+ # +field+ the name of the attribute within the current object.
56
+ # +options+ Hash with optional attributes.
57
+ # :value - the default value if the current object has none
58
+ # :class - the css class
59
+ # :rows - the number of rows of the textarea
24
60
  def raw_textarea(field, options={})
25
61
  value = param_or_default(field, options[:value])
26
62
 
@@ -30,10 +66,27 @@ module Sequent
30
66
  ))
31
67
  end
32
68
 
69
+ ##
70
+ # Creates a <input type=hidden>
71
+ #
72
+ # Parameters
73
+ # +field+ the name of the attribute within the current object.
74
+ # +options+ Hash with optional attributes.
75
+ # :value - the default value if the current object has none
76
+ # :class - the css class
33
77
  def raw_hidden(field, options={})
34
78
  raw_field(field, "hidden", options)
35
79
  end
36
80
 
81
+ ##
82
+ # Creates a <select> with <option>
83
+ #
84
+ # Parameters
85
+ # +field+ the name of the attribute within the current object.
86
+ # +values+ an array of pairs (arrays) of [value, text_to_display]
87
+ # +options+ Hash with optional attributes.
88
+ # :value - the default value if the current object has none
89
+ # :class - the css class
37
90
  def raw_select(field, values, options={})
38
91
  value = param_or_default(field, options[:value])
39
92
  content = ""
@@ -49,7 +102,7 @@ module Sequent
49
102
 
50
103
  def calculate_name(field)
51
104
  reverse_names = tree_in_names(field)
52
- "#{reverse_names.first}#{reverse_names[1..-1].map { |n| "[#{n}]" }.join}"
105
+ "#{reverse_names.first}#{reverse_names[1..-1].map { |n| n == '[]' ? n : "[#{n}]" }.join}"
53
106
  end
54
107
 
55
108
  def full_path(field)
@@ -60,9 +113,10 @@ module Sequent
60
113
 
61
114
  def tree_in_names(field)
62
115
  if respond_to? :path
63
- names = [field, path]
116
+ names = [field, postfix, path].compact
64
117
  parent = @parent
65
118
  while parent.is_a? Fieldset
119
+ names << parent.postfix if parent.postfix
66
120
  names << parent.path
67
121
  parent = parent.parent
68
122
  end
@@ -76,7 +130,6 @@ module Sequent
76
130
  @values.nil? ? default : @values.has_key?(field.to_s) ? @values[field.to_s] || default : default
77
131
  end
78
132
 
79
-
80
133
  def id_and_text_from_value(val)
81
134
  if val.is_a? Array
82
135
  [val[0], val[1]]
@@ -1,3 +1,3 @@
1
1
  module SequentSinatra
2
- VERSION='0.1.3'
2
+ VERSION='0.1.4'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sequent-sinatra
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Vonk
@@ -54,6 +54,20 @@ dependencies:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
56
  version: '2.5'
57
+ - !ruby/object:Gem::Dependency
58
+ name: rack-test
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - "~>"
62
+ - !ruby/object:Gem::Version
63
+ version: '0.6'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - "~>"
69
+ - !ruby/object:Gem::Version
70
+ version: '0.6'
57
71
  - !ruby/object:Gem::Dependency
58
72
  name: rspec
59
73
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +152,20 @@ dependencies:
138
152
  - - "~>"
139
153
  - !ruby/object:Gem::Version
140
154
  version: '10.4'
155
+ - !ruby/object:Gem::Dependency
156
+ name: pry
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - "~>"
160
+ - !ruby/object:Gem::Version
161
+ version: '0.10'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - "~>"
167
+ - !ruby/object:Gem::Version
168
+ version: '0.10'
141
169
  description: Sequent is an event sourcing framework for Ruby. This gem allows Sequent
142
170
  to work with Sinatra-backed applications.
143
171
  email:
@@ -177,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
177
205
  version: '0'
178
206
  requirements: []
179
207
  rubyforge_project:
180
- rubygems_version: 2.2.2
208
+ rubygems_version: 2.4.5
181
209
  signing_key:
182
210
  specification_version: 4
183
211
  summary: Event sourcing framework for Ruby - Sinatra adapter