gibbler 0.8.10 → 0.10.0.pre.RC1

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