makena 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +37 -0
  3. data/Gemfile +139 -0
  4. data/Gemfile.lock +469 -0
  5. data/README.rdoc +28 -0
  6. data/Rakefile +6 -0
  7. data/app/assets/images/.keep +0 -0
  8. data/app/assets/javascripts/application.js +16 -0
  9. data/app/assets/stylesheets/application.css +13 -0
  10. data/app/controllers/application_controller.rb +5 -0
  11. data/app/controllers/concerns/.keep +0 -0
  12. data/app/helpers/application_helper.rb +2 -0
  13. data/app/mailers/.keep +0 -0
  14. data/app/models/.keep +0 -0
  15. data/app/models/concerns/.keep +0 -0
  16. data/app/views/layouts/application.html.erb +14 -0
  17. data/bin/bundle +3 -0
  18. data/bin/rails +4 -0
  19. data/bin/rake +4 -0
  20. data/config.ru +4 -0
  21. data/config/application.rb +23 -0
  22. data/config/boot.rb +4 -0
  23. data/config/database.yml +39 -0
  24. data/config/environment.rb +5 -0
  25. data/config/environments/development.rb +29 -0
  26. data/config/environments/production.rb +80 -0
  27. data/config/environments/test.rb +36 -0
  28. data/config/initializers/backtrace_silencers.rb +7 -0
  29. data/config/initializers/filter_parameter_logging.rb +4 -0
  30. data/config/initializers/inflections.rb +16 -0
  31. data/config/initializers/mime_types.rb +5 -0
  32. data/config/initializers/secret_token.rb +12 -0
  33. data/config/initializers/session_store.rb +3 -0
  34. data/config/initializers/wrap_parameters.rb +14 -0
  35. data/config/locales/en.yml +23 -0
  36. data/config/routes.rb +56 -0
  37. data/db/seeds.rb +7 -0
  38. data/lib/assets/.keep +0 -0
  39. data/lib/generators/connection/USAGE +26 -0
  40. data/lib/generators/connection/connection_generator.rb +195 -0
  41. data/lib/generators/connection/templates/extensions/alpha_alphas.rb +17 -0
  42. data/lib/generators/connection/templates/extensions/alpha_betas.rb +17 -0
  43. data/lib/generators/connection/templates/extensions/geocoder.rb +23 -0
  44. data/lib/generators/connection/templates/extensions/image.rb +12 -0
  45. data/lib/generators/copy/USAGE +7 -0
  46. data/lib/generators/copy/copy_generator.rb +41 -0
  47. data/lib/generators/git/USAGE +8 -0
  48. data/lib/generators/git/git_generator.rb +59 -0
  49. data/lib/generators/setup/USAGE +8 -0
  50. data/lib/generators/setup/setup_generator.rb +151 -0
  51. data/lib/generators/success/USAGE +44 -0
  52. data/lib/generators/success/success_generator.rb +18 -0
  53. data/lib/tasks/.keep +0 -0
  54. data/makena/.gitignore +17 -0
  55. data/makena/Gemfile +4 -0
  56. data/makena/LICENSE.txt +22 -0
  57. data/makena/README.md +32 -0
  58. data/makena/Rakefile +1 -0
  59. data/makena/lib/makena.rb +21 -0
  60. data/makena/lib/makena/controllers.rb +218 -0
  61. data/makena/lib/makena/gps.rb +2 -0
  62. data/makena/lib/makena/image.rb +2 -0
  63. data/makena/lib/makena/layouts.rb +41 -0
  64. data/makena/lib/makena/models.rb +2 -0
  65. data/makena/lib/makena/tree.rb +181 -0
  66. data/makena/lib/makena/version.rb +3 -0
  67. data/makena/lib/makena/views.rb +225 -0
  68. data/makena/makena.gemspec +23 -0
  69. data/public/404.html +58 -0
  70. data/public/422.html +58 -0
  71. data/public/500.html +57 -0
  72. data/public/favicon.ico +0 -0
  73. data/public/robots.txt +5 -0
  74. data/vendor/assets/javascripts/.keep +0 -0
  75. data/vendor/assets/stylesheets/.keep +0 -0
  76. metadata +150 -0
@@ -0,0 +1,2 @@
1
+ module Gps
2
+ end
@@ -0,0 +1,2 @@
1
+ module Image
2
+ end
@@ -0,0 +1,41 @@
1
+ module Layouts
2
+
3
+ # Broker layout form partials to obj forms
4
+ def layouts_form(*args)
5
+ f = (args.shift)
6
+ obj = (args.shift)
7
+ name_of_partial = (args.shift).to_s
8
+ name_of_attribute = (args.shift||name_of_partial).to_s
9
+ header = (args.shift||name_of_attribute).to_s.humanize.upcase
10
+ render "layouts/form/#{name_of_partial}", f: f, obj: obj, sender: name_of_attribute, header: header, args: args
11
+ end
12
+
13
+ # Broker layout form partials to obj forms
14
+ def layouts_forms(*args)
15
+ f = (args.shift)
16
+ obj = (args.shift)
17
+ name_of_partial = (args.shift).to_s
18
+ senders = (args.shift||name_of_partial)
19
+ headers = (args.shift||senders)
20
+ render "layouts/form/#{name_of_partial}", f: f, obj: obj, senders: senders, headers: headers, args: args
21
+ end
22
+
23
+ # Broker layout view partials to obj views
24
+ def layouts_show(*args)
25
+ obj = args.shift
26
+ if args.present?
27
+ name_of_partial = (args.shift).to_s
28
+ name_of_attribute = (args.shift||name_of_partial).to_s
29
+ header = args.shift
30
+ render "layouts/show/#{name_of_partial}", obj: obj, sender: name_of_attribute, header: header
31
+ else
32
+ render "layouts/show", obj: obj
33
+ end
34
+ end
35
+
36
+ # Broker layout view partials to obj views
37
+ def layouts_show_links(*args)
38
+ render "layouts/show/links", obj: args.shift, sender: args.shift, args: args
39
+ end
40
+
41
+ end
@@ -0,0 +1,2 @@
1
+ module Models
2
+ end
@@ -0,0 +1,181 @@
1
+ module Tree
2
+
3
+ # hash of application objects and infromation about objects
4
+ def makena(obj=nil, abstract=nil)
5
+ sender = makenaize_sender(obj)
6
+ if obj.present? and abstract.present?
7
+ # if obj and abstract
8
+ if makena_hsh[sender]
9
+ # if obj has a key, makena_hsh[sender][abstract]
10
+ abstract = abstract.to_s
11
+ case abstract.to_s
12
+ when "name"
13
+ headline( obj.send(makena_hsh[sender]["sender"]).to_s ).to_s
14
+ when "sender"
15
+ makena_hsh[sender]["sender"]
16
+ when "header"
17
+ makena_hsh[sender]["header"]
18
+ when "options"
19
+ makena_hsh[sender]["options"]
20
+ when "senders"
21
+ makena_hsh[sender]["senders"]
22
+ when "assocs"
23
+ makena_hsh[sender]["assocs"]
24
+ when "specials"
25
+ makena_hsh[sender]["specials"]
26
+ end
27
+ else
28
+ return nil
29
+ end
30
+ elsif obj.present?
31
+ if makena_hsh[sender]
32
+ return makena_hsh[sender]
33
+ else
34
+ return nil
35
+ end
36
+ else
37
+ return makena_hsh
38
+ end
39
+ end
40
+
41
+ # Actual makena hash to draw from
42
+ #def makena_hsh
43
+ # unless (@makena_hsh||=nil)
44
+ # @makena_hsh={}
45
+ # options = %w(public private new copy add remove destroy)
46
+ # @makena_hsh = @makena_hsh.merge( makena_hsh_obj(:user, nil, :name, options ) )
47
+ # specials = [:name_by_content_by_address]
48
+ # @makena_hsh = @makena_hsh.merge( makena_hsh_obj(:spot, nil, :name_with_distance, options, specials ) )
49
+ # specials = [:name_by_content]
50
+ # @makena_hsh = @makena_hsh.merge( makena_hsh_obj(:note, nil, :name, options, specials ) )
51
+ # end
52
+ # @makena_hsh
53
+ #end
54
+ # hsh = hsh.merge( makena_hsh_obj(:user, "User", :name, [], [:alpha, :beta, :ceta] ) )
55
+ # hsh = hsh.merge( makena_hsh_obj(:alpha, nil, :name, [], [], [:name_from_content]) )
56
+ # hsh = hsh.merge( makena_hsh_obj(:alpha_parent, nil, :name, [], [], [:name_from_content]) )
57
+ # hsh = hsh.merge( makena_hsh_obj(:alpha_child, nil, :name, [], [], [:name_from_content]) )
58
+ # hsh = hsh.merge( makena_hsh_obj(:beta, nil, :name, [], []) )
59
+ # hsh = hsh.merge( makena_hsh_obj(:ceta, nil, :name, [], []) )
60
+
61
+ # Find associates for each of obj senders and load into hash and return
62
+ def makena_hsh_load_assocs(hsh)
63
+ for key in hsh.keys
64
+ for sender in hsh[key]["senders"]
65
+ sender_sym = sender.singularize.to_sym
66
+ key_sender = key.to_s.pluralize
67
+ unless key==:user or hsh[sender_sym]["senders"].include?(key_sender) or hsh[sender_sym]["assocs"].include?(key_sender)
68
+ hsh[sender_sym]["assocs"] << key_sender
69
+ end
70
+ end
71
+ end
72
+ hsh
73
+ end
74
+
75
+ # Get all associates of obj and pass back as array of strings
76
+ def makena_assocs(obj)
77
+ binding.pry
78
+ #Model_1.reflect_on_association(:images)
79
+ #associations = Model_1.reflect_on_all_associations(:has_many)
80
+ #associations.any? { |a| a.name == :images }
81
+ # TODO makenabots http://stackoverflow.com/questions/8281458/is-there-any-way-to-check-that-has-many-association-exists-in-rails-3-1
82
+ end
83
+
84
+ # Create makena hash object
85
+ def makena_hsh_obj(objsym, header=nil, sender="id", options=[], specials=[])
86
+ hsh||={}
87
+ hsh[objsym]={}
88
+ hsh[objsym]["header"]=(header||objsym.to_s.humanize.titleize).to_s
89
+ hsh[objsym]["sender"]=sender.to_s
90
+ hsh[objsym]["options"]=options.map{|a| a.to_s}
91
+ hsh[objsym]["specials"]=specials.map{|a| a.to_sym}
92
+ hsh
93
+ end
94
+
95
+ # Convert name into makena ready name
96
+ def makenaize_name(obj, name)
97
+ %w(parents children).include?(name) ? "#{obj.class.to_s.underscore}_#{name.singularize}".to_sym : name.to_s.singularize.to_sym
98
+ end
99
+
100
+ # Convert obj into makena ready sender
101
+ def makenaize_sender(obj)
102
+ if obj.present?
103
+ if obj.class.to_s=="Symbol"
104
+ obj.to_s.singularize.to_sym
105
+ else
106
+ obj.class.to_s.underscore.singularize.to_sym
107
+ end
108
+ else
109
+ nil
110
+ end
111
+ end
112
+
113
+ #makena_classes
114
+ #=> [User, Foo, Foobar]
115
+ def makena_classes
116
+ unless @makena_classes
117
+ Rails.application.eager_load!
118
+ pass = ActiveRecord::Base.descendants
119
+ pass.shift
120
+ @makena_classes = pass
121
+ end
122
+ @makena_classes
123
+ end
124
+
125
+ #makena_classes_u
126
+ #=> ["user_foos", "foo_foos", "foo_foobars", "foobar_foobars"]
127
+ def makena_classes_connecting_u
128
+ unless @makena_classes_connecting_u
129
+ passdoubles=[]
130
+ for b in makena_classes
131
+ passdoubles += makena_classes.map{|a| a.to_s.underscore+"_"+b.to_s.underscore.pluralize}
132
+ end
133
+ passsingles = makena_classes.map{|a| a.to_s.underscore.pluralize}
134
+ @makena_classes_connecting_u = passsingles & passdoubles
135
+ end
136
+ @makena_classes_connecting_u
137
+ end
138
+
139
+ #makena_classes_u
140
+ #=> ["user", "foo", "foobar"]
141
+ def makena_classes_u
142
+ unless @makena_classes_u
143
+ passdoubles=[]
144
+ for b in makena_classes
145
+ passdoubles += makena_classes.map{|a| a.to_s.underscore+"_"+b.to_s.underscore.pluralize}
146
+ end
147
+ passsingles = makena_classes.map{|a| a.to_s.underscore.pluralize}
148
+ @makena_classes_u = passsingles - passdoubles
149
+ end
150
+ @makena_classes_u
151
+ end
152
+
153
+ #makena_classes_u_p_sym
154
+ #=> [:users, :foos, :foobars]
155
+ def makena_classes_u_p_sym
156
+ unless @makena_classes_u_p_sym
157
+ @makena_classes_u_p_sym = makena_classes_u.map{|a| a.underscore.pluralize.to_sym}
158
+ end
159
+ @makena_classes_u_p_sym
160
+ end
161
+
162
+ #makena_classes_u_p_sym_assocs_s_p(@user)
163
+ # => ["spots", "friendships"]
164
+ def makena_classes_u_p_sym_assocs_s_p(obj)
165
+ makena_classes_u_p_sym.map{|a| obj.class.reflect_on_association(a).present? ? a.to_s : nil}.uniq-[nil]
166
+ end
167
+
168
+ #makena_senders(@user)
169
+ # => ["spots", "friendships"]
170
+ def makena_senders(obj)
171
+ makena_classes_u_p_sym_assocs_s_p(obj)
172
+ end
173
+
174
+ # Generate list of possible foreign ids, example "user_id"
175
+ def makena_params
176
+ Rails.application.eager_load!
177
+ dants = ActiveRecord::Base.descendants
178
+ return dants.map{|a| a.to_s}.map{|a| [a.underscore+"_parent_id", a.underscore+"_id", a.underscore+"_child_id"]}.flatten
179
+ end
180
+
181
+ end
@@ -0,0 +1,3 @@
1
+ module Makena
2
+ VERSION = "0.0.5"
3
+ end
@@ -0,0 +1,225 @@
1
+ module Views
2
+
3
+ # Capitalize first letter, leave the rest as is
4
+ def headline(string=nil)
5
+ if string.present?
6
+ pass = string.to_s.slice(0,1).capitalize + string.to_s.slice(1..-1)
7
+ else
8
+ pass = ""
9
+ end
10
+ end
11
+
12
+ # Object is looping
13
+ def is_looping(obj=nil)
14
+ if (obj||=nil).present?
15
+ @looping_objs||={}
16
+ @looping_objs[obj.class.to_s]||=[]
17
+ if @looping_objs[obj.class.to_s].include?(obj.id)
18
+ return true
19
+ else
20
+ @looping_objs[obj.class.to_s] << obj.id
21
+ return false
22
+ end
23
+ else
24
+ false
25
+ end
26
+ end
27
+
28
+ # content = "Welcome to http://www.mine.com/. Email me at me@mine.com."
29
+ # auto_link content, html: {target: '_blank'} do |text|; truncate(text, length: 15); end
30
+ # markdown content
31
+ #=> "Welcome to <a href='http://www.mine.com/'>http://www.mine.com/</a>. Email me..."
32
+ # Starring:
33
+ # Redcarpet
34
+ # Nokogiri
35
+ # Albino
36
+ # RailsAutolink
37
+ # TODO - impliment - RailsAutolink
38
+ def markdown(pass_content="", pass_options={})
39
+ pass_content = auto_link( pass_content, html: {target: '_blank'} )
40
+ pass_options.reverse_merge!(
41
+ :hard_wrap => true,
42
+ :filter_html => false,
43
+ :no_intraemphasis => true,
44
+ :fenced_code => true,
45
+ :gh_blockcode => true
46
+ )
47
+ pass_options.reject! { |k, v| !v }
48
+ pass_content = Redcarpet.new(pass_content, *pass_options.keys).to_html
49
+ pass_doc = Nokogiri::HTML(pass_content)
50
+ pass_doc.search("//pre[@lang]").each do |pass_pre|
51
+ pass_pre.replace Albino.colorize(pass_pre.text.rstrip, pass_pre[:lang])
52
+ end
53
+ pass_doc.to_s.html_safe
54
+ end
55
+
56
+ # turn any string into a complete underscore
57
+ def underscore(pass="")
58
+ pass.to_s.strip.humanize.downcase.gsub(/[^a-z0-9-]/,"_")
59
+ end
60
+
61
+ # Object is not looping
62
+ def not_looping(obj)
63
+ !is_looping(obj)
64
+ end
65
+
66
+ # div collapsible generator
67
+ def div_collapse(hsh={}, obj=nil)
68
+ result=""
69
+ if hsh.class.to_s=="Hash"
70
+ for key in hsh.keys
71
+ pass_key = key.to_s.split("__")
72
+ key = long_key.shift
73
+ options = long_key.shift.to_s.split("_")
74
+ sender = long_key.shift
75
+ content = content_tag(:h3, key.to_s.humanize )
76
+ content << div_collapse(obj, hsh[key])
77
+ content = content_tag(:div, content, data: {role: "collapsible", collapsed: "true"})
78
+ content = content_tag(:div, content, data: {role: "collapsible-set"})
79
+ result << content
80
+ end
81
+ elsif key.to_s=="pass"
82
+ result << content_tag(:div, raw( key ) )
83
+ end
84
+ raw result
85
+ end
86
+
87
+ def div_collapse_content(obj, key, hsh, options="[]", sender="name")
88
+ content = ""
89
+ if obj.class.method_defined?(key.to_s)
90
+ objs = obj.send(key.to_s)
91
+ objs = objs.class.to_s=="Array" ? objs : [objs]
92
+ content << render( "layouts/collapsible/objs", obj: obj, objs: objs, header: key.to_s.humanize, sender: sender, options: options)
93
+ end
94
+ raw content
95
+ end
96
+
97
+ # jquery mobile link with prefetch
98
+ def link_to_prefetch(*args)
99
+ link_to_builder(%w(prefetch)+args)
100
+ end
101
+
102
+ # jquery mobile link that feels like a button, pass obj, or name, obj/path, args
103
+ def link_to_button(*args)
104
+ unless ["String","NilClass"].include?(args.first.class.to_s)
105
+ obj = args.shift
106
+ pass_name = makena(obj, :name)
107
+ pass_obj_or_path = obj
108
+ pass_extra = args.shift
109
+ args = [pass_name, pass_obj_or_path, pass_extra]
110
+ end
111
+ link_to_builder(%w(button)+args)
112
+ end
113
+
114
+ # jquery mobile link inline for multiple buttons per line
115
+ def link_to_inline(*args)
116
+ link_to_builder(%w(inline)+args)
117
+ end
118
+
119
+ # jquery mobile link inline for multiple buttons per line
120
+ def link_to_inline_destroy(pass_obj_or_path)
121
+ pass_class = pass_obj_or_path.new_record? ? "ui-disabled" : ""
122
+ link_to "DESTROY", pass_obj_or_path, method: :delete, data: {role: "button", inline: "true", confirm: "Are you sure?"}, class: pass_class
123
+ end
124
+
125
+ # links in button form and disables if at that url
126
+ def link_to_builder(*args)
127
+ args.flatten!
128
+ pass_type = args.shift.to_s
129
+ pass_name = args.shift.to_s
130
+ pass_obj_or_path = args.shift
131
+ pass_extra = args.shift
132
+ if pass_obj_or_path.class.to_s!="String" and
133
+ pass_obj_or_path.attribute_names.include?("image")
134
+ if pass_obj_or_path.image? and
135
+ pass_obj_or_path.image_url(:small)
136
+ pass_image = (Rails.env.test? ? "_image_showing" : "")+
137
+ "#{image_tag(pass_obj_or_path.image_url(:small).to_s)}"
138
+ else
139
+ pass_image = image_tag("orb.gif")
140
+ end
141
+ else
142
+ pass_image = ""
143
+ end
144
+ pass_style="text-overflow:normal;overflow:visible;white-space:pre-wrap;"
145
+ if current_page?(pass_obj_or_path)
146
+ pass_class = 'ui-disabled'
147
+ else
148
+ pass_class = ''
149
+ end
150
+ case pass_type
151
+ when "inline"
152
+ pass_name = pass_image+" "+pass_name
153
+ if current_page?(pass_obj_or_path)
154
+ pass_link_data = {data: {role: "button", inline: "true"}, class: "ui-disabled"}
155
+ else
156
+ pass_link_data = {data: {role: "button", inline: "true"}}
157
+ end
158
+ raw(link_to( raw(pass_name), pass_obj_or_path, pass_link_data ))
159
+ when "button"
160
+ pass_name += pass_image
161
+ if current_page?(pass_obj_or_path)
162
+ pass_link_data = {data: \
163
+ {role: "button", inline: "false", prefetch: true},
164
+ style: pass_style,
165
+ class: "ui-disabled"}
166
+ else
167
+ pass_link_data = {data: {role: "button", inline: "false", prefetch: true}, style: pass_style}
168
+ end
169
+ pass_ul_data = {data: {role: "listview", inset: "true"} }
170
+ content_tag(:ul, content_tag(:li,
171
+ raw(link_to( raw(pass_name), pass_obj_or_path, pass_link_data ) ) ), pass_ul_data)
172
+ when "prefetch"
173
+ raw("<ul data-role='listview' data-inset='true' \><li><a href='#{pass_obj_or_path}'
174
+ data-prefetch
175
+ data-role='button'
176
+ style='#{pass_style}'
177
+ class='#{pass_class}' />#{raw(pass_name)}#{raw(pass_image)}</a></li></ul>")
178
+ end
179
+ end
180
+
181
+ # links in button form and disables if at that url
182
+ def link_to_with_image(*args)
183
+ args.flatten!
184
+ pass_image = (args.shift.to_s or image_tag("white.png"))
185
+ pass_name = args.shift.to_s+pass_image.to_s
186
+ pass_obj_or_path = args.shift
187
+ pass_extra = args.shift
188
+ pass_style="text-overflow:normal;overflow:visible;white-space:pre-wrap;"
189
+ if current_page?(pass_obj_or_path)
190
+ pass_class = 'ui-disabled'
191
+ else
192
+ pass_class = ''
193
+ end
194
+ if current_page?(pass_obj_or_path)
195
+ pass_link_data = {data: {role: "button", prefetch: true}, style: pass_style, class: "ui-disabled"}
196
+ else
197
+ pass_link_data = {data: {role: "button", inline: "false", prefetch: true}, style: pass_style}
198
+ end
199
+ pass_ul_data = {data: {role: "listview", inset: "true"} }
200
+ content_tag(:ul, content_tag(:li,
201
+ raw(link_to( raw(pass_name), pass_obj_or_path, pass_link_data ) ) ), pass_ul_data)
202
+ end
203
+
204
+ def link_to_back
205
+ hsh_b = {data: {role: "button", rel: "back", icon: "back", direction: "reverse", prefetch: true} }
206
+ link_to "BACK", "#", hsh_b
207
+ end
208
+
209
+ def link_to_mapped_user(user=@user)
210
+ passpath = ""
211
+ if params[:lat_a].present?
212
+ passpath << "/user/home/#{params[:lat_a].to_s}.#{params[:lat_b].to_s}"
213
+ passpath << "/#{params[:long_a].to_s}.#{params[:long_b].to_s}"
214
+ else
215
+ passpath << "/user/home/#{user.latitude.to_s}/#{user.longitude.to_s}"
216
+ end
217
+ if current_page?(passpath)
218
+ link_to user.name, passpath, data:{role:"button",icon:"heart"}, class:"ui-disabled"
219
+ else
220
+ link_to user.name, passpath, data:{role:"button",icon:"heart"}
221
+ end
222
+ end
223
+
224
+ end
225
+