workbench 0.3 → 0.4

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.
Files changed (2) hide show
  1. data/lib/workbench.rb +34 -14
  2. metadata +63 -66
data/lib/workbench.rb CHANGED
@@ -1,7 +1,36 @@
1
- require File.expand_path('../workbench/string_helpers', __FILE__)
1
+ require 'workbench/string_helpers'
2
+
2
3
  module Workbench
3
4
  COUNTERS = Hash.new(0)
4
5
 
6
+ module InstanceMethods
7
+ def assign_model_attributes(model, attributes)
8
+ attributes.each do |k, v|
9
+ model.send("#{k}=", v)
10
+ end
11
+ end
12
+
13
+ def save_model(model)
14
+ if model.respond_to?(:save!) # save should raise if unsuccessful
15
+ model.save!
16
+ else
17
+ model.save
18
+ end
19
+ end
20
+
21
+ def find_model_by_attributes(klass, attributes)
22
+ klass.where(attributes).first
23
+ end
24
+
25
+ def new_model(klass)
26
+ klass.new
27
+ end
28
+ end
29
+
30
+ def self.extended(klass)
31
+ klass.send :include, InstanceMethods
32
+ end
33
+
5
34
  # Declare that the next builder method is to use the said class
6
35
  #
7
36
  # module Builders
@@ -77,10 +106,8 @@ private
77
106
  def define_builder_methods(name, klass, counter_klass)
78
107
  define_method("new_#{name}") do |*args|
79
108
  attributes = args[0] || { }
80
- klass.new.tap do |model|
81
- attributes.each do |k, v|
82
- model.send("#{k}=", v)
83
- end
109
+ new_model(klass).tap do |model|
110
+ assign_model_attributes(model, attributes)
84
111
  build_method = method("#{name}_defaults")
85
112
  p = [model]
86
113
  p << Workbench.counter(counter_klass) if build_method.arity >= 2 || build_method.arity <= -1
@@ -90,18 +117,12 @@ private
90
117
  end
91
118
 
92
119
  define_method("create_#{name}") do |*args|
93
- send("new_#{name}", *args).tap do |model|
94
- if model.respond_to?(:save!) # save should raise if unsuccessful
95
- model.save!
96
- else
97
- model.save
98
- end
99
- end
120
+ send("new_#{name}", *args).tap { |model| save_model(model) }
100
121
  end
101
122
 
102
123
  define_method("find_or_create_#{name}") do |*args|
103
124
  attrs = args[0] || { }
104
- klass.where(attrs).first || send("create_#{name}", attrs)
125
+ find_model_by_attributes(klass, attrs) || send("create_#{name}", attrs)
105
126
  end
106
127
  end
107
128
 
@@ -110,5 +131,4 @@ private
110
131
  $1.to_sym
111
132
  end
112
133
  end
113
-
114
134
  end
metadata CHANGED
@@ -1,82 +1,82 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: workbench
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.4'
4
5
  prerelease:
5
- version: "0.3"
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Tim Harper
9
9
  - Eric Wollesen
10
10
  - Ben Mabey
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
-
15
- date: 2011-08-19 00:00:00 -06:00
16
- default_executable:
17
- dependencies:
18
- - !ruby/object:Gem::Dependency
14
+ date: 2011-12-15 00:00:00.000000000Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
19
17
  name: rspec
20
- prerelease: false
21
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &70354928164440 !ruby/object:Gem::Requirement
22
19
  none: false
23
- requirements:
20
+ requirements:
24
21
  - - ~>
25
- - !ruby/object:Gem::Version
26
- version: "2.6"
22
+ - !ruby/object:Gem::Version
23
+ version: '2.6'
27
24
  type: :development
28
- version_requirements: *id001
29
- - !ruby/object:Gem::Dependency
30
- name: ruby-debug19
31
25
  prerelease: false
32
- requirement: &id002 !ruby/object:Gem::Requirement
26
+ version_requirements: *70354928164440
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby-debug19
29
+ requirement: &70354928266680 !ruby/object:Gem::Requirement
33
30
  none: false
34
- requirements:
35
- - - ">="
36
- - !ruby/object:Gem::Version
37
- version: "0"
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
38
35
  type: :development
39
- version_requirements: *id002
40
- - !ruby/object:Gem::Dependency
41
- name: rake
42
36
  prerelease: false
43
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ version_requirements: *70354928266680
38
+ - !ruby/object:Gem::Dependency
39
+ name: rake
40
+ requirement: &70354928397240 !ruby/object:Gem::Requirement
44
41
  none: false
45
- requirements:
46
- - - ">="
47
- - !ruby/object:Gem::Version
48
- version: "0"
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
49
46
  type: :development
50
- version_requirements: *id003
51
- - !ruby/object:Gem::Dependency
52
- name: rdoc
53
47
  prerelease: false
54
- requirement: &id004 !ruby/object:Gem::Requirement
48
+ version_requirements: *70354928397240
49
+ - !ruby/object:Gem::Dependency
50
+ name: rdoc
51
+ requirement: &70354928523780 !ruby/object:Gem::Requirement
55
52
  none: false
56
- requirements:
57
- - - "="
58
- - !ruby/object:Gem::Version
59
- version: "3.8"
53
+ requirements:
54
+ - - =
55
+ - !ruby/object:Gem::Version
56
+ version: '3.8'
60
57
  type: :development
61
- version_requirements: *id004
62
- description: |
63
- Workbench strikes to reach a better balance between easy-to-read
58
+ prerelease: false
59
+ version_requirements: *70354928523780
60
+ description: ! 'Workbench strikes to reach a better balance between easy-to-read
61
+
64
62
  factory builders, ease of use, and robustness.
65
-
66
- Workbench doesn't use any fancy tricks. It's code is small and the
63
+
64
+
65
+ Workbench doesn''t use any fancy tricks. It''s code is small and the
66
+
67
67
  average rubyist should have no trouble reading it. It exploits what
68
+
68
69
  ruby provides. Instead of operating on a proxy object, builders
69
- operate on the actual model. It's also ORM agnostic.
70
70
 
71
- email:
71
+ operate on the actual model. It''s also ORM agnostic.
72
+
73
+ '
74
+ email:
72
75
  - tim@leadtune.com
73
76
  executables: []
74
-
75
77
  extensions: []
76
-
77
78
  extra_rdoc_files: []
78
-
79
- files:
79
+ files:
80
80
  - spec/spec_helper.rb
81
81
  - spec/workbench/string_helpers_spec.rb
82
82
  - spec/workbench_spec.rb
@@ -85,33 +85,30 @@ files:
85
85
  - MIT_LICENSE
86
86
  - README.rdoc
87
87
  - Gemfile
88
- has_rdoc: true
89
88
  homepage: http://github.com/leadtune/workbench
90
89
  licenses: []
91
-
92
90
  post_install_message:
93
91
  rdoc_options: []
94
-
95
- require_paths:
92
+ require_paths:
96
93
  - lib
97
- required_ruby_version: !ruby/object:Gem::Requirement
94
+ required_ruby_version: !ruby/object:Gem::Requirement
98
95
  none: false
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: "0"
103
- required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
104
101
  none: false
105
- requirements:
106
- - - ">="
107
- - !ruby/object:Gem::Version
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
108
105
  version: 1.3.6
109
106
  requirements: []
110
-
111
107
  rubyforge_project:
112
- rubygems_version: 1.6.2
108
+ rubygems_version: 1.8.7
113
109
  signing_key:
114
110
  specification_version: 3
115
- summary: A small, simple ORM agnostic factory library that does the job without any crazy tricks.
111
+ summary: A small, simple ORM agnostic factory library that does the job without any
112
+ crazy tricks.
116
113
  test_files: []
117
-
114
+ has_rdoc: