fullstack-admin 0.1.19 → 0.1.20

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.19
1
+ 0.1.20
@@ -3,7 +3,6 @@
3
3
  #= require jquery-ui
4
4
  #= require notify
5
5
  #= require jquery.sticky
6
- #= require angular
7
6
 
8
7
  $(document).ready ->
9
8
  $(".btn.toggle-delete").on "click", (e) ->
@@ -20,5 +20,6 @@ $(document).ready ->
20
20
  $("[data-dismiss='modal']").live 'click', ->
21
21
  ($ @).closest('.modal').modal('hide')
22
22
 
23
- $("[rel='popover']").popover()
23
+ $("[data-toggle='popover']").popover()
24
+
24
25
  $('.carousel').carousel()
@@ -10,7 +10,7 @@
10
10
  #= require jquery.remotipart
11
11
  #= require jquery.validate
12
12
  #= require ckeditor/init
13
-
13
+ #= require support/nested_forms
14
14
  ## require jquery.form
15
15
 
16
16
 
@@ -0,0 +1,29 @@
1
+ $(document).ready ->
2
+ $('a.btn-delete-associated-resource').live 'click', ->
3
+ self = $(@)
4
+ associated_resource = $(@).closest(".associated-resource")
5
+
6
+ if !self.hasClass("active")
7
+ associated_resource.removeClass("deleted");
8
+ associated_resource.find("input.destroy-associated-resource").val('0')
9
+ else
10
+ associated_resource.addClass("deleted");
11
+ associated_resource.find("input.destroy-associated-resource").val('1')
12
+
13
+ autoupdate_labels = (associated_resources) ->
14
+ associated_resources.each ->
15
+ associated_resource = $(@)
16
+ label_input_id = associated_resource.data("label-input")
17
+ label_input = $("#" + label_input_id)
18
+ label_input.change ->
19
+ associated_resource.find(".associated-resource-label").text(label_input.val())
20
+
21
+ $(".btn-add-associated-resource").click ->
22
+ associated_resources = $(@).closest(".associated-resources")
23
+ associated_resources_index = associated_resources.find(".associated-resources-index")
24
+ resource_fields_template = associated_resources.find(".resource-fields-template")
25
+ new_id = new Date().getTime()
26
+ template_instance = $(resource_fields_template.html().replace(/___index___/g, new_id))
27
+ associated_resources_index.append(template_instance)
28
+ autoupdate_labels(associated_resources_index.find('.associated-resource:last'))
29
+
@@ -167,4 +167,19 @@ select,
167
167
 
168
168
  .input {
169
169
  margin-bottom: 18px;
170
- }
170
+ }
171
+
172
+
173
+ .resource_updated_at {
174
+ font: italic 12px/36px Arial, Helvetica, sans-serif;
175
+ color: #888;
176
+ }
177
+
178
+ .associated-resource.deleted .fade-if-deleted {
179
+ opacity: 0.5;
180
+ }
181
+
182
+ .associated-resource.deleted .hide-if-deleted {
183
+ display: none
184
+ }
185
+
@@ -36,12 +36,13 @@ module AdminFormHelper
36
36
  end
37
37
 
38
38
 
39
- def resource_inputs(res, *args)
40
- model = res.class
39
+ def resource_inputs(*args)
40
+ model = @target.object.class
41
41
  options = args.extract_options!
42
42
 
43
43
  only_attributes = options[:only] || []
44
- except_attributes = options[:except] || model.protected_attributes.to_a + %W(created_at updated_at slug slugs lat lng)
44
+
45
+ except_attributes = options[:except] || model.protected_attributes.to_a + %W(created_at updated_at slug slugs lat lng position)
45
46
 
46
47
  only_attributes.map! {|a| :"#{a}"}
47
48
  except_attributes.map! {|a| :"#{a}"}
@@ -57,11 +58,22 @@ module AdminFormHelper
57
58
 
58
59
  buff = ""
59
60
 
61
+ attachment_definitions = (model.attachment_definitions || {}).keys
62
+ attachment_columns = attachment_definitions.map {|a|
63
+ [:"#{a}_file_name", :"#{a}_file_size", :"#{a}_content_type", :"#{a}_updated_at"]
64
+ }.flatten
65
+
66
+ columns -= attachment_columns
67
+ columns += attachment_definitions
68
+
69
+
60
70
  columns.each {|k|
61
- k = "#{k}".gsub(/_ids?$/, "").to_sym
71
+ k = "#{k}".gsub(/_ids?$/, "").gsub(/_type$/, "").to_sym
62
72
  assoc = model.reflect_on_association(k)
63
73
  if assoc && assoc.belongs_to?
64
- buff << @target.input(k, :as => :select)
74
+ unless assoc.options[:polymorphic]
75
+ buff << @target.input(k, :as => :select)
76
+ end
65
77
  else
66
78
  buff << @target.input(k)
67
79
  end
@@ -71,8 +83,8 @@ module AdminFormHelper
71
83
  buff.html_safe
72
84
  end
73
85
 
74
- def resource_submit(res)
75
- @target.template.button (res.persisted? ? I18n.t('fullstack.admin.update', :default => "Update") : I18n.t('fullstack.admin.create', :default => "Create")),
86
+ def resource_submit
87
+ @target.template.button (@target.object.persisted? ? I18n.t('fullstack.admin.update', :default => "Update") : I18n.t('fullstack.admin.create', :default => "Create")),
76
88
  :type => :primary,
77
89
  :size => :large
78
90
  end
@@ -81,6 +93,43 @@ module AdminFormHelper
81
93
  @target.template.form_actions(&block)
82
94
  end
83
95
 
96
+ def admin_fields_for(*args)
97
+ @target.semantic_fields_for(*args) do |f|
98
+ yield(FormBuilderDecorator.new(f))
99
+ end
100
+ end
101
+
102
+ def association_inputs(association)
103
+ @target.template.content_tag :div,:class => "well" do
104
+ admin_fields_for(association) do |f|
105
+
106
+ partial_name = association.to_s.singularize + "_fields"
107
+
108
+ if @target.template.partial?(partial_name)
109
+ @target.template.render(:partial => partial_name, :f => f)
110
+ else
111
+ f.resource_inputs
112
+ end
113
+
114
+ end
115
+ end
116
+ end
117
+
118
+ # def link_to_remove_fields(name)
119
+ # @target.hidden_field(:_destroy) + link_to_function(name, "remove_fields(this)")
120
+ # end
121
+ #
122
+ # def link_to_add_fields(name, association)
123
+ # new_object = @target.object.class.reflect_on_association(association).klass.new
124
+ #
125
+ # partial_name = association.to_s.singularize + "_fields"
126
+ # fields = admin_fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
127
+ #
128
+ # end
129
+ # @target.template.link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")
130
+ # end
131
+
132
+
84
133
  end # ~
85
134
 
86
135
  def admin_form_for(record_or_name_or_array, *args)
@@ -3,27 +3,30 @@ module ScaffoldHelper
3
3
  buttons = []
4
4
 
5
5
  if subject.can_show?(content) && lookup_context.exists?('show', lookup_context.prefixes, false)
6
- buttons << link_to(t('fullstack.admin.show', :default => "Show"), self.send(:"#{scope}_#{controller_name.singularize}_path", content), :class => "btn")
6
+ buttons << link_to(t('fullstack.admin.show', :default => "Show"), self.send(:"#{scope}_#{resource_name}_path", content), :class => "btn")
7
7
  end
8
8
 
9
9
  if subject.can_edit?(content)
10
- buttons << link_to(t('fullstack.admin.edit', :default => "Edit"), self.send(:"edit_#{scope}_#{controller_name.singularize}_path", content), :class => "btn")
10
+ buttons << link_to(t('fullstack.admin.edit', :default => "Edit"), self.send(:"edit_#{scope}_#{resource_name}_path", content), :class => "btn")
11
11
  end
12
12
 
13
13
  if subject.can_destroy?(content)
14
14
  buttons << link_to(t('fullstack.admin.delete', :default => "Delete"),
15
- self.send(:"#{scope}_#{controller_name.singularize}_path", content),
15
+ self.send(:"#{scope}_#{resource_name}_path", content),
16
16
  :confirm => t('fullstack.admin.are_you_sure', :default => "Are you sure?"), :method => "delete",
17
17
  :remote => true, :class => "btn hide btn-danger"
18
-
19
18
  )
20
19
  end
21
20
  "#{buttons.join('&nbsp;')}".html_safe
22
21
  end
23
22
 
23
+ def labelize_attribute_name(method)
24
+ label(:object, method).gsub("<label for=\"object_#{method}\">", "").gsub("</label>", "")
25
+ end
26
+
24
27
  def sort_link(method)
25
28
  method = "#{method}"
26
- super(@search, method, I18n.t(method, :scope => 'fullstack.admin.form.labels', :default => method.humanize))
29
+ super(@search, method, labelize_attribute_name(method))
27
30
  end
28
31
 
29
32
  def app_name
@@ -35,7 +38,8 @@ module ScaffoldHelper
35
38
  end
36
39
 
37
40
  def title_column(model)
38
- ( model.column_names & %W(title name label browser_title seo_title seo_name key claim email) ).first
41
+ @_title_columns ||= {}
42
+ @_title_columns[model] ||= ( model.column_names.map{ |c| c.to_s } & %W(title name label browser_title seo_title seo_name key claim email) ).first
39
43
  end
40
44
 
41
45
 
@@ -20,10 +20,10 @@
20
20
 
21
21
  <% Fullstack::Admin.resources.each do |rog| %>
22
22
  <% if rog.type == :group %>
23
- <%= nav_header rog.name %>
23
+ <%= nav_header t(rog.name, :scope => 'fullstack.admin.groups', :default => rog.name.to_s.humanize) %>
24
24
 
25
25
  <% elsif rog.type == :resource %>
26
- <%= nav_item rog.name, [:admin, rog.name] %>
26
+ <%= nav_item t(rog.name, :scope => 'fullstack.admin.resources', :default => rog.name.to_s.humanize), [:admin, rog.name] %>
27
27
  <% end %>
28
28
  <% end %>
29
29
 
@@ -0,0 +1,21 @@
1
+ <% association_class = f.object.class.reflect_on_association(association).klass %>
2
+ <%= f.inputs t(association, :scope => 'activerecord.models', :default => association.to_s.humanize), :class => "associated-resources" do %>
3
+
4
+ <table class="table table-bordered table-striped index-table associated-resources-index">
5
+ <tr><th><%= labelize_attribute_name(title_column(association_class)) %></th><th style="width:30%;"><%= t('fullstack.admin.actions', :default => "Actions") %></th></tr>
6
+ <% i = 0 %>
7
+ <%= f.admin_fields_for association do |f| %>
8
+ <%= render :partial => "nested_form", :locals => {:index => i, :f => f, :resource_name => resource_name, :association => association} %>
9
+ <% i += 1 %>
10
+ <% end %>
11
+ </table>
12
+
13
+ <script type="text/html" charset="utf-8" class="resource-fields-template">
14
+ <%= f.admin_fields_for(association, association_class.new, :child_index => "___index___") do |f| %>
15
+ <%= render :partial => "nested_form", :locals => {:index => "___index___", :f => f, :resource_name => resource_name, :association => association} %>
16
+ <% end %>
17
+ </script>
18
+
19
+ <%= button t('fullstack.admin.add', :default => "Add"), "javascript:void(0);", :class => "btn-add-associated-resource" %>
20
+
21
+ <% end %>
@@ -3,11 +3,11 @@
3
3
  <%= f.errors %>
4
4
 
5
5
  <%= f.inputs do %>
6
- <%= f.resource_inputs(current_resource) %>
6
+ <%= f.resource_inputs %>
7
7
  <% end -%>
8
8
 
9
9
  <%= f.actions do %>
10
- <%= f.resource_submit(current_resource) %>
10
+ <%= f.resource_submit %>
11
11
  <% end %>
12
12
 
13
13
  <% end -%>
@@ -0,0 +1,63 @@
1
+ <% title_column_or_id = title_column(f.object.class) || "id" %>
2
+ <% resource_title = f.object.send(title_column_or_id) %>
3
+
4
+ <tr <%= 'data-new-record' if f.object.new_record? %> class="associated-resource" data-label-input="menu_links_attributes_<%= index %>_<%= title_column_or_id %>">
5
+ <td>
6
+ <div class="fade-if-deleted">
7
+ <% if f.object.persisted? %>
8
+ <span class='associated-resource-label'><%= resource_title %></span>
9
+ <% else %>
10
+ <span class='associated-resource-label'><i>[ <%= t('fullstack.admin.new_record', :default => "new record") %> ]</i></span>
11
+ <% end %>
12
+ </div>
13
+ </td>
14
+ <td>
15
+
16
+ <div class="modal hide" id="<%= resource_name %>_<%= association %>_fields_<%= index %>">
17
+ <div class="modal-header">
18
+ <button type="button" class="close" data-dismiss="modal">×</button>
19
+ <h3>
20
+ <%= t('fullstack.admin.edit', :default => "Edit") %>
21
+
22
+ <% if f.object.persisted? %>
23
+ "<span class='associated-resource-label'><%= resource_title %></span>"
24
+ <% else %>
25
+ "<span class='associated-resource-label'>[ <%= t('fullstack.admin.new_record', :default => "new record") %> ]</span>"
26
+ <% end %>
27
+
28
+ </h3>
29
+ </div>
30
+ <div class="modal-body">
31
+ <%= f.resource_inputs %>
32
+ <%= f.hidden_field(:_destroy, :class => "destroy-associated-resource") %>
33
+ </div>
34
+ <div class="modal-footer">
35
+ <a href="#" class="btn" data-dismiss="modal"><%= t('fullstack.admin.ok', :default => "Ok") %></a>
36
+ </div>
37
+ </div>
38
+
39
+ <span class="hide-if-deleted">
40
+ <% if f.object.errors.any? %>
41
+ <span data-toggle="popover" title="Your association contains some errors" data-content='<%= h("#{f.errors}") %>' ><%= icon :"warning-sign" %></span>
42
+ <% end %>
43
+
44
+ <% if subject.can_edit?(f.object) %>
45
+ <%= button t('fullstack.admin.edit', :default => "Edit"), "##{resource_name}_#{association}_fields_#{index}", :data => {:toggle => :modal} %>
46
+ <% end %>
47
+ </span>
48
+
49
+ <% if subject.can_destroy?(f.object) %>
50
+ <%= button(
51
+ t('fullstack.admin.delete', :default => "Delete"),
52
+ "javascript:void(0)",
53
+ :type => :danger, :class => "btn-delete-associated-resource", :"data-toggle" => :button
54
+ )
55
+ %>
56
+ <% end %>
57
+
58
+
59
+
60
+ </td>
61
+ </tr>
62
+
63
+
@@ -3,12 +3,14 @@
3
3
  <% if content_for? :title -%>
4
4
  <%= yield :title %>
5
5
  <% else -%>
6
- <%= t('fullstack.admin.edit', :default => "Edit") %> `<%= title_for(current_resource) %>`
6
+ <%= t('fullstack.admin.edit', :default => "Edit") %> "<%= title_for(current_resource) %>"
7
7
  <% end -%>
8
8
  </h1>
9
- <div>
10
- <i><%= current_resource.respond_to?(:updated_at) ? l(current_resource.updated_at, :format => :long) : "" %></i>
9
+ <% if current_resource.respond_to?(:updated_at) %>
10
+ <div class="resource_updated_at">
11
+ <%= t('fullstack.admin.last_updated', :default => "Last updated") %>: <%= distance_of_time_in_words_to_now(current_resource.updated_at) %> <%= t('fullstack.admin.ago', :default => "ago") %>
11
12
  </div>
13
+ <% end %>
12
14
  </div>
13
15
 
14
16
 
@@ -39,7 +39,7 @@
39
39
  </tr>
40
40
  <% end -%>
41
41
  </tbody>
42
- <%= paginate current_collection, :window => 4, :outer_window => 3 %>
42
+ <%= paginate current_collection, :window => 4, :outer_window => 3 %>
43
43
  </table>
44
44
 
45
45
  <% end %>
@@ -45,7 +45,7 @@
45
45
 
46
46
  <% if flash[sym].present? %>
47
47
  <%= javascript_tag do %>
48
- $.notify.notice('<%= j "#{flash[sym]}" %>');
48
+ $.notify.<%= "#{sym}" %>('<%= j "#{flash[sym]}" %>');
49
49
  <% end %>
50
50
 
51
51
  <% flash.discard(sym) %>
@@ -14,6 +14,9 @@ en:
14
14
  actions: "Actions"
15
15
  info: "Info"
16
16
  are_you_sure: "Are you sure?"
17
+ last_updated: "Last updated"
18
+ ago: "ago"
19
+ ok: "Ok"
17
20
 
18
21
  form:
19
22
  correct_these_errors_and_retry: "Correct these errors and retry"
@@ -15,6 +15,10 @@ it:
15
15
  actions: "Azioni"
16
16
 
17
17
  are_you_sure: "Sei sicuro?"
18
+ last_updated: "Ultimo aggiornamento"
19
+ ago: "fa"
20
+ ok: "Ok"
21
+ new_record: "nuovo"
18
22
 
19
23
  form:
20
24
  correct_these_errors_and_retry: "Correggi questi errori e riprova"
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "fullstack-admin"
8
- s.version = "0.1.19"
8
+ s.version = "0.1.20"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["mcasimir"]
12
- s.date = "2012-08-15"
12
+ s.date = "2012-08-17"
13
13
  s.description = "Administration interface framework for fullstack"
14
14
  s.email = "maurizio.cas@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -931,6 +931,7 @@ Gem::Specification.new do |s|
931
931
  "app/assets/javascripts/support/facebox.js.coffee",
932
932
  "app/assets/javascripts/support/forms.js.coffee",
933
933
  "app/assets/javascripts/support/gmap.js.coffee",
934
+ "app/assets/javascripts/support/nested_forms.js.coffee",
934
935
  "app/assets/javascripts/support/pickers.js.coffee",
935
936
  "app/assets/javascripts/support/plupload.js.coffee",
936
937
  "app/assets/javascripts/support/uploads.js.coffee",
@@ -974,8 +975,10 @@ Gem::Specification.new do |s|
974
975
  "app/models/suspendable.rb",
975
976
  "app/models/trackable.rb",
976
977
  "app/views/admin/_nav.html.erb",
978
+ "app/views/admin/base/_associated_resources_table.html.erb",
977
979
  "app/views/admin/base/_form.html.erb",
978
980
  "app/views/admin/base/_index.html.erb",
981
+ "app/views/admin/base/_nested_form.html.erb",
979
982
  "app/views/admin/base/destroy.js.coffee",
980
983
  "app/views/admin/base/edit.html.erb",
981
984
  "app/views/admin/base/index.html.erb",
@@ -983,6 +986,8 @@ Gem::Specification.new do |s|
983
986
  "app/views/admin/base/update.js.coffee",
984
987
  "app/views/layouts/admin.html.erb",
985
988
  "config/initializers/formtastic_bootstrap_timeish_hack.rb",
989
+ "config/locales/en.yml",
990
+ "config/locales/it.yml",
986
991
  "config/routes.rb",
987
992
  "fullstack-admin.gemspec",
988
993
  "lib/fullstack-admin.rb",
@@ -1003,8 +1008,6 @@ Gem::Specification.new do |s|
1003
1008
  "lib/generators/fullstack/admin/templates/scaffold/controller.rb",
1004
1009
  "lib/generators/fullstack/admin/templates/scaffold/views/_form.html.erb.tt",
1005
1010
  "lib/generators/fullstack/admin/templates/scaffold/views/_index.html.erb.tt",
1006
- "locales/en.yml",
1007
- "locales/it.yml",
1008
1011
  "vendor/assets/javascripts/ajax-chosen.js",
1009
1012
  "vendor/assets/javascripts/angular.js",
1010
1013
  "vendor/assets/javascripts/bootstrap.js",
@@ -4,7 +4,7 @@ module Fullstack
4
4
  source_root File.expand_path('../../../../../locales', __FILE__)
5
5
 
6
6
  def install
7
- copy_file "#{name}.yml", Rails.root.join("config", "locales", "fullstack.admin.#{name}.yml")
7
+ create_file Rails.root.join("config", "locales", "fullstack.admin.#{name}.yml")
8
8
  end
9
9
 
10
10
  end
@@ -86,7 +86,7 @@ str
86
86
  end
87
87
 
88
88
  def title_column
89
- ( model.column_names & %W(title name label browser_title seo_title seo_name key claim email) ).first
89
+ ( model.column_names.map {|c| } & %W(title name label browser_title seo_title seo_name key claim email) ).first
90
90
  end
91
91
 
92
92
  def controller_class_name
@@ -3,11 +3,11 @@
3
3
  <%%= f.errors %>
4
4
 
5
5
  <%%= f.inputs do %>
6
- <%%= f.resource_inputs(current_resource) %>
6
+ <%%= f.resource_inputs %>
7
7
  <%% end -%>
8
8
 
9
9
  <%%= f.actions do %>
10
- <%%= f.resource_submit(current_resource) %>
10
+ <%%= f.resource_submit %>
11
11
  <%% end %>
12
12
 
13
13
  <%% end -%>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fullstack-admin
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.19
4
+ version: 0.1.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-15 00:00:00.000000000 Z
12
+ date: 2012-08-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -1189,6 +1189,7 @@ files:
1189
1189
  - app/assets/javascripts/support/facebox.js.coffee
1190
1190
  - app/assets/javascripts/support/forms.js.coffee
1191
1191
  - app/assets/javascripts/support/gmap.js.coffee
1192
+ - app/assets/javascripts/support/nested_forms.js.coffee
1192
1193
  - app/assets/javascripts/support/pickers.js.coffee
1193
1194
  - app/assets/javascripts/support/plupload.js.coffee
1194
1195
  - app/assets/javascripts/support/uploads.js.coffee
@@ -1232,8 +1233,10 @@ files:
1232
1233
  - app/models/suspendable.rb
1233
1234
  - app/models/trackable.rb
1234
1235
  - app/views/admin/_nav.html.erb
1236
+ - app/views/admin/base/_associated_resources_table.html.erb
1235
1237
  - app/views/admin/base/_form.html.erb
1236
1238
  - app/views/admin/base/_index.html.erb
1239
+ - app/views/admin/base/_nested_form.html.erb
1237
1240
  - app/views/admin/base/destroy.js.coffee
1238
1241
  - app/views/admin/base/edit.html.erb
1239
1242
  - app/views/admin/base/index.html.erb
@@ -1241,6 +1244,8 @@ files:
1241
1244
  - app/views/admin/base/update.js.coffee
1242
1245
  - app/views/layouts/admin.html.erb
1243
1246
  - config/initializers/formtastic_bootstrap_timeish_hack.rb
1247
+ - config/locales/en.yml
1248
+ - config/locales/it.yml
1244
1249
  - config/routes.rb
1245
1250
  - fullstack-admin.gemspec
1246
1251
  - lib/fullstack-admin.rb
@@ -1261,8 +1266,6 @@ files:
1261
1266
  - lib/generators/fullstack/admin/templates/scaffold/controller.rb
1262
1267
  - lib/generators/fullstack/admin/templates/scaffold/views/_form.html.erb.tt
1263
1268
  - lib/generators/fullstack/admin/templates/scaffold/views/_index.html.erb.tt
1264
- - locales/en.yml
1265
- - locales/it.yml
1266
1269
  - vendor/assets/javascripts/ajax-chosen.js
1267
1270
  - vendor/assets/javascripts/angular.js
1268
1271
  - vendor/assets/javascripts/bootstrap.js
@@ -1299,7 +1302,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
1299
1302
  version: '0'
1300
1303
  segments:
1301
1304
  - 0
1302
- hash: 2930398911678922489
1305
+ hash: 1912159518853261136
1303
1306
  required_rubygems_version: !ruby/object:Gem::Requirement
1304
1307
  none: false
1305
1308
  requirements: