mongify-mongoid 1.0.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.
- data/.gitignore +20 -0
- data/.yardopts +2 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +4 -0
- data/Guardfile +19 -0
- data/LICENSE.txt +22 -0
- data/README.md +57 -0
- data/Rakefile +17 -0
- data/bin/mongify_mongoid +18 -0
- data/lib/mongify/mongoid.rb +16 -0
- data/lib/mongify/mongoid/cli.rb +9 -0
- data/lib/mongify/mongoid/cli/application.rb +60 -0
- data/lib/mongify/mongoid/cli/command/help.rb +22 -0
- data/lib/mongify/mongoid/cli/command/version.rb +21 -0
- data/lib/mongify/mongoid/cli/command/worker.rb +51 -0
- data/lib/mongify/mongoid/cli/options.rb +87 -0
- data/lib/mongify/mongoid/exceptions.rb +30 -0
- data/lib/mongify/mongoid/generator.rb +117 -0
- data/lib/mongify/mongoid/model.rb +137 -0
- data/lib/mongify/mongoid/model/field.rb +79 -0
- data/lib/mongify/mongoid/model/relation.rb +60 -0
- data/lib/mongify/mongoid/printer.rb +58 -0
- data/lib/mongify/mongoid/templates/mongoid.rb.erb +33 -0
- data/lib/mongify/mongoid/ui.rb +64 -0
- data/lib/mongify/mongoid/version.rb +6 -0
- data/mongify-mongoid.gemspec +34 -0
- data/spec/files/translation.rb +44 -0
- data/spec/lib/mongify/mongoid/cli/command/worker_spec.rb +45 -0
- data/spec/lib/mongify/mongoid/generator_spec.rb +123 -0
- data/spec/lib/mongify/mongoid/model/field_spec.rb +31 -0
- data/spec/lib/mongify/mongoid/model/relation_spec.rb +42 -0
- data/spec/lib/mongify/mongoid/model_spec.rb +146 -0
- data/spec/lib/mongify/mongoid/printer_spec.rb +57 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/custom_matchers.rb +47 -0
- metadata +214 -0
data/.gitignore
ADDED
data/.yardopts
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :rspec do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { "spec" }
|
8
|
+
|
9
|
+
# Rails example
|
10
|
+
watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
11
|
+
watch(%r{^app/(.*)(\.erb|\.haml|\.slim)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
|
12
|
+
watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
|
13
|
+
|
14
|
+
|
15
|
+
# Turnip features and steps
|
16
|
+
watch(%r{^spec/acceptance/(.+)\.feature$})
|
17
|
+
watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
|
18
|
+
end
|
19
|
+
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Andrew Kalek
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
# Mongify::Mongoid
|
2
|
+
|
3
|
+
Mongoify-Mongoid generates valid Mongoid Models from the Mongify translation file.
|
4
|
+
|
5
|
+
Learn more about [Mongify](http://mongify.com/)
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
gem install mongify-mongoid
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
mongify_mongoid translation_file.rb [--output ~/output_dir]
|
14
|
+
|
15
|
+
*default output dir is the current_directory/models*
|
16
|
+
|
17
|
+
## Contributing
|
18
|
+
|
19
|
+
1. Fork it
|
20
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
21
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
22
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
23
|
+
5. Create new Pull Request
|
24
|
+
|
25
|
+
## About
|
26
|
+
|
27
|
+
This gem was made by:
|
28
|
+
|
29
|
+
Andrew Kalek from [Anlek Consulting](http://anlek.com)
|
30
|
+
|
31
|
+
> - Twitter: [@anlek](http://www.twitter.com/anlek)
|
32
|
+
> - Email: andrew.kalek@anlek[dot]com
|
33
|
+
|
34
|
+
Afolabi Badmos
|
35
|
+
|
36
|
+
## License
|
37
|
+
|
38
|
+
Copyright (c) 2013 Andrew Kalek, Anlek Consulting
|
39
|
+
|
40
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
41
|
+
a copy of this software and associated documentation files (the
|
42
|
+
"Software"), to deal in the Software without restriction, including
|
43
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
44
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
45
|
+
permit persons to whom the Software is furnished to do so, subject to
|
46
|
+
the following conditions:
|
47
|
+
|
48
|
+
The above copyright notice and this permission notice shall be
|
49
|
+
included in all copies or substantial portions of the Software.
|
50
|
+
|
51
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
52
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
53
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
54
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
55
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
56
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
57
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler::GemHelper.install_tasks
|
3
|
+
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
desc "Run rspec test"
|
7
|
+
task :test do
|
8
|
+
Rake::Task["test:rspec"].invoke
|
9
|
+
end
|
10
|
+
|
11
|
+
namespace :test do
|
12
|
+
RSpec::Core::RakeTask.new(:rspec) do |t|
|
13
|
+
t.rspec_opts = "--format d -c"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
task :default => ['test']
|
data/bin/mongify_mongoid
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# mongify_mongoid helps output Mongoid
|
4
|
+
# Visit http://github.com/anlek/mongify_mongoid for more information.
|
5
|
+
#
|
6
|
+
# Author: Andrew Kalek
|
7
|
+
#
|
8
|
+
|
9
|
+
$:.unshift File.join(File.dirname(File.dirname(File.expand_path(__FILE__))), 'lib')
|
10
|
+
|
11
|
+
require 'mongify/mongoid/cli'
|
12
|
+
|
13
|
+
begin
|
14
|
+
exit Mongify::Mongoid::CLI::Application.new(ARGV).execute!
|
15
|
+
rescue Mongify::Mongoid::Error => error
|
16
|
+
$stderr.puts "Error: #{error}"
|
17
|
+
exit MongifyMongoid::CLI::Application.execution_error_status
|
18
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require "mongify"
|
2
|
+
require "mongify/mongoid/exceptions"
|
3
|
+
require "mongify/mongoid/model"
|
4
|
+
require "mongify/mongoid/generator"
|
5
|
+
require "mongify/mongoid/printer"
|
6
|
+
require "mongify/mongoid/version"
|
7
|
+
require 'mongify/mongoid/ui'
|
8
|
+
|
9
|
+
|
10
|
+
# Mongify
|
11
|
+
module Mongify
|
12
|
+
# Mongoid
|
13
|
+
module Mongoid
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Mongify
|
2
|
+
module Mongoid
|
3
|
+
# The Command Line Interface module
|
4
|
+
module CLI
|
5
|
+
#
|
6
|
+
# Represents an instance of a Mongify Mongoid application.
|
7
|
+
# This is the entry point for all invocations of Mongify from the
|
8
|
+
# command line.
|
9
|
+
#
|
10
|
+
class Application
|
11
|
+
|
12
|
+
# Successful execution exit code
|
13
|
+
STATUS_SUCCESS = 0
|
14
|
+
# Failed execution exit code
|
15
|
+
STATUS_ERROR = 1
|
16
|
+
|
17
|
+
def initialize(arguments=[], stdin=$stdin, stdout=$stdout)
|
18
|
+
arguments = ['-h'] if arguments.empty?
|
19
|
+
@options = Options.new(arguments)
|
20
|
+
@status = STATUS_SUCCESS
|
21
|
+
end
|
22
|
+
|
23
|
+
# Runs the application
|
24
|
+
def execute!
|
25
|
+
begin
|
26
|
+
cmd = @options.parse
|
27
|
+
return cmd.execute(self)
|
28
|
+
rescue Error => error
|
29
|
+
$stderr.puts "ERROR: \n#{error}"
|
30
|
+
$stderr.puts "\nIf this is an issue that you can not figure out, feel free to submit an issue report at:"
|
31
|
+
$stderr.puts "https://github.com/anlek/mongify-mongoid/issues"
|
32
|
+
report_error
|
33
|
+
rescue Exception => error
|
34
|
+
$stderr.puts "UNKNOWN ERROR: \n#{error}"
|
35
|
+
$stderr.puts "\nWe are not sure what happen but feel free to submit this issue report at:"
|
36
|
+
$stderr.puts "https://github.com/anlek/mongify-mongoid/issues"
|
37
|
+
$stderr.puts ""
|
38
|
+
report_error
|
39
|
+
raise error
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Sends output to the UI
|
44
|
+
def output(message)
|
45
|
+
UI.puts(message)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Sets status code as successful
|
49
|
+
def report_success
|
50
|
+
@status = STATUS_SUCCESS
|
51
|
+
end
|
52
|
+
|
53
|
+
# Sets status code as failure (or error)
|
54
|
+
def report_error
|
55
|
+
@status = STATUS_ERROR
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Mongify
|
2
|
+
module Mongoid
|
3
|
+
module CLI
|
4
|
+
# Command
|
5
|
+
module Command
|
6
|
+
#
|
7
|
+
# A command to display usage information for this application.
|
8
|
+
#
|
9
|
+
class Help
|
10
|
+
def initialize(parser)
|
11
|
+
@parser = parser
|
12
|
+
end
|
13
|
+
#Executes the help command
|
14
|
+
def execute(view)
|
15
|
+
view.output(@parser.to_s)
|
16
|
+
view.report_success
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Mongify
|
2
|
+
module Mongoid
|
3
|
+
module CLI
|
4
|
+
module Command
|
5
|
+
#
|
6
|
+
# A command to report the application's current version number.
|
7
|
+
#
|
8
|
+
class Version
|
9
|
+
def initialize(progname)
|
10
|
+
@progname = progname
|
11
|
+
end
|
12
|
+
#Executes version command
|
13
|
+
def execute(view)
|
14
|
+
view.output("#{@progname} #{Mongify::Mongoid::VERSION}\n")
|
15
|
+
view.report_success
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Mongify
|
2
|
+
module Mongoid
|
3
|
+
module CLI
|
4
|
+
module Command
|
5
|
+
#
|
6
|
+
# A command to run the different commands in the application (related to Mongifying).
|
7
|
+
#
|
8
|
+
class Worker
|
9
|
+
attr_accessor :view
|
10
|
+
|
11
|
+
|
12
|
+
def initialize(translation_file=nil, output_dir=nil, options={})
|
13
|
+
@translation_file = translation_file
|
14
|
+
@output_dir = output_dir
|
15
|
+
@options = options
|
16
|
+
end
|
17
|
+
|
18
|
+
#Executes the worked based on a given command
|
19
|
+
def execute(view)
|
20
|
+
self.view = view
|
21
|
+
|
22
|
+
raise TranslationFileNotFound, "Translation file is required" unless @translation_file
|
23
|
+
raise TranslationFileNotFound, "Unable to find Translation File #{@translation_file}" unless File.exists?(@translation_file)
|
24
|
+
|
25
|
+
raise OverwritingFolder, "Output folder (#{output_folder}) already exists, for your safety we can't continue, pass -f force an overwrite" if File.exists?(output_folder) && !@options[:overwrite]
|
26
|
+
|
27
|
+
unless File.directory?(output_folder)
|
28
|
+
FileUtils.mkdir_p(output_folder)
|
29
|
+
end
|
30
|
+
|
31
|
+
generator = Mongify::Mongoid::Generator.new(@translation_file, output_folder)
|
32
|
+
generator.process
|
33
|
+
view.output("\nSuccessfully processed #{generator.models.count} models")
|
34
|
+
view.output("You can find your files in #{output_folder}")
|
35
|
+
view.output("\nThank you for using Mongify and Mongify-Mongoid!")
|
36
|
+
view.output("If you have any issues, please feel free to report them at:\nhttps://github.com/anlek/mongify-mongoid/issues")
|
37
|
+
view.output("")
|
38
|
+
view.report_success
|
39
|
+
end
|
40
|
+
|
41
|
+
#Folder location of the output
|
42
|
+
def output_folder
|
43
|
+
@output_dir = File.join(Dir.pwd, "models") if @output_dir.nil?
|
44
|
+
@output_dir
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
module Mongify
|
3
|
+
module Mongoid
|
4
|
+
module CLI
|
5
|
+
#
|
6
|
+
# Used to parse the options for an application
|
7
|
+
#
|
8
|
+
class Options
|
9
|
+
def initialize(argv)
|
10
|
+
@parsed = false
|
11
|
+
@argv = argv
|
12
|
+
@parser = OptionParser.new
|
13
|
+
@options = {}
|
14
|
+
set_options
|
15
|
+
parse_options
|
16
|
+
end
|
17
|
+
|
18
|
+
# Banner for help output
|
19
|
+
def banner
|
20
|
+
progname = @parser.program_name
|
21
|
+
return <<EOB
|
22
|
+
Usage: #{progname} translation_file.rb [--output ~/output_dir]
|
23
|
+
|
24
|
+
Examples:
|
25
|
+
#{progname} database_translation.rb
|
26
|
+
#{progname} database_translation.rb -O ~/output_dir
|
27
|
+
|
28
|
+
See http://github.com/anlek/mongify for more details
|
29
|
+
|
30
|
+
EOB
|
31
|
+
end
|
32
|
+
|
33
|
+
# Sets the options for CLI
|
34
|
+
# Also used for help output
|
35
|
+
def set_options
|
36
|
+
@parser.banner = banner
|
37
|
+
@parser.separator "Common options:"
|
38
|
+
@parser.on("-h", "--help", "Show this message") do
|
39
|
+
@command_class = Command::Help
|
40
|
+
end
|
41
|
+
@parser.on("-v", "--version", "Show version") do
|
42
|
+
@command_class = Command::Version
|
43
|
+
end
|
44
|
+
@parser.on("-O", "--output DIR", "Output Directory") do |dir|
|
45
|
+
@output_dir = dir
|
46
|
+
end
|
47
|
+
@parser.on("-F", "--force", "Force overwrite of Output Directory") do
|
48
|
+
@options[:overwrite] = true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Parses CLI passed attributes and figures out what command user is trying to run
|
53
|
+
def parse
|
54
|
+
case
|
55
|
+
when @command_class == Command::Help
|
56
|
+
Command::Help.new(@parser)
|
57
|
+
when @command_class == Command::Version
|
58
|
+
Command::Version.new(@parser.program_name)
|
59
|
+
else
|
60
|
+
Command::Worker.new(translation_file, output_dir, @options)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
#######
|
65
|
+
private
|
66
|
+
#######
|
67
|
+
|
68
|
+
# Returns the translation_file or nil
|
69
|
+
def translation_file(argv=@argv)
|
70
|
+
argv[0] if argv.length >= 1
|
71
|
+
end
|
72
|
+
|
73
|
+
# Returns the config file
|
74
|
+
def output_dir(argv=@argv)
|
75
|
+
@output_dir if @output_dir && File.exist?(@output_dir) && File.directory?(@output_dir)
|
76
|
+
end
|
77
|
+
|
78
|
+
# option parser, ensuring parse_options is only called once
|
79
|
+
def parse_options
|
80
|
+
@parser.parse!(@argv)
|
81
|
+
rescue OptionParser::InvalidOption => er
|
82
|
+
raise Mongify::InvalidOption, er.message, er.backtrace
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|