interview 0.1.0 → 0.3.0

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.
Files changed (116) hide show
  1. checksums.yaml +4 -4
  2. data/interview.gemspec +1 -0
  3. data/lib/{generators/interview/install/templates → assets/javascripts}/interview.js.coffee +17 -25
  4. data/lib/{generators/interview/install/templates/bootstrap_interview.css.scss → assets/stylesheets/interview.css.scss} +3 -2
  5. data/lib/generators/interview/install/install_generator.rb +0 -2
  6. data/lib/generators/interview/install/templates/interview.rb +1 -1
  7. data/lib/interview.rb +65 -51
  8. data/lib/interview/association_methods.rb +2 -0
  9. data/lib/interview/builder.rb +32 -24
  10. data/lib/interview/control.rb +25 -7
  11. data/lib/interview/controls/actionbar.rb +41 -0
  12. data/lib/interview/controls/alert.rb +15 -0
  13. data/lib/interview/{association_attribute.rb → controls/association_attribute.rb} +8 -8
  14. data/lib/interview/{association_list_attribute.rb → controls/association_list_attribute.rb} +10 -9
  15. data/lib/interview/controls/attribute.rb +80 -0
  16. data/lib/interview/controls/auto_attribute.rb +16 -0
  17. data/lib/interview/controls/boolean_attribute.rb +20 -0
  18. data/lib/interview/controls/breadcrumbs.rb +15 -0
  19. data/lib/interview/controls/button.rb +25 -0
  20. data/lib/interview/controls/caret.rb +9 -0
  21. data/lib/interview/controls/collapse_container.rb +16 -0
  22. data/lib/interview/controls/container.rb +5 -0
  23. data/lib/interview/controls/container_attribute.rb +28 -0
  24. data/lib/interview/controls/date_attribute.rb +23 -0
  25. data/lib/interview/controls/datetime_attribute.rb +22 -0
  26. data/lib/interview/controls/decimal_attribute.rb +12 -0
  27. data/lib/interview/controls/dropdown.rb +35 -0
  28. data/lib/interview/controls/form.rb +35 -0
  29. data/lib/interview/controls/form_errors.rb +20 -0
  30. data/lib/interview/controls/glyphicon.rb +19 -0
  31. data/lib/interview/controls/grid.rb +62 -0
  32. data/lib/interview/controls/hidden_attribute.rb +11 -0
  33. data/lib/interview/controls/horizontal_form_container.rb +13 -0
  34. data/lib/interview/controls/html_control.rb +13 -0
  35. data/lib/interview/controls/html_doctype.rb +9 -0
  36. data/lib/interview/controls/html_headers.rb +12 -0
  37. data/lib/interview/{html_text_attribute.rb → controls/html_text_attribute.rb} +9 -5
  38. data/lib/interview/controls/image_attribute.rb +61 -0
  39. data/lib/interview/controls/image_gallery_attribute.rb +72 -0
  40. data/lib/interview/controls/image_light_box.rb +17 -0
  41. data/lib/interview/{integer_attribute.rb → controls/integer_attribute.rb} +0 -0
  42. data/lib/interview/controls/link.rb +90 -0
  43. data/lib/interview/controls/list.rb +20 -0
  44. data/lib/interview/controls/media_object.rb +37 -0
  45. data/lib/interview/controls/navigation.rb +11 -0
  46. data/lib/interview/controls/navigation_item.rb +33 -0
  47. data/lib/interview/controls/nested_form.rb +45 -0
  48. data/lib/interview/controls/nested_form_add_images.rb +15 -0
  49. data/lib/interview/controls/nested_form_add_link.rb +29 -0
  50. data/lib/interview/controls/nested_form_remove_link.rb +12 -0
  51. data/lib/interview/{option_attribute.rb → controls/option_attribute.rb} +19 -19
  52. data/lib/interview/controls/pagination.rb +12 -0
  53. data/lib/interview/controls/panel.rb +13 -0
  54. data/lib/interview/{polymorphic_add_link.rb → controls/polymorphic_add_link.rb} +1 -1
  55. data/lib/interview/controls/polymorphic_nested_form.rb +17 -0
  56. data/lib/interview/{nested_form_add_link.rb → controls/polymorphic_nested_form_add_link.rb} +12 -28
  57. data/lib/interview/controls/progress_bar.rb +18 -0
  58. data/lib/interview/controls/scaffold_card.rb +27 -0
  59. data/lib/interview/controls/scaffold_form.rb +108 -0
  60. data/lib/interview/controls/search_form.rb +25 -0
  61. data/lib/interview/controls/section.rb +16 -0
  62. data/lib/interview/{space.rb → controls/space.rb} +5 -6
  63. data/lib/interview/{string_attribute.rb → controls/string_attribute.rb} +0 -0
  64. data/lib/interview/controls/submit.rb +14 -0
  65. data/lib/interview/controls/tab.rb +27 -0
  66. data/lib/interview/controls/tab_box.rb +21 -0
  67. data/lib/interview/controls/text.rb +33 -0
  68. data/lib/interview/{text_attribute.rb → controls/text_attribute.rb} +7 -5
  69. data/lib/interview/controls/tooltip.rb +21 -0
  70. data/lib/interview/{tree.rb → controls/tree.rb} +2 -3
  71. data/lib/interview/{view.rb → controls/view.rb} +4 -6
  72. data/lib/interview/engine.rb +4 -0
  73. data/lib/interview/handler.rb +15 -0
  74. data/lib/interview/has_html_options.rb +29 -0
  75. data/lib/interview/meta_control.rb +18 -0
  76. data/lib/interview/nested_buildable.rb +17 -0
  77. data/lib/interview/version.rb +1 -1
  78. metadata +84 -54
  79. data/lib/interview/actionbar.rb +0 -39
  80. data/lib/interview/attribute.rb +0 -166
  81. data/lib/interview/boolean_attribute.rb +0 -59
  82. data/lib/interview/breadcrumbs.rb +0 -21
  83. data/lib/interview/button.rb +0 -29
  84. data/lib/interview/collapse_container.rb +0 -31
  85. data/lib/interview/condition_container.rb +0 -19
  86. data/lib/interview/container.rb +0 -13
  87. data/lib/interview/container_attribute.rb +0 -30
  88. data/lib/interview/date_attribute.rb +0 -20
  89. data/lib/interview/datetime_attribute.rb +0 -20
  90. data/lib/interview/decimal_attribute.rb +0 -10
  91. data/lib/interview/dropdown.rb +0 -39
  92. data/lib/interview/form.rb +0 -64
  93. data/lib/interview/form_errors.rb +0 -22
  94. data/lib/interview/grid.rb +0 -54
  95. data/lib/interview/has_controls.rb +0 -40
  96. data/lib/interview/hidden_attribute.rb +0 -15
  97. data/lib/interview/html_control.rb +0 -21
  98. data/lib/interview/image_attribute.rb +0 -59
  99. data/lib/interview/image_gallery_attribute.rb +0 -79
  100. data/lib/interview/image_light_box.rb +0 -19
  101. data/lib/interview/link.rb +0 -134
  102. data/lib/interview/list.rb +0 -26
  103. data/lib/interview/media_object.rb +0 -27
  104. data/lib/interview/navigation.rb +0 -55
  105. data/lib/interview/navigation_item.rb +0 -41
  106. data/lib/interview/navigation_item_old.rb +0 -26
  107. data/lib/interview/nested_form.rb +0 -66
  108. data/lib/interview/nested_form_add_images.rb +0 -33
  109. data/lib/interview/nested_form_remove_link.rb +0 -28
  110. data/lib/interview/panel.rb +0 -18
  111. data/lib/interview/progress_bar.rb +0 -25
  112. data/lib/interview/search_form.rb +0 -21
  113. data/lib/interview/tab.rb +0 -21
  114. data/lib/interview/tab_box.rb +0 -30
  115. data/lib/interview/text.rb +0 -45
  116. data/lib/interview/tooltip.rb +0 -38
@@ -1,21 +0,0 @@
1
- module Interview
2
- class Breadcrumbs < Control
3
-
4
- include HasControls
5
-
6
- def render
7
- if Object.const_defined?('Gretel')
8
- return h.breadcrumbs
9
- else
10
- html = ::Builder::XmlMarkup.new
11
- html.ol class: 'breadcrumb' do
12
- add_parent(build_children).each do |control|
13
- html << control.render
14
- end
15
- end
16
- return html.target!
17
- end
18
- end
19
-
20
- end
21
- end
@@ -1,29 +0,0 @@
1
- module Interview
2
- class Button < Control
3
- include HasControls
4
-
5
- attr_accessor :caption, :name, :style, :submit
6
- attr_reader :html_class
7
-
8
- def initialize(params={})
9
- @html_class = []
10
- super
11
- end
12
-
13
- def render
14
- html_class = @html_class
15
- if @style.to_s == 'primary'
16
- html_class << 'btn btn-primary'
17
- else
18
- html_class << 'btn btn-default'
19
- end
20
-
21
- if @submit
22
- h.submit_tag @caption, name: @name, class: @html_class.join(' ')
23
- else
24
- h.button_tag @caption, name: @name, class: @html_class.join(' ')
25
- end
26
- end
27
-
28
- end
29
- end
@@ -1,31 +0,0 @@
1
- module Interview
2
- class CollapseContainer < Control
3
- include HasControls
4
-
5
- attr_accessor :caption
6
-
7
- def render
8
- html = ::Builder::XmlMarkup.new
9
- controls = add_parent(build_children)
10
- if @caption
11
- link = Interview::Link.new(caption: @caption)
12
- else
13
- link = controls.first
14
- controls = controls[1..-1]
15
- end
16
- link.url = '#'
17
- link.html_class << 'collapse_link'
18
- link.html_data[:toggle] = 'collapse'
19
- new_id = Time.now.to_f.to_s.delete('.')
20
- link.html_data[:target] = "##{new_id}"
21
- html << link.render
22
- html.div id: new_id, class: 'panel-collapse collapse' do
23
- controls.each do |control|
24
- html << control.render
25
- end
26
- end
27
- return html.target!
28
- end
29
-
30
- end
31
- end
@@ -1,19 +0,0 @@
1
- module Interview
2
- class ConditionContainer < Control
3
- include HasControls
4
-
5
- attr_accessor :condition
6
-
7
- def render
8
- object = find_attribute :object
9
- if @condition.call(object)
10
- return add_parent(build_children).map do |control|
11
- control.render
12
- end.join
13
- else
14
- return ''
15
- end
16
- end
17
-
18
- end
19
- end
@@ -1,13 +0,0 @@
1
- module Interview
2
- class Container < Control
3
-
4
- include HasControls
5
-
6
- def render
7
- return add_parent(build_children).map do |control|
8
- control.render
9
- end.join
10
- end
11
-
12
- end
13
- end
@@ -1,30 +0,0 @@
1
- module Interview
2
- class ContainerAttribute < Attribute
3
- include HasControls
4
-
5
- def value
6
- return nil
7
- end
8
-
9
- def caption
10
- return @caption.to_s
11
- end
12
-
13
- def tooltip
14
- return ''
15
- end
16
-
17
- def render_read
18
- html = ::Builder::XmlMarkup.new
19
- add_parent(build_children).each do |control|
20
- html << control.render
21
- end
22
- return html.target!
23
- end
24
-
25
- def render_write
26
- render_read
27
- end
28
-
29
- end
30
- end
@@ -1,20 +0,0 @@
1
- module Interview
2
- class DateAttribute < Attribute
3
-
4
- attr_accessor :format
5
-
6
- def render_read
7
- return '' if value.nil?
8
- if @format
9
- return value.strftime(@format)
10
- else
11
- return h.l value
12
- end
13
- end
14
-
15
- def render_write
16
- form_builder.date_select @method #, {}, {class: 'form-control'}
17
- end
18
-
19
- end
20
- end
@@ -1,20 +0,0 @@
1
- module Interview
2
- class DatetimeAttribute < Attribute
3
-
4
- attr_accessor :format
5
-
6
- def render_read
7
- return '' if value.nil?
8
- if @format
9
- return value.strftime(@format)
10
- else
11
- return h.l value
12
- end
13
- end
14
-
15
- def render_write
16
- form_builder.date_select @method #, {}, {class: 'form-control'}
17
- end
18
-
19
- end
20
- end
@@ -1,10 +0,0 @@
1
- module Interview
2
- class DecimalAttribute < Attribute
3
-
4
- def render_read
5
- return '' if value.nil?
6
- return h.number_with_precision(value).to_s
7
- end
8
-
9
- end
10
- end
@@ -1,39 +0,0 @@
1
- module Interview
2
- class Dropdown < Control
3
- include HasControls
4
-
5
- attr_accessor :image, :caption, :style, :html_class, :container_tag
6
-
7
- def initialize(params={})
8
- @html_class = []
9
- super
10
- end
11
-
12
- def render
13
- container_tag = @container_tag || 'div'
14
- html = ::Builder::XmlMarkup.new
15
- html_class = @html_class.dup
16
- html_class << 'dropdown'
17
- html.tag! container_tag, class: html_class.join(' ') do
18
- html_class = 'dropdown-toggle'
19
- html_class += ' btn btn-default' if @style == 'button'
20
- html.a class: html_class, href: '#', :'data-toggle' => 'dropdown' do
21
- html.span '', class: "glyphicon glyphicon-#{@image}" if @image
22
- html.text! ' ' if @image and @caption
23
- html.text! @caption if @caption
24
- html.text! ' ' if @caption
25
- html.span '', class: 'caret'
26
- end
27
- html.ul class: 'dropdown-menu' do
28
- add_parent(build_children).each do |control|
29
- html.li do
30
- html << control.render
31
- end
32
- end
33
- end
34
- end
35
- return html.target!
36
- end
37
-
38
- end
39
- end
@@ -1,64 +0,0 @@
1
- module Interview
2
- class Form < Control
3
- include HasControls
4
-
5
- attr_accessor :skip_submit, :submit_label, :multi_create, :align, :redirect_to
6
- attr_reader :form_builder
7
-
8
- def render
9
- object = find_attribute!(:object)
10
- html_options = case @align
11
- when 'horizontal' then { class: 'form-horizontal' }
12
- when 'inline' then { class: 'form-inline' }
13
- else {}
14
- end
15
- return h.form_for(object, role: 'form', html: html_options) do |form_builder|
16
- @form_builder = form_builder
17
- html = ::Builder::XmlMarkup.new(indent: 2)
18
-
19
- render_default_controls(html)
20
-
21
- add_parent(build_children).each do |control|
22
- html << control.render
23
- html.text! ' ' if @align == 'inline'
24
- end
25
-
26
- if @align == 'horizontal'
27
- html.div class: 'form-group' do
28
- html.div class: 'col-sm-offset-3 col-sm-9' do
29
- render_submit(html)
30
- end
31
- end
32
- else
33
- render_submit(html)
34
- end
35
-
36
- html.target!.html_safe
37
- end
38
- end
39
-
40
- protected
41
-
42
- def render_submit(html)
43
- if not @skip_submit
44
- html << form_builder.submit(@submit_label, class: 'btn btn-primary')
45
- if @multi_create || find_attribute(:multi_create)
46
- html.text! ' '
47
- html << h.check_box_tag('new_record', '1', true)
48
- html.text! ' und weiteren Datesatz' # todo
49
- end
50
- end
51
- end
52
-
53
- def render_default_controls(html)
54
- html << FormErrors.new(parent: self).render
55
-
56
- if @redirect_to == :parent and Object.const_defined? 'Gretel'
57
- html << h.hidden_field_tag('redirect_to', h.parent_breadcrumb.url)
58
- elsif @redirect_to == :current
59
- html << h.hidden_field_tag('redirect_to', h.request.original_url)
60
- end
61
- end
62
-
63
- end
64
- end
@@ -1,22 +0,0 @@
1
- module Interview
2
- class FormErrors < Control
3
-
4
- def render
5
- object = find_attribute!(:object)
6
-
7
- html = ::Builder::XmlMarkup.new
8
- if object.errors.any?
9
- html.div class: 'alert alert-danger' do
10
- html.h4 h.translate("errors.template.header", count: object.errors.count, model: object.class.model_name.human)
11
- html.ul do
12
- object.errors.full_messages.each do |msg|
13
- html.li msg
14
- end
15
- end
16
- end
17
- end
18
- return html.target!
19
- end
20
-
21
- end
22
- end
@@ -1,54 +0,0 @@
1
- module Interview
2
- class Grid < Control
3
- include HasControls
4
-
5
- attr_accessor :objects, :sortable
6
- attr_reader :object
7
-
8
- def render
9
- objects = @objects || find_attribute!(:objects)
10
- controls = add_parent(build_children)
11
- @object = find_attribute!(:object)
12
- sortable_id = "sortable_#{@object.class.model_name.plural}" if @sortable
13
- html = ::Builder::XmlMarkup.new
14
- html.table class: 'table' do
15
- html.thead do
16
- html.tr do
17
- html.th '' if @sortable
18
- controls.each do |control|
19
- html.th do
20
- html << control.caption
21
- end
22
- end
23
- end
24
- end
25
- html_opts = {}
26
- html_opts[:id] = sortable_id if @sortable
27
- html.tbody html_opts do
28
- objects.each do |object|
29
- @object = object
30
- html_opts = {}
31
- html_opts[:id] = "#{sortable_id}_#{object.id}" if @sortable
32
- html.tr html_opts do
33
- if @sortable
34
- html.td do
35
- html.span '', class: 'handle glyphicon glyphicon-resize-vertical'
36
- end
37
- end
38
- controls.each do |control|
39
- html.td do
40
- html << control.render
41
- end
42
- end
43
- end
44
- end
45
- end
46
- end
47
- if objects.empty?
48
- html.p "Keine #{@object.class.human_name(count: 2)} vorhanden.", class: 'text-center text-muted'
49
- end
50
- return html.target!
51
- end
52
-
53
- end
54
- end
@@ -1,40 +0,0 @@
1
- module HasControls
2
-
3
- attr_reader :controls
4
-
5
- def initialize(params={})
6
- super
7
- @controls = []
8
- end
9
-
10
- def add_control(control, &block)
11
- control.parent = self
12
- yield(control) if block_given?
13
- @controls << control
14
- end
15
-
16
- def add_controls(controls)
17
- add_parent(controls)
18
- @controls += controls
19
- end
20
-
21
- def siblings
22
- return @controls.map do |control|
23
- if control.respond_to? :siblings
24
- [control] + control.siblings
25
- else
26
- control
27
- end
28
- end.flatten
29
- end
30
-
31
- def build_children
32
- return @controls
33
- end
34
-
35
- def add_parent(controls)
36
- controls.each { |control| control.parent = self }
37
- return controls
38
- end
39
-
40
- end
@@ -1,15 +0,0 @@
1
- module Interview
2
- class HiddenAttribute < Attribute
3
-
4
- def render_write
5
- form_builder.hidden_field @method
6
- end
7
-
8
- protected
9
-
10
- def render_form_style
11
- return render_write
12
- end
13
-
14
- end
15
- end