multi_sync 0.0.3 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9f1a53316b76079921573131ddede125112c3c4
4
- data.tar.gz: 36193eacd42d2c64268688cb0a2068c5071f306c
3
+ metadata.gz: 0529edeeec3f7a128b9d191a195660b8b63f8f3c
4
+ data.tar.gz: 49f29e4ce7469cb3a8ad7ab5ab99c662003e1dd1
5
5
  SHA512:
6
- metadata.gz: aadc84bd39bd8fdd4dcddd2c2ee70d3493f49db344cd29df962bb088b5759f76f5d5dd97039f49c858e3cfe02db3078080cc984819146643c6797d17e8087e86
7
- data.tar.gz: b6ab4df2946516aea524b84a8d506e272646faa4180a74f1f8eabcd5701c238ad234d964c0df02c95a9ceb90e00ddbe949feeebc88d2df93387a9a40a09f869f
6
+ metadata.gz: a4b827ac686e355e4be1d79749b2a46bd00ddb4765a2f325738690eac2a45c37e5b7e2c1a0b743d50bbe1cb81f2acda3edb3f66fd4634beb03bd6ba6427b515f
7
+ data.tar.gz: 2fe0e6833c14b9966c79b08fbae5d2217e9c14bc66a7ccf3efb2b27b0aa603ddd69269583c6f59cdde6c26ae38d695f97d4a42457ab96f59092e9b20a952e247
data/README.md CHANGED
@@ -15,7 +15,7 @@ Listed below are examples of how to get setup and started.
15
15
  ## Installation
16
16
 
17
17
  ```ruby
18
- gem 'multi_sync', '~> 0.0.2'
18
+ gem 'multi_sync', '~> 0.0.4'
19
19
  ```
20
20
 
21
21
  ```ruby
@@ -196,8 +196,6 @@ implementations:
196
196
  - [JRuby][jruby]
197
197
  - [Rubinius][rubinius]
198
198
 
199
- # Credits
200
-
201
199
  [gem]: https://rubygems.org/gems/multi_sync
202
200
  [travis]: http://travis-ci.org/karlfreeman/multi_sync
203
201
  [codeclimate]: https://codeclimate.com/github/karlfreeman/multi_sync
@@ -5,7 +5,20 @@ module MultiSync
5
5
  module Attributes
6
6
  class Pathname < ::Virtus::Attribute
7
7
  def coerce(value)
8
- ::Pathname.new(value)
8
+ return ::Pathname.new(value) unless value.nil?
9
+ value
10
+ end
11
+
12
+ def value_coerced?(value)
13
+ value.is_a?(::Pathname)
14
+ end
15
+
16
+ def coercion_method
17
+ :to_s
18
+ end
19
+
20
+ def primitive
21
+ ::Pathname
9
22
  end
10
23
  end
11
24
  end
@@ -1,5 +1,4 @@
1
1
  require 'virtus'
2
- require 'lazily'
3
2
  require 'celluloid'
4
3
  %w(sources targets helpers).each do |dir|
5
4
  Dir.glob(File.expand_path("../#{dir}/**/*.rb", __FILE__), &method(:require))
@@ -69,7 +68,7 @@ module MultiSync
69
68
  sync_attempted
70
69
 
71
70
  MultiSync.debug 'Fetching upload jobs from the future...'
72
- (running_upload_jobs | incomplete_upload_jobs).lazily.each do | job |
71
+ (running_upload_jobs | incomplete_upload_jobs).each do | job |
73
72
  begin
74
73
  complete_upload_jobs << job.value
75
74
  rescue => error
@@ -80,7 +79,7 @@ module MultiSync
80
79
  end
81
80
 
82
81
  MultiSync.debug 'Fetching delete jobs from the future...'
83
- (running_delete_jobs | incomplete_delete_jobs).lazily.each do | job |
82
+ (running_delete_jobs | incomplete_delete_jobs).each do | job |
84
83
  begin
85
84
  complete_delete_jobs << job.value
86
85
  rescue => error
@@ -96,7 +95,7 @@ module MultiSync
96
95
  private
97
96
 
98
97
  def determine_sync
99
- sources.lazily.each do |source|
98
+ sources.each do |source|
100
99
 
101
100
  source_files = []
102
101
 
@@ -109,7 +108,7 @@ module MultiSync
109
108
  # when no targets are specified, assume all targets
110
109
  source.targets = supervisor_actor_names if source.targets.empty?
111
110
 
112
- source.targets.lazily.each do | target_id |
111
+ source.targets.each do | target_id |
113
112
 
114
113
  missing_files = []
115
114
  abandoned_files = []
@@ -120,7 +119,6 @@ module MultiSync
120
119
  MultiSync.debug 'Fetching files from the target...'
121
120
 
122
121
  target_files = supervisor[target_id].files
123
- target_files.sort! # sort to make sure the target's indexs match the sources
124
122
 
125
123
  MultiSync.debug "#{pluralize(target_files.length, 'file')} found from the target"
126
124
 
@@ -142,20 +140,20 @@ module MultiSync
142
140
  MultiSync.debug 'Scheduling jobs in the future...'
143
141
 
144
142
  # outdated files
145
- outdated_files.lazily.each do | resource |
143
+ outdated_files.each do | resource |
146
144
  running_upload_jobs << supervisor[target_id].future.upload(resource)
147
145
  end
148
146
 
149
147
  # missing files
150
148
  if MultiSync.upload_missing_files
151
- missing_files.lazily.each do | resource |
149
+ missing_files.each do | resource |
152
150
  running_upload_jobs << supervisor[target_id].future.upload(resource)
153
151
  end
154
152
  end
155
153
 
156
154
  # abandoned files
157
155
  if MultiSync.delete_abandoned_files
158
- abandoned_files.lazily.each do | resource |
156
+ abandoned_files.each do | resource |
159
157
  running_delete_jobs << supervisor[target_id].future.delete(resource)
160
158
  end
161
159
  end
@@ -224,7 +222,7 @@ module MultiSync
224
222
 
225
223
  # TODO: replace with celluloid pool of futures
226
224
  # check each source file against the matching target_file's etag
227
- source_files.lazily.each_with_index do |file, i|
225
+ source_files.each_with_index do |file, i|
228
226
  if !file.matching_etag?(target_files[i]) || MultiSync.force
229
227
  outdated_files << file
230
228
  else
@@ -27,7 +27,7 @@ module MultiSync
27
27
  private
28
28
 
29
29
  def celluloid_cores
30
- Celluloid.cores
30
+ Celluloid.cores < 2 ? 2 : Celluloid.cores
31
31
  end
32
32
 
33
33
  def fog_credentials
@@ -7,8 +7,8 @@ module MultiSync
7
7
  include Comparable
8
8
  include Virtus.model
9
9
 
10
- attribute :path_with_root, Pathname
11
- attribute :path_without_root, Pathname
10
+ attribute :path_with_root, MultiSync::Attributes::Pathname
11
+ attribute :path_without_root, MultiSync::Attributes::Pathname
12
12
 
13
13
  attribute :etag, String, default: :determine_etag, lazy: true
14
14
  attribute :mtime, Time, default: :determine_mtime, lazy: true
@@ -45,6 +45,12 @@ module MultiSync
45
45
  send(:attribute, attribute_hash[:name], attribute_hash[:type], def_attribute_hash)
46
46
  end
47
47
 
48
+ def initialize(*args)
49
+ super
50
+ rescue Virtus::CoercionError => e
51
+ raise ArgumentError, e.message
52
+ end
53
+
48
54
  def hash
49
55
  path_without_root.hash
50
56
  end
@@ -1,12 +1,11 @@
1
1
  require 'virtus'
2
2
  require 'pathname'
3
- require 'lazily'
4
3
  require 'multi_sync/attributes/pathname'
5
4
  require 'multi_sync/resources/local_resource'
6
5
 
7
6
  module MultiSync
8
7
  class Source
9
- include Virtus.model
8
+ include Virtus.model(strict: true)
10
9
 
11
10
  attribute :source_dir, MultiSync::Attributes::Pathname
12
11
 
@@ -15,6 +14,12 @@ module MultiSync
15
14
  attribute :include, String, default: '**/*'
16
15
  attribute :exclude, String, default: ''
17
16
 
17
+ def initialize(*args)
18
+ super
19
+ rescue Virtus::CoercionError => e
20
+ raise ArgumentError, e.message
21
+ end
22
+
18
23
  private
19
24
 
20
25
  def path_to_local_resource(path, options = {})
@@ -9,7 +9,7 @@ module MultiSync
9
9
  # making sure to skip any that do not match the include/exclude patterns
10
10
  included_files = Dir.glob(source_dir + include)
11
11
  excluded_files = exclude.nil? ? [] : Dir.glob(source_dir + exclude)
12
- (included_files - excluded_files).lazily.each { |path|
12
+ (included_files - excluded_files).each { |path|
13
13
  next if File.directory?(path)
14
14
  files << path_to_local_resource(path)
15
15
  }
@@ -9,7 +9,7 @@ module MultiSync
9
9
  files = []
10
10
  # create a local_resource from each file
11
11
  # making sure to skip any that do not match the include/exclude patterns
12
- manifest_hash.lazily.each { |key, value|
12
+ manifest_hash.each { |key, value|
13
13
  path = source_dir + key
14
14
  next if !path.fnmatch?(include.to_s) || path.fnmatch?(exclude.to_s || '')
15
15
  file = path_to_local_resource(path, mtime: value['mtime'], digest: value['digest'], content_length: value['size'])
@@ -1,5 +1,4 @@
1
1
  require 'fog'
2
- require 'lazily'
3
2
  require 'virtus'
4
3
  require 'pathname'
5
4
  require 'celluloid'
@@ -8,12 +7,18 @@ require 'multi_sync/attributes/pathname'
8
7
  module MultiSync
9
8
  class Target
10
9
  include Celluloid
11
- include Virtus.model
10
+ include Virtus.model(strict: true)
12
11
 
13
- attribute :target_dir, MultiSync::Attributes::Pathname, default: Pathname.new('')
12
+ attribute :target_dir, MultiSync::Attributes::Pathname
14
13
  attribute :destination_dir, MultiSync::Attributes::Pathname, default: Pathname.new('')
15
14
  attribute :credentials, Hash, default: :default_credentials
16
15
 
16
+ def initialize(*args)
17
+ super
18
+ rescue Virtus::CoercionError => e
19
+ raise ArgumentError, e.message
20
+ end
21
+
17
22
  private
18
23
 
19
24
  def default_credentials
@@ -4,7 +4,7 @@ require 'multi_sync/resources/remote_resource'
4
4
  module MultiSync
5
5
  class AwsTarget < Target
6
6
  attribute :connection, Fog::Storage, lazy: true, default: lambda { |target, attribute|
7
- Fog::Storage.new(target.credentials.merge(provider: :aws))
7
+ Fog::Storage.new(target.credentials.merge(provider: :aws, path_style: true))
8
8
  }
9
9
 
10
10
  def files
@@ -13,7 +13,7 @@ module MultiSync
13
13
  directory = connection.directories.get(target_dir.to_s, prefix: destination_dir.to_s)
14
14
  return files if directory.nil?
15
15
 
16
- directory.files.lazily.each { |file|
16
+ directory.files.each { |file|
17
17
  pathname = Pathname.new(file.key)
18
18
 
19
19
  # eg directory or overreaching AWS globbing
@@ -13,7 +13,7 @@ module MultiSync
13
13
  directory = connection.directories.get(destination_dir.to_s)
14
14
  return files if directory.nil?
15
15
 
16
- directory.files.lazily.each { |file|
16
+ directory.files.each { |file|
17
17
  pathname = Pathname.new(file.key)
18
18
 
19
19
  # directory
@@ -1,3 +1,3 @@
1
1
  module MultiSync
2
- VERSION = '0.0.3' unless defined?(MultiSync::VERSION)
2
+ VERSION = '0.0.4' unless defined?(MultiSync::VERSION)
3
3
  end
@@ -21,7 +21,6 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.add_dependency 'fog', '~> 1.2'
23
23
  spec.add_dependency 'unf'
24
- spec.add_dependency 'lazily', '~> 0.1'
25
24
  spec.add_dependency 'virtus', '~> 1.0'
26
25
  spec.add_dependency 'celluloid', '~> 0.15'
27
26
  spec.add_dependency 'multi_mime', '~> 1.0'
@@ -1,5 +1,4 @@
1
1
  require 'fog'
2
- Fog::Mock.delay = 0
3
2
  module Fog
4
3
  module SpecHelpers
5
4
  def self.extended(example_group)
@@ -1,3 +1,4 @@
1
+ require 'cgi'
1
2
  require 'spec_helper'
2
3
 
3
4
  describe MultiSync::Client do
@@ -18,8 +19,10 @@ describe MultiSync::Client do
18
19
  FileUtils.cp_r('tmp/simple', 'tmp/simple-with-outdated-file')
19
20
  File.open('tmp/simple-with-outdated-file/foo.txt', File::CREAT | File::RDWR) do |f| f.write('not-foo') end
20
21
 
22
+ FileUtils.mkdir_p('tmp/simple-empty')
23
+
21
24
  FileUtils.mkdir_p('tmp/complex')
22
- 1_000.times do |i|
25
+ 250.times do |i|
23
26
  File.open("tmp/complex/#{i.to_s.rjust(4, '0')}.txt", File::CREAT | File::RDWR) do |f| f.write('foo') end
24
27
  end
25
28
 
@@ -99,29 +102,24 @@ describe MultiSync::Client do
99
102
  expect(complex_empty_target).to have(0).files
100
103
 
101
104
  local_source = MultiSync::LocalSource.new(local_source_options)
102
- expect(local_source).to have(1_000).files
105
+ expect(local_source).to have(250).files
103
106
 
104
107
  MultiSync.run do
105
108
  local_source(local_source_options)
106
109
  local_target(complex_empty_target_options)
107
110
  end
108
111
 
109
- expect(complex_empty_target).to have(1_000).files
112
+ expect(complex_empty_target).to have(250).files
110
113
  end
111
114
  end
112
115
  end
113
116
 
114
117
  context :aws, fog: true do
118
+ let(:credentials) { { region: 'us-east-1', aws_access_key_id: 'xxx', aws_secret_access_key: 'xxx' } }
119
+ let(:connection) { Fog::Storage.new(credentials.merge(provider: :aws)) }
115
120
  context 'simple' do
116
121
  before do
117
- connection = Fog::Storage.new(
118
- provider: :aws,
119
- region: 'us-east-1',
120
- aws_access_key_id: 'xxx',
121
- aws_secret_access_key: 'xxx'
122
- )
123
-
124
- directory = connection.directories.create(key: 'multi_sync', public: true)
122
+ directory = connection.directories.create(key: 'simple', public: true)
125
123
 
126
124
  %w(simple simple-with-missing-file simple-with-abandoned-file simple-with-outdated-file).each do |fixture_name|
127
125
  Dir.glob("tmp/#{fixture_name}/**/*").reject { |path| File.directory?(path) }.each do |path|
@@ -136,33 +134,21 @@ describe MultiSync::Client do
136
134
 
137
135
  it 'should work' do
138
136
  missing_files_target_options = {
139
- target_dir: 'multi_sync',
137
+ target_dir: 'simple',
140
138
  destination_dir: 'simple-with-missing-file',
141
- credentials: {
142
- region: 'us-east-1',
143
- aws_access_key_id: 'xxx',
144
- aws_secret_access_key: 'xxx'
145
- }
139
+ credentials: credentials
146
140
  }
147
141
 
148
142
  abandoned_files_target_options = {
149
- target_dir: 'multi_sync',
143
+ target_dir: 'simple',
150
144
  destination_dir: 'simple-with-abandoned-file',
151
- credentials: {
152
- region: 'us-east-1',
153
- aws_access_key_id: 'xxx',
154
- aws_secret_access_key: 'xxx'
155
- }
145
+ credentials: credentials
156
146
  }
157
147
 
158
148
  outdated_files_target_options = {
159
- target_dir: 'multi_sync',
149
+ target_dir: 'simple',
160
150
  destination_dir: 'simple-with-outdated-file',
161
- credentials: {
162
- region: 'us-east-1',
163
- aws_access_key_id: 'xxx',
164
- aws_secret_access_key: 'xxx'
165
- }
151
+ credentials: credentials
166
152
  }
167
153
 
168
154
  local_source_options = { source_dir: 'tmp/simple' }
@@ -196,25 +182,14 @@ describe MultiSync::Client do
196
182
 
197
183
  context 'complex' do
198
184
  before do
199
- connection = Fog::Storage.new(
200
- provider: :aws,
201
- region: 'us-east-1',
202
- aws_access_key_id: 'xxx',
203
- aws_secret_access_key: 'xxx'
204
- )
205
-
206
- connection.directories.create(key: 'multi_sync', public: true)
185
+ connection.directories.create(key: 'complex', public: true)
207
186
  end
208
187
 
209
188
  it 'should work' do
210
189
  complex_empty_target_options = {
211
- target_dir: 'multi_sync',
212
- destination_dir: 'complex-empty',
213
- credentials: {
214
- region: 'us-east-1',
215
- aws_access_key_id: 'xxx',
216
- aws_secret_access_key: 'xxx'
217
- }
190
+ target_dir: 'complex',
191
+ destination_dir: 'complex',
192
+ credentials: credentials
218
193
  }
219
194
 
220
195
  local_source_options = { source_dir: 'tmp/complex' }
@@ -223,37 +198,26 @@ describe MultiSync::Client do
223
198
  expect(complex_empty_target).to have(0).files
224
199
 
225
200
  local_source = MultiSync::LocalSource.new(local_source_options)
226
- expect(local_source).to have(1_000).files
201
+ expect(local_source).to have(250).files
227
202
 
228
203
  MultiSync.run do
229
204
  local_source(local_source_options)
230
205
  aws_target(complex_empty_target_options)
231
206
  end
232
207
 
233
- expect(complex_empty_target).to have(1_000).files
208
+ expect(complex_empty_target).to have(250).files
234
209
  end
235
210
  end
236
211
 
237
212
  context 'without a destination_dir' do
238
213
  before do
239
- connection = Fog::Storage.new(
240
- provider: :aws,
241
- region: 'us-east-1',
242
- aws_access_key_id: 'xxx',
243
- aws_secret_access_key: 'xxx'
244
- )
245
-
246
214
  connection.directories.create(key: 'without_destination_dir', public: true)
247
215
  end
248
216
 
249
217
  it 'should work' do
250
218
  without_destination_dir_target_options = {
251
219
  target_dir: 'without_destination_dir',
252
- credentials: {
253
- region: 'us-east-1',
254
- aws_access_key_id: 'xxx',
255
- aws_secret_access_key: 'xxx'
256
- }
220
+ credentials: credentials
257
221
  }
258
222
 
259
223
  local_source_options = { source_dir: 'tmp/simple' }
@@ -274,7 +238,40 @@ describe MultiSync::Client do
274
238
  end
275
239
 
276
240
  context 'with resource_options' do
277
- # TODO: tests...
241
+ before do
242
+ connection.directories.create(key: 'with_resource_options', public: true)
243
+ end
244
+
245
+ it 'should work' do
246
+ with_resource_options_target_options = {
247
+ target_dir: 'with_resource_options',
248
+ credentials: credentials
249
+ }
250
+
251
+ local_source_options = {
252
+ source_dir: 'tmp/simple',
253
+ resource_options: {
254
+ cache_control: 'public, max-age=31557600',
255
+ expires: CGI.rfc1123_date(Time.now + 31_557_600)
256
+ }
257
+ }
258
+
259
+ with_resource_options_target = MultiSync::AwsTarget.new(with_resource_options_target_options)
260
+ expect(with_resource_options_target).to have(0).files
261
+
262
+ local_source = MultiSync::LocalSource.new(local_source_options)
263
+ expect(local_source).to have(3).files
264
+
265
+ MultiSync.run do
266
+ local_source(local_source_options)
267
+ aws_target(with_resource_options_target)
268
+ end
269
+
270
+ # dir = connection.directories.get('with_resource_options')
271
+ # pp with_resource_options_target.files[0].file.cache_control
272
+
273
+ expect(with_resource_options_target).to have(3).files
274
+ end
278
275
  end
279
276
  end
280
277
  end
metadata CHANGED
@@ -1,197 +1,183 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_sync
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Karl Freeman
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-10 00:00:00.000000000 Z
11
+ date: 2014-03-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fog
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.2'
20
15
  requirement: !ruby/object:Gem::Requirement
21
16
  requirements:
22
- - - ~>
17
+ - - "~>"
23
18
  - !ruby/object:Gem::Version
24
19
  version: '1.2'
25
- prerelease: false
26
20
  type: :runtime
27
- - !ruby/object:Gem::Dependency
28
- name: unf
21
+ prerelease: false
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
- - - '>='
24
+ - - "~>"
32
25
  - !ruby/object:Gem::Version
33
- version: '0'
26
+ version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: unf
34
29
  requirement: !ruby/object:Gem::Requirement
35
30
  requirements:
36
- - - '>='
31
+ - - ">="
37
32
  - !ruby/object:Gem::Version
38
33
  version: '0'
39
- prerelease: false
40
34
  type: :runtime
41
- - !ruby/object:Gem::Dependency
42
- name: lazily
35
+ prerelease: false
43
36
  version_requirements: !ruby/object:Gem::Requirement
44
37
  requirements:
45
- - - ~>
38
+ - - ">="
46
39
  - !ruby/object:Gem::Version
47
- version: '0.1'
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: virtus
48
43
  requirement: !ruby/object:Gem::Requirement
49
44
  requirements:
50
- - - ~>
45
+ - - "~>"
51
46
  - !ruby/object:Gem::Version
52
- version: '0.1'
53
- prerelease: false
47
+ version: '1.0'
54
48
  type: :runtime
55
- - !ruby/object:Gem::Dependency
56
- name: virtus
49
+ prerelease: false
57
50
  version_requirements: !ruby/object:Gem::Requirement
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
54
  version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: celluloid
62
57
  requirement: !ruby/object:Gem::Requirement
63
58
  requirements:
64
- - - ~>
59
+ - - "~>"
65
60
  - !ruby/object:Gem::Version
66
- version: '1.0'
67
- prerelease: false
61
+ version: '0.15'
68
62
  type: :runtime
69
- - !ruby/object:Gem::Dependency
70
- name: celluloid
63
+ prerelease: false
71
64
  version_requirements: !ruby/object:Gem::Requirement
72
65
  requirements:
73
- - - ~>
66
+ - - "~>"
74
67
  - !ruby/object:Gem::Version
75
68
  version: '0.15'
69
+ - !ruby/object:Gem::Dependency
70
+ name: multi_mime
76
71
  requirement: !ruby/object:Gem::Requirement
77
72
  requirements:
78
- - - ~>
73
+ - - "~>"
79
74
  - !ruby/object:Gem::Version
80
- version: '0.15'
81
- prerelease: false
75
+ version: '1.0'
82
76
  type: :runtime
83
- - !ruby/object:Gem::Dependency
84
- name: multi_mime
77
+ prerelease: false
85
78
  version_requirements: !ruby/object:Gem::Requirement
86
79
  requirements:
87
- - - ~>
80
+ - - "~>"
88
81
  - !ruby/object:Gem::Version
89
82
  version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: multi_json
90
85
  requirement: !ruby/object:Gem::Requirement
91
86
  requirements:
92
- - - ~>
87
+ - - "~>"
93
88
  - !ruby/object:Gem::Version
94
- version: '1.0'
95
- prerelease: false
89
+ version: '1.7'
96
90
  type: :runtime
97
- - !ruby/object:Gem::Dependency
98
- name: multi_json
91
+ prerelease: false
99
92
  version_requirements: !ruby/object:Gem::Requirement
100
93
  requirements:
101
- - - ~>
94
+ - - "~>"
102
95
  - !ruby/object:Gem::Version
103
96
  version: '1.7'
97
+ - !ruby/object:Gem::Dependency
98
+ name: bundler
104
99
  requirement: !ruby/object:Gem::Requirement
105
100
  requirements:
106
- - - ~>
101
+ - - "~>"
107
102
  - !ruby/object:Gem::Version
108
- version: '1.7'
103
+ version: '1.5'
104
+ type: :development
109
105
  prerelease: false
110
- type: :runtime
111
- - !ruby/object:Gem::Dependency
112
- name: bundler
113
106
  version_requirements: !ruby/object:Gem::Requirement
114
107
  requirements:
115
- - - ~>
108
+ - - "~>"
116
109
  - !ruby/object:Gem::Version
117
110
  version: '1.5'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rake
118
113
  requirement: !ruby/object:Gem::Requirement
119
114
  requirements:
120
- - - ~>
115
+ - - "~>"
121
116
  - !ruby/object:Gem::Version
122
- version: '1.5'
123
- prerelease: false
117
+ version: '10.0'
124
118
  type: :development
125
- - !ruby/object:Gem::Dependency
126
- name: rake
119
+ prerelease: false
127
120
  version_requirements: !ruby/object:Gem::Requirement
128
121
  requirements:
129
- - - ~>
122
+ - - "~>"
130
123
  - !ruby/object:Gem::Version
131
124
  version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: kramdown
132
127
  requirement: !ruby/object:Gem::Requirement
133
128
  requirements:
134
- - - ~>
129
+ - - ">="
135
130
  - !ruby/object:Gem::Version
136
- version: '10.0'
137
- prerelease: false
131
+ version: '0.14'
138
132
  type: :development
139
- - !ruby/object:Gem::Dependency
140
- name: kramdown
133
+ prerelease: false
141
134
  version_requirements: !ruby/object:Gem::Requirement
142
135
  requirements:
143
- - - '>='
136
+ - - ">="
144
137
  - !ruby/object:Gem::Version
145
138
  version: '0.14'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop
146
141
  requirement: !ruby/object:Gem::Requirement
147
142
  requirements:
148
- - - '>='
143
+ - - ">="
149
144
  - !ruby/object:Gem::Version
150
- version: '0.14'
151
- prerelease: false
145
+ version: '0'
152
146
  type: :development
153
- - !ruby/object:Gem::Dependency
154
- name: rubocop
147
+ prerelease: false
155
148
  version_requirements: !ruby/object:Gem::Requirement
156
149
  requirements:
157
- - - '>='
150
+ - - ">="
158
151
  - !ruby/object:Gem::Version
159
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry
160
155
  requirement: !ruby/object:Gem::Requirement
161
156
  requirements:
162
- - - '>='
157
+ - - ">="
163
158
  - !ruby/object:Gem::Version
164
159
  version: '0'
165
- prerelease: false
166
160
  type: :development
167
- - !ruby/object:Gem::Dependency
168
- name: pry
161
+ prerelease: false
169
162
  version_requirements: !ruby/object:Gem::Requirement
170
163
  requirements:
171
- - - '>='
164
+ - - ">="
172
165
  - !ruby/object:Gem::Version
173
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: yard
174
169
  requirement: !ruby/object:Gem::Requirement
175
170
  requirements:
176
- - - '>='
171
+ - - ">="
177
172
  - !ruby/object:Gem::Version
178
173
  version: '0'
179
- prerelease: false
180
174
  type: :development
181
- - !ruby/object:Gem::Dependency
182
- name: yard
175
+ prerelease: false
183
176
  version_requirements: !ruby/object:Gem::Requirement
184
177
  requirements:
185
- - - '>='
178
+ - - ">="
186
179
  - !ruby/object:Gem::Version
187
180
  version: '0'
188
- requirement: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - '>='
191
- - !ruby/object:Gem::Version
192
- version: '0'
193
- prerelease: false
194
- type: :development
195
181
  description: Flexible synchronisation for your assets
196
182
  email:
197
183
  - karlfreeman@gmail.com
@@ -199,11 +185,11 @@ executables: []
199
185
  extensions: []
200
186
  extra_rdoc_files: []
201
187
  files:
202
- - .document
203
- - .gitignore
204
- - .rubocop.yml
205
- - .travis.yml
206
- - .yardopts
188
+ - ".document"
189
+ - ".gitignore"
190
+ - ".rubocop.yml"
191
+ - ".travis.yml"
192
+ - ".yardopts"
207
193
  - CHANGELOG.md
208
194
  - CONTRIBUTING.md
209
195
  - Gemfile
@@ -252,24 +238,24 @@ homepage: https://github.com/karlfreeman/multi_sync
252
238
  licenses:
253
239
  - MIT
254
240
  metadata: {}
255
- post_install_message:
241
+ post_install_message:
256
242
  rdoc_options: []
257
243
  require_paths:
258
244
  - lib
259
245
  required_ruby_version: !ruby/object:Gem::Requirement
260
246
  requirements:
261
- - - '>='
247
+ - - ">="
262
248
  - !ruby/object:Gem::Version
263
249
  version: 1.9.3
264
250
  required_rubygems_version: !ruby/object:Gem::Requirement
265
251
  requirements:
266
- - - '>='
252
+ - - ">="
267
253
  - !ruby/object:Gem::Version
268
254
  version: '0'
269
255
  requirements: []
270
- rubyforge_project:
271
- rubygems_version: 2.1.9
272
- signing_key:
256
+ rubyforge_project:
257
+ rubygems_version: 2.2.0
258
+ signing_key:
273
259
  specification_version: 4
274
260
  summary: Flexible synchronisation for your assets
275
261
  test_files: