mordor 0.3.0-java

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.
@@ -0,0 +1,2 @@
1
+ --format specdoc
2
+ --colour
@@ -0,0 +1,41 @@
1
+ require 'rubygems'
2
+ require 'mongo'
3
+
4
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
5
+ require 'mordor'
6
+
7
+ RSpec.configure do |config|
8
+ config.before :each do
9
+ reset_mordor_config
10
+ end
11
+
12
+ config.after :each do
13
+ remove_class_constants
14
+ end
15
+ end
16
+
17
+ def reset_mordor_config
18
+ Mordor::Config.reset
19
+ end
20
+
21
+ def drop_db_collections
22
+ connection = Mongo::Connection.new(Mordor::Config[:hostname], Mordor::Config[:port])
23
+ db = connection[Mordor::Config[:database]]
24
+
25
+ test_class_names.each do |resource|
26
+ if Object.const_defined?(resource)
27
+ db[Object.const_get(resource).collection_name].remove
28
+ db[Object.const_get(resource).collection_name].drop
29
+ end
30
+ end
31
+ end
32
+
33
+ def remove_class_constants
34
+ test_class_names.each do |resource_class|
35
+ Object.send(:remove_const, resource_class) if Object.const_defined?(resource_class)
36
+ end
37
+ end
38
+
39
+ def test_class_names
40
+ [:TestResource, :TestResource2, :TestTimedResource]
41
+ end
@@ -0,0 +1,376 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/tasklib'
4
+ require 'date'
5
+ require 'set'
6
+
7
+ module GithubGem
8
+
9
+ # Detects the gemspc file of this project using heuristics.
10
+ def self.detect_gemspec_file
11
+ FileList['*.gemspec'].first
12
+ end
13
+
14
+ # Detects the main include file of this project using heuristics
15
+ def self.detect_main_include
16
+ if File.exist?(File.expand_path("../lib/#{File.basename(detect_gemspec_file, '.gemspec').gsub(/-/, '/')}.rb", detect_gemspec_file))
17
+ "lib/#{File.basename(detect_gemspec_file, '.gemspec').gsub(/-/, '/')}.rb"
18
+ elsif FileList['lib/*.rb'].length == 1
19
+ FileList['lib/*.rb'].first
20
+ else
21
+ nil
22
+ end
23
+ end
24
+
25
+ class RakeTasks
26
+
27
+ include Rake::DSL if Rake.const_defined?('DSL')
28
+
29
+ attr_reader :gemspec, :modified_files
30
+ attr_accessor :gemspec_file, :task_namespace, :main_include, :root_dir, :spec_pattern, :test_pattern, :remote, :remote_branch, :local_branch
31
+
32
+ # Initializes the settings, yields itself for configuration
33
+ # and defines the rake tasks based on the gemspec file.
34
+ def initialize(task_namespace = :gem)
35
+ @gemspec_file = GithubGem.detect_gemspec_file
36
+ @task_namespace = task_namespace
37
+ @main_include = GithubGem.detect_main_include
38
+ @modified_files = Set.new
39
+ @root_dir = Dir.pwd
40
+ @test_pattern = 'test/**/*_test.rb'
41
+ @spec_pattern = 'spec/**/*_spec.rb'
42
+ @local_branch = 'master'
43
+ @remote = 'origin'
44
+ @remote_branch = 'master'
45
+
46
+ yield(self) if block_given?
47
+
48
+ load_gemspec!
49
+ define_tasks!
50
+ end
51
+
52
+ protected
53
+
54
+ def git
55
+ @git ||= ENV['GIT'] || 'git'
56
+ end
57
+
58
+ # Define Unit test tasks
59
+ def define_test_tasks!
60
+ require 'rake/testtask'
61
+
62
+ namespace(:test) do
63
+ Rake::TestTask.new(:basic) do |t|
64
+ t.pattern = test_pattern
65
+ t.verbose = true
66
+ t.libs << 'test'
67
+ end
68
+ end
69
+
70
+ desc "Run all unit tests for #{gemspec.name}"
71
+ task(:test => ['test:basic'])
72
+ end
73
+
74
+ # Defines RSpec tasks
75
+ def define_rspec_tasks!
76
+ require 'rspec/core/rake_task'
77
+
78
+ namespace(:spec) do
79
+ desc "Verify all RSpec examples for #{gemspec.name}"
80
+ RSpec::Core::RakeTask.new(:basic) do |t|
81
+ t.pattern = spec_pattern
82
+ end
83
+
84
+ desc "Verify all RSpec examples for #{gemspec.name} and output specdoc"
85
+ RSpec::Core::RakeTask.new(:specdoc) do |t|
86
+ t.pattern = spec_pattern
87
+ t.rspec_opts = ['--format', 'documentation', '--color']
88
+ end
89
+
90
+ desc "Run RCov on specs for #{gemspec.name}"
91
+ RSpec::Core::RakeTask.new(:rcov) do |t|
92
+ t.pattern = spec_pattern
93
+ t.rcov = true
94
+ t.rcov_opts = ['--exclude', '"spec/*,gems/*"', '--rails']
95
+ end
96
+ end
97
+
98
+ desc "Verify all RSpec examples for #{gemspec.name} and output specdoc"
99
+ task(:spec => ['spec:specdoc'])
100
+ end
101
+
102
+ # Defines the rake tasks
103
+ def define_tasks!
104
+
105
+ define_test_tasks! if has_tests?
106
+ define_rspec_tasks! if has_specs?
107
+
108
+ namespace(@task_namespace) do
109
+ desc "Updates the filelist in the gemspec file"
110
+ task(:manifest) { manifest_task }
111
+
112
+ desc "Builds the .gem package"
113
+ task(:build => :manifest) { build_task }
114
+
115
+ desc "Sets the version of the gem in the gemspec"
116
+ task(:set_version => [:check_version, :check_current_branch]) { version_task }
117
+ task(:check_version => :fetch_origin) { check_version_task }
118
+
119
+ task(:fetch_origin) { fetch_origin_task }
120
+ task(:check_current_branch) { check_current_branch_task }
121
+ task(:check_clean_status) { check_clean_status_task }
122
+ task(:check_not_diverged => :fetch_origin) { check_not_diverged_task }
123
+
124
+ #checks = [:check_current_branch, :check_clean_status, :check_not_diverged, :check_version]
125
+ checks = [:check_current_branch, :check_clean_status]
126
+ checks.unshift('spec:basic') if has_specs?
127
+ checks.unshift('test:basic') if has_tests?
128
+ # checks.push << [:check_rubyforge] if gemspec.rubyforge_project
129
+
130
+ desc "Perform all checks that would occur before a release"
131
+ task(:release_checks => checks)
132
+
133
+ release_tasks = [:release_checks, :set_version, :build, :github_release, :gemcutter_release]
134
+ # release_tasks << [:rubyforge_release] if gemspec.rubyforge_project
135
+
136
+ desc "Release a new version of the gem using the VERSION environment variable"
137
+ task(:release => release_tasks) { release_task }
138
+
139
+ namespace(:release) do
140
+ desc "Release the next version of the gem, by incrementing the last version segment by 1"
141
+ task(:next => [:next_version] + release_tasks) { release_task }
142
+
143
+ desc "Release the next version of the gem, using a patch increment (0.0.1)"
144
+ task(:patch => [:next_patch_version] + release_tasks) { release_task }
145
+
146
+ desc "Release the next version of the gem, using a minor increment (0.1.0)"
147
+ task(:minor => [:next_minor_version] + release_tasks) { release_task }
148
+
149
+ desc "Release the next version of the gem, using a major increment (1.0.0)"
150
+ task(:major => [:next_major_version] + release_tasks) { release_task }
151
+ end
152
+
153
+ # task(:check_rubyforge) { check_rubyforge_task }
154
+ # task(:rubyforge_release) { rubyforge_release_task }
155
+ task(:gemcutter_release) { gemcutter_release_task }
156
+ task(:github_release => [:commit_modified_files, :tag_version]) { github_release_task }
157
+ task(:tag_version) { tag_version_task }
158
+ task(:commit_modified_files) { commit_modified_files_task }
159
+
160
+ task(:next_version) { next_version_task }
161
+ task(:next_patch_version) { next_version_task(:patch) }
162
+ task(:next_minor_version) { next_version_task(:minor) }
163
+ task(:next_major_version) { next_version_task(:major) }
164
+
165
+ desc "Updates the gem release tasks with the latest version on Github"
166
+ task(:update_tasks) { update_tasks_task }
167
+ end
168
+ end
169
+
170
+ # Updates the files list and test_files list in the gemspec file using the list of files
171
+ # in the repository and the spec/test file pattern.
172
+ def manifest_task
173
+ # Load all the gem's files using "git ls-files"
174
+ repository_files = `#{git} ls-files`.split("\n")
175
+ test_files = Dir[test_pattern] + Dir[spec_pattern]
176
+
177
+ update_gemspec(:files, repository_files)
178
+ update_gemspec(:test_files, repository_files & test_files)
179
+ end
180
+
181
+ # Builds the gem
182
+ def build_task
183
+ sh "gem build -q #{gemspec_file}"
184
+ Dir.mkdir('pkg') unless File.exist?('pkg')
185
+ sh "mv #{gem_package_filename}.gem pkg/#{gem_package_filename}.gem"
186
+ end
187
+
188
+ def newest_version
189
+ `#{git} tag`.split("\n").map { |tag| tag.split('v').last }.compact.map { |v| Gem::Version.new(v) }.max || Gem::Version.new('0.0.0')
190
+ end
191
+
192
+ def next_version(increment = nil)
193
+ next_version = newest_version.segments
194
+ increment_index = case increment
195
+ when :micro then 3
196
+ when :patch then 2
197
+ when :minor then 1
198
+ when :major then 0
199
+ else next_version.length - 1
200
+ end
201
+
202
+ next_version[increment_index] ||= 0
203
+ next_version[increment_index] = next_version[increment_index].succ
204
+ ((increment_index + 1)...next_version.length).each { |i| next_version[i] = 0 }
205
+
206
+ Gem::Version.new(next_version.join('.'))
207
+ end
208
+
209
+ def next_version_task(increment = nil)
210
+ ENV['VERSION'] = next_version(increment).version
211
+ puts "Releasing version #{ENV['VERSION']}..."
212
+ end
213
+
214
+ # Updates the version number in the gemspec file, the VERSION constant in the main
215
+ # include file and the contents of the VERSION file.
216
+ def version_task
217
+ update_gemspec(:version, ENV['VERSION']) if ENV['VERSION']
218
+ update_gemspec(:date, Date.today)
219
+
220
+ update_version_file(gemspec.version)
221
+ update_version_constant(gemspec.version)
222
+ end
223
+
224
+ def check_version_task
225
+ raise "#{ENV['VERSION']} is not a valid version number!" if ENV['VERSION'] && !Gem::Version.correct?(ENV['VERSION'])
226
+ proposed_version = Gem::Version.new((ENV['VERSION'] || gemspec.version).dup)
227
+ raise "This version (#{proposed_version}) is not higher than the highest tagged version (#{newest_version})" if newest_version >= proposed_version
228
+ end
229
+
230
+ # Checks whether the current branch is not diverged from the remote branch
231
+ def check_not_diverged_task
232
+ raise "The current branch is diverged from the remote branch!" if `#{git} rev-list HEAD..#{remote}/#{remote_branch}`.split("\n").any?
233
+ end
234
+
235
+ # Checks whether the repository status ic clean
236
+ def check_clean_status_task
237
+ raise "The current working copy contains modifications" if `#{git} ls-files -m`.split("\n").any?
238
+ end
239
+
240
+ # Checks whether the current branch is correct
241
+ def check_current_branch_task
242
+ raise "Currently not on #{local_branch} branch!" unless `#{git} branch`.split("\n").detect { |b| /^\* / =~ b } == "* #{local_branch}"
243
+ end
244
+
245
+ # Fetches the latest updates from Github
246
+ def fetch_origin_task
247
+ sh git, 'fetch', remote
248
+ end
249
+
250
+ # Commits every file that has been changed by the release task.
251
+ def commit_modified_files_task
252
+ really_modified = `#{git} ls-files -m #{modified_files.entries.join(' ')}`.split("\n")
253
+ if really_modified.any?
254
+ really_modified.each { |file| sh git, 'add', file }
255
+ sh git, 'commit', '-m', "Released #{gemspec.name} gem version #{gemspec.version}."
256
+ end
257
+ end
258
+
259
+ # Adds a tag for the released version
260
+ def tag_version_task
261
+ sh git, 'tag', '-a', "v#{gemspec.version}", '-m', "Released #{gemspec.name} gem version #{gemspec.version}."
262
+ end
263
+
264
+ # Pushes the changes and tag to github
265
+ def github_release_task
266
+ sh git, 'push', '--tags', remote, remote_branch
267
+ end
268
+
269
+ def gemcutter_release_task
270
+ sh "gem", 'push', "pkg/#{gem_package_filename}.gem"
271
+ end
272
+
273
+ # Gem release task.
274
+ # All work is done by the task's dependencies, so just display a release completed message.
275
+ def release_task
276
+ puts
277
+ puts "Release successful."
278
+ end
279
+
280
+ private
281
+
282
+ # Checks whether this project has any RSpec files
283
+ def has_specs?
284
+ FileList[spec_pattern].any?
285
+ end
286
+
287
+ # Checks whether this project has any unit test files
288
+ def has_tests?
289
+ FileList[test_pattern].any?
290
+ end
291
+
292
+ def gem_package_filename
293
+ "#{gemspec.name}-#{gemspec.version}#{platform_suffix}"
294
+ end
295
+
296
+ def platform_suffix
297
+ "-#{gemspec.platform}" unless gemspec.platform == 'ruby'
298
+ end
299
+
300
+ # Loads the gemspec file
301
+ def load_gemspec!
302
+ @gemspec = eval(File.read(@gemspec_file))
303
+ end
304
+
305
+ # Updates the VERSION file with the new version
306
+ def update_version_file(version)
307
+ if File.exists?('VERSION')
308
+ File.open('VERSION', 'w') { |f| f << version.to_s }
309
+ modified_files << 'VERSION'
310
+ end
311
+ end
312
+
313
+ # Updates the VERSION constant in the main include file if it exists
314
+ def update_version_constant(version)
315
+ if main_include && File.exist?(main_include)
316
+ file_contents = File.read(main_include)
317
+ if file_contents.sub!(/^(\s+VERSION\s*=\s*)[^\s].*$/) { $1 + version.to_s.inspect }
318
+ File.open(main_include, 'w') { |f| f << file_contents }
319
+ modified_files << main_include
320
+ end
321
+ end
322
+ end
323
+
324
+ # Updates an attribute of the gemspec file.
325
+ # This function will open the file, and search/replace the attribute using a regular expression.
326
+ def update_gemspec(attribute, new_value, literal = false)
327
+
328
+ unless literal
329
+ new_value = case new_value
330
+ when Array then "%w(#{new_value.join(' ')})"
331
+ when Hash, String then new_value.inspect
332
+ when Date then new_value.strftime('%Y-%m-%d').inspect
333
+ else raise "Cannot write value #{new_value.inspect} to gemspec file!"
334
+ end
335
+ end
336
+
337
+ spec = File.read(gemspec_file)
338
+ regexp = Regexp.new('^(\s+\w+\.' + Regexp.quote(attribute.to_s) + '\s*=\s*)[^\s].*$')
339
+ if spec.sub!(regexp) { $1 + new_value }
340
+ File.open(gemspec_file, 'w') { |f| f << spec }
341
+ modified_files << gemspec_file
342
+
343
+ # Reload the gemspec so the changes are incorporated
344
+ load_gemspec!
345
+
346
+ # Also mark the Gemfile.lock file as changed because of the new version.
347
+ modified_files << 'Gemfile.lock' if File.exist?(File.join(root_dir, 'Gemfile.lock'))
348
+ end
349
+ end
350
+
351
+ # Updates the tasks file using the latest file found on Github
352
+ def update_tasks_task
353
+ require 'net/https'
354
+ require 'uri'
355
+
356
+ uri = URI.parse('https://raw.github.com/wvanbergen/github-gem/master/tasks/github-gem.rake')
357
+ http = Net::HTTP.new(uri.host, uri.port)
358
+ http.use_ssl = true
359
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
360
+ response = http.request(Net::HTTP::Get.new(uri.path))
361
+
362
+ if Net::HTTPSuccess === response
363
+ open(__FILE__, "w") { |file| file.write(response.body) }
364
+ relative_file = File.expand_path(__FILE__).sub(%r[^#{@root_dir}/], '')
365
+ if `#{git} ls-files -m #{relative_file}`.split("\n").any?
366
+ sh git, 'add', relative_file
367
+ sh git, 'commit', '-m', "Updated to latest gem release management tasks."
368
+ else
369
+ puts "Release managament tasks already are at the latest version."
370
+ end
371
+ else
372
+ raise "Download failed with HTTP status #{response.code}!"
373
+ end
374
+ end
375
+ end
376
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mordor
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: java
6
+ authors:
7
+ - Jan-Willem Koelewijn
8
+ - Dirkjan Bussink
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2015-05-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: extlib
16
+ version_requirements: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ requirement: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - '>='
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ prerelease: false
27
+ type: :runtime
28
+ - !ruby/object:Gem::Dependency
29
+ name: json
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ prerelease: false
41
+ type: :runtime
42
+ - !ruby/object:Gem::Dependency
43
+ name: mongo
44
+ version_requirements: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - <
47
+ - !ruby/object:Gem::Version
48
+ version: '2.0'
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - <
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ prerelease: false
55
+ type: :runtime
56
+ - !ruby/object:Gem::Dependency
57
+ name: rack-test
58
+ version_requirements: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - '>='
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ prerelease: false
69
+ type: :development
70
+ - !ruby/object:Gem::Dependency
71
+ name: rake
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ prerelease: false
83
+ type: :development
84
+ - !ruby/object:Gem::Dependency
85
+ name: rspec
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ~>
89
+ - !ruby/object:Gem::Version
90
+ version: '2.0'
91
+ - - <
92
+ - !ruby/object:Gem::Version
93
+ version: '2.99'
94
+ requirement: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ~>
97
+ - !ruby/object:Gem::Version
98
+ version: '2.0'
99
+ - - <
100
+ - !ruby/object:Gem::Version
101
+ version: '2.99'
102
+ prerelease: false
103
+ type: :development
104
+ description: |2
105
+ Small gem to add MongoDB Resources, resources have attributes that translate into document fields. When an attribute is declared, finders for the attribute are added to the Resource automatically
106
+ email:
107
+ - janwillem.koelewijn@nedap.com
108
+ - dirkjan.bussink@nedap.com
109
+ executables: []
110
+ extensions:
111
+ - ext/mkrf_conf.rb
112
+ extra_rdoc_files: []
113
+ files:
114
+ - .gitignore
115
+ - .travis.yml
116
+ - CHANGES.md
117
+ - Gemfile
118
+ - Guardfile
119
+ - LICENSE
120
+ - README.md
121
+ - Rakefile
122
+ - ext/mkrf_conf.rb
123
+ - lib/mordor.rb
124
+ - lib/mordor/collection.rb
125
+ - lib/mordor/config.rb
126
+ - lib/mordor/resource.rb
127
+ - lib/mordor/version.rb
128
+ - mordor.gemspec
129
+ - spec/mordor/collection_spec.rb
130
+ - spec/mordor/connection_spec.rb
131
+ - spec/mordor/resource_spec.rb
132
+ - spec/spec.opts
133
+ - spec/spec_helper.rb
134
+ - tasks/github-gem.rake
135
+ homepage: http://www.nedap.com
136
+ licenses: []
137
+ metadata: {}
138
+ post_install_message:
139
+ rdoc_options: []
140
+ require_paths:
141
+ - lib
142
+ required_ruby_version: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ required_rubygems_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - '>='
150
+ - !ruby/object:Gem::Version
151
+ version: '0'
152
+ requirements: []
153
+ rubyforge_project:
154
+ rubygems_version: 2.4.6
155
+ signing_key:
156
+ specification_version: 4
157
+ summary: mordor
158
+ test_files: []