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.
- data/lib/workbench.rb +34 -14
- metadata +63 -66
data/lib/workbench.rb
CHANGED
@@ -1,7 +1,36 @@
|
|
1
|
-
require
|
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.
|
81
|
-
|
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
|
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
|
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
|
-
|
16
|
-
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
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
|
-
|
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:
|
53
|
+
requirements:
|
54
|
+
- - =
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '3.8'
|
60
57
|
type: :development
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
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
|
-
|
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:
|
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.
|
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
|
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:
|