dupe 0.3.5 → 0.3.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,10 @@
1
- After do |scenario| #:nodoc:
2
- if Dupe.global_configuration.config[:debug] == true
3
- ActiveResource::Connection.print_request_log
4
- ActiveResource::Connection.flush_request_log
5
- end
1
+ if defined?(After)
2
+ After do |scenario| #:nodoc:
3
+ if Dupe.global_configuration.config[:debug] == true
4
+ ActiveResource::Connection.print_request_log
5
+ ActiveResource::Connection.flush_request_log
6
+ end
6
7
 
7
- Dupe.flush
8
- end
8
+ Dupe.flush
9
+ end
10
+ end
data/lib/dupe/dupe.rb CHANGED
@@ -336,7 +336,7 @@ class Dupe
336
336
  # "find the first author record where the author's name equals `name`".
337
337
  #
338
338
  # Dupe decided to return only a single record because we specified <tt>find(:author)</tt>.
339
- # Had we instead specified <tt>find(:authors)</tt>, resource factory would have instead returned an array of results.
339
+ # Had we instead specified <tt>find(:authors)</tt>, Dupe would have instead returned an array of results.
340
340
  #
341
341
  # More examples:
342
342
  #
@@ -432,6 +432,7 @@ class Dupe
432
432
  def generate_services_for(records, records_already_processed=false) #:nodoc:
433
433
  records = process_records records unless records_already_processed
434
434
  @mocker.run_mocks(@records, @config.config[:record_identifiers])
435
+ records.length == 1 ? records.first : records
435
436
  end
436
437
 
437
438
  def find_records_like(match) #:nodoc:
data/lib/dupe/record.rb CHANGED
@@ -1,19 +1,63 @@
1
1
  class Dupe
2
- class Record #:nodoc:
3
- def initialize(hash)
4
- @attributes = hash.merge(hash) do |k,v|
5
- if v.is_a?(Hash)
6
- Record.new(v)
7
- elsif v.is_a?(Array)
8
- v.map {|r| Record.new(r)}
9
- else
10
- v
2
+ class Record
3
+ attr_accessor :internal_attributes_hash
4
+
5
+ def initialize(hash={})
6
+ @internal_attributes_hash =
7
+ hash.merge(hash) do |k,v|
8
+ process_value(v)
11
9
  end
12
- end
13
10
  end
14
11
 
12
+ # allows you to access a record like:
13
+ # irb> book = Dupe::Record.new :title => 'The Carpet Makers', :author => {:name => 'Andreas Eschbach'}
14
+ # irb> book.title
15
+ # ==> 'The Carpet Makers'
16
+ # irb> book.author.name
17
+ # ==> 'Andreas Eschbach'
18
+ # irb> book.genre = 'Science Fiction'
19
+ # irb> book.genre
20
+ # ==> 'Science Fiction'
15
21
  def method_missing(method_name, *args, &block)
16
- @attributes[method_name.to_sym]
22
+ if method_name.to_s[-1..-1] == '='
23
+ @internal_attributes_hash[method_name.to_s[0..-2].to_sym] =
24
+ process_value(args[0])
25
+ else
26
+ @internal_attributes_hash[method_name.to_sym]
27
+ end
28
+ end
29
+
30
+ # allows you to access a record like:
31
+ # irb> book = Dupe::Record.new :title => 'The Carpet Makers', :author => {:name => 'Andreas Eschbach'}
32
+ # irb> book[:title]
33
+ # ==> 'The Carpet Makers'
34
+ # irb> book[:author][:name]
35
+ # ==> 'Andreas Eschbach'
36
+ # irb> book.genre = 'Science Fiction'
37
+ # irb> book.genre
38
+ # ==> 'Science Fiction'
39
+ def [](key)
40
+ @internal_attributes_hash[key.to_sym]
41
+ end
42
+
43
+ # allows you to set a record like:
44
+ # irb> book = Dupe::Record.new :title => 'The Carpet Makers', :author => {:name => 'Andreas Eschbach'}
45
+ # irb> book[:genre] = 'Science Fiction'
46
+ # irb> book[:genre]
47
+ # ==> 'Science Fiction'
48
+ def []=(key, value)
49
+ @internal_attributes_hash[key.to_sym] = process_value(value)
50
+ end
51
+
52
+ private
53
+ def process_value(v)
54
+ if v.is_a?(Hash)
55
+ Record.new(v)
56
+ elsif v.is_a?(Array)
57
+ v.map {|r| process_value(r)}
58
+ else
59
+ v
60
+ end
17
61
  end
18
62
  end
19
63
  end
@@ -0,0 +1,57 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "Dupe::Record" do
4
+ describe "the new method" do
5
+ it "should setup an empty internal hash when created with no parameters" do
6
+ r = Dupe::Record.new
7
+ r.internal_attributes_hash.should == {}
8
+ end
9
+
10
+ it "should be accessible via missing methods" do
11
+ book = Dupe::Record.new :title => 'Bible', :author => {:name => 'Jebus'}
12
+ book.title.should == 'Bible'
13
+ book.author.name.should == 'Jebus'
14
+ end
15
+
16
+ it "should be accessible via hash accessors" do
17
+ book = Dupe::Record.new :title => 'Bible', :author => {:name => 'Jebus'}
18
+ book[:title].should == 'Bible'
19
+ book[:author][:name].should == 'Jebus'
20
+ end
21
+
22
+ it "should let you set attributes via method missing" do
23
+ book = Dupe::Record.new :title => 'Bible', :author => {:name => 'Jebus'}
24
+ book.genre = 'Superstition'
25
+ book.genre.should == 'Superstition'
26
+ book.chapters = [
27
+ {:title => 'Hair', :start => 1},
28
+ {:title => 'Carpet', :start => 15}
29
+ ]
30
+ book.chapters.first.title.should == 'Hair'
31
+ book.chapters.first.start.should == 1
32
+ book.chapters.last.title.should == 'Carpet'
33
+ book.chapters.last.start.should == 15
34
+ end
35
+
36
+ it "should let you set attributes via has accessors" do
37
+ book = Dupe::Record.new :title => 'Bible', :author => {:name => 'Jebus'}
38
+
39
+ # setting existing attributes
40
+ book[:title] = 'The Carpet Makers'
41
+ book[:author][:name] = 'Andreas Eschbach'
42
+ book[:title].should == 'The Carpet Makers'
43
+ book[:author][:name].should == 'Andreas Eschbach'
44
+
45
+ # setting new attributes
46
+ book[:genre] = 'Science Fiction'
47
+ book[:genre].should == 'Science Fiction'
48
+
49
+ # setting hash attributes
50
+ book[:chapters] = [
51
+ {:title => 'Hair', :start => 1},
52
+ {:title => 'Carpet', :start => 15}
53
+ ]
54
+ book[:chapters][0][:title].should == 'Hair'
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,4 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe Dupe do
4
+ end
@@ -0,0 +1,11 @@
1
+ $LOAD_PATH << './lib'
2
+ # require 'rubygems'
3
+ # gem 'activeresource'
4
+ # gem 'rspec'
5
+ require 'rubygems'
6
+ gem 'activeresource'
7
+ gem 'rspec'
8
+ gem 'cucumber'
9
+ require 'cucumber'
10
+ require 'activeresource'
11
+ require 'dupe'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dupe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Parker
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-28 00:00:00 -04:00
12
+ date: 2009-11-28 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -76,5 +76,7 @@ rubygems_version: 1.3.5
76
76
  signing_key:
77
77
  specification_version: 3
78
78
  summary: A tool that helps you mock services while cuking.
79
- test_files: []
80
-
79
+ test_files:
80
+ - spec/lib_specs/dupe_record_spec.rb
81
+ - spec/lib_specs/dupe_spec.rb
82
+ - spec/spec_helper.rb