fullstack-admin 0.1.19 → 0.1.20

Sign up to get free protection for your applications and to get access to all the features.
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: