locomotivecms_mounter 1.0.3 → 1.0.4

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