workbench 0.3 → 0.4

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