locomotivecms_mounter 1.0.3 → 1.0.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.
@@ -33,7 +33,7 @@ module Locomotive
33
33
  raise WrongCredentials.new("#{response['message']} (#{response.code})")
34
34
  end
35
35
  end
36
-
36
+
37
37
  def self.teardown
38
38
  Locomotive::Mounter::EngineApi.default_options[:base_uri] = nil
39
39
  Locomotive::Mounter::EngineApi.default_options[:default_params] = {}
@@ -64,7 +64,13 @@ module Locomotive
64
64
  # do not forget that we are manipulating dynamic fields
65
65
  attributes.each do |k, v|
66
66
  begin
67
- entry.send(:"#{k}=", v)
67
+ field = self.find_field(k)
68
+
69
+ if field.nil? && v.is_a?(Hash) # not a dynamic field but localized (permalink ?)
70
+ entry.send(:"#{k}_translations=", v)
71
+ else
72
+ entry.send(:"#{k}=", v)
73
+ end
68
74
  rescue NoMethodError => e
69
75
  Mounter.logger.error e.backtrace
70
76
  raise FieldDoesNotExistException.new("The '#{self.slug}' content type does not have a field named '#{k}'.")
@@ -79,7 +79,15 @@ module Locomotive
79
79
  # @return [ String ] A non-blank fullpath
80
80
  #
81
81
  def fullpath_or_default
82
- self.fullpath || self.fullpath_translations[self.mounting_point.default_locale]
82
+ self.fullpath || self.fullpath_in_default_locale
83
+ end
84
+
85
+ # Return the fullpath in the default locale no matter the current locale is.
86
+ #
87
+ # @return [ String ] The fullpath
88
+ #
89
+ def fullpath_in_default_locale
90
+ self.fullpath_translations[self.mounting_point.default_locale]
83
91
  end
84
92
 
85
93
  # Get the id of the parent page.
@@ -108,7 +116,6 @@ module Locomotive
108
116
  self.content_type = content_type
109
117
  end
110
118
 
111
-
112
119
  # Modified setter in order to set correctly the slug
113
120
  #
114
121
  # @param [ String ] fullpath The fullpath
@@ -315,10 +322,14 @@ module Locomotive
315
322
 
316
323
  _attributes = self.attributes.delete_if { |k, v| !fields.include?(k.to_s) || v.blank? }.deep_stringify_keys
317
324
 
318
- _attributes['editable_elements'] = {}
325
+ # useless attributes
326
+ _attributes.delete('redirect_type') if self.redirect_url.blank?
319
327
 
320
- # TODO: templatized / content_type
328
+ # templatized page
329
+ _attributes['content_type'] = self.content_type.slug if self.templatized?
321
330
 
331
+ # editable elements
332
+ _attributes['editable_elements'] = {}
322
333
  (self.editable_elements || []).each do |editable_element|
323
334
  _attributes['editable_elements'].merge!(editable_element.to_yaml)
324
335
  end
@@ -23,7 +23,8 @@ module Locomotive
23
23
 
24
24
  self.build_relationships(index, self.pages_to_list)
25
25
 
26
- # Locomotive::Mounter.with_locale(:fr) { self.to_s } # DEBUG
26
+ # Locomotive::Mounter.with_locale(:en) { self.to_s } # DEBUG
27
+
27
28
  # self.to_s
28
29
 
29
30
  self.pages
@@ -44,11 +45,14 @@ module Locomotive
44
45
 
45
46
  def build_relationships(parent, list)
46
47
  list.dup.each do |page|
47
- next unless self.is_subpage_of?(page.fullpath, parent.fullpath)
48
+ next unless self.is_subpage_of?(page, parent)
48
49
 
49
50
  # attach the page to the parent (order by position), also set the parent
50
51
  parent.add_child(page)
51
52
 
53
+ # localize the fullpath in all the locales
54
+ page.localize_fullpath
55
+
52
56
  # remove the page from the list
53
57
  list.delete(page)
54
58
 
@@ -69,7 +73,7 @@ module Locomotive
69
73
  Locomotive::Mounter.with_locale(locale) do
70
74
  localized_attributes = self.get("pages/#{page._id}", locale)
71
75
 
72
- # delete useless attributes
76
+ # remove useless non localized attributes
73
77
  localized_attributes.delete('target_klass_slug')
74
78
 
75
79
  # isolate the editable elements
@@ -109,22 +113,25 @@ module Locomotive
109
113
  self.pages[fullpath]
110
114
  end
111
115
 
112
- # Tell is a page described by its fullpath is a sub page of a parent page
113
- # also described by its fullpath
116
+ # Tell is a page described is a sub page of a parent page
114
117
  #
115
- # @param [ String ] fullpath The full path of the page to test
116
- # @param [ String ] parent_fullpath The full path of the parent page
118
+ # @param [ Object ] page The full path of the page to test
119
+ # @param [ Object ] parent The full path of the parent page
117
120
  #
118
121
  # @return [ Boolean] True if the page is a sub page of the parent one
119
122
  #
120
- def is_subpage_of?(fullpath, parent_fullpath)
121
- return false if %w(index 404).include?(fullpath)
123
+ def is_subpage_of?(page, parent)
124
+ return false if page.index_or_404?
125
+
126
+ if page.parent_id # only in the new version of the engine
127
+ return page.parent_id == parent._id
128
+ end
122
129
 
123
- if parent_fullpath == 'index' && fullpath.split('/').size == 1
130
+ if parent.fullpath == 'index' && page.fullpath.split('/').size == 1
124
131
  return true
125
132
  end
126
133
 
127
- File.dirname(fullpath.dasherize) == parent_fullpath.dasherize
134
+ File.dirname(page.fullpath.dasherize) == parent.fullpath.dasherize
128
135
  end
129
136
 
130
137
  # Only keep the minimal attributes from a list of
@@ -146,7 +153,8 @@ module Locomotive
146
153
  end
147
154
 
148
155
  def safe_attributes
149
- %w(_id title slug handle fullpath translated_in target_klass_slug
156
+ %w(_id title slug handle fullpath translated_in
157
+ parent_id target_klass_slug
150
158
  published listed templatized editable_elements
151
159
  redirect_url cache_strategy response_type position
152
160
  seo_title meta_keywords meta_description raw_template
@@ -71,14 +71,10 @@ module Locomotive
71
71
 
72
72
  _attributes[:_position] = position
73
73
 
74
+ # build the content entry
74
75
  entry = content_type.build_entry(_attributes)
75
76
 
76
- # puts "entry._slug = #{entry._slug.inspect}"
77
- # entry.main_locale = Locomotive::Mounter.locale
78
- # puts entry.to_hash.inspect
79
- # puts entry.dynamic_attributes.inspect
80
- # puts entry.send(:sync_translations)
81
-
77
+ # and store it
82
78
  key = File.join(content_type.slug, entry._slug)
83
79
 
84
80
  self.items[key] = entry
@@ -2,7 +2,7 @@
2
2
  module Locomotive
3
3
  module Mounter #:nodoc
4
4
 
5
- VERSION = '1.0.3'
5
+ VERSION = '1.0.4'
6
6
 
7
7
  end
8
8
  end
@@ -128,7 +128,7 @@ module Locomotive
128
128
  #
129
129
  def layouts
130
130
  self.pages.values.find_all do |page|
131
- self.safely_translated?(page) && page.is_layout?
131
+ self.safely_translated?(page) && self.is_layout?(page)
132
132
  end.sort { |a, b| a.depth <=> b.depth }
133
133
  end
134
134
 
@@ -186,6 +186,27 @@ module Locomotive
186
186
  end
187
187
  end
188
188
 
189
+ # Tell if the page is a real layout, which means no extends tag inside
190
+ # and that at least one of the other pages reference it as a parent template.
191
+ #
192
+ # @param [ Object ] page The page
193
+ #
194
+ # @return [ Boolean] True if it is a real layout.
195
+ #
196
+ def is_layout?(page)
197
+ if page.is_layout?
198
+ # has child(ren) extending the page itself ?
199
+ return true if (page.children || []).any? { |child| child.layout == 'parent' }
200
+
201
+ fullpath = page.fullpath_in_default_locale
202
+
203
+ # among all the pages, is there a page extending the page itself ?
204
+ self.pages.values.any? { |_page| _page.fullpath_in_default_locale != fullpath && _page.layout == fullpath }
205
+ else
206
+ false # extends not present
207
+ end
208
+ end
209
+
189
210
  # Return the parameters of a page sent by the API.
190
211
  # It includes the editable_elements if the data option is enabled or
191
212
  # if the page is a new one.
@@ -107,7 +107,7 @@ module Locomotive
107
107
  File.new(path)
108
108
  end
109
109
 
110
- # Shortcut to get all the local snippets.
110
+ # Shortcut to get all the theme assets.
111
111
  #
112
112
  # @return [ Hash ] The hash whose key is the slug and the value is the snippet itself
113
113
  #
@@ -139,19 +139,26 @@ module Locomotive
139
139
  #
140
140
  def theme_asset_changed?(theme_asset, tmp_file)
141
141
  if theme_asset.stylesheet_or_javascript?
142
- if theme_asset.precompiled?
143
- # puts "[#{theme_asset.filename} PRECOMPILED] local size #{File.size(tmp_file)} / remote size #{theme_asset.size}"
144
- File.size(tmp_file) != theme_asset.size
145
- else
146
- # puts "[#{theme_asset.filename}] local size #{File.size(tmp_file)} / remote size #{theme_asset.size}"
147
- File.size(tmp_file) != theme_asset.size
142
+ # we need to compare compiled contents (sass, coffeescript) with the right urls
143
+ tmp_content = ''
144
+
145
+ begin
146
+ File.open(tmp_file, 'rb') do |file|
147
+ tmp_content = file.read.encode('utf-8', replace: nil)
148
+ end
149
+ rescue Encoding::UndefinedConversionError => e
150
+ # in the doubt, we prefer to return true
151
+ return true
148
152
  end
153
+
154
+ tmp_content = tmp_content.gsub(/[("']([^)"']*)\/sites\/[0-9a-f]{24}\/theme\/(([^;.]+)\/)*([a-zA-Z_\-0-9]+\.[a-z]{2,3})[)"']/) do |path|
155
+ "#{path.first}/#{$2 + $4}#{path.last}"
156
+ end
157
+
158
+ tmp_content != theme_asset.content
149
159
  else
150
- File.size(tmp_file) != theme_asset.size
160
+ Digest::SHA1.file(tmp_file).hexdigest != Digest::SHA1.file(theme_asset.filepath).hexdigest
151
161
  end
152
-
153
- # (!theme_asset.stylesheet_or_javascript? && File.size(file) != theme_asset.size) ||
154
- # (theme_asset.stylesheet_or_javascript? && theme_asset.content.size != theme_asset.size)
155
162
  end
156
163
 
157
164
  end
@@ -12,8 +12,8 @@ module Locomotive
12
12
 
13
13
  # It writes all the snippets into files
14
14
  def write
15
- self.mounting_point.content_assets.each do |asset|
16
- self.open_file(self.target_asset_path(asset)) do |file|
15
+ self.mounting_point.content_assets.each do |_, asset|
16
+ self.open_file(self.target_asset_path(asset), 'wb') do |file|
17
17
  file.write(asset.content)
18
18
  end
19
19
  end
@@ -30,9 +30,11 @@ module Locomotive
30
30
  page.translated_in.each do |locale|
31
31
  default_locale = locale.to_sym == self.mounting_point.default_locale.to_sym
32
32
 
33
- filepath = (path.blank? ? page.slug : File.join(path, page.slug)).underscore
33
+ # we do not need the localized version of the filepath
34
+ filepath = page.fullpath.dasherize
34
35
 
35
36
  Locomotive::Mounter.with_locale(locale) do
37
+ # we assume the filepath is already localized
36
38
  self.write_page_to_fs(page, filepath, default_locale ? nil : locale)
37
39
  end
38
40
  end
@@ -53,16 +55,29 @@ module Locomotive
53
55
  #
54
56
  #
55
57
  def write_page_to_fs(page, filepath, locale)
58
+ # puts filepath.inspect
56
59
  _filepath = "#{filepath}.liquid"
57
60
  _filepath.gsub!(/.liquid$/, ".#{locale}.liquid") if locale
58
61
 
59
- # unless page.template.nil?
60
- _filepath = File.join('app', 'views', 'pages', _filepath)
62
+ _filepath = File.join('app', 'views', 'pages', _filepath)
61
63
 
62
- self.open_file(_filepath) do |file|
63
- file.write(page.to_yaml)
64
- end
65
- # end
64
+ self.replace_content_asset_urls(page.source)
65
+
66
+ self.open_file(_filepath) do |file|
67
+ file.write(page.to_yaml)
68
+ end
69
+ end
70
+
71
+ # The content assets on the remote engine follows the format: /sites/<id>/assets/<type>/<file>
72
+ # This method replaces these urls by their local representation. <type>/<file>
73
+ #
74
+ # @param [ String ] content The text where the assets will be replaced.
75
+ #
76
+ def replace_content_asset_urls(content)
77
+ return if content.blank?
78
+ content.force_encoding('utf-8').gsub!(/[("']\/sites\/[0-9a-f]{24}\/assets\/(([^;.]+)\/)*([a-zA-Z_\-0-9]+)\.[a-z]{2,3}[)"']/) do |path|
79
+ "/#{$3}"
80
+ end
66
81
  end
67
82
 
68
83
  end
@@ -14,19 +14,51 @@ module Locomotive
14
14
  # Write all the snippets into files
15
15
  #
16
16
  def write
17
- self.mounting_point.theme_assets.each do |asset|
18
- self.open_file(self.target_asset_path(asset)) do |file|
19
- file.write(asset.content)
17
+ self.theme_assets_by_priority.each do |asset|
18
+ self.open_file(self.target_asset_path(asset), 'wb') do |file|
19
+ content = asset.content
20
+
21
+ if asset.stylesheet_or_javascript?
22
+ self.replace_asset_urls(content)
23
+ end
24
+
25
+ file.write(content)
20
26
  end
21
27
  end
22
28
  end
23
29
 
24
30
  protected
25
31
 
32
+ # The urls stored on the remote engine follows the format: /sites/<id>/theme/<type>/<file>
33
+ # This method replaces these urls by their local representation. <type>/<file>
34
+ #
35
+ # @param [ String ] content
36
+ #
37
+ def replace_asset_urls(content)
38
+ return if content.blank?
39
+ content.force_encoding('utf-8').gsub!(/[("']([^)"']*)\/sites\/[0-9a-f]{24}\/theme\/(([^;.]+)\/)*([a-zA-Z_\-0-9]+\.[a-z]{2,3})[)"']/) do |path|
40
+ "#{path.first}/#{$2 + $4}#{path.last}"
41
+ end
42
+ end
43
+
44
+ # Return the path where will be copied the asset
45
+ #
46
+ # @param [ String ] asset The asset
47
+ #
48
+ # @return [ String ] The relative path of the asset locally
49
+ #
26
50
  def target_asset_path(asset)
27
51
  File.join('public', asset.folder, asset.filename)
28
52
  end
29
53
 
54
+ # List of theme assets sorted by their priority.
55
+ #
56
+ # @return [ Array ] Sorted list of the theme assets
57
+ #
58
+ def theme_assets_by_priority
59
+ self.mounting_point.theme_assets.sort { |a, b| a.priority <=> b.priority }
60
+ end
61
+
30
62
  end
31
63
 
32
64
  end
@@ -10,10 +10,14 @@ module Locomotive
10
10
  end
11
11
 
12
12
  def write
13
+ content = self.mounting_point.translations.each_with_object({}) do |translation, hash|
14
+ hash[translation.key] = translation.values
15
+ end
16
+
17
+ content = content.empty? ? '' : content.to_yaml
18
+
13
19
  self.open_file('config/translations.yml') do |file|
14
- file.write self.mounting_point.translations.each_with_object({}) do |hash,translation|
15
- hash[translation.key] = translation.values
16
- end.to_yaml
20
+ file.write content
17
21
  end
18
22
  end
19
23
  end
@@ -16,23 +16,6 @@ module Locomotive
16
16
 
17
17
  attr_accessor :target_path
18
18
 
19
- # # Write the data of a mounting point instance to a target folder
20
- # #
21
- # # @param [ Hash ] parameters The parameters. It should contain the mounting_point and target_path keys.
22
- # #
23
- # # @return [ String ] The target path
24
- # #
25
- # def run!(parameters = {})
26
- # self.mounting_point = parameters[:mounting_point]
27
-
28
-
29
- # return nil if self.target_path.blank? || self.mounting_point.nil?
30
-
31
- # self.write_all
32
-
33
- # self.target_path
34
- # end
35
-
36
19
  # Check the existence of the target_path parameter
37
20
  #
38
21
  def prepare
@@ -48,18 +31,10 @@ module Locomotive
48
31
  # @return [ Array ] List of the writer classes
49
32
  #
50
33
  def writers
51
- [SiteWriter, PagesWriter, SnippetsWriter, ContentTypesWriter, ContentEntriesWriter, ContentAssetsWriter, ThemeAssetsWriter, TranslationsWriter]
34
+ [SiteWriter, SnippetsWriter, ContentTypesWriter, ContentEntriesWriter, PagesWriter, ThemeAssetsWriter, TranslationsWriter]
35
+ # [SiteWriter, PagesWriter, SnippetsWriter, ContentTypesWriter, ContentEntriesWriter, ContentAssetsWriter, ThemeAssetsWriter, TranslationsWriter]
52
36
  end
53
37
 
54
- # # Execute all the writers
55
- # def write_all
56
- # self.writers.each do |klass|
57
- # writer = klass.new(self.mounting_point, self.target_path)
58
- # writer.prepare
59
- # writer.write
60
- # end
61
- # end
62
-
63
38
  end
64
39
 
65
40
  end
@@ -52,12 +52,7 @@ module Locomotive
52
52
  next if only && !only.include?(klass.name.demodulize)
53
53
  writer = klass.new(self.mounting_point, self)
54
54
  writer.prepare
55
- begin
56
- writer.write
57
- rescue Exception => e
58
- Locomotive::Mounter.logger.error e.backtrace
59
- puts "\n\nBlocking Error: #{e.message.colorize(:red)}"
60
- end
55
+ writer.write
61
56
  end
62
57
  end
63
58
 
@@ -10,6 +10,7 @@ require 'active_support'
10
10
  require 'active_support/core_ext'
11
11
  require 'stringex'
12
12
  require 'tempfile'
13
+ require 'digest/sha1'
13
14
 
14
15
  require 'tilt'
15
16
  require 'haml'
metadata CHANGED
@@ -1,416 +1,416 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: locomotivecms_mounter
3
3
  version: !ruby/object:Gem::Version
4
+ version: 1.0.4
4
5
  prerelease:
5
- version: 1.0.3
6
6
  platform: ruby
7
7
  authors:
8
8
  - Didier Lafforgue
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-09 00:00:00.000000000 Z
12
+ date: 2013-04-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- prerelease: false
16
15
  name: tilt
17
- type: :runtime
18
- version_requirements: !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
19
18
  requirements:
20
19
  - - '='
21
20
  - !ruby/object:Gem::Version
22
21
  version: 1.3.3
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
23
25
  none: false
24
- requirement: !ruby/object:Gem::Requirement
25
26
  requirements:
26
27
  - - '='
27
28
  - !ruby/object:Gem::Version
28
29
  version: 1.3.3
29
- none: false
30
30
  - !ruby/object:Gem::Dependency
31
- prerelease: false
32
31
  name: haml
33
- type: :runtime
34
- version_requirements: !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
35
34
  requirements:
36
35
  - - '='
37
36
  - !ruby/object:Gem::Version
38
37
  version: 3.2.0.rc.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
39
41
  none: false
40
- requirement: !ruby/object:Gem::Requirement
41
42
  requirements:
42
43
  - - '='
43
44
  - !ruby/object:Gem::Version
44
45
  version: 3.2.0.rc.2
45
- none: false
46
46
  - !ruby/object:Gem::Dependency
47
- prerelease: false
48
47
  name: sass
49
- type: :runtime
50
- version_requirements: !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
51
50
  requirements:
52
51
  - - ~>
53
52
  - !ruby/object:Gem::Version
54
53
  version: 3.2.1
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
55
57
  none: false
56
- requirement: !ruby/object:Gem::Requirement
57
58
  requirements:
58
59
  - - ~>
59
60
  - !ruby/object:Gem::Version
60
61
  version: 3.2.1
61
- none: false
62
62
  - !ruby/object:Gem::Dependency
63
- prerelease: false
64
63
  name: compass
65
- type: :runtime
66
- version_requirements: !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
67
66
  requirements:
68
67
  - - ~>
69
68
  - !ruby/object:Gem::Version
70
69
  version: 0.12.1
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
71
73
  none: false
72
- requirement: !ruby/object:Gem::Requirement
73
74
  requirements:
74
75
  - - ~>
75
76
  - !ruby/object:Gem::Version
76
77
  version: 0.12.1
77
- none: false
78
78
  - !ruby/object:Gem::Dependency
79
- prerelease: false
80
79
  name: coffee-script
81
- type: :runtime
82
- version_requirements: !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
83
82
  requirements:
84
83
  - - ~>
85
84
  - !ruby/object:Gem::Version
86
85
  version: 2.2.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
87
89
  none: false
88
- requirement: !ruby/object:Gem::Requirement
89
90
  requirements:
90
91
  - - ~>
91
92
  - !ruby/object:Gem::Version
92
93
  version: 2.2.0
93
- none: false
94
94
  - !ruby/object:Gem::Dependency
95
- prerelease: false
96
95
  name: less
97
- type: :runtime
98
- version_requirements: !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
99
98
  requirements:
100
99
  - - ~>
101
100
  - !ruby/object:Gem::Version
102
101
  version: 2.2.1
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
103
105
  none: false
104
- requirement: !ruby/object:Gem::Requirement
105
106
  requirements:
106
107
  - - ~>
107
108
  - !ruby/object:Gem::Version
108
109
  version: 2.2.1
109
- none: false
110
110
  - !ruby/object:Gem::Dependency
111
- prerelease: false
112
111
  name: RedCloth
113
- type: :runtime
114
- version_requirements: !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
115
114
  requirements:
116
115
  - - ~>
117
116
  - !ruby/object:Gem::Version
118
117
  version: 4.2.3
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
119
121
  none: false
120
- requirement: !ruby/object:Gem::Requirement
121
122
  requirements:
122
123
  - - ~>
123
124
  - !ruby/object:Gem::Version
124
125
  version: 4.2.3
125
- none: false
126
126
  - !ruby/object:Gem::Dependency
127
- prerelease: false
128
127
  name: activesupport
129
- type: :runtime
130
- version_requirements: !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
131
130
  requirements:
132
131
  - - ~>
133
132
  - !ruby/object:Gem::Version
134
133
  version: 3.2.5
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
135
137
  none: false
136
- requirement: !ruby/object:Gem::Requirement
137
138
  requirements:
138
139
  - - ~>
139
140
  - !ruby/object:Gem::Version
140
141
  version: 3.2.5
141
- none: false
142
142
  - !ruby/object:Gem::Dependency
143
- prerelease: false
144
143
  name: i18n
145
- type: :runtime
146
- version_requirements: !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
147
146
  requirements:
148
147
  - - ~>
149
148
  - !ruby/object:Gem::Version
150
149
  version: 0.6.0
150
+ type: :runtime
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
151
153
  none: false
152
- requirement: !ruby/object:Gem::Requirement
153
154
  requirements:
154
155
  - - ~>
155
156
  - !ruby/object:Gem::Version
156
157
  version: 0.6.0
157
- none: false
158
158
  - !ruby/object:Gem::Dependency
159
- prerelease: false
160
159
  name: stringex
161
- type: :runtime
162
- version_requirements: !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
163
162
  requirements:
164
163
  - - ~>
165
164
  - !ruby/object:Gem::Version
166
165
  version: 1.4.0
166
+ type: :runtime
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
167
169
  none: false
168
- requirement: !ruby/object:Gem::Requirement
169
170
  requirements:
170
171
  - - ~>
171
172
  - !ruby/object:Gem::Version
172
173
  version: 1.4.0
173
- none: false
174
174
  - !ruby/object:Gem::Dependency
175
- prerelease: false
176
175
  name: multi_json
177
- type: :runtime
178
- version_requirements: !ruby/object:Gem::Requirement
176
+ requirement: !ruby/object:Gem::Requirement
177
+ none: false
179
178
  requirements:
180
179
  - - ~>
181
180
  - !ruby/object:Gem::Version
182
181
  version: 1.2.0
182
+ type: :runtime
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
183
185
  none: false
184
- requirement: !ruby/object:Gem::Requirement
185
186
  requirements:
186
187
  - - ~>
187
188
  - !ruby/object:Gem::Version
188
189
  version: 1.2.0
189
- none: false
190
190
  - !ruby/object:Gem::Dependency
191
- prerelease: false
192
191
  name: httmultiparty
193
- type: :runtime
194
- version_requirements: !ruby/object:Gem::Requirement
192
+ requirement: !ruby/object:Gem::Requirement
193
+ none: false
195
194
  requirements:
196
195
  - - '='
197
196
  - !ruby/object:Gem::Version
198
197
  version: 0.3.8
198
+ type: :runtime
199
+ prerelease: false
200
+ version_requirements: !ruby/object:Gem::Requirement
199
201
  none: false
200
- requirement: !ruby/object:Gem::Requirement
201
202
  requirements:
202
203
  - - '='
203
204
  - !ruby/object:Gem::Version
204
205
  version: 0.3.8
205
- none: false
206
206
  - !ruby/object:Gem::Dependency
207
- prerelease: false
208
207
  name: json
209
- type: :runtime
210
- version_requirements: !ruby/object:Gem::Requirement
208
+ requirement: !ruby/object:Gem::Requirement
209
+ none: false
211
210
  requirements:
212
211
  - - ~>
213
212
  - !ruby/object:Gem::Version
214
213
  version: 1.6.5
214
+ type: :runtime
215
+ prerelease: false
216
+ version_requirements: !ruby/object:Gem::Requirement
215
217
  none: false
216
- requirement: !ruby/object:Gem::Requirement
217
218
  requirements:
218
219
  - - ~>
219
220
  - !ruby/object:Gem::Version
220
221
  version: 1.6.5
221
- none: false
222
222
  - !ruby/object:Gem::Dependency
223
- prerelease: false
224
223
  name: mime-types
225
- type: :runtime
226
- version_requirements: !ruby/object:Gem::Requirement
224
+ requirement: !ruby/object:Gem::Requirement
225
+ none: false
227
226
  requirements:
228
227
  - - ~>
229
228
  - !ruby/object:Gem::Version
230
229
  version: '1.19'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
231
233
  none: false
232
- requirement: !ruby/object:Gem::Requirement
233
234
  requirements:
234
235
  - - ~>
235
236
  - !ruby/object:Gem::Version
236
237
  version: '1.19'
237
- none: false
238
238
  - !ruby/object:Gem::Dependency
239
- prerelease: false
240
239
  name: zip
241
- type: :runtime
242
- version_requirements: !ruby/object:Gem::Requirement
240
+ requirement: !ruby/object:Gem::Requirement
241
+ none: false
243
242
  requirements:
244
243
  - - ~>
245
244
  - !ruby/object:Gem::Version
246
245
  version: 2.0.2
246
+ type: :runtime
247
+ prerelease: false
248
+ version_requirements: !ruby/object:Gem::Requirement
247
249
  none: false
248
- requirement: !ruby/object:Gem::Requirement
249
250
  requirements:
250
251
  - - ~>
251
252
  - !ruby/object:Gem::Version
252
253
  version: 2.0.2
253
- none: false
254
254
  - !ruby/object:Gem::Dependency
255
- prerelease: false
256
255
  name: colorize
257
- type: :runtime
258
- version_requirements: !ruby/object:Gem::Requirement
256
+ requirement: !ruby/object:Gem::Requirement
257
+ none: false
259
258
  requirements:
260
259
  - - ~>
261
260
  - !ruby/object:Gem::Version
262
261
  version: 0.5.8
262
+ type: :runtime
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
263
265
  none: false
264
- requirement: !ruby/object:Gem::Requirement
265
266
  requirements:
266
267
  - - ~>
267
268
  - !ruby/object:Gem::Version
268
269
  version: 0.5.8
269
- none: false
270
270
  - !ruby/object:Gem::Dependency
271
- prerelease: false
272
271
  name: logger
273
- type: :runtime
274
- version_requirements: !ruby/object:Gem::Requirement
272
+ requirement: !ruby/object:Gem::Requirement
273
+ none: false
275
274
  requirements:
276
275
  - - ! '>='
277
276
  - !ruby/object:Gem::Version
278
277
  version: '0'
278
+ type: :runtime
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
279
281
  none: false
280
- requirement: !ruby/object:Gem::Requirement
281
282
  requirements:
282
283
  - - ! '>='
283
284
  - !ruby/object:Gem::Version
284
285
  version: '0'
285
- none: false
286
286
  - !ruby/object:Gem::Dependency
287
- prerelease: false
288
287
  name: rake
289
- type: :development
290
- version_requirements: !ruby/object:Gem::Requirement
288
+ requirement: !ruby/object:Gem::Requirement
289
+ none: false
291
290
  requirements:
292
291
  - - '='
293
292
  - !ruby/object:Gem::Version
294
293
  version: 0.9.2
294
+ type: :development
295
+ prerelease: false
296
+ version_requirements: !ruby/object:Gem::Requirement
295
297
  none: false
296
- requirement: !ruby/object:Gem::Requirement
297
298
  requirements:
298
299
  - - '='
299
300
  - !ruby/object:Gem::Version
300
301
  version: 0.9.2
301
- none: false
302
302
  - !ruby/object:Gem::Dependency
303
- prerelease: false
304
303
  name: rspec
305
- type: :development
306
- version_requirements: !ruby/object:Gem::Requirement
304
+ requirement: !ruby/object:Gem::Requirement
305
+ none: false
307
306
  requirements:
308
307
  - - ~>
309
308
  - !ruby/object:Gem::Version
310
309
  version: 2.6.0
310
+ type: :development
311
+ prerelease: false
312
+ version_requirements: !ruby/object:Gem::Requirement
311
313
  none: false
312
- requirement: !ruby/object:Gem::Requirement
313
314
  requirements:
314
315
  - - ~>
315
316
  - !ruby/object:Gem::Version
316
317
  version: 2.6.0
317
- none: false
318
318
  - !ruby/object:Gem::Dependency
319
- prerelease: false
320
319
  name: mocha
321
- type: :development
322
- version_requirements: !ruby/object:Gem::Requirement
320
+ requirement: !ruby/object:Gem::Requirement
321
+ none: false
323
322
  requirements:
324
323
  - - '='
325
324
  - !ruby/object:Gem::Version
326
325
  version: 0.9.12
326
+ type: :development
327
+ prerelease: false
328
+ version_requirements: !ruby/object:Gem::Requirement
327
329
  none: false
328
- requirement: !ruby/object:Gem::Requirement
329
330
  requirements:
330
331
  - - '='
331
332
  - !ruby/object:Gem::Version
332
333
  version: 0.9.12
333
- none: false
334
334
  - !ruby/object:Gem::Dependency
335
- prerelease: false
336
335
  name: rack-test
337
- type: :development
338
- version_requirements: !ruby/object:Gem::Requirement
336
+ requirement: !ruby/object:Gem::Requirement
337
+ none: false
339
338
  requirements:
340
339
  - - ~>
341
340
  - !ruby/object:Gem::Version
342
341
  version: 0.6.1
342
+ type: :development
343
+ prerelease: false
344
+ version_requirements: !ruby/object:Gem::Requirement
343
345
  none: false
344
- requirement: !ruby/object:Gem::Requirement
345
346
  requirements:
346
347
  - - ~>
347
348
  - !ruby/object:Gem::Version
348
349
  version: 0.6.1
349
- none: false
350
350
  - !ruby/object:Gem::Dependency
351
- prerelease: false
352
351
  name: ruby-debug-wrapper
353
- type: :development
354
- version_requirements: !ruby/object:Gem::Requirement
352
+ requirement: !ruby/object:Gem::Requirement
353
+ none: false
355
354
  requirements:
356
355
  - - ~>
357
356
  - !ruby/object:Gem::Version
358
357
  version: 0.0.1
358
+ type: :development
359
+ prerelease: false
360
+ version_requirements: !ruby/object:Gem::Requirement
359
361
  none: false
360
- requirement: !ruby/object:Gem::Requirement
361
362
  requirements:
362
363
  - - ~>
363
364
  - !ruby/object:Gem::Version
364
365
  version: 0.0.1
365
- none: false
366
366
  - !ruby/object:Gem::Dependency
367
- prerelease: false
368
367
  name: vcr
369
- type: :development
370
- version_requirements: !ruby/object:Gem::Requirement
368
+ requirement: !ruby/object:Gem::Requirement
369
+ none: false
371
370
  requirements:
372
371
  - - '='
373
372
  - !ruby/object:Gem::Version
374
373
  version: 2.4.0
374
+ type: :development
375
+ prerelease: false
376
+ version_requirements: !ruby/object:Gem::Requirement
375
377
  none: false
376
- requirement: !ruby/object:Gem::Requirement
377
378
  requirements:
378
379
  - - '='
379
380
  - !ruby/object:Gem::Version
380
381
  version: 2.4.0
381
- none: false
382
382
  - !ruby/object:Gem::Dependency
383
- prerelease: false
384
383
  name: therubyracer
385
- type: :development
386
- version_requirements: !ruby/object:Gem::Requirement
384
+ requirement: !ruby/object:Gem::Requirement
385
+ none: false
387
386
  requirements:
388
387
  - - ~>
389
388
  - !ruby/object:Gem::Version
390
389
  version: 0.10.2
390
+ type: :development
391
+ prerelease: false
392
+ version_requirements: !ruby/object:Gem::Requirement
391
393
  none: false
392
- requirement: !ruby/object:Gem::Requirement
393
394
  requirements:
394
395
  - - ~>
395
396
  - !ruby/object:Gem::Version
396
397
  version: 0.10.2
397
- none: false
398
398
  - !ruby/object:Gem::Dependency
399
- prerelease: false
400
399
  name: webmock
401
- type: :development
402
- version_requirements: !ruby/object:Gem::Requirement
400
+ requirement: !ruby/object:Gem::Requirement
401
+ none: false
403
402
  requirements:
404
403
  - - '='
405
404
  - !ruby/object:Gem::Version
406
405
  version: 1.9.3
406
+ type: :development
407
+ prerelease: false
408
+ version_requirements: !ruby/object:Gem::Requirement
407
409
  none: false
408
- requirement: !ruby/object:Gem::Requirement
409
410
  requirements:
410
411
  - - '='
411
412
  - !ruby/object:Gem::Version
412
413
  version: 1.9.3
413
- none: false
414
414
  description: Mount any LocomotiveCMS site, from a template on the filesystem, a zip
415
415
  file or even an online engine
416
416
  email:
@@ -496,23 +496,23 @@ rdoc_options: []
496
496
  require_paths:
497
497
  - lib
498
498
  required_ruby_version: !ruby/object:Gem::Requirement
499
+ none: false
499
500
  requirements:
500
501
  - - ! '>='
501
502
  - !ruby/object:Gem::Version
503
+ version: '0'
502
504
  segments:
503
505
  - 0
504
- hash: 4447066145127959790
505
- version: '0'
506
- none: false
506
+ hash: 2290558764515626735
507
507
  required_rubygems_version: !ruby/object:Gem::Requirement
508
+ none: false
508
509
  requirements:
509
510
  - - ! '>='
510
511
  - !ruby/object:Gem::Version
511
512
  version: 1.3.6
512
- none: false
513
513
  requirements: []
514
514
  rubyforge_project: locomotivecms_mounter
515
- rubygems_version: 1.8.25
515
+ rubygems_version: 1.8.23
516
516
  signing_key:
517
517
  specification_version: 3
518
518
  summary: LocomotiveCMS Mounter