multi_sync 0.0.3 → 0.0.4

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