ambition 0.3.1 → 0.5.0

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 (83) hide show
  1. data/Manifest +41 -48
  2. data/README +6 -203
  3. data/ambition.gemspec +111 -0
  4. data/app_generators/ambition_adapter/USAGE +1 -0
  5. data/app_generators/ambition_adapter/ambition_adapter_generator.rb +66 -0
  6. data/app_generators/ambition_adapter/templates/LICENSE +18 -0
  7. data/app_generators/ambition_adapter/templates/README +6 -0
  8. data/app_generators/ambition_adapter/templates/Rakefile +31 -0
  9. data/app_generators/ambition_adapter/templates/lib/base.rb.erb +12 -0
  10. data/app_generators/ambition_adapter/templates/lib/init.rb.erb +22 -0
  11. data/app_generators/ambition_adapter/templates/lib/query.rb.erb +52 -0
  12. data/app_generators/ambition_adapter/templates/lib/select.rb.erb +100 -0
  13. data/app_generators/ambition_adapter/templates/lib/slice.rb.erb +19 -0
  14. data/app_generators/ambition_adapter/templates/lib/sort.rb.erb +43 -0
  15. data/app_generators/ambition_adapter/templates/test/helper.rb.erb +9 -0
  16. data/app_generators/ambition_adapter/templates/test/select_test.rb.erb +157 -0
  17. data/app_generators/ambition_adapter/templates/test/slice_test.rb.erb +36 -0
  18. data/app_generators/ambition_adapter/templates/test/sort_test.rb.erb +53 -0
  19. data/bin/ambition_adapter +13 -0
  20. data/lib/ambition.rb +8 -13
  21. data/lib/ambition/api.rb +42 -35
  22. data/lib/ambition/context.rb +62 -0
  23. data/lib/ambition/{proc_to_ruby.rb → core_ext.rb} +13 -0
  24. data/lib/ambition/enumerable.rb +6 -0
  25. data/lib/ambition/processors/base.rb +126 -0
  26. data/lib/ambition/processors/ruby.rb +24 -0
  27. data/lib/ambition/processors/select.rb +105 -0
  28. data/lib/ambition/processors/slice.rb +15 -0
  29. data/lib/ambition/processors/sort.rb +51 -0
  30. data/test/adapters/exemplar/association_test.rb +34 -0
  31. data/test/adapters/exemplar/count_test.rb +0 -0
  32. data/test/adapters/exemplar/detect_test.rb +9 -0
  33. data/test/adapters/exemplar/enumerable_test.rb +0 -0
  34. data/test/adapters/exemplar/helper.rb +3 -0
  35. data/test/adapters/exemplar/index_operator.rb +6 -0
  36. data/test/adapters/exemplar/reject_test.rb +0 -0
  37. data/test/adapters/exemplar/select_test.rb +151 -0
  38. data/test/adapters/exemplar/slice_test.rb +0 -0
  39. data/test/adapters/exemplar/sort_test.rb +0 -0
  40. data/test/debug +9 -0
  41. data/test/helper.rb +2 -52
  42. metadata +56 -71
  43. data/Rakefile +0 -64
  44. data/init.rb +0 -1
  45. data/lib/ambition/database_statements.rb +0 -31
  46. data/lib/ambition/processor.rb +0 -123
  47. data/lib/ambition/query.rb +0 -91
  48. data/lib/ambition/ruby_processor.rb +0 -22
  49. data/lib/ambition/select_processor.rb +0 -149
  50. data/lib/ambition/simple_processor.rb +0 -10
  51. data/lib/ambition/sort_processor.rb +0 -47
  52. data/lib/ambition/source.rb +0 -53
  53. data/test/benchmark.rb +0 -68
  54. data/test/chaining_test.rb +0 -34
  55. data/test/console +0 -9
  56. data/test/count_test.rb +0 -17
  57. data/test/databases/boot.rb +0 -3
  58. data/test/databases/database.yml +0 -17
  59. data/test/databases/fixtures/admin.rb +0 -3
  60. data/test/databases/fixtures/companies.yml +0 -24
  61. data/test/databases/fixtures/company.rb +0 -23
  62. data/test/databases/fixtures/developer.rb +0 -11
  63. data/test/databases/fixtures/developers_projects.yml +0 -13
  64. data/test/databases/fixtures/project.rb +0 -4
  65. data/test/databases/fixtures/projects.yml +0 -7
  66. data/test/databases/fixtures/replies.yml +0 -20
  67. data/test/databases/fixtures/reply.rb +0 -5
  68. data/test/databases/fixtures/topic.rb +0 -19
  69. data/test/databases/fixtures/topics.yml +0 -32
  70. data/test/databases/fixtures/user.rb +0 -2
  71. data/test/databases/fixtures/users.yml +0 -35
  72. data/test/databases/lib/activerecord_test_connector.rb +0 -65
  73. data/test/databases/lib/load_fixtures.rb +0 -13
  74. data/test/databases/lib/schema.rb +0 -41
  75. data/test/enumerable_test.rb +0 -95
  76. data/test/join_test.rb +0 -61
  77. data/test/limit_test.rb +0 -41
  78. data/test/order_test.rb +0 -52
  79. data/test/profiler.rb +0 -34
  80. data/test/ruby_test.rb +0 -9
  81. data/test/source_test.rb +0 -43
  82. data/test/types_test.rb +0 -59
  83. data/test/where_test.rb +0 -245
data/Manifest CHANGED
@@ -1,48 +1,41 @@
1
- ./init.rb
2
- ./lib/ambition/api.rb
3
- ./lib/ambition/database_statements.rb
4
- ./lib/ambition/proc_to_ruby.rb
5
- ./lib/ambition/processor.rb
6
- ./lib/ambition/query.rb
7
- ./lib/ambition/ruby_processor.rb
8
- ./lib/ambition/select_processor.rb
9
- ./lib/ambition/simple_processor.rb
10
- ./lib/ambition/sort_processor.rb
11
- ./lib/ambition/source.rb
12
- ./lib/ambition.rb
13
- ./LICENSE
14
- ./Manifest
15
- ./Rakefile
16
- ./README
17
- ./test/benchmark.rb
18
- ./test/chaining_test.rb
19
- ./test/console
20
- ./test/count_test.rb
21
- ./test/databases/boot.rb
22
- ./test/databases/database.yml
23
- ./test/databases/fixtures/admin.rb
24
- ./test/databases/fixtures/companies.yml
25
- ./test/databases/fixtures/company.rb
26
- ./test/databases/fixtures/developer.rb
27
- ./test/databases/fixtures/developers_projects.yml
28
- ./test/databases/fixtures/project.rb
29
- ./test/databases/fixtures/projects.yml
30
- ./test/databases/fixtures/replies.yml
31
- ./test/databases/fixtures/reply.rb
32
- ./test/databases/fixtures/topic.rb
33
- ./test/databases/fixtures/topics.yml
34
- ./test/databases/fixtures/user.rb
35
- ./test/databases/fixtures/users.yml
36
- ./test/databases/lib/activerecord_test_connector.rb
37
- ./test/databases/lib/load_fixtures.rb
38
- ./test/databases/lib/schema.rb
39
- ./test/enumerable_test.rb
40
- ./test/helper.rb
41
- ./test/join_test.rb
42
- ./test/limit_test.rb
43
- ./test/order_test.rb
44
- ./test/profiler.rb
45
- ./test/source_test.rb
46
- ./test/ruby_test.rb
47
- ./test/types_test.rb
48
- ./test/where_test.rb
1
+ app_generators/ambition_adapter/ambition_adapter_generator.rb
2
+ app_generators/ambition_adapter/templates/lib/base.rb.erb
3
+ app_generators/ambition_adapter/templates/lib/init.rb.erb
4
+ app_generators/ambition_adapter/templates/lib/query.rb.erb
5
+ app_generators/ambition_adapter/templates/lib/select.rb.erb
6
+ app_generators/ambition_adapter/templates/lib/slice.rb.erb
7
+ app_generators/ambition_adapter/templates/lib/sort.rb.erb
8
+ app_generators/ambition_adapter/templates/LICENSE
9
+ app_generators/ambition_adapter/templates/Rakefile
10
+ app_generators/ambition_adapter/templates/README
11
+ app_generators/ambition_adapter/templates/test/helper.rb.erb
12
+ app_generators/ambition_adapter/templates/test/select_test.rb.erb
13
+ app_generators/ambition_adapter/templates/test/slice_test.rb.erb
14
+ app_generators/ambition_adapter/templates/test/sort_test.rb.erb
15
+ app_generators/ambition_adapter/USAGE
16
+ bin/ambition_adapter
17
+ lib/ambition/api.rb
18
+ lib/ambition/context.rb
19
+ lib/ambition/core_ext.rb
20
+ lib/ambition/enumerable.rb
21
+ lib/ambition/processors/base.rb
22
+ lib/ambition/processors/ruby.rb
23
+ lib/ambition/processors/select.rb
24
+ lib/ambition/processors/slice.rb
25
+ lib/ambition/processors/sort.rb
26
+ lib/ambition.rb
27
+ LICENSE
28
+ Manifest
29
+ README
30
+ test/adapters/exemplar/association_test.rb
31
+ test/adapters/exemplar/count_test.rb
32
+ test/adapters/exemplar/detect_test.rb
33
+ test/adapters/exemplar/enumerable_test.rb
34
+ test/adapters/exemplar/helper.rb
35
+ test/adapters/exemplar/index_operator.rb
36
+ test/adapters/exemplar/reject_test.rb
37
+ test/adapters/exemplar/select_test.rb
38
+ test/adapters/exemplar/slice_test.rb
39
+ test/adapters/exemplar/sort_test.rb
40
+ test/debug
41
+ test/helper.rb
data/README CHANGED
@@ -1,207 +1,10 @@
1
- == Ambitious SQL
1
+ Ambition
2
+ ========
2
3
 
3
- A simple experiment and even simpler query library.
4
+ http://github.com/defunkt/ambition
4
5
 
5
- I could tell you all about how awesome the internals are, or
6
- how fun it was to write, or how it'll make you rich and famous,
7
- but instead I'm just going to show you some examples.
6
+ $ git clone git://github.com/defunkt/ambition.git
8
7
 
9
- The goal is this: write once, run with ActiveRecord, Sequel, DataMapper,
10
- whatever. Kind of like Rack for databases.
11
8
 
12
- == Git It (with Git, even)
13
-
14
- $ sudo gem install ambition -y
15
-
16
- This will suck in Ambition and its dependencies (ParseTree & ActiveRecord).
17
- It's fully usable outside of Rails (I use it in a Camping app or two), as long
18
- as you're riding ActiveRecord.
19
-
20
- To use with Rails, after installing the gem:
21
-
22
- $ cd vendor/plugins
23
- $ gem unpack ambition
24
-
25
- RDoc exists: http://rock.errtheblog.com/ambition
26
-
27
- Have at the Git repo:
28
-
29
- $ git clone git://errtheblog.com/git/ambition
30
-
31
- == Examples
32
-
33
- Basically, you write your SQL in Ruby. No, not in Ruby. As Ruby.
34
-
35
- User.select { |u| u.city == 'San Francisco' }.each do |user|
36
- puts user.name
37
- end
38
-
39
- And that's it.
40
-
41
- The key is that queries arent actually run until the data they represent is
42
- requested. Usually this is done with what I call a kicker method. You can call them
43
- that, too.
44
-
45
- Kicker methods are guys like +detect+, +each+, +each_with_index+, +map+, +entries+,
46
- +to_a+, and +first+ (with no argument). Methods like +select+, +sort_by+, and +first+
47
- (with an argument) are not kicker methods and return a +Query+ object without running any SQL.
48
-
49
- Our +Query+ object has two useful methods: +to_sql+ and +to_hash+. With these,
50
- we can check out what exactly we're building. Not everyone has +to_sql+,
51
- though. Mostly ignore these methods and treat everything like you normally
52
- would.
53
-
54
- See, +to_sql+:
55
- >> User.select { |m| m.name == 'jon' }.to_sql
56
- => "SELECT * FROM users WHERE users.name = 'jon'"
57
-
58
- See, +to_hash+:
59
- >> User.select { |m| m.name == 'jon' }.to_hash
60
- => {:conditions=>"users.name = 'jon'"}
61
-
62
- == Equality -- select { |u| u.field == 'bob' }
63
-
64
- User.select { |m| m.name == 'jon' }
65
- "SELECT * FROM users WHERE users.name = 'jon'"
66
-
67
- User.select { |m| m.created_at > 2.days.ago }
68
- "SELECT * FROM users WHERE users.created_at > '2007-09-26 20:37:47'"
69
-
70
- User.select { |m| m.name == 'jon' }
71
- "SELECT * FROM users WHERE users.name = 'jon'"
72
-
73
- User.select { |m| m.name != 'jon' }
74
- "SELECT * FROM users WHERE users.name <> 'jon'"
75
-
76
- User.select { |m| m.name == 'jon' && m.age == 21 }
77
- "SELECT * FROM users WHERE (users.name = 'jon' AND users.age = 21)"
78
-
79
- User.select { |m| m.name == 'jon' || m.age == 21 }
80
- "SELECT * FROM users WHERE (users.name = 'jon' OR users.age = 21)"
81
-
82
- User.select { |m| m.name == 'jon' || m.age == 21 && m.password == 'pass' }
83
- "SELECT * FROM users WHERE (users.name = 'jon' OR (users.age = 21 AND users.password = 'pass'))"
84
-
85
- User.select { |m| (m.name == 'jon' || m.name == 'rick') && m.age == 21 }
86
- "SELECT * FROM users WHERE ((users.name = 'jon' OR users.name = 'rick') AND users.age = 21)"
87
-
88
- == Associations -- select { |u| u.field == 'bob' && u.association.field == 'bob@bob.com' }
89
-
90
- The +to_sql+ method doesn't work on associations yet, but that's okay: they can
91
- still query through ActiveRecord just fine.
92
-
93
- User.select { |u| u.email == 'chris@ozmm.org' && u.profile.name == 'chris wanstrath' }.map(&:title)
94
- SELECT users.id AS t0_r0, ... FROM users LEFT OUTER JOIN profiles ON profiles.user_id = users.id WHERE ((users.email = 'chris@ozmm.org' AND profiles.name = 'chris wanstrath'))
95
-
96
- == Comparisons -- select { |u| u.age > 21 }
97
-
98
- User.select { |m| m.age > 21 }
99
- "SELECT * FROM users WHERE users.age > 21"
100
-
101
- User.select { |m| m.age < 21 }.to_sql
102
- "SELECT * FROM users WHERE users.age < 21"
103
-
104
- User.select { |m| [1, 2, 3, 4].include? m.id }
105
- "SELECT * FROM users WHERE users.id IN (1, 2, 3, 4)"
106
-
107
- == LIKE and REGEXP (RLIKE) -- select { |m| m.name =~ 'chris' }
108
-
109
- User.select { |m| m.name =~ 'chris' }
110
- "SELECT * FROM users WHERE users.name LIKE 'chris'"
111
-
112
- User.select { |m| m.name =~ 'chri%' }
113
- "SELECT * FROM users WHERE users.name LIKE 'chri%'"
114
-
115
- User.select { |m| m.name !~ 'chris' }
116
- "SELECT * FROM users WHERE users.name NOT LIKE 'chris'"
117
-
118
- User.select { |m| !(m.name =~ 'chris') }
119
- "SELECT * FROM users WHERE users.name NOT LIKE 'chris'"
120
-
121
- User.select { |m| m.name =~ /chris/ }
122
- "SELECT * FROM users WHERE users.name REGEXP 'chris'"
123
-
124
- == #detect
125
-
126
- User.detect { |m| m.name == 'chris' }
127
- "SELECT * FROM users WHERE users.name = 'chris' LIMIT 1"
128
-
129
- == LIMITs -- first, first(x), [offset, limit], [range], slice
130
-
131
- User.select { |m| m.name == 'jon' }.first
132
- "SELECT * FROM users WHERE users.name = 'jon' LIMIT 1"
133
-
134
- User.select { |m| m.name == 'jon' }.first(5)
135
- "SELECT * FROM users WHERE users.name = 'jon' LIMIT 5"
136
-
137
- User.select { |m| m.name == 'jon' }[10, 20]
138
- "SELECT * FROM users WHERE users.name = 'jon' LIMIT 10, 20"
139
-
140
- User.select { |m| m.name == 'jon' }[10..20]
141
- "SELECT * FROM users WHERE users.name = 'jon' LIMIT 10, 10"
142
-
143
- == ORDER -- sort_by { |u| u.field }
144
-
145
- User.select { |m| m.name == 'jon' }.sort_by { |m| m.name }
146
- "SELECT * FROM users WHERE users.name = 'jon' ORDER BY users.name"
147
-
148
- User.select { |m| m.name == 'jon' }.sort_by { |m| [ m.name, m.age ] }
149
- "SELECT * FROM users WHERE users.name = 'jon' ORDER BY users.name, users.age"
150
-
151
- User.select { |m| m.name == 'jon' }.sort_by { |m| [ m.name, -m.age ] }
152
- "SELECT * FROM users WHERE users.name = 'jon' ORDER BY users.name, users.age DESC"
153
-
154
- User.select { |m| m.name == 'jon' }.sort_by { |m| [ -m.name, -m.age ] }
155
- "SELECT * FROM users WHERE users.name = 'jon' ORDER BY users.name DESC, users.age DESC"
156
-
157
- User.select { |m| m.name == 'jon' }.sort_by { |m| -m.age }
158
- "SELECT * FROM users WHERE users.name = 'jon' ORDER BY users.age DESC"
159
-
160
- User.select { |m| m.name == 'jon' }.sort_by { |m| -m.profiles.title }
161
- "SELECT users.id AS t0_r0, ... FROM users LEFT OUTER JOIN profiles ON profiles.user_id = users.id
162
- WHERE (users.name = 'jon') ORDER BY profiles.title DESC"
163
-
164
- User.select { |m| m.name == 'jon' }.sort_by { rand }
165
- "SELECT * FROM users WHERE users.name = 'jon' ORDER BY RAND()"
166
-
167
- == COUNT -- select { |u| u.name == 'jon' }.size
168
-
169
- User.select { |m| m.name == 'jon' }.size
170
- SELECT count(*) AS count_all FROM users WHERE (users.name = 'jon')
171
-
172
- >> User.select { |m| m.name == 'jon' }.size
173
- => 21
174
-
175
- == Other Enumerables
176
-
177
- These methods perform COUNT() operations rather than loading your array into memory. They're all
178
- kickers.
179
-
180
- User.any? { |m| m.name == 'jon' }
181
- User.all? { |m| m.name == 'jon' }
182
- User.select { |m| m.name == 'jon' }.empty?
183
-
184
- == More Sugar
185
-
186
- The +downcase+ and +upcase+ methods will map to LOWER() and UPPER(), respectively.
187
-
188
- >> User.select { |m| m.name.downcase =~ 'jon%' }.to_sql
189
- => "SELECT * FROM users WHERE LOWER(users.name) LIKE 'jon%'"
190
-
191
- == Quoting
192
-
193
- Columns and values will be quoted using ActiveRecord's quote_column_name and quote methods, if
194
- possible.
195
-
196
- == SELECT * FROM bugs
197
-
198
- Found a bug? Sweet. Add it at the Lighthouse:
199
- http://err.lighthouseapp.com/projects/466-plugins/tickets/new
200
-
201
- Feature requests are welcome.
202
-
203
- And hey, join our mailing list!
204
-
205
- http://groups.google.com/group/ambition-rb
206
-
207
- * Chris Wanstrath [ chris@ozmm.org ]
9
+ Chris Wanstrath
10
+ chris@ozmm.org
data/ambition.gemspec ADDED
@@ -0,0 +1,111 @@
1
+
2
+ # Gem::Specification for Ambition-0.5.0
3
+ # Originally generated by Echoe
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{ambition}
7
+ s.version = "0.5.0"
8
+ s.date = %q{2008-01-29}
9
+ s.summary = %q{Ambition builds yer API calls from plain jane Ruby.}
10
+ s.email = %q{chris@ozmm.org}
11
+ s.homepage = %q{http://errtheblog.com/}
12
+ s.rubyforge_project = %q{err}
13
+ s.description = %q{Ambition builds yer API calls from plain jane Ruby.}
14
+ s.default_executable = %q{ambition_adapter}
15
+ s.has_rdoc = true
16
+ s.required_ruby_version = Gem::Version::Requirement.new(">= 1.8.6")
17
+ s.authors = ["Chris Wanstrath"]
18
+ s.files = ["app_generators/ambition_adapter/ambition_adapter_generator.rb", "app_generators/ambition_adapter/templates/lib/base.rb.erb", "app_generators/ambition_adapter/templates/lib/init.rb.erb", "app_generators/ambition_adapter/templates/lib/query.rb.erb", "app_generators/ambition_adapter/templates/lib/select.rb.erb", "app_generators/ambition_adapter/templates/lib/slice.rb.erb", "app_generators/ambition_adapter/templates/lib/sort.rb.erb", "app_generators/ambition_adapter/templates/LICENSE", "app_generators/ambition_adapter/templates/Rakefile", "app_generators/ambition_adapter/templates/README", "app_generators/ambition_adapter/templates/test/helper.rb.erb", "app_generators/ambition_adapter/templates/test/select_test.rb.erb", "app_generators/ambition_adapter/templates/test/slice_test.rb.erb", "app_generators/ambition_adapter/templates/test/sort_test.rb.erb", "app_generators/ambition_adapter/USAGE", "bin/ambition_adapter", "lib/ambition/api.rb", "lib/ambition/context.rb", "lib/ambition/core_ext.rb", "lib/ambition/enumerable.rb", "lib/ambition/processors/base.rb", "lib/ambition/processors/ruby.rb", "lib/ambition/processors/select.rb", "lib/ambition/processors/slice.rb", "lib/ambition/processors/sort.rb", "lib/ambition.rb", "LICENSE", "Manifest", "README", "test/adapters/exemplar/association_test.rb", "test/adapters/exemplar/count_test.rb", "test/adapters/exemplar/detect_test.rb", "test/adapters/exemplar/enumerable_test.rb", "test/adapters/exemplar/helper.rb", "test/adapters/exemplar/index_operator.rb", "test/adapters/exemplar/reject_test.rb", "test/adapters/exemplar/select_test.rb", "test/adapters/exemplar/slice_test.rb", "test/adapters/exemplar/sort_test.rb", "test/debug", "test/helper.rb", "ambition.gemspec"]
19
+ s.executables = ["ambition_adapter"]
20
+ s.add_dependency(%q<ParseTree>, ["= 2.0.1"])
21
+ s.add_dependency(%q<ruby2ruby>, ["= 1.1.7"])
22
+ s.add_dependency(%q<rubigen>, ["= 1.1.1"])
23
+ end
24
+
25
+
26
+ # # Original Rakefile source (requires the Echoe gem):
27
+ #
28
+ # require 'rake'
29
+ # require 'rake/testtask'
30
+ # require 'rake/rdoctask'
31
+ #
32
+ # Version = '0.5.0'
33
+ #
34
+ # module Rake::TaskManager
35
+ # def delete_task(task_class, *args, &block)
36
+ # task_name, deps = resolve_args(args)
37
+ # @tasks.delete(task_class.scope_name(@scope, task_name).to_s)
38
+ # end
39
+ # end
40
+ # class Rake::Task
41
+ # def self.delete_task(args, &block) Rake.application.delete_task(self, args, &block) end
42
+ # end
43
+ # def delete_task(args, &block) Rake::Task.delete_task(args, &block) end
44
+ #
45
+ # begin
46
+ # require 'rubygems'
47
+ # gem 'echoe', '>=2.7'
48
+ # ENV['RUBY_FLAGS'] = ""
49
+ # require 'echoe'
50
+ #
51
+ # Echoe.new('ambition', Version) do |p|
52
+ # p.project = 'err'
53
+ # p.summary = "Ambition builds yer API calls from plain jane Ruby."
54
+ # p.description = "Ambition builds yer API calls from plain jane Ruby."
55
+ # p.url = "http://errtheblog.com/"
56
+ # p.author = 'Chris Wanstrath'
57
+ # p.email = "chris@ozmm.org"
58
+ # p.ruby_version = '>= 1.8.6'
59
+ # p.ignore_pattern = /^(\.git|site|adapters).+/
60
+ # p.test_pattern = 'test/*_test.rb'
61
+ # p.dependencies << 'ParseTree =2.0.1'
62
+ # p.dependencies << 'ruby2ruby =1.1.7'
63
+ # p.dependencies << 'rubigen =1.1.1'
64
+ # end
65
+ #
66
+ # rescue LoadError
67
+ # puts "Not doing any of the Echoe gemmy stuff, because you don't have the specified gem versions"
68
+ # end
69
+ #
70
+ # delete_task :test
71
+ # delete_task :install_gem
72
+ #
73
+ # Rake::TestTask.new('test') do |t|
74
+ # t.pattern = 'test/*_test.rb'
75
+ # end
76
+ #
77
+ # Rake::TestTask.new('test:adapters') do |t|
78
+ # t.pattern = 'adapters/*/test/*_test.rb'
79
+ # end
80
+ #
81
+ # Dir['adapters/*'].each do |adapter|
82
+ # adapter = adapter.split('/').last
83
+ # Rake::TestTask.new("test:adapters:#{adapter.sub('ambitious_','')}") do |t|
84
+ # t.pattern = "adapters/#{adapter}/test/*_test.rb"
85
+ # end
86
+ # end
87
+ #
88
+ # desc 'Default: run unit tests.'
89
+ # task :default => :test
90
+ #
91
+ # desc 'Generate RDoc documentation'
92
+ # Rake::RDocTask.new(:rdoc) do |rdoc|
93
+ # files = ['README', 'LICENSE', 'lib/**/*.rb']
94
+ # rdoc.rdoc_files.add(files)
95
+ # rdoc.main = "README"
96
+ # rdoc.title = "ambition"
97
+ # rdoc.template = File.exists?(t="/Users/chris/ruby/projects/err/rock/template.rb") ? t : "/var/www/rock/template.rb"
98
+ # rdoc.rdoc_dir = 'doc'
99
+ # rdoc.options << '--inline-source'
100
+ # end
101
+ #
102
+ # desc 'Generate coverage reports'
103
+ # task :rcov do
104
+ # `rcov -e gems test/*_test.rb`
105
+ # puts 'Generated coverage reports.'
106
+ # end
107
+ #
108
+ # desc 'Install as a gem'
109
+ # task :install_gem do
110
+ # puts `rake manifest package && gem install pkg/ambition-#{Version}.gem`
111
+ # end
@@ -0,0 +1 @@
1
+ o.
@@ -0,0 +1,66 @@
1
+ class AmbitionAdapterGenerator < RubiGen::Base
2
+ # DEFAULT_SHEBANG = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
3
+ # default_options :author => nil
4
+
5
+ attr_reader :adapter_name, :adapter_module
6
+
7
+ def initialize(runtime_args, runtime_options = {})
8
+ super
9
+ usage if args.empty?
10
+ @destination_root = File.expand_path(args.shift)
11
+ base_name = self.base_name.sub(/ambitious(-|_)/,'')
12
+ @adapter_name = base_name
13
+ @adapter_module = base_name.split('_').map { |part| part[0] = part[0...1].upcase; part }.join
14
+ extract_options
15
+ end
16
+
17
+ def manifest
18
+ record do |m|
19
+ # Ensure appropriate folder(s) exists
20
+ m.directory ''
21
+ dirs = %W(
22
+ lib/ambition/adapters/#{adapter_name}
23
+ test
24
+ )
25
+ dirs.each { |path| m.directory path }
26
+
27
+ ##
28
+ # Translator / Query stubs
29
+ adapter_path = "lib/ambition/adapters/#{adapter_name}"
30
+
31
+ %w( base query select slice sort ).each do |file|
32
+ m.template "lib/#{file}.rb.erb", "#{adapter_path}/#{file}.rb"
33
+ end
34
+
35
+ m.template 'lib/init.rb.erb', "#{adapter_path}.rb"
36
+
37
+ ##
38
+ # Test stubs
39
+ Dir[File.dirname(__FILE__) + '/templates/test/*.rb.erb'].each do |file|
40
+ file = File.basename(file, '.*')
41
+ m.template "test/#{file}.erb", "test/#{file}"
42
+ end
43
+
44
+ ##
45
+ # Normal files
46
+ files = %w( LICENSE README Rakefile )
47
+ files.each do |file|
48
+ m.template file, file
49
+ end
50
+ end
51
+ end
52
+
53
+ protected
54
+ def banner
55
+ "Coming soon"
56
+ end
57
+
58
+ def add_options!(opts)
59
+ opts.separator ''
60
+ opts.separator 'Options:'
61
+ opts.on("-v", "--version", "Show the #{File.basename($0)} version number and quit.")
62
+ opts.separator ''
63
+ end
64
+
65
+ def extract_options; end
66
+ end