gibbler 0.8.10 → 0.10.0.pre.RC1

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.
data/sig/gibbler.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module Gibbler
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  ## has String#clear
4
4
  "".respond_to? :clear
data/try/02_compat_try.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  ## Gibbler Objects have gibbler_cache method
4
4
  "kimmy".respond_to? :gibbler_cache
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  ## has short method
4
4
  "kimmy".gibbler.short
@@ -0,0 +1,49 @@
1
+ require 'gibbler'
2
+
3
+ @sha256_digest = if Tryouts.sysinfo.vm == :java
4
+ require 'openssl'
5
+ OpenSSL::Digest::SHA256
6
+ else
7
+ Digest::SHA256
8
+ end
9
+
10
+ ## Default delimiter
11
+ Gibbler.delimiter
12
+ #=> ':'
13
+
14
+ ## Create a digest from flattened Array
15
+ Gibbler.digest [1, :sym, ['string', 2,3]].flatten.join(':')
16
+ #=> 'd84d6ad2bd5c9589842fb02cf3c384e4924b1d3f'
17
+
18
+ ## Create a digest from Array
19
+ Gibbler.digest [1, :sym, ['string', 2,3]]
20
+ #=> 'd84d6ad2bd5c9589842fb02cf3c384e4924b1d3f'
21
+
22
+ ## Create an instance
23
+ Gibbler.new 1, :sym, 'string', 2,3
24
+ #=> 'd84d6ad2bd5c9589842fb02cf3c384e4924b1d3f'
25
+
26
+ ## Can modify base
27
+ g = Gibbler.new 1, :sym, 'string', 2,3
28
+ g.base(36)
29
+ #=> 'p9lffkbfkgpf7j71ho5cvxxcvx8gv27'
30
+
31
+ ## Maintains class
32
+ g = Gibbler.new 1, :sym, 'string', 2,3
33
+ g.base(36).class
34
+ #=> Gibbler
35
+
36
+ ## Can change digest type by class
37
+ Gibbler.digest_type = @sha256_digest
38
+ g = Gibbler.new 1, :sym, 'string', 2,3
39
+ #=> '204aacebb816bc2c8675f3490bf5a1a908988fb72f3dfd6774e963bbb9e26a26'
40
+
41
+ ## Can change digest type per instance
42
+ Gibbler.digest_type = Digest::SHA1
43
+ g = Gibbler.new
44
+ g.digest_type = @sha256_digest
45
+ g.digest 1, :sym, 'string', 2,3
46
+ g
47
+ #=> '204aacebb816bc2c8675f3490bf5a1a908988fb72f3dfd6774e963bbb9e26a26'
48
+
49
+ Gibbler.digest_type = Digest::SHA1
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  #Gibbler.enable_debug
4
4
 
@@ -6,14 +6,14 @@ require 'gibbler'
6
6
  begin
7
7
  a = Class.new
8
8
  a.send :include, Gibbler
9
- rescue RuntimeError
9
+ rescue TypeError
10
10
  :success
11
11
  end
12
12
  #=> :success
13
13
 
14
14
  # Symbol digests are consistent
15
15
  :kimmy.gibbler
16
- #=> '52be7494a602d85ff5d8a8ab4ffe7f1b171587df'
16
+ #=> '52be7494a602d85ff5d8a8ab4ffe7f1b171587df'
17
17
 
18
18
  # String digests are consistent
19
19
  'kimmy'.gibbler
@@ -27,25 +27,25 @@ require 'gibbler'
27
27
  Class.gibbler
28
28
  #=> '25ac269ae3ef18cdb4143ad02ca315afb5026de9'
29
29
 
30
- # Fixnum instance digests are consistent
30
+ # Integer instance digests are consistent
31
31
  1.gibbler
32
32
  #=> 'a9cad665549bd22a4346fcf602d9d3c3b0482bbe'
33
33
 
34
- # Bignum instance
35
- 100000000000.gibbler
34
+ # Large Integer instance
35
+ 100_000_000_000.gibbler
36
36
  #=> '608256db120251843843bba57e9b2c7adb7342aa'
37
37
 
38
38
  # Empty Hash instance digests are consistent
39
39
  Hash.new.gibbler
40
40
  #=> '4fdcadc66a38feb9c57faf3c5a18d5e76a6d29bf'
41
-
41
+
42
42
  # Populated Hash instance
43
43
  { :a => [1,2,3, [4,5,6]], :b => { :c => Class } }.gibbler
44
44
  #=> "1d4b62e1e9f2c097b0cefb6877bf47c2015cdd21"
45
-
45
+
46
46
  # Empty Array instance
47
- Array.new.gibbler
48
- #=> '48fda57c05684c9e5c3259557851943572183a21'
47
+ Array.gibbler
48
+ #=> '48fda57c05684c9e5c3259557851943572183a21'
49
49
 
50
50
  # Populated Array instance
51
51
  [1, 2, :runtime, [3, "four", [Object, true]]].gibbler
@@ -83,7 +83,7 @@ require 'gibbler'
83
83
  ## additional attic_var (:gibbler_history), but only if the
84
84
  ## gibbler_history method has been called already (the history
85
85
  ## remains nil by default). The fix is not straightfroward and
86
- ## tests are not important anyway so disabling them is fine.
86
+ ## tests are not important anyway so disabling them is fine.
87
87
  ## Symbol has list of attic vars", [:gibbler_cache]
88
88
  # Symbol.attic_vars
89
89
  #end
@@ -98,8 +98,8 @@ require 'gibbler'
98
98
 
99
99
  # Freezing an object will update the digest
100
100
  a = { :a => 1 }
101
- pre = a.gibbler;
102
- a[:a] = 2
101
+ pre = a.gibbler;
102
+ a[:a] = 2
103
103
  post = a.freeze.gibbler
104
104
  pre != post && post == a.gibbler_cache
105
105
  #=> true
@@ -127,4 +127,3 @@ require 'gibbler'
127
127
  a.gibbler
128
128
  a.gibbler_cache
129
129
  #=> 'c8027100ecc54945ab15ddac529230e38b1ba6a1'
130
-
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  # NOTE: JRuby requires that we use OpenSSL::Digest::SHA256
4
4
  if Tryouts.sysinfo.vm == :java
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  ## true can gibbler
4
4
  true.gibbler
data/try/15_file_try.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'tempfile'
2
- require 'gibbler'
2
+ require 'gibbler/mixins'
3
3
 
4
4
  @tempfile = "tryouts-9000-awesome.txt"
5
5
 
data/try/16_uri_try.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'uri'
2
- require 'gibbler'
2
+ require 'gibbler/mixins'
3
3
 
4
4
  # "URI::HTTP can gibbler"
5
5
  uri = URI.parse "http://localhost:3114/spaceship"
@@ -1,4 +1,5 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
+ require 'time'
2
3
 
3
4
  # arbitrary objects can specify instance variables to gibbler
4
5
  class ::FullHouse
@@ -18,10 +19,12 @@ require 'gibbler'
18
19
  # arbitrary objects can append more instance variables later on
19
20
  class ::FullHouse
20
21
  gibbler :stamp, :ready
22
+ def stamp
23
+ Time.parse('2009-08-25 16:43:53 UTC')
24
+ end
21
25
  end
22
26
  a = FullHouse.new
23
27
  a.roles = [:jesse, :joey, :danny, :kimmy, :michelle, :dj, :stephanie]
24
- a.stamp = Time.parse('2009-08-25 16:43:53 UTC')
25
28
  a.ready = true
26
29
  a.gibbler
27
30
  #=> "fbdce0d97a856e7106bec418d585c914914b8aa5"
data/try/18_proc_try.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
 
3
3
  class ::MyProc < Proc; end
4
4
 
data/try/20_time_try.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'date'
2
- require 'gibbler'
2
+ require 'gibbler/mixins'
3
3
 
4
4
  # "Date instance can gibbler
5
5
  Date.parse('2009-08-25').gibbler
data/try/30_secret_try.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'uri'
2
- require 'gibbler'
2
+ require 'gibbler/mixins'
3
3
 
4
4
  # "Can set a sexy global secret
5
5
  Gibbler.secret = 'kimmy'.gibbler
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
  require 'gibbler/history'
3
3
 
4
4
  # can convert short digest into long
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
  require 'gibbler/history'
3
3
 
4
4
  class ::Hash
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
  require 'gibbler/history'
3
3
 
4
4
  class Array
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
  require 'gibbler/history'
3
3
 
4
4
  class String
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
  require 'gibbler/history'
3
3
 
4
4
  class ::FullHouse
@@ -1,4 +1,4 @@
1
- require 'gibbler'
1
+ require 'gibbler/mixins'
2
2
  require 'gibbler/history'
3
3
 
4
4
 
metadata CHANGED
@@ -1,53 +1,89 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: gibbler
3
- version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.8.10
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.0.pre.RC1
6
5
  platform: ruby
7
- authors:
6
+ authors:
8
7
  - Delano Mandelbaum
9
- autorequire:
10
- bindir: bin
8
+ autorequire:
9
+ bindir: exe
11
10
  cert_chain: []
12
-
13
- date: 2011-10-23 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: attic
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
19
- none: false
20
- requirements:
11
+ date: 2024-04-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
21
17
  - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 0.4.0
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
24
20
  type: :runtime
25
- version_requirements: *id001
26
- description: "Gibbler: Git-like hashes for Ruby objects"
27
- email: delano@solutious.com
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: tryouts
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 2.2.0.pre.RC1
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 2.2.0.pre.RC1
55
+ description: 'A out Gibbler: Git-like hashes for Ruby objects'
56
+ email: gems@solutious.com
28
57
  executables: []
29
-
30
58
  extensions: []
31
-
32
- extra_rdoc_files:
59
+ extra_rdoc_files: []
60
+ files:
61
+ - ".github/workflows/main.yml"
62
+ - ".github/workflows/ruby-rake.yaml"
63
+ - ".gitignore"
64
+ - ".pre-commit-config.yaml"
65
+ - ".rubocop.yml"
66
+ - CHANGELOG.md
67
+ - CODE_OF_CONDUCT.md
68
+ - Gemfile
33
69
  - LICENSE.txt
34
- - README.rdoc
35
- files:
36
- - CHANGES.txt
37
- - LICENSE.txt
38
- - README.rdoc
39
- - Rakefile
70
+ - README.md
40
71
  - VERSION.yml
41
- - gibbler.gemspec
72
+ - bin/console
73
+ - bin/setup
74
+ - img/whoababy.gif
42
75
  - lib/gibbler.rb
43
76
  - lib/gibbler/aliases.rb
44
77
  - lib/gibbler/history.rb
45
78
  - lib/gibbler/mixins.rb
46
- - try/01_mixins_try.rb
79
+ - lib/gibbler/version.rb
80
+ - sig/gibbler.rbs
81
+ - try/01_core_ext_try.rb
47
82
  - try/02_compat_try.rb
48
83
  - try/05_gibbler_digest_try.rb
49
- - try/10_basic_try.rb
50
- - try/11_basic_sha256_try.rb
84
+ - try/10_standalone_try.rb
85
+ - try/11_basic_try.rb
86
+ - try/12_basic_sha256_try.rb
51
87
  - try/14_extended_try.rb
52
88
  - try/15_file_try.rb
53
89
  - try/16_uri_try.rb
@@ -64,31 +100,26 @@ files:
64
100
  - try/80_performance_try.rb
65
101
  - try/90_alias_try.rb
66
102
  homepage: http://github.com/delano/gibbler
67
- licenses: []
68
-
69
- post_install_message:
103
+ licenses:
104
+ - MIT
105
+ metadata: {}
106
+ post_install_message:
70
107
  rdoc_options: []
71
-
72
- require_paths:
108
+ require_paths:
73
109
  - lib
74
- required_ruby_version: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
77
- - - ">="
78
- - !ruby/object:Gem::Version
79
- version: "0"
80
- required_rubygems_version: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
110
+ required_ruby_version: !ruby/object:Gem::Requirement
111
+ requirements:
83
112
  - - ">="
84
- - !ruby/object:Gem::Version
85
- version: "0"
113
+ - !ruby/object:Gem::Version
114
+ version: 3.1.4
115
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - ">"
118
+ - !ruby/object:Gem::Version
119
+ version: 1.3.1
86
120
  requirements: []
87
-
88
- rubyforge_project: gibbler
89
- rubygems_version: 1.8.10
90
- signing_key:
91
- specification_version: 3
92
- summary: "Gibbler: Git-like hashes for Ruby objects"
121
+ rubygems_version: 3.3.26
122
+ signing_key:
123
+ specification_version: 4
124
+ summary: Git-like hashes for Ruby objects
93
125
  test_files: []
94
-
data/README.rdoc DELETED
@@ -1,228 +0,0 @@
1
- = Gibbler - v0.8
2
-
3
- Git-like hashes and history for Ruby objects for Ruby 1.8, 1.9 and JRuby.
4
-
5
- Check out the screencast[http://www.rubypulse.com/episode-0.3-gibbler.html] created by Alex Peuchert.
6
-
7
- == Some things to keep in mind
8
-
9
- * Digest calculation may change between minor releases (as it did between 0.6 and 0.7)
10
- * Gibbler history is not suitable for very large objects since it keeps complete copies of the object in memory. This is a very early implementation of this feature so don't rely on it for production code.
11
- * Don't forget to enjoy what you do!
12
-
13
-
14
- == Example 1 -- Basic Usage
15
-
16
- require 'gibbler'
17
-
18
- "kimmy".gibbler # => c8027100ecc54945ab15ddac529230e38b1ba6a1
19
- :kimmy.gibbler # => 52be7494a602d85ff5d8a8ab4ffe7f1b171587df
20
-
21
- config = {}
22
- config.gibbler # => 4fdcadc66a38feb9c57faf3c5a18d5e76a6d29bf
23
- config.gibbled? # => false
24
-
25
- config[:server] = {
26
- :users => [:dave, :ali],
27
- :ports => [22, 80, 443]
28
- }
29
- config.gibbled? # => true
30
- config.gibbler # => ef23d605f8c4fc80a8e580f9a0e8dab8426454a8
31
-
32
- config[:server][:users] << :yanni
33
-
34
- config.gibbler # => 4c558a56bc2abf5f8a845a69e47ceb5e0003683f
35
-
36
- config.gibbler.short # => 4c558a56
37
-
38
- config.gibbler.base36 # => 8x00l83jov4j80i9vfzpaxr9jag23wf
39
-
40
- config.gibbler.base36.short # => 8x00l83j
41
-
42
-
43
- == Example 2 -- Object History
44
-
45
- Gibbler can also keep track of the history of changes to an object. By default Gibbler supports history for Hash, Array, and String objects. The <tt>gibbler_commit</tt> method creates a clone of the current object and stores in an instance variable using the current hash digest as the key.
46
-
47
- require 'gibbler'
48
- require 'gibbler/history'
49
-
50
- a = { :magic => :original }
51
- a.gibbler_commit # => d7049916ddb25e6cc438b1028fb957e5139f9910
52
-
53
- a[:magic] = :updated
54
- a.gibbler_commit # => b668098e16d08898532bf3aa33ce2253a3a4150e
55
-
56
- a[:magic] = :changed
57
- a.gibbler_commit # => 0b11c377fccd44554a601e5d2b135c46dc1c4cb1
58
-
59
- a.gibbler_history # => d7049916, b668098e, 0b11c377
60
-
61
- a.gibbler_revert! 'd7049916' # Return to a specific commit
62
- a.gibbler # => d7049916ddb25e6cc438b1028fb957e5139f9910
63
- a # => { :magic => :original }
64
-
65
- a.delete :magic
66
-
67
- a.gibbler_revert! # Return to the previous commit
68
- a.gibbler # => 0b11c377fccd44554a601e5d2b135c46dc1c4cb1
69
- a # => { :magic => :changed }
70
-
71
-
72
- a.gibbler_object 'b668098e' # => { :magic => :updated }
73
- a.gibbler_stamp # => 2009-07-01 18:56:52 -0400
74
-
75
- http://delano.github.com/gibbler/img/whoababy.gif
76
-
77
-
78
- == Example 3 -- Method Aliases
79
-
80
- If you have control over the namespaces of your objects, you can use the method aliases to tighten up your code a bit. The "gibbler" and "gibbled?" methods can be accessed via "digest" and "changed?", respectively. (The reason they're not enabled by default is to avoid conflicts.)
81
-
82
- require 'gibbler/aliases'
83
-
84
- "kimmy".digest # => c8027100ecc54945ab15ddac529230e38b1ba6a1
85
- :kimmy.digest # => 52be7494a602d85ff5d8a8ab4ffe7f1b171587df
86
-
87
- a = [:a, :b, :c]
88
- a.digest # => e554061823b8f06367555d1ee4c25b4ffee61944
89
- a << :d
90
- a.changed? # => true
91
-
92
-
93
- The history methods also have aliases which remove the "gibbler_" prefix.
94
-
95
- require 'gibbler/aliases'
96
- require 'gibbler/history'
97
-
98
- a = { :magic => :original }
99
- a.commit
100
- a.history
101
- a.revert!
102
- # etc...
103
-
104
- == Example 4 -- Different Digest types
105
-
106
- By default Gibbler creates SHA1 hashes. You can change this globally or per instance.
107
-
108
- require 'gibbler'
109
-
110
- Gibbler.digest_type = Digest::MD5
111
-
112
- :kimmy.gibbler # => 0c61ff17f46223f355759934154d5dcb
113
-
114
- :kimmy.gibbler(Digest::SHA1) # => 52be7494a602d85ff5d8a8ab4ffe7f1b171587df
115
-
116
-
117
- In Jruby, you can grab the digest types from the openssl library.
118
-
119
- require 'openssl'
120
-
121
- Gibbler.digest_type = OpenSSL::Digest::SHA256
122
-
123
- :kimmy.gibbler # => 1069428e6273cf329436c3dce9b680d4d4e229d7b7...
124
-
125
-
126
- == Example 5 -- All your base
127
-
128
- require 'gibbler'
129
-
130
- :kimmy.gibbler # => 52be7494a602d85ff5d8a8ab4ffe7f1b171587df
131
- :kimmy.gibbler.base(16) # => 52be7494a602d85ff5d8a8ab4ffe7f1b171587df
132
- :kimmy.gibbler.base(36) # => 9nydr6mpv6w4k8ngo3jtx0jz1n97h7j
133
-
134
- :kimmy.gibbler.base(10) # => 472384540402900668368761869477227308873774630879
135
- :kimmy.gibbler.to_i # => 472384540402900668368761869477227308873774630879
136
-
137
-
138
- == Example 6 -- Global secret
139
-
140
- Gibbler can prepend all digest inputs with a global secret. You can set this once per project to ensure your project's digests are unique.
141
-
142
- require 'gibbler'
143
-
144
- :kimmy.gibbler # => 52be7494a602d85ff5d8a8ab4ffe7f1b171587df
145
-
146
- Gibbler.secret = "sUp0r5ekRu7"
147
-
148
- :kimmy.gibbler # => 6c5f5aff4d809cec7e7da091214a35a2698489f8
149
-
150
-
151
- == Supported Classes
152
-
153
- Gibbler methods are available only to the classes which explicitly include them (see RDocs[http://delano.github.com/gibbler] for details on which classes are supported by default). You can also extend custom objects:
154
-
155
- class FullHouse
156
- include Gibbler::Complex
157
- attr_accessor :roles
158
- end
159
-
160
- a = FullHouse.new
161
- a.gibbler # => 4192d4cb59975813f117a51dcd4454ac16df6703
162
-
163
- a.roles = [:jesse, :joey, :danny, :kimmy, :michelle, :dj, :stephanie]
164
- a.gibbler # => 6ea546919dc4caa2bab69799b71d48810a1b48fa
165
-
166
- Gibbler::Complex creates a digest based on the name of the class and the names and values of the instance variables. See the RDocs[http://delano.github.com/gibbler] for other Gibbler::* types.
167
-
168
- If you want to support all Ruby objects, add the following to your application:
169
-
170
- class Object
171
- include Gibbler::String
172
- end
173
-
174
- Gibbler::String creates a digest based on the name of the class and the output of the to_s method. This is a reasonable default for most objects however any object that includes the object address in to_s (e.g. "Object:0x0x4ac9f0...") will produce unreliable digests (because the address can change).
175
-
176
- As of 0.7 all Proc objects have the same digest: <tt>12075835e94be34438376cd7a54c8db7e746f15d</tt>.
177
-
178
-
179
-
180
- == Known Issues
181
-
182
- * gibbler or gibbled? must be called at least once before gibbled? will be able to return a useful value (otherwise there is no previous digest value to compare to)
183
- * Digests for Bignum objects are different between Ruby and JRuby. Does anyone know why?
184
- * Digests for Proc objects are different between Ruby 1.8 and 1.9 because Proc.arity returns different values and 1.8 has no lambda? method.
185
-
186
-
187
- == Installation
188
-
189
- Via Rubygems, one of:
190
-
191
- $ gem install gibbler
192
- $ gem install delano-gibbler
193
-
194
-
195
- or via download:
196
- * gibbler-latest.tar.gz[http://github.com/delano/gibbler/tarball/latest]
197
- * gibbler-latest.zip[http://github.com/delano/gibbler/zipball/latest]
198
-
199
-
200
- == What People Are Saying
201
-
202
- * "nice approach - everything is an object, every object is 'gittish'" -- @olgen_morten[http://twitter.com/olgen_morten/statuses/2629909133]
203
- * "gibbler is just awesome" -- @TomK32[http://twitter.com/TomK32/statuses/2618542872]
204
- * "wie cool ist Gibbler eigentlich?" -- @we5[http://twitter.com/we5/statuses/2615274279]
205
- * "it's nice idea and implementation!" -- HristoHristov[http://www.rubyinside.com/gibbler-git-like-hashes-and-history-for-ruby-objects-1980.html#comment-39092]
206
-
207
- == More Info
208
-
209
- * Codes[http://github.com/delano/gibbler]
210
- * RDocs[http://delano.github.com/gibbler]
211
- * Sponsor[http://solutious.com/]
212
- * Inspiration[http://www.youtube.com/watch?v=fipD4DdV48g]
213
-
214
-
215
- == Thanks
216
-
217
- * Kalin Harvey (krrh[http://github.com/krrh]) for the early feedback and artistic direction.
218
- * Alex Peuchert (aaalex[http://github.com/aaalex]) for creating the screencast.
219
-
220
-
221
- == Credits
222
-
223
- * Delano (@solutious.com)
224
-
225
-
226
- == License
227
-
228
- See: LICENSE.txt