dbox 0.7.0 → 0.7.1

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.
@@ -1,3 +1,7 @@
1
+ == 0.7.1 / 2012-11-13
2
+ * Bug Fixes
3
+ * Resolved issue where push operations would fail when renaming files with spaces to underscores or vice versa.
4
+
1
5
  == 0.7.0 / 2012-11-05
2
6
  * Major Enhancements
3
7
  * Changed to be case insensitive, like Dropbox.
data/Rakefile CHANGED
@@ -18,7 +18,6 @@ Jeweler::Tasks.new do |gem|
18
18
  gem.add_dependency "oauth", ">= 0.4.5"
19
19
  gem.add_dependency "json", ">= 1.5.3"
20
20
  gem.add_dependency "sqlite3", ">= 1.3.3"
21
- gem.add_dependency "insensitive_hash", ">= 0.3.0"
22
21
  end
23
22
  Jeweler::RubygemsDotOrgTasks.new
24
23
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.0
1
+ 0.7.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "dbox"
8
- s.version = "0.7.0"
8
+ s.version = "0.7.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ken Pratt"]
12
- s.date = "2012-11-06"
12
+ s.date = "2012-11-13"
13
13
  s.description = "An easy-to-use Dropbox client with fine-grained control over syncs."
14
14
  s.email = "ken@kenpratt.net"
15
15
  s.executables = ["dbox"]
@@ -48,7 +48,8 @@ Gem::Specification.new do |s|
48
48
  "vendor/dropbox-ruby-sdk/lib/trusted-certs.crt",
49
49
  "vendor/dropbox-ruby-sdk/search_cache.json",
50
50
  "vendor/dropbox-ruby-sdk/search_cache.rb",
51
- "vendor/dropbox-ruby-sdk/web_file_browser.rb"
51
+ "vendor/dropbox-ruby-sdk/web_file_browser.rb",
52
+ "vendor/insensitive_hash_patched.rb"
52
53
  ]
53
54
  s.homepage = "http://github.com/kenpratt/dbox"
54
55
  s.licenses = ["MIT"]
@@ -64,20 +65,17 @@ Gem::Specification.new do |s|
64
65
  s.add_runtime_dependency(%q<oauth>, [">= 0.4.5"])
65
66
  s.add_runtime_dependency(%q<json>, [">= 1.5.3"])
66
67
  s.add_runtime_dependency(%q<sqlite3>, [">= 1.3.3"])
67
- s.add_runtime_dependency(%q<insensitive_hash>, [">= 0.3.0"])
68
68
  else
69
69
  s.add_dependency(%q<multipart-post>, [">= 1.1.2"])
70
70
  s.add_dependency(%q<oauth>, [">= 0.4.5"])
71
71
  s.add_dependency(%q<json>, [">= 1.5.3"])
72
72
  s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
73
- s.add_dependency(%q<insensitive_hash>, [">= 0.3.0"])
74
73
  end
75
74
  else
76
75
  s.add_dependency(%q<multipart-post>, [">= 1.1.2"])
77
76
  s.add_dependency(%q<oauth>, [">= 0.4.5"])
78
77
  s.add_dependency(%q<json>, [">= 1.5.3"])
79
78
  s.add_dependency(%q<sqlite3>, [">= 1.3.3"])
80
- s.add_dependency(%q<insensitive_hash>, [">= 0.3.0"])
81
79
  end
82
80
  end
83
81
 
@@ -1,5 +1,6 @@
1
1
  ROOT_PATH = File.expand_path(File.join(File.dirname(__FILE__), ".."))
2
2
  $:.unshift File.join(ROOT_PATH, "lib")
3
+ $:.unshift File.join(ROOT_PATH, "vendor")
3
4
  $:.unshift File.join(ROOT_PATH, "vendor", "dropbox-ruby-sdk", "lib")
4
5
 
5
6
  require "dropbox_sdk"
@@ -9,7 +10,7 @@ require "yaml"
9
10
  require "logger"
10
11
  require "cgi"
11
12
  require "sqlite3"
12
- require "insensitive_hash/minimal"
13
+ require "insensitive_hash_patched"
13
14
 
14
15
  require "dbox/loggable"
15
16
  require "dbox/utils"
@@ -0,0 +1,191 @@
1
+ # A slightly patched version of https://github.com/junegunn/insensitive_hash v0.3.0
2
+ # that is not insensitive to underscores vs. strings.
3
+ #
4
+ # Copyright (c) 2011 Junegunn Choi
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining
7
+ # a copy of this software and associated documentation files (the
8
+ # "Software"), to deal in the Software without restriction, including
9
+ # without limitation the rights to use, copy, modify, merge, publish,
10
+ # distribute, sublicense, and/or sell copies of the Software, and to
11
+ # permit persons to whom the Software is furnished to do so, subject to
12
+ # the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be
15
+ # included in all copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24
+
25
+ class InsensitiveHash < Hash
26
+ class KeyClashError < Exception
27
+ end
28
+
29
+ def initialize default = nil, &block
30
+ if block_given?
31
+ raise ArgumentError.new('wrong number of arguments') unless default.nil?
32
+ super &block
33
+ else
34
+ super
35
+ end
36
+
37
+ @key_map = {}
38
+ @safe = false
39
+ end
40
+
41
+ # Sets whether to detect key clashes
42
+ # @param [Boolean]
43
+ # @return [Boolean]
44
+ def safe= s
45
+ raise ArgumentError.new("Neither true nor false") unless [true, false].include?(s)
46
+ @safe = s
47
+ end
48
+
49
+ # @return [Boolean] Key-clash detection enabled?
50
+ def safe?
51
+ @safe
52
+ end
53
+
54
+ # Returns a normal, sensitive Hash
55
+ # @return [Hash]
56
+ def to_hash
57
+ {}.merge self
58
+ end
59
+ alias sensitive to_hash
60
+
61
+ def self.[] *init
62
+ h = Hash[*init]
63
+ InsensitiveHash.new.tap do |ih|
64
+ ih.merge! h
65
+ end
66
+ end
67
+
68
+ %w[[] assoc has_key? include? key? member?].each do |symb|
69
+ class_eval <<-EVAL
70
+ def #{symb} key
71
+ super lookup_key(key)
72
+ end
73
+ EVAL
74
+ end
75
+
76
+ def []= key, value
77
+ delete key
78
+ ekey = encode key
79
+ @key_map[ekey] = key
80
+ super key, value
81
+ end
82
+ alias store []=
83
+
84
+ def merge! other_hash
85
+ detect_clash other_hash
86
+ other_hash.each do |key, value|
87
+ deep_set key, value
88
+ end
89
+ self
90
+ end
91
+ alias update! merge!
92
+
93
+ def merge other_hash
94
+ InsensitiveHash.new.tap do |ih|
95
+ ih.replace self
96
+ ih.merge! other_hash
97
+ end
98
+ end
99
+ alias update merge
100
+
101
+ def delete key, &block
102
+ super lookup_key(key, true), &block
103
+ end
104
+
105
+ def clear
106
+ @key_map.clear
107
+ super
108
+ end
109
+
110
+ def replace other
111
+ super other
112
+
113
+ self.safe = other.respond_to?(:safe?) ? other.safe? : safe?
114
+
115
+ @key_map.clear
116
+ self.each do |k, v|
117
+ ekey = encode k
118
+ @key_map[ekey] = k
119
+ end
120
+ end
121
+
122
+ def shift
123
+ super.tap do |ret|
124
+ @key_map.delete_if { |k, v| v == ret.first }
125
+ end
126
+ end
127
+
128
+ def values_at *keys
129
+ keys.map { |k| self[k] }
130
+ end
131
+
132
+ def fetch *args, &block
133
+ args[0] = lookup_key(args[0]) if args.first
134
+ super *args, &block
135
+ end
136
+
137
+ def dup
138
+ super.tap { |copy|
139
+ copy.instance_variable_set :@key_map, @key_map.dup
140
+ }
141
+ end
142
+
143
+ def clone
144
+ super.tap { |copy|
145
+ copy.instance_variable_set :@key_map, @key_map.dup
146
+ }
147
+ end
148
+
149
+ private
150
+ def deep_set key, value
151
+ wv = wrap value
152
+ self[key] = wv
153
+ end
154
+
155
+ def wrap value
156
+ case value
157
+ when InsensitiveHash
158
+ value
159
+ when Hash
160
+ InsensitiveHash[value]
161
+ when Array
162
+ value.map { |v| wrap v }
163
+ else
164
+ value
165
+ end
166
+ end
167
+
168
+ def lookup_key key, delete = false
169
+ ekey = encode key
170
+ if @key_map.has_key?(ekey)
171
+ delete ? @key_map.delete(ekey) : @key_map[ekey]
172
+ else
173
+ key
174
+ end
175
+ end
176
+
177
+ def encode key
178
+ case key
179
+ when String, Symbol
180
+ key.to_s.downcase
181
+ else
182
+ key
183
+ end
184
+ end
185
+
186
+ def detect_clash hash
187
+ hash.keys.map { |k| encode k }.tap { |ekeys|
188
+ raise KeyClashError.new("Key clash detected") if ekeys != ekeys.uniq
189
+ } if @safe
190
+ end
191
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dbox
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 1
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 7
9
- - 0
10
- version: 0.7.0
9
+ - 1
10
+ version: 0.7.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ken Pratt
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-11-06 00:00:00 Z
18
+ date: 2012-11-13 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: multipart-post
@@ -81,22 +81,6 @@ dependencies:
81
81
  version: 1.3.3
82
82
  type: :runtime
83
83
  version_requirements: *id004
84
- - !ruby/object:Gem::Dependency
85
- name: insensitive_hash
86
- prerelease: false
87
- requirement: &id005 !ruby/object:Gem::Requirement
88
- none: false
89
- requirements:
90
- - - ">="
91
- - !ruby/object:Gem::Version
92
- hash: 19
93
- segments:
94
- - 0
95
- - 3
96
- - 0
97
- version: 0.3.0
98
- type: :runtime
99
- version_requirements: *id005
100
84
  description: An easy-to-use Dropbox client with fine-grained control over syncs.
101
85
  email: ken@kenpratt.net
102
86
  executables:
@@ -138,6 +122,7 @@ files:
138
122
  - vendor/dropbox-ruby-sdk/search_cache.json
139
123
  - vendor/dropbox-ruby-sdk/search_cache.rb
140
124
  - vendor/dropbox-ruby-sdk/web_file_browser.rb
125
+ - vendor/insensitive_hash_patched.rb
141
126
  homepage: http://github.com/kenpratt/dbox
142
127
  licenses:
143
128
  - MIT