hook_lying_syncer 0.0.1 → 0.0.3

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: 50543d3682fdd1714cba83c22081c01cbe134447
4
- data.tar.gz: 8dd510ad63d6e6dc0440356ea1aa0089d87685f1
3
+ metadata.gz: be6aa31c687c6e6c52debf2208e624d7af9b01f4
4
+ data.tar.gz: 9db2017a92e4f12fe3d5aecdcfac7ac5c9db6cab
5
5
  SHA512:
6
- metadata.gz: b0d3dc628398cb5816bf5bd6f643a7becbff5c90ab5a93df13176c20e2782a0fafb8074a92c840c3d4537f0ff1b99855ddf53ccd872922b7f4c72490994fb1bb
7
- data.tar.gz: 58ad28b4921f4d9340aebd3991591a1e6031d16294b340996d3b263e9f0871b5731f78cac3acce59f905581fc6ba9abb50abe75c1d99fdf29285b313dd0d39e2
6
+ metadata.gz: 4779f862d8b3b23aa591e1a4c8b2b4785c043ee38929e67c2744f4e55a4c7cd63b59d16a0a8ca73bc6581f3c3f524cf45c16bfaef0e34dfec634df0c7f5f5edf
7
+ data.tar.gz: 7c95f578b5422bf10c62e2eafb9b305447e9e2aa647b16e01826ded859d20fe418473d6acb87e867e2428e865457f9ea85cbe7bbc97b0edda5110ada4beb706a
@@ -0,0 +1,15 @@
1
+ language: ruby
2
+ rvm:
3
+ # - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ - 2.0.0
7
+ - 2.1.0
8
+ - 2.1.1
9
+ - 2.1.2
10
+ # - jruby-18mode # JRuby in 1.8 mode
11
+ - jruby-19mode # JRuby in 1.9 mode
12
+ - jruby-head
13
+ - rbx-2.1.1
14
+ # - ree
15
+ - ruby-head
data/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  hook_lying_syncer
2
2
  =================
3
3
 
4
+ [![Code Climate](https://codeclimate.com/github/davearonson/hook_lying_syncer/badges/gpa.svg)](https://codeclimate.com/github/davearonson/hook_lying_syncer)
5
+ [![Build Status](https://travis-ci.org/davearonson/hook_lying_syncer.png)](https://travis-ci.org/davearonson/hook_lying_syncer)
6
+
4
7
  This project presents a way for Ruby coders to keep method_missing and
5
8
  respond_to_missing? in sync.
6
9
 
@@ -23,6 +26,17 @@ I got some suggestions and other help from [Chris
23
26
  Hoffman](https://github.com/yarmiganosca), mainly in figuring out that I
24
27
  shouldn't do the in-block object access the way I was trying to! :-)
25
28
 
29
+
30
+ ## Caveats
31
+
32
+ This requires the Ruby version to be at least 1.9. Eventually I might put some
33
+ work into figuring out why many tests fail with 1.8, but for now, call it a
34
+ Ruby 1.9+ gem. Check [its Travis CI status
35
+ page](https://travis-ci.org/davearonson/hook_lying_syncer) to see which
36
+ versions of Ruby it has been tested against; currently that's 1.9.2, 1.9.3,
37
+ 2.0.0, 2.1.0, 2.1.1, 2.1.2, JRuby in 1.9 mode, and Rubinius 2.1.1.
38
+
39
+
26
40
  ## Installation
27
41
 
28
42
  Add this line to your application's Gemfile:
@@ -66,10 +80,15 @@ a match.
66
80
 
67
81
  See the tests for examples.
68
82
 
69
- ## Status
70
83
 
71
- I have barely begun to work on this repo, so it's still a bit rough, as a
72
- project per se. My plan is to turn it into a gem.
84
+ ## Changes
85
+
86
+ | Version | Change |
87
+ |---|---|
88
+ | 0.0.1 | Initial release |
89
+ | 0.0.2 | Better compatibility w/ 1.9; declare 1.8 incompatible in README |
90
+ | 0.0.3 | Declare 1.8 incompatible in gemspec (duh!) |
91
+
73
92
 
74
93
  ## Contributing
75
94
 
data/Rakefile CHANGED
@@ -1,2 +1,4 @@
1
1
  require "bundler/gem_tasks"
2
-
2
+ require 'rspec/core/rake_task'
3
+ task :default => :spec
4
+ RSpec::Core::RakeTask.new
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
2
+ lib = File.expand_path("../lib", __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'hook_lying_syncer/version'
4
+ require "hook_lying_syncer/version"
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "hook_lying_syncer"
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Dave Aronson"]
10
10
  spec.email = ["hook_lying_syncer_gemspec.2.TRex@Codosaur.us"]
11
11
  spec.summary = %q{Keeps method_missing and respond_to_missing? in sync.}
12
- spec.description = %q{Provides a decorator class you can wrap objects in (even classes!) to keep method_missing and respond_to_missing? in sync.}
12
+ spec.description = %q{Provides a decorator class you can wrap objects in (even classes!) to keep method_missing and respond_to_missing? in sync. Requires Ruby 1.9 or later; see README for details.}
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
15
15
 
@@ -17,8 +17,11 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
+ spec.required_ruby_version = '>= 1.9'
20
21
 
21
- spec.add_development_dependency "bundler", "~> 1.7"
22
- spec.add_development_dependency "rake", "~> 10.0"
23
- spec.add_development_dependency "rspec"
22
+ # no version numbers 'cuz they're only dev dependencies and having too-high
23
+ # numbers could make dependency resolution impossible for older rubies
24
+ spec.add_development_dependency "bundler", "~> 0"
25
+ spec.add_development_dependency "rake", "~> 0"
26
+ spec.add_development_dependency "rspec", "~> 0"
24
27
  end
@@ -1,3 +1,3 @@
1
1
  class HookLyingSyncer
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,40 +1,5 @@
1
1
  require 'hook_lying_syncer'
2
2
 
3
- def lambda_maker(prefix, separator, suffix=nil)
4
- lambda { |method_name|
5
- matches = /\A#{prefix}(\w+)#{suffix}\Z/.match(method_name)
6
- matches[1].split(separator) if matches
7
- }
8
- end
9
-
10
- class Person
11
- attr_reader :name
12
- def initialize(name)
13
- @name = name
14
- end
15
- def self.find(params)
16
- self.seek("Looking for", params)
17
- end
18
- def self.need(params)
19
- self.seek("I need", params)
20
- end
21
- def self.what_are_they
22
- "Are we not men? We are Devo! D-E-V-O!"
23
- end
24
- private
25
- def self.seek(look_how, params)
26
- wants = [].tap { |list| params.each { |key, val| list << "#{val} #{key}" } }
27
-
28
- # there's got to be some way to do this more cleanly...
29
- # wouldn't be surprised if Rails has something like Array#sentencize....
30
- wants[-1] = "and #{wants[-1]}" if wants.length > 1
31
- separator = wants.length > 2 ? ", " : " "
32
- description = wants.join(separator)
33
-
34
- "#{look_how} a person with #{ description }"
35
- end
36
- end
37
-
38
3
  describe HookLyingSyncer do
39
4
 
40
5
  describe "on instances" do
@@ -110,9 +75,7 @@ describe HookLyingSyncer do
110
75
  it "can add methods" do
111
76
  method_matcher = lambda { |name| name == :foo ? [name] : nil }
112
77
  syncer = HookLyingSyncer.new(@person, method_matcher) do |p, wants, *args|
113
- def foo
114
- :foo
115
- end
78
+ :foo
116
79
  end
117
80
  expect(syncer.foo).to equal :foo
118
81
  end
@@ -189,7 +152,8 @@ describe HookLyingSyncer do
189
152
  if wants.length != args.length
190
153
  raise "#{wants.length} qualities but #{args.length} values"
191
154
  end
192
- c.find wants.zip(args).to_h
155
+ # can't use to_h prior to ruby 2.0
156
+ c.find to_hash_kluge(wants.zip(args))
193
157
  end
194
158
  end
195
159
 
@@ -210,9 +174,7 @@ describe HookLyingSyncer do
210
174
  it "to add class methods" do
211
175
  method_matcher = lambda { |name| name == :foo ? [name] : nil }
212
176
  syncer = HookLyingSyncer.new(Person, method_matcher) do |c, wants, *args|
213
- def c.foo
214
- :foo
215
- end
177
+ :foo
216
178
  end
217
179
  expect(syncer.foo).to equal :foo
218
180
  end
@@ -246,7 +208,8 @@ describe HookLyingSyncer do
246
208
  before do
247
209
  needs_getter = lambda_maker("need_with_", "_and_")
248
210
  @outer = HookLyingSyncer.new(@syncer, needs_getter) do |c, wants, *args|
249
- c.need wants.zip(args).to_h
211
+ # can't use to_h prior to ruby 2.0
212
+ c.need to_hash_kluge(wants.zip(args))
250
213
  end
251
214
  end
252
215
 
@@ -269,3 +232,56 @@ describe HookLyingSyncer do
269
232
  end
270
233
 
271
234
  end
235
+
236
+ private
237
+
238
+ def lambda_maker(prefix, separator, suffix=nil)
239
+ lambda { |method_name|
240
+ matches = /\A#{prefix}(\w+)#{suffix}\Z/.match(method_name.to_s)
241
+ matches[1].split(separator) if matches
242
+ }
243
+ end
244
+
245
+ class Person
246
+
247
+ attr_reader :name
248
+
249
+ def initialize(name)
250
+ @name = name
251
+ end
252
+
253
+ def self.find(params)
254
+ self.seek("Looking for", params)
255
+ end
256
+
257
+ def self.need(params)
258
+ self.seek("I need", params)
259
+ end
260
+
261
+ def self.what_are_they
262
+ "Are we not men? We are Devo! D-E-V-O!"
263
+ end
264
+
265
+ private
266
+
267
+ def self.seek(look_how, params)
268
+ wants = [].tap { |list| params.each { |key, val| list << "#{val} #{key}" } }
269
+
270
+ # there's got to be some way to do this more cleanly...
271
+ # wouldn't be surprised if Rails has something like Array#sentencize....
272
+ wants[-1] = "and #{wants[-1]}" if wants.length > 1
273
+ separator = wants.length > 2 ? ", " : " "
274
+ description = wants.join(separator)
275
+
276
+ "#{look_how} a person with #{ description }"
277
+ end
278
+
279
+ end
280
+
281
+ # since we can't use .to_h prior to ruby 2.0,
282
+ # and we want this gem to be usable w/ 1.8 and 1.9
283
+ def to_hash_kluge(ary)
284
+ hash = {}
285
+ ary.each { |pair| hash[pair.first] = pair.last }
286
+ hash
287
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hook_lying_syncer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Aronson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-23 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,44 +16,45 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.7'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.7'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  description: Provides a decorator class you can wrap objects in (even classes!) to
56
- keep method_missing and respond_to_missing? in sync.
56
+ keep method_missing and respond_to_missing? in sync. Requires Ruby 1.9 or later;
57
+ see README for details.
57
58
  email:
58
59
  - hook_lying_syncer_gemspec.2.TRex@Codosaur.us
59
60
  executables: []
@@ -61,6 +62,7 @@ extensions: []
61
62
  extra_rdoc_files: []
62
63
  files:
63
64
  - ".gitignore"
65
+ - ".travis.yml"
64
66
  - Gemfile
65
67
  - LICENSE.txt
66
68
  - README.md
@@ -81,7 +83,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
83
  requirements:
82
84
  - - ">="
83
85
  - !ruby/object:Gem::Version
84
- version: '0'
86
+ version: '1.9'
85
87
  required_rubygems_version: !ruby/object:Gem::Requirement
86
88
  requirements:
87
89
  - - ">="