yockeries 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,21 @@
1
+ require 'benchmark'
2
+ require 'ostruct'
3
+ require_relative '../lib/yockeries'
4
+
5
+ REP = 100000
6
+ hash = {'user_1' => { 'name' => 'robert', 'email' => 'robert@example.com' },
7
+ 'user_2' => { 'name' => 'tyler', 'email' => 'ty@example.com' } }
8
+
9
+ Benchmark.bm 20 do |x|
10
+ x.report 'Mock with an OpenStruct' do
11
+ REP.times do |index|
12
+ OpenStruct.new(Yockeries::YockHash.new(hash).get('user_1'))
13
+ end
14
+ end
15
+
16
+ x.report 'Mock with a Struct ' do
17
+ REP.times do |index|
18
+ Yockeries::YockHash.new(hash).mock_for('user_1')
19
+ end
20
+ end
21
+ end
@@ -1,18 +1,20 @@
1
1
  require 'yaml'
2
- require 'ostruct'
3
2
 
4
3
  module Yockeries
5
4
  class YockHash < Hash
5
+ attr_reader :hash
6
+
6
7
  def initialize(hash = {})
7
8
  @hash = symbolize_keys(hash)
8
9
  end
9
10
 
10
11
  def get(name)
11
- @hash[name.to_sym]
12
+ hash[name.to_sym]
12
13
  end
13
14
 
14
15
  def mock_for(name)
15
- OpenStruct.new(get(name))
16
+ hashed_mock = get(name)
17
+ ::Struct.new( *(k=hashed_mock.keys)).new( *hashed_mock.values_at(*k) )
16
18
  end
17
19
 
18
20
  private
@@ -58,8 +60,7 @@ module Yockeries
58
60
 
59
61
  module Loader
60
62
  def fixture(filename)
61
- dir = File.exists?('test') ? 'test' : 'spec'
62
- file = Dir.glob("#{dir}/fixtures/#{filename}.{yaml,yml}").first
63
+ file = Dir.glob("{test,spec}/fixtures/#{filename}.{yaml,yml}").first
63
64
  ::Yockeries::YockHash.new(YAML.load_file(file))
64
65
  end
65
66
  end
@@ -22,12 +22,18 @@ module Yockeries
22
22
  subject.get('user_2')[:name].must_equal 'tyler'
23
23
  end
24
24
 
25
- it 'will return a mock' do
26
- subject.mock_for('user_1').kind_of?(OpenStruct).must_equal true
27
- end
25
+ describe "mocks" do
26
+ let(:mock) { subject.mock_for('user_1') }
27
+
28
+ it 'will return a mock' do
29
+ mock.kind_of?(Struct).must_equal true
30
+ end
31
+
32
+ it 'mocks will imitate an object' do
33
+ mock.name.must_equal 'robert'
34
+ mock.email.must_equal 'robert@example.com'
35
+ end
28
36
 
29
- it 'mocks will imitate an object' do
30
- subject.mock_for('user_1').name.must_equal 'robert'
31
37
  end
32
38
  end
33
39
 
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |gem|
6
6
  gem.name = "yockeries"
7
- gem.version = '0.0.2'
7
+ gem.version = '0.0.3'
8
8
  gem.authors = ["Robert Evans"]
9
9
  gem.email = ["robert@codewranglers.org"]
10
10
  gem.description = %q{Use Ruby Fixtures to create mocks or use in place of factories to create objects}
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yockeries
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-10-25 00:00:00.000000000 Z
12
+ date: 2012-11-04 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Use Ruby Fixtures to create mocks or use in place of factories to create
15
15
  objects
@@ -24,6 +24,7 @@ files:
24
24
  - LICENSE.txt
25
25
  - README.rdoc
26
26
  - Rakefile
27
+ - benchmarks/open_struct_vs_struct.rb
27
28
  - lib/yockeries.rb
28
29
  - test/fixtures/cow.yml
29
30
  - test/fixtures/monkey.yaml