mongoid_scribe 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e31f315631c75d5964de59a4e16d63a205f0e435
4
- data.tar.gz: 3caad33daf9b4037540ae4c53adb394f2359eae8
3
+ metadata.gz: a34bfbda6354199a08cfc5d998b2e9ec8d1e841e
4
+ data.tar.gz: 91b068555aa395aa034eed45c8c2e10c7965a264
5
5
  SHA512:
6
- metadata.gz: f14774b9d69140f41b9b3b68fcc7812be07769219c5bfd3aa5cf3dfc31c4e70ff707c025a6d2cd2fa1697d22c20cd5deeea48c749544b59f8bc556f7881e9866
7
- data.tar.gz: d2b2932f30b0d568fe8dd05c917ef41f4b159ebe0f1f8e481d3afd6cdfa525645f539d6ac9aac0ca117c4fdb7cbab318cde8bd258a50b92ce27a1eb252aaa96b
6
+ metadata.gz: fafddc3c02e019dbeda3962b0cf2c7e5ae077af7fced162dcbc38442b7b7fd6f4e030d32ca52021ffd2f68c4f2856ed31bc8de4fc865b61d2a9fe3c8ef964e24
7
+ data.tar.gz: a336a04dbb5400d6c6517174e60bfa59a9d9b40a1845d18b8ed3216a89cdf078137b37c58d4dab8e5ae08e86a5436309bd778ea7f4226ad9e83a7c5fb7743798
@@ -0,0 +1,7 @@
1
+ $(function(){
2
+ $("select.polymorphic").on("change", function(event){
3
+ var type = $(this).find(":selected").data("type");
4
+ var $hiddenField = $(this).siblings("input[type='hidden']");
5
+ $hiddenField.val(type);
6
+ })
7
+ })
@@ -19,7 +19,7 @@ module Mongoid
19
19
 
20
20
  def update
21
21
  @document = @klass.find(params[:id])
22
- if @document.update_attributes(document_params)
22
+ if @document.update_attributes(cast_bson_attributes(document_params))
23
23
  redirect_to document_path(params[:type], @document.id)
24
24
  else
25
25
  render :edit
@@ -42,7 +42,7 @@ module Mongoid
42
42
  end
43
43
 
44
44
  def create
45
- @document = @klass.new(document_params)
45
+ @document = @klass.new(cast_bson_attributes(document_params))
46
46
  if @document.save
47
47
  redirect_to documents_path(params[:type])
48
48
  else
@@ -60,6 +60,19 @@ module Mongoid
60
60
  @klass = params[:type].classify.constantize
61
61
  end
62
62
 
63
+ def cast_bson_attributes(parameters)
64
+ bson_attributes = @klass.fields.select do |key, field|
65
+ [Object, BSON::ObjectId].include?(@klass.fields[key].type)
66
+ end
67
+
68
+ parameters.each do |key, value|
69
+ if bson_attributes.include?(key)
70
+ parameters[key] = BSON::ObjectId.from_string(value)
71
+ end
72
+ end
73
+ return parameters
74
+ end
75
+
63
76
  end
64
77
  end
65
78
  end
@@ -9,6 +9,6 @@
9
9
  <%= yield :navigation %>
10
10
  <%= yield %>
11
11
  </div>
12
- <%= javascript_include_tag "jquery", "jquery_ujs" %>
12
+ <%= javascript_include_tag "jquery", "jquery_ujs", "mongoid_scribe" %>
13
13
  </body>
14
14
  </html>
@@ -14,6 +14,7 @@ module Mongoid
14
14
  @label_method = @config.fetch(:label, :id)
15
15
  @value_method = @config.fetch(:value, :id)
16
16
  @type = @config.fetch(:type, nil)
17
+ @polymorphic = false
17
18
  end
18
19
 
19
20
  def field
@@ -29,8 +30,20 @@ module Mongoid
29
30
  form_field = @form.email_field(@name)
30
31
  elsif @klass.fields[@name].type == Array && values
31
32
  form_field = checkbox_array
32
- elsif values && values.is_a?(Mongoid::Criteria)
33
- form_field = @form.collection_select(@name, values, @value_method, @label_method)
33
+ elsif values && values.all?{ |value| value.is_a?(Mongoid::Document) || value.is_a?(Mongoid::Criteria) }
34
+ if @polymorphic
35
+ options = values.map do |value|
36
+ [
37
+ value.send(@label_method),
38
+ value.send(@value_method),
39
+ {data: {type: value.class.name}}
40
+ ]
41
+ end
42
+ form_field = @form.select(@name, options, {}, {class: "polymorphic"})
43
+ form_field += @form.hidden_field(@name.gsub("_id", "_type"))
44
+ else
45
+ form_field = @form.collection_select(@name, values, @value_method, @label_method)
46
+ end
34
47
  elsif values
35
48
  form_field = @form.select(@name, values)
36
49
  else
@@ -44,13 +57,19 @@ module Mongoid
44
57
 
45
58
  def values
46
59
  return @values if @values
60
+ @polymorphic = false
47
61
  @values = @config.fetch(:values, nil)
48
62
  if @values.respond_to?(:call) && @values.arity == 1
49
63
  @values = @values.call(@document)
50
64
  elsif @values.respond_to?(:call)
51
65
  @values = @values.call
52
- elsif class_name = @document.relations.values.detect{ |data| data.key == @name }.try(:class_name)
53
- @values = class_name.constantize.all
66
+ elsif relation = @document.relations.values.detect{ |data| data.key == @name }
67
+ if relation.polymorphic?
68
+ @polymorphic = true
69
+ @values = polymorphic_values(relation.name)
70
+ else
71
+ @values = relation.class_name.constantize.all
72
+ end
54
73
  end
55
74
  end
56
75
 
@@ -79,6 +98,19 @@ module Mongoid
79
98
  end.join("\n").html_safe
80
99
  end
81
100
 
101
+ def polymorphic_values(association_name)
102
+ classes = Mongoid.models.select do |model|
103
+ model.relations.select{|k, v| v[:as] == association_name }.any?
104
+ end
105
+
106
+ records = classes.inject([]) do |memo, klass|
107
+ memo += klass.all
108
+ memo
109
+ end
110
+
111
+ return records
112
+ end
113
+
82
114
  end
83
115
  end
84
116
  end
@@ -4,7 +4,7 @@ module Mongoid
4
4
  isolate_namespace Mongoid::Scribe
5
5
 
6
6
  initializer :assets, group: :all do |app|
7
- app.config.assets.precompile += ["base/style.css", "base/doc.css", "base/custom.css", "jquery.js", "jquery_ujs.js"]
7
+ app.config.assets.precompile += ["base/style.css", "base/doc.css", "base/custom.css", "jquery.js", "jquery_ujs.js", "mongoid_scribe.js"]
8
8
  end
9
9
 
10
10
  config.after_initialize do |app|
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Scribe
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
@@ -20,3 +20,8 @@ label span{
20
20
  .container table td.key{
21
21
  font-weight: bold;
22
22
  }
23
+
24
+ textarea{
25
+ height: 250px;
26
+ width: 500px;
27
+ }
metadata CHANGED
@@ -1,153 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_scribe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick DeSteffen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-03 00:00:00.000000000 Z
11
+ date: 2014-10-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: mongoid
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: 4.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: 4.0.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: jquery-rails
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '0'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: bundler
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.3'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - '>='
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - '>='
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec-rails
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ~>
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
89
  version: 3.0.0
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ~>
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: 3.0.0
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: combustion
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ~>
101
+ - - "~>"
102
102
  - !ruby/object:Gem::Version
103
103
  version: 0.5.1
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ~>
108
+ - - "~>"
109
109
  - !ruby/object:Gem::Version
110
110
  version: 0.5.1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: pry
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
117
  version: 0.9.12.6
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ~>
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 0.9.12.6
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: factory_girl_rails
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ~>
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
131
  version: 4.4.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ~>
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 4.4.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: database_cleaner
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ~>
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
145
  version: 1.2.0
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ~>
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: 1.2.0
153
153
  description: Mongoid Scribe
@@ -159,6 +159,7 @@ extra_rdoc_files: []
159
159
  files:
160
160
  - LICENSE.txt
161
161
  - README.md
162
+ - app/assets/javascripts/mongoid_scribe.js
162
163
  - app/controllers/mongoid/scribe/application_controller.rb
163
164
  - app/controllers/mongoid/scribe/documents_controller.rb
164
165
  - app/helpers/mongoid/scribe/documents_helper.rb
@@ -195,12 +196,12 @@ require_paths:
195
196
  - lib
196
197
  required_ruby_version: !ruby/object:Gem::Requirement
197
198
  requirements:
198
- - - '>='
199
+ - - ">="
199
200
  - !ruby/object:Gem::Version
200
201
  version: '0'
201
202
  required_rubygems_version: !ruby/object:Gem::Requirement
202
203
  requirements:
203
- - - '>='
204
+ - - ">="
204
205
  - !ruby/object:Gem::Version
205
206
  version: '0'
206
207
  requirements: []