maml 0.1.1

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 (13) hide show
  1. data/CHANGELOG +0 -0
  2. data/LICENSE +22 -0
  3. data/Manifest +12 -0
  4. data/README.rdoc +5 -0
  5. data/Rakefile +14 -0
  6. data/gem_notes +22 -0
  7. data/init.rb +1 -0
  8. data/lib/maml.rb +159 -0
  9. data/maml +1 -0
  10. data/maml.gemspec +31 -0
  11. data/maml.yml +80 -0
  12. data/maml_spec.txt +56 -0
  13. metadata +74 -0
data/CHANGELOG ADDED
File without changes
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2009 Nick Van Weerdenburg
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/Manifest ADDED
@@ -0,0 +1,12 @@
1
+ CHANGELOG
2
+ echoe_notes
3
+ init.rb
4
+ lib/maml.rb
5
+ LICENSE
6
+ maml
7
+ maml.gemspec
8
+ maml.yml
9
+ maml_spec.txt
10
+ Manifest
11
+ Rakefile
12
+ README.rdoc
data/README.rdoc ADDED
@@ -0,0 +1,5 @@
1
+ = Lazy MAML.rb
2
+
3
+ Please visit http://lazymaml.org for usage details.
4
+
5
+ This file will be updated in a future release to be standalone.
data/Rakefile ADDED
@@ -0,0 +1,14 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'echoe'
4
+
5
+ Echoe.new("maml", "0.1.1") do |p|
6
+ p.description = "Modeling Apathy Markup Language"
7
+ p.url = "http://github.com/vanweerd/maml"
8
+ p.author = "Nick Van Weerdenburg"
9
+ p.email = "nick@gmail.com"
10
+ p.ignore_pattern = ["tmp/*", "script/*"]
11
+ p.development_dependencies = []
12
+ end
13
+
14
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each{|ext| load ext}
data/gem_notes ADDED
@@ -0,0 +1,22 @@
1
+ = MAML Gem
2
+ Gemcutter
3
+
4
+ == Initial gem
5
+
6
+
7
+ == Build new gems
8
+
9
+ # modify version in gemspec
10
+ rake manifest
11
+ rake build_gemspec
12
+
13
+ # upload to gemspect again
14
+
15
+
16
+ == Using as a Plugin
17
+
18
+ add init.rb to include maml.rb
19
+ script/install <github_path>
20
+ # to install as a plugin into a project.
21
+
22
+ # users have option of using gem or plugin.
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'maml'
data/lib/maml.rb ADDED
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env ruby
2
+ # maml.rb - Model and Migration Apathy Markup Language
3
+ # there is only 1 m in maml because I'm lazy.
4
+ # Copyright 2009 Zigleo, Inc.
5
+ # Author: Nick Van Weerdenburg
6
+ # todo: switch all puts to logger
7
+ # todo: remove some excess logging
8
+ # todo: create a gem
9
+ require "yaml"
10
+ require "logger"
11
+
12
+ # I love logging
13
+ $logger=Logger.new('maml.log')
14
+ $logger.level=Logger::INFO
15
+ $logger.info "PLATFORM=#{PLATFORM}"
16
+
17
+ # look user and project configuration file
18
+ user_config_file=ENV['HOME'] + "/.mamlrc"
19
+ project_config_file=".mamlrc"
20
+ $logger.info("user .mamlrc #{File.exist? user_config_file ? 'found' : 'not found'}")
21
+ $logger.info("project .mamlrc #{File.exist? project_config_file ? 'found' : 'not found'}")
22
+
23
+ module CurrentMethodName
24
+ def this_method
25
+ caller[0]=~/`(.*?)'/
26
+ $1
27
+ end
28
+ end
29
+
30
+ include CurrentMethodName
31
+
32
+ # simple test fixture
33
+ def test
34
+ string_arg
35
+ end
36
+
37
+ def extract_arg maml_field
38
+ maml_arg=nil
39
+ field=nil
40
+ type=nil
41
+
42
+ $logger.info this_method + "=> maml_field=#{maml_field}"
43
+ type=case maml_field
44
+ when /^::(\w*)\b/; "text"
45
+ when /^:(\w*)\b/; "string"
46
+ when /^\.\.(\w*)\b/; "float"
47
+ when /^\.(\w*)\b/; "integer"
48
+ when /(\w*_id)\b/; "integer"
49
+ when /^=(\w*)\b/; "boolean"
50
+ when /^%%(\w*)\b/; "datetime"
51
+ when /^%(\w*)\b/; "date"
52
+ when /^@@(\w*)\b/; "timestamp"
53
+ when /^@(\w*)\b/; "time"
54
+ when /^&(\w*)\b/; "binary"
55
+ when /(\w*)\b/; "string"
56
+ else raise "Invalid field type";
57
+ end
58
+ field=Regexp.last_match(1)
59
+ maml_arg= "#{field}:#{type}"
60
+ end
61
+
62
+ # build script/generate model arguments from yaml info
63
+ def build_model_args maml
64
+ model_args={}
65
+ maml.each do |app|
66
+ puts "\napplication:#{app[0]}"
67
+ print "models: "
68
+ app[1].each do |model|
69
+ current_model_args=[]
70
+ model_name=model[0]
71
+ print "#{model_name} "
72
+ model[1].each do |field|
73
+ arg=extract_arg field
74
+ $logger.debug "Extract #{field} ===> #{arg}"
75
+ current_model_args << arg
76
+ end
77
+ model_args[model_name]=current_model_args
78
+ end
79
+ puts
80
+ end
81
+ model_args
82
+ end
83
+
84
+ # todo: add support for multiple files
85
+ # todo: add generate command override options to maml.yml for model specific generations.
86
+ def process_args args
87
+ generate_command,file=nil
88
+
89
+ args.each do |arg|
90
+ if arg[0,1] == "-" then
91
+ generate_command=arg[1,arg.length]
92
+ else
93
+ file=arg
94
+ end
95
+ end
96
+ return generate_command,file
97
+ end
98
+
99
+ # main function
100
+ def main
101
+ puts "\nMAML=Migration Apathy Markup Language"
102
+ puts "======================================"
103
+ puts "Visit http://lazymaml.org for more details"
104
+ puts "Copyright 2009 Zigelo and Nick Van Weerdenburg, Licensed under MIT License\n\n"
105
+ puts "usage: maml.rb <filename> [-generate_command]"
106
+ puts "e.g. maml.rb blog.yml -scaffold"
107
+ puts "OR"
108
+ puts "usage: maml.rb"
109
+ puts "(defaults to 'maml.yml' file and generating the model)\n\n"
110
+ puts "maml supports one file at time"
111
+ puts "generated files are in <rails_root>/maml"
112
+ puts "\nSpecify field type by symbol prefix as follows:"
113
+ puts "no prefix=string ; no prefix and _id suffix = integer ; override _id by adding prefix"
114
+ puts "examples: string, integer_id, .integer, ..float, %date, %%datetime, @time, @@timestamp, :string, ::text, =boolean, &binary"
115
+ puts "------------------------------------------------------------------------\n"
116
+ puts ""
117
+
118
+ generate_command, file = process_args ARGV
119
+ $logger.info "\ngenerate_command=#{generate_command}, file=#{file}"
120
+ @file_provided=true if file
121
+ $logger.info "@file_provided=#{@file_provided}"
122
+
123
+ file="maml.yml" unless file
124
+ generate_command="model" unless generate_command
125
+ puts "generate_command=#{generate_command}, file=#{file}"
126
+
127
+ maml=YAML::load(File.open(file))
128
+
129
+ model_args=build_model_args maml
130
+
131
+ puts
132
+
133
+ # now execute each model
134
+ model_args.each do |model|
135
+ model_name=model[0]
136
+ puts "model_name: #{model_name}"
137
+ model_fields=model[1].join " "
138
+ # File.open("maml.log", "a") { |file| file.write "---- model: #{model_name} (#{model_fields}) ---\n\n" }
139
+ File.open("maml.log", "a") { |file| file.write "---- model: #{model_name} \n\t\t\t#{model_fields.split(" ").join("\n\t\t\t")}\n---\n\n" }
140
+ command="ruby script/generate #{generate_command} #{model_name} #{model_fields} >> maml.log"
141
+ puts "command: #{command}\n\n"
142
+ if @file_provided == true
143
+ puts "=== calling system command ==="
144
+ system command
145
+ end
146
+ end
147
+ puts "\n\nDONE! Look at maml.log for script results, and in app/models, db/migrations, test/fixtures and test/unit for generated code (if you ran maml.rb with a command line arg)"
148
+ unless ARGV[0]
149
+ puts "\n\nUse 'maml.rb maml.yml' (or other file arg) to actuallly run generators. Running with default maml.yml does test run only."
150
+ end
151
+ end
152
+
153
+
154
+ # only run main if run standalone (e.g. not via ruby require)
155
+ if __FILE__ == $0
156
+ # puts "***** #{File.basename($0)} ran from file *****"
157
+
158
+ main
159
+ end
data/maml ADDED
@@ -0,0 +1 @@
1
+ # maml shell script
data/maml.gemspec ADDED
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{maml}
5
+ s.version = "0.1.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Nick Van Weerdenburg"]
9
+ s.date = %q{2009-12-03}
10
+ s.description = %q{Modeling Apathy Markup Language}
11
+ s.email = %q{nick@gmail.com}
12
+ s.extra_rdoc_files = ["CHANGELOG", "lib/maml.rb", "LICENSE", "README.rdoc"]
13
+ s.files = ["CHANGELOG", "gem_notes", "init.rb", "lib/maml.rb", "LICENSE", "maml", "maml.gemspec", "maml.yml", "maml_spec.txt", "Manifest", "Rakefile", "README.rdoc"]
14
+ s.has_rdoc = true
15
+ s.homepage = %q{http://github.com/vanweerd/maml}
16
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Maml", "--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{maml}
19
+ s.rubygems_version = %q{1.3.1}
20
+ s.summary = %q{Modeling Apathy Markup Language}
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 2
25
+
26
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
+ else
28
+ end
29
+ else
30
+ end
31
+ end
data/maml.yml ADDED
@@ -0,0 +1,80 @@
1
+ # maml- migration apathy markup lanaguage
2
+ # integer, float, date, datetime, timestamp, time, text, string, binary, boolean
3
+ #
4
+ # specify field type by symbol prefix as follows
5
+ # default type is string, except where field has _id suffice- then it's integer (override by adding prefix as shown below)
6
+ # .integer, ..float, %date, %%datetime, @time, @@timestamp, :string, ::text, =boolean, &binary
7
+ #
8
+ # level 1: module, level 2: class, level 3: field
9
+
10
+ innerplate:
11
+ Plate:
12
+ - day_id # any _id defaults to integer
13
+ - meal_id 50 true
14
+ - notes
15
+ - status
16
+ - completeness
17
+ - .calories
18
+ - title
19
+
20
+ Plate_Item:
21
+ - plate_id
22
+ - item_id
23
+ - uofm_id
24
+ - .units
25
+ - .calories
26
+ - notes
27
+
28
+ Conversion:
29
+ - item_id
30
+ - base_uofm_id
31
+ - uofm_id
32
+ - ratio
33
+
34
+ UnitOfMeasure:
35
+ - name
36
+ - system
37
+ - .related_measures
38
+ - ..ratio
39
+ - =is_base
40
+
41
+ Meal:
42
+ - name
43
+ - .proportion
44
+ - type %w[Meal Snack]
45
+
46
+ # loaded as my test case...
47
+ # Commitment:
48
+ # - %start_date
49
+ # - %end_date
50
+ # - ..goal_weight
51
+ # - ..start_weight
52
+ # - ..end_weight
53
+ # - ..current_weight
54
+ # - .stable_daily_calories
55
+ # - .goal_daily_calories
56
+ # - .calorie_margin
57
+
58
+ Item:
59
+ - =in_library
60
+ - =is_abstract
61
+ - .level
62
+ - name
63
+ - description
64
+ - category_id
65
+ - .calories
66
+ - uofm_id
67
+ - information_source
68
+ - accuracy %w[Draft Good Certain]
69
+ - category %w[Grains Protein Dairy Fruit Vegetables]
70
+
71
+ Day:
72
+ - %date
73
+ - plan
74
+ - .goal_calories
75
+ - .meals_expected
76
+ - .meals_completed
77
+ - .current_calories
78
+ - =is_complete
79
+ - summary
80
+
data/maml_spec.txt ADDED
@@ -0,0 +1,56 @@
1
+ == Maml
2
+ @ lazymaml.org
3
+
4
+ Maml= migration apathy markup language
5
+
6
+
7
+ == Spec
8
+ -minimal text to define fields
9
+ -strings (plain text) and ids (anything with _id) are defaults
10
+ -: and . id strings and integers explicitly. e.g. :myid_id (a string) or .funnyid (an integer)
11
+ -text: ::text
12
+ -float: ..float
13
+ -boolean: =boolean
14
+ -dates: %date
15
+ -datetime: %%
16
+ -time: @
17
+ -timestamp: @@
18
+ -binary: &
19
+ -alternatively, suffixes can be used (later version):
20
+ mystring:string or mystring:s
21
+ myint:integer/i
22
+ myfloat:float/f
23
+ mydate:date/d
24
+ mytimestamp:time/t
25
+
26
+ -full list of suffixes:
27
+ i,f,d,dt,ts,ti,t,s,bi,b
28
+
29
+ -yaml levls:
30
+ level 1: module or application
31
+ level 2: class
32
+ level 3: field
33
+
34
+
35
+
36
+ == To Do
37
+ release 0.1:
38
+ -DONE! support defaults and funny characters only
39
+ -DONE! log results to maml.log
40
+ -option to run against model or scaffold
41
+ -base on a one-time only run CHANGE: check for model and only run if no model
42
+ -save generated commands to maml subdirectory for later review
43
+
44
+ release 0.2:
45
+ -add full text descriptions
46
+ -multiple runs (only run items after last blank newline..could have generated migration inserted, removing new line?)
47
+ -add migration indicators:
48
+ -parse maml directory for files and find highs mamal number
49
+ -?insert number into ALL mamal files (i like above idea of adding migration to file)
50
+ -add new items afer.
51
+
52
+ release 0.3:
53
+ -add enumerations
54
+ e.g. %w[Meal Snack]
55
+ -add code
56
+ -add model relationships
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: maml
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Nick Van Weerdenburg
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-12-03 00:00:00 -05:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: Modeling Apathy Markup Language
17
+ email: nick@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - CHANGELOG
24
+ - lib/maml.rb
25
+ - LICENSE
26
+ - README.rdoc
27
+ files:
28
+ - CHANGELOG
29
+ - gem_notes
30
+ - init.rb
31
+ - lib/maml.rb
32
+ - LICENSE
33
+ - maml
34
+ - maml.gemspec
35
+ - maml.yml
36
+ - maml_spec.txt
37
+ - Manifest
38
+ - Rakefile
39
+ - README.rdoc
40
+ has_rdoc: true
41
+ homepage: http://github.com/vanweerd/maml
42
+ licenses: []
43
+
44
+ post_install_message:
45
+ rdoc_options:
46
+ - --line-numbers
47
+ - --inline-source
48
+ - --title
49
+ - Maml
50
+ - --main
51
+ - README.rdoc
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "1.2"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project: maml
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 2
72
+ summary: Modeling Apathy Markup Language
73
+ test_files: []
74
+