graph_starter 0.4.3 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 350ce248b79fc1b18a2e7a9ad256c8b01e447bb0
4
- data.tar.gz: 023b3825066f5df655065a7e1ff9ed89043f6ed0
3
+ metadata.gz: 2ee7e090e013ceee1f953a9859c2d469ec6f82c1
4
+ data.tar.gz: f039138c5c6fea91161098c1722979e5a85e2a40
5
5
  SHA512:
6
- metadata.gz: 2fdf420ca258602b934c1402cb342bd532c013396b7c0130fc9a38edf02770fc50b02adb29a4668b716a947f301e0a7125c7c095d585794aa6d34d6db901fa66
7
- data.tar.gz: 29d58154894aeeda6055341e1ad0ecb861f63b5c30963636e57bc96837dc1e00f8cd485def599b4820a12e68c05550f0e38de27f034ef1227349c7bad8629112
6
+ metadata.gz: ff56c5adb8387d6d1ef8266faf4b07402548c7521a5dd668693c66f1507a2c4961241b99eae8231095178ad4daaf44c73c9f306247d0527001245b019c29754d
7
+ data.tar.gz: 4eec5d0d5d330cece01ca5fb15f4d0c2acfe2a9e8c47307af807d87c6180b2ba0f5352e24d5ec737cf3e23680f03236a32e976e5e85ff74d876c1741b5d523c7
@@ -70,9 +70,11 @@ module GraphStarter
70
70
  def rate
71
71
  if current_user
72
72
  rating = asset.rating_for(current_user)
73
- rating ||= Rating.find(from_node: current_user, to_node: asset)
73
+ rating ||= Rating.create(from_node: current_user, to_node: asset)
74
74
 
75
- rating.update_attribute(:level, params[:new_rating])
75
+ new_rating = params[:new_rating].to_i
76
+ new_rating = nil if new_rating.zero?
77
+ rating.update_attribute(:level, new_rating)
76
78
 
77
79
  render json: rating
78
80
  else
@@ -6,6 +6,14 @@ module GraphStarter
6
6
 
7
7
  def engine_view(&b)
8
8
  yield eval("__FILE__.gsub(Rails.root.to_s, GraphStarter::Engine.root.to_s)",b.binding)
9
- end
9
+ end
10
+
11
+ def render_body
12
+ views = Dir.glob(Rails.root.join("app/views/#{@model_slug}/_body.html.*"))
13
+
14
+ partial_path = views.present? ? "#{@model_slug}/body" : 'body'
15
+
16
+ render partial: partial_path, locals: {asset: @asset}
17
+ end
10
18
  end
11
19
  end
@@ -13,9 +13,6 @@ module GraphStarter
13
13
 
14
14
  property :view_count, type: Integer
15
15
 
16
- property :private, type: Boolean, default: false
17
-
18
-
19
16
  if GraphStarter.configuration.user_class
20
17
  #has_many :in, :creators, type: :CREATED, model_class: GraphStarter.configuration.user_class
21
18
 
@@ -27,12 +24,14 @@ module GraphStarter
27
24
 
28
25
  SecretSauceRecommendation = Struct.new(:asset, :score)
29
26
 
30
- def body
31
- end
32
-
33
27
  def self.has_images
34
28
  @has_images = true
35
29
  has_many :out, :images, type: :HAS_IMAGE, model_class: '::GraphStarter::Image'
30
+ has_one :out, :image, type: :HAS_IMAGE, model_class: '::GraphStarter::Image'
31
+ end
32
+
33
+ def self.has_image
34
+ has_images
36
35
  end
37
36
 
38
37
  def self.has_images?
@@ -40,7 +39,7 @@ module GraphStarter
40
39
  end
41
40
 
42
41
  def first_image_source_url
43
- images.first && images.first.source_url
42
+ image && image.source_url
44
43
  end
45
44
 
46
45
  def self.category_association(association_name = nil)
@@ -80,7 +79,7 @@ module GraphStarter
80
79
  else
81
80
  fail "Cannot declare name_property twice" if @name_property.present?
82
81
  name = property_name.to_sym
83
- fail ArgumentError, "Property #{name} is not defined" if attributes[name.to_s].nil?
82
+ fail ArgumentError, "Property #{name} is not defined" if !attributes.key?(name.to_s)
84
83
  @name_property = name
85
84
 
86
85
  validates name, presence: true
@@ -88,6 +87,10 @@ module GraphStarter
88
87
  end
89
88
  end
90
89
 
90
+ def self.name_property?(property_name)
91
+ @name_property && @name_property.to_sym == property_name.to_sym
92
+ end
93
+
91
94
  def self.default_name_property
92
95
  (%w(name title) & attributes.keys)[0].tap do |property|
93
96
  if property.nil?
@@ -96,6 +99,46 @@ module GraphStarter
96
99
  end
97
100
  end
98
101
 
102
+
103
+ def self.body_property(property_name = nil)
104
+ if property_name.nil?
105
+ body_property(default_name_property) if @body_property.nil?
106
+
107
+ @body_property
108
+ else
109
+ fail "Cannot declare body_property twice" if @body_property.present?
110
+ name = property_name.to_sym
111
+ fail ArgumentError, "Property #{name} is not defined" if !attributes.key?(name.to_s)
112
+ @body_property = name
113
+ end
114
+ end
115
+
116
+ def self.body_property?(property_name)
117
+ @body_property && @body_property.to_sym == property_name.to_sym
118
+ end
119
+
120
+ def self.default_body_property
121
+ if @body_property.nil? && !attributes.key?('body')
122
+ fail "No body_property defined for #{self.name}!"
123
+ end
124
+
125
+ body_property || 'body'
126
+ end
127
+
128
+
129
+ def self.display_properties(*property_names)
130
+ if property_names.empty?
131
+ @display_properties || []
132
+ else
133
+ @display_properties = property_names.map(&:to_sym)
134
+ end
135
+ end
136
+
137
+ def self.display_property?(property_name)
138
+ display_properties.include?(property_name.to_sym)
139
+ end
140
+
141
+
99
142
  def rating_level_for(user)
100
143
  rating = rating_for(user)
101
144
  rating && rating.level
@@ -111,6 +154,12 @@ module GraphStarter
111
154
  read_attribute(self.class.name_property)
112
155
  end
113
156
 
157
+ send(method_name)
158
+ elsif method_name.to_sym == :body
159
+ self.class.send(:define_method, method_name) do
160
+ read_attribute(self.class.body_property)
161
+ end
162
+
114
163
  send(method_name)
115
164
  else
116
165
  super
@@ -138,6 +187,8 @@ module GraphStarter
138
187
 
139
188
  def secret_sauce_recommendations
140
189
  user_class = GraphStarter.configuration.user_class
190
+ return [] if user_class.nil? # Should fix this later
191
+
141
192
  user_class = (user_class.is_a?(Class) ? user_class : user_class.to_s.constantize)
142
193
  user_label = user_class.mapped_label_name
143
194
 
@@ -225,7 +276,9 @@ module GraphStarter
225
276
 
226
277
  def self.property_name_and_uuid_and_ruby_type_query
227
278
  properties_and_uuids_and_ruby_types = properties.map do |property|
228
- [property, SecureRandom.uuid, self.attributes[property][:type]]
279
+ type = self.attributes[property][:type]
280
+ type = type.name if type.is_a?(Class)
281
+ [property, SecureRandom.uuid, type]
229
282
  end
230
283
 
231
284
  Neo4j::Session.current.query
@@ -236,7 +289,7 @@ module GraphStarter
236
289
  end
237
290
 
238
291
  def self.authorized_associations
239
- associations.except(*Asset.associations.keys + [:images])
292
+ associations.except(*Asset.associations.keys + [:images, :image])
240
293
  end
241
294
 
242
295
  def self.icon_class
@@ -10,7 +10,7 @@ module GraphStarter
10
10
  creates_unique
11
11
 
12
12
  property :level, type: Integer
13
- validates :level, inclusion: {in: 1..5}
13
+ validates :level, inclusion: {in: (1..5).to_a + [nil]}
14
14
 
15
15
  property :rated_at
16
16
 
@@ -0,0 +1,15 @@
1
+ - if asset.body.present?
2
+ = asset.body
3
+ - if asset.images.present?
4
+ .ui.link.cards
5
+ - asset.images.each do |image|
6
+ .card
7
+ .image = image_tag image.source_url, class: 'ui image tiny rounded'
8
+ .content
9
+ .header = image.title if image.title.present?
10
+ - if image.description.present?
11
+ .meta = image.description
12
+ .extra.content
13
+ a.ui.large.green.button href="#{image.source_url}" Full Size
14
+
15
+
@@ -55,29 +55,17 @@ javascript:
55
55
 
56
56
  - if main_column_exists
57
57
  .ten.wide.column
58
- - if @asset.body.present?
59
- = @asset.body
60
- - if @asset.images.present?
61
- .ui.link.cards
62
- - @asset.images.each do |image|
63
- .card
64
- .image = image_tag image.source_url, class: 'ui image tiny rounded'
65
- .content
66
- .header = image.title if image.title.present?
67
- - if image.description.present?
68
- .meta = image.description
69
- .extra.content
70
- a.ui.large.green.button href="#{image.source_url}" Full Size
71
-
58
+ = render_body
72
59
 
73
60
  div class="#{side_column_width} wide column" id="right-column"
74
61
  - if @current_user_is_admin
75
62
  a.ui.labeled.icon.button.right.floated data-authorizable="#{@asset.to_json}"
76
63
  | Edit Permissions
77
64
 
78
- a.ui.labeled.icon.button.right.floated href="#{edit_asset_path(id: @asset)}"
79
- i.edit.icon
80
- | Edit
65
+ - if @current_user_is_admin
66
+ a.ui.labeled.icon.button.right.floated href="#{edit_asset_path(id: @asset)}"
67
+ i.edit.icon
68
+ | Edit
81
69
 
82
70
  .ui.items
83
71
  - if @asset.class.rated? && defined?(current_user) && current_user
@@ -88,6 +76,7 @@ javascript:
88
76
  .ui.star.rating data-max-rating="5" data-rating="#{@asset.rating_level_for(current_user)}"
89
77
  coffee:
90
78
  $('#right-column .ui.rating').rating
79
+ clearable: true
91
80
  onRate: (new_rating) ->
92
81
  $.ajax
93
82
  method: 'PUT'
@@ -95,6 +84,9 @@ javascript:
95
84
 
96
85
 
97
86
  - @asset.class.authorized_properties(defined?(current_user) && current_user).each do |property|
87
+ - next if !@asset.class.display_property?(property.name)
88
+ - next if @asset.class.name_property?(property.name) || @asset.class.body_property?(property.name)
89
+
98
90
  - if @asset.read_attribute(property.name).present?
99
91
  .item
100
92
  .content
@@ -105,12 +97,14 @@ javascript:
105
97
  .description
106
98
  = render partial: 'graph_starter/properties/property', locals: {property: property, asset: @asset, level: 'read'}
107
99
 
108
- .item
109
- .content
110
- .ui.horizontal.divider Created
111
- .description = @asset.created_at
100
+ - if @asset.class.display_property?(:created_at)
101
+ .item
102
+ .content
103
+ .ui.horizontal.divider Created
104
+ .description = @asset.created_at
112
105
 
113
- .item
114
- .content
115
- .ui.horizontal.divider Last updated
116
- .description = @asset.updated_at
106
+ - if @asset.class.display_property?(:updated_at)
107
+ .item
108
+ .content
109
+ .ui.horizontal.divider Last updated
110
+ .description = @asset.updated_at
@@ -1,12 +1,14 @@
1
1
  - can_write = (level == 'write') && !form.nil?
2
2
 
3
+ - value = asset.read_attribute(property.name)
4
+
3
5
  - ruby_type = property.ruby_type.to_s
4
6
  - case ruby_type
5
7
  - when 'Integer'
6
8
  - if can_write
7
9
  = form.number_field property.name
8
10
  - else
9
- = asset.read_attribute(property.name)
11
+ = value
10
12
  - when 'DateTime', 'Date'
11
13
  - if can_write
12
14
  i.calendar.icon
@@ -15,7 +17,6 @@
15
17
  - strftime_format = {'DateTime' => '%Y-%m-%d %H:%M', 'Date' => '%Y-%m-%d'}[ruby_type]
16
18
 
17
19
  - id = SecureRandom.uuid
18
- - value = asset.read_attribute(property.name)
19
20
 
20
21
  = form.text_field property.name, value: value && value.strftime(strftime_format), id: id
21
22
 
@@ -25,10 +26,13 @@
25
26
  $('##{id}').datetimepicker({#{js_options.html_safe}});
26
27
  });
27
28
  - else
28
- = asset.read_attribute(property.name)
29
+ = value
29
30
 
30
31
  - else
31
32
  - if can_write
32
33
  = form.text_field property.name
33
34
  - else
34
- = asset.read_attribute(property.name)
35
+ - if property.name.to_s.match(/url$/i)
36
+ = link_to value, value
37
+ - else
38
+ = value
@@ -2,6 +2,6 @@
2
2
  = link_to 'Home', '/', class: "item #{'active' if request.path == '/'}"
3
3
  - GraphStarter::Asset.descendants.each do |model_class|
4
4
  - path = graph_starter.assets_path(model_slug: model_class.model_slug)
5
- = link_to model_class.name.pluralize.humanize, path, class: "item #{'active' if request.path.match(/^#{path}/)}"
5
+ = link_to model_class.name.tableize.humanize, path, class: "item #{'active' if request.path.match(/^#{path}/)}"
6
6
 
7
7
  = render 'layouts/graph_starter/custom_menu'
@@ -3,7 +3,7 @@ doctype html
3
3
  html
4
4
 
5
5
  head
6
- title AssetPortal
6
+ title = @title || Rails.application.class.to_s.split("::").first.tableize.singularize.humanize
7
7
  = stylesheet_link_tag 'graph_starter/application', media: 'all', 'data-turbolinks-track' => true
8
8
 
9
9
  = render partial: 'layouts/graph_starter/twitter_meta_tags'
@@ -1,3 +1,3 @@
1
1
  module GraphStarter
2
- VERSION = "0.4.3"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graph_starter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Underwood
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-26 00:00:00.000000000 Z
11
+ date: 2015-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -131,6 +131,7 @@ files:
131
131
  - app/models/graph_starter/rating.rb
132
132
  - app/models/graph_starter/view.rb
133
133
  - app/views/graph_starter/assets/TODO.md
134
+ - app/views/graph_starter/assets/_body.html.slim
134
135
  - app/views/graph_starter/assets/_cards.html.slim
135
136
  - app/views/graph_starter/assets/edit.html.slim
136
137
  - app/views/graph_starter/assets/home.html.slim