makena 0.0.5

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 (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
+