easy_data 0.0.6 → 0.0.7

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 (55) hide show
  1. data/.gitignore +1 -0
  2. data/.idea/EasyData.iml +11 -0
  3. data/.idea/encodings.xml +5 -0
  4. data/.idea/misc.xml +11 -0
  5. data/.idea/modules.xml +9 -0
  6. data/.idea/vcs.xml +7 -0
  7. data/Gemfile +2 -0
  8. data/Rakefile +8 -0
  9. data/easy_data.gemspec +1 -2
  10. data/lib/controllers/easy_datas_controller.rb +86 -47
  11. data/lib/data_models/RDFa.rb +22 -13
  12. data/lib/data_models/data_models.rb +21 -4
  13. data/lib/data_models/model_rdf.rb +152 -28
  14. data/lib/data_models/namespaces.rb +6 -6
  15. data/lib/easy_data/templates/easy_datas/_data_publications.html.erb +8 -12
  16. data/lib/easy_data/templates/easy_datas/_footer.html.erb +3 -1
  17. data/lib/easy_data/templates/easy_datas/_linked_data_model.html.erb +19 -1
  18. data/lib/easy_data/templates/easy_datas/_linked_datas.html.erb +6 -5
  19. data/lib/easy_data/templates/easy_datas/_list_model_info.html.erb +2 -2
  20. data/lib/easy_data/templates/easy_datas/_list_properties.html.erb +2 -2
  21. data/lib/easy_data/templates/easy_datas/_list_properties_edit.html.erb +31 -30
  22. data/lib/easy_data/templates/easy_datas/_menu.html.erb +4 -4
  23. data/lib/easy_data/templates/easy_datas/_menu_custom.html.erb +11 -8
  24. data/lib/easy_data/templates/easy_datas/_model_attributes.html.erb +4 -2
  25. data/lib/easy_data/templates/easy_datas/_model_attributes_edit.html.erb +14 -13
  26. data/lib/easy_data/templates/easy_datas/_model_attributes_info.html.erb +16 -9
  27. data/lib/easy_data/templates/easy_datas/_settings.html.erb +7 -4
  28. data/lib/easy_data/templates/easy_datas/authenticate_user.html.erb +9 -3
  29. data/lib/easy_data/templates/easy_datas/custom_rdf.html.erb +7 -5
  30. data/lib/easy_data/templates/easy_datas/show.xml.builder +15 -13
  31. data/lib/easy_data/templates/easy_datas/show_all.xml.builder +5 -5
  32. data/lib/easy_data/templates/easy_datas/view_settings.html.erb +4 -1
  33. data/lib/easy_data/templates/images/LogoEasyData.jpg +0 -0
  34. data/lib/easy_data/templates/images/lock.png +0 -0
  35. data/lib/easy_data/templates/images/loginBt.png +0 -0
  36. data/lib/easy_data/templates/images/login_bg.png +0 -0
  37. data/lib/easy_data/templates/images/powerby.jpg +0 -0
  38. data/lib/easy_data/templates/images/rdf_icon.png +0 -0
  39. data/lib/easy_data/templates/images/rdf_icon_s.png +0 -0
  40. data/lib/easy_data/templates/layouts/easy_data_layout.html.erb +3 -2
  41. data/lib/easy_data/templates/stylesheets/easy_data_style.css +39 -23
  42. data/lib/easy_data/version.rb +1 -1
  43. data/lib/easy_data.rb +34 -3
  44. data/lib/routes.rb +5 -9
  45. data/lib/tasks/testing_installation.rb +1 -1
  46. data/test/data_models_test.rb +11 -0
  47. data/test/rdfa_test.rb +18 -0
  48. data/test/unit/RDFa_test.rb +1 -0
  49. data/test/unit/data_models_test.rb +10 -0
  50. data/test/unit/linked_data_graph_test.rb +1 -0
  51. data/test/unit/model_rdf_test.rb +1 -0
  52. data/test/unit/namespaces_test.rb +2 -0
  53. metadata +33 -12
  54. data/lib/easy_data/templates/images/main_menu.jpg +0 -0
  55. data/lib/easy_data/templates/images/rdf_icon.jpeg +0 -0
data/.gitignore CHANGED
@@ -6,3 +6,4 @@ lib/task/testing_installation.rb
6
6
  bin/linked_data
7
7
  init.rb
8
8
  setup.rb
9
+ .rvmrc
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module type="RUBY_MODULE" version="4">
3
+ <component name="NewModuleRootManager">
4
+ <content url="file://$MODULE_DIR$" />
5
+ <orderEntry type="inheritedJdk" />
6
+ <orderEntry type="sourceFolder" forTests="false" />
7
+ <orderEntry type="library" scope="PROVIDED" name="haml (v3.0.25, RVM: ruby-1.9.2-p180 [easy_data]) [gem]" level="application" />
8
+ <orderEntry type="library" scope="PROVIDED" name="hpricot (v0.8.4, RVM: ruby-1.9.2-p180 [easy_data]) [gem]" level="application" />
9
+ </component>
10
+ </module>
11
+
@@ -0,0 +1,5 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
4
+ </project>
5
+
data/.idea/misc.xml ADDED
@@ -0,0 +1,11 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="DependencyValidationManager">
4
+ <option name="SKIP_IMPORT_STATEMENTS" value="false" />
5
+ </component>
6
+ <component name="ProjectResources">
7
+ <default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
8
+ </component>
9
+ <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-1.9.2-p180 [easy_data]" project-jdk-type="RUBY_SDK" />
10
+ </project>
11
+
data/.idea/modules.xml ADDED
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/EasyData.iml" filepath="$PROJECT_DIR$/.idea/EasyData.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
9
+
data/.idea/vcs.xml ADDED
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
+ </component>
6
+ </project>
7
+
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in linked_data.gemspec
4
4
  gemspec
5
+
6
+ º
data/Rakefile CHANGED
@@ -2,3 +2,11 @@ require 'bundler/gem_tasks'
2
2
 
3
3
  require 'yard' #Documentation gem
4
4
  require 'hpricot'
5
+
6
+ require 'rake'
7
+ require 'rake/testtask'
8
+
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'test'
11
+ t.pattern = 'test/*_test.rb'
12
+ end
data/easy_data.gemspec CHANGED
@@ -1,7 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
-
5
4
  require "easy_data/version"
6
5
 
7
6
  Gem::Specification.new do |s|
@@ -16,7 +15,7 @@ Gem::Specification.new do |s|
16
15
  s.rubyforge_project = "easy_data"
17
16
 
18
17
  s.files = `git ls-files`.split("\n")
19
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.test_files = `git ls-files test/*`.split("\n")
20
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
21
20
  s.require_paths = ["lib"]
22
21
 
@@ -9,46 +9,64 @@ class EasyDatasController < ActionController::Base
9
9
  before_filter :authenticated, :only => [:custom_rdf]
10
10
 
11
11
  def show
12
-
13
- model = eval params[:model].to_s
12
+ begin
13
+ model = (eval params[:model].to_s)
14
14
 
15
- conditions = parser_params(params)
15
+ conditions = parser_params(params)
16
16
 
17
17
  rdf = ModelRdf.new
18
18
 
19
- unless conditions.empty?
20
- @reply = model.find :all, :conditions => conditions || nil
21
- end
22
-
23
- @host="http://"+request.env["HTTP_HOST"]
19
+ no_valid = lambda{|c| c.nil?||c.empty?}
24
20
 
25
- @rdf_model = rdf.get_model_rdf(@reply,params[:model],"http://"+request.env["HTTP_HOST"])
21
+ @reply = model.find :all, :conditions => {:id => params[:id]}
22
+
23
+ unless @reply.nil?
24
+ @host="http://"+request.env["HTTP_HOST"]
26
25
 
26
+ @rdf_model = rdf.get_model_rdf(@reply,params[:model],"http://"+request.env["HTTP_HOST"])
27
+ end
28
+
27
29
  @xml = Builder::XmlMarkup.new
28
30
 
29
- respond_to do |format|
30
- format.html
31
- format.xml # render :template => "/rdf/request.xml.builder"
31
+ if no_valid.call(@rdf_model[:header]) || @reply.nil? # If the URI not available or data no publicated
32
+ render :nothing => true, :status => 400
33
+ else
34
+ respond_to do |format|
35
+ format.html
36
+ format.xml # render :template => "/rdf/request.xml.builder"
37
+ end
38
+ end
39
+ rescue
40
+ render :nothing => true, :status => 404
32
41
  end
33
-
34
42
  end
35
43
 
36
44
  def show_all
37
- model = eval params[:model].to_s
45
+ begin
46
+ model = eval params[:model].to_s
38
47
 
39
- rdf = ModelRdf.new
48
+ rdf = ModelRdf.new
40
49
 
41
- @reply = model.find :all
50
+ no_valid = lambda{|c| c.nil?||c.empty?}
51
+
52
+ @reply = model.find :all || nil
42
53
 
43
- @host="http://"+request.env["HTTP_HOST"]
54
+ @host="http://"+request.env["HTTP_HOST"]
44
55
 
45
- @rdf_model = rdf.get_model_rdf(@reply,params[:model],"http://"+request.env["HTTP_HOST"])
56
+ @rdf_model = rdf.get_model_rdf(@reply,params[:model],"http://"+request.env["HTTP_HOST"])
46
57
 
47
- @xml = Builder::XmlMarkup.new
58
+ @xml = Builder::XmlMarkup.new
48
59
 
49
- respond_to do |format|
50
- format.html
51
- format.xml # render :template => "/rdf/request.xml.builder"
60
+ if no_valid.call(@rdf_model[:header]) || @reply.nil? # If the URI not available or data no publicated
61
+ render :nothing => true, :status => 404
62
+ else
63
+ respond_to do |format|
64
+ format.html
65
+ format.xml # render :template => "/rdf/request.xml.builder"
66
+ end
67
+ end
68
+ rescue
69
+ render :nothing => true, :status => 404
52
70
  end
53
71
  end
54
72
 
@@ -56,14 +74,15 @@ class EasyDatasController < ActionController::Base
56
74
  #
57
75
  #
58
76
  def info_easy_data
59
- models = DataModels.load_models
77
+ rdf = ModelRdf.new
78
+ models = rdf.get_not_hidden_models
60
79
  @list = []
61
80
  @settings ||= YAML::load(File.open("#{RAILS_ROOT}/config/easy_data/setting.yaml"))
62
81
 
63
82
  models.each do |mod|
64
83
  @list << "#{mod.gsub("::","_")}"
65
84
  end
66
-
85
+
67
86
  respond_to do |format|
68
87
  format.html
69
88
  format.xml
@@ -90,13 +109,10 @@ class EasyDatasController < ActionController::Base
90
109
  def model_attributes
91
110
 
92
111
  rdf = ModelRdf.new
93
-
94
112
  @model_attributes = rdf.get_attributes_model(params[:model])
95
113
  @model = params[:model]
96
-
97
114
 
98
115
  render :partial => "model_attributes",:layout => nil
99
-
100
116
  end
101
117
 
102
118
  def model_attributes_edit
@@ -149,15 +165,22 @@ class EasyDatasController < ActionController::Base
149
165
  render :inline => ""
150
166
  end
151
167
  end
152
-
168
+
153
169
  def load_linked_data_graph
154
170
  if params[:model]
155
171
  @model = params[:model]
172
+ @associations = ModelRdf.new.get_associations_model(@model)
173
+ @host = "http://"+request.env["HTTP_HOST"]
156
174
  render :partial => "linked_data_model"
157
175
  else
158
- models = DataModels.load_models
176
+ rdf = ModelRdf.new
177
+ models = []
178
+ DataModels.load_models.each do |mod|
179
+ unless rdf.hidden?(mod)
180
+ models << mod
181
+ end
182
+ end
159
183
  @list = []
160
-
161
184
  models.each do |mod|
162
185
  @list << "#{mod.gsub("::","_")}"
163
186
  end
@@ -167,33 +190,39 @@ class EasyDatasController < ActionController::Base
167
190
  end
168
191
 
169
192
  def custom_attributes
170
-
193
+
171
194
  rdf = ModelRdf.new
172
195
  @model = params[:model]
173
- unless params["attributes_property"].nil?
174
- params["rdf_type_attributes"].each do |att,value|
175
- if params["attributes_property"][att] != "" && value != ""
176
- rdf.update_attributes_model(params[:model],att,'namespace',value)
177
- rdf.update_attributes_model(params[:model],att,'property',params["attributes_property"][att])
178
- rdf.update_attributes_model(params[:model],att,'privacy',rdf.privacy(params[:privacy][att].to_i))
196
+
197
+ params["rdf_type_attributes"].each do |att,value|
198
+ rdf.update_attributes_model(params[:model],att,'namespace',value) if value != ""
199
+ if params["attributes_property"] && !params["attributes_property"][att].nil?
200
+ rdf.update_attributes_model(params[:model],att,'property',params["attributes_property"][att])
179
201
  end
180
- end
202
+ rdf.update_attributes_model(params[:model],att,'privacy',params[:privacy][att])
181
203
  end
182
- unless params["associations_property"].nil?
183
- params["rdf_type_associations"].each do |assoc,value|
184
- if value != "" && params["associations_property"][assoc] != ""
204
+
205
+
206
+ params["rdf_type_associations"].each do |assoc,value|
207
+
208
+ if value != ""
185
209
  rdf.update_associations_model(params[:model],assoc,'namespace',value)
210
+ end
211
+ if params["associations_property"] && params["associations_property"][assoc]
186
212
  rdf.update_associations_model(params[:model],assoc,'property',params["associations_property"][assoc])
187
- rdf.update_associations_model(params[:model],assoc,'privacy',rdf.privacy(params[:privacy][assoc].to_i))
188
213
  end
189
- end
214
+ rdf.update_associations_model(params[:model],assoc,'privacy',params[:privacy][assoc])
215
+
190
216
  end
191
217
 
218
+
192
219
  rdf.update_model(params[:model],"privacy",params[:privacy][params[:model]]) if params[:privacy][params[:model]]
220
+
193
221
  if params[:property]
194
222
  rdf.update_model(params[:model],"namespace",params[:namespace][params[:model]])
195
223
  rdf.update_model(params[:model],"property",params[:property][params[:model]])
196
224
  end
225
+
197
226
  rdf.save
198
227
 
199
228
  @model_attributes = rdf.get_attributes_model(@model)
@@ -226,20 +255,27 @@ class EasyDatasController < ActionController::Base
226
255
  if !params["project"]["description"].empty? && params["project"]["description"]!=@settings["project"]["description"]
227
256
  @settings["project"]["description"] = params["project"]["description"]
228
257
  end
258
+
259
+ if !params["project"]["email"].empty? && params["project"]["email"]!=@settings["project"]["contact_email"]
260
+ @settings["project"]["contact_email"] = params["project"]["email"]
261
+ end
229
262
 
230
263
  if !params["user_admin"]["user"].empty? && !params["user_admin"]["pass"].empty?
231
264
  (@settings["user_admin"]["user"] = params["user_admin"]["user"]) if @settings["user_admin"]["user"]!=params["user_admin"]["user"]
232
265
  (@settings["user_admin"]["pass"] = params["user_admin"]["pass"]) if @settings["user_admin"]["pass"]!=params["user_admin"]["pass"]
233
266
  end
234
267
 
235
- if !params["access"]["ip"].empty?
236
- (@settings["access"]["ip"] = params["access"]["ip"]) if params["access"]["ip"]!=@settings["access"]["ip"]
237
- end
268
+ (@settings["access"]["ip"] = params["access"]["ip"]) if params["access"]["ip"]!=@settings["access"]["ip"] && params["access"]["ip"]!= ""
238
269
 
239
270
  save_settings(@settings)
240
271
 
241
272
  render :template => "easy_datas/view_settings",:layout => false
242
273
  end
274
+
275
+ def refresh_information
276
+ EasyData.refresh_information
277
+ redirect_to :action => "custom_rdf"
278
+ end
243
279
 
244
280
  def authenticate_user
245
281
  end
@@ -264,12 +300,15 @@ class EasyDatasController < ActionController::Base
264
300
 
265
301
  private
266
302
 
303
+ # Extract all parameters to build the query.
304
+ # @param [Hash] request's parameters
305
+ # @return [Hahs] Conditions hash
267
306
  def parser_params (parameters = nil)
268
307
 
269
308
  conditions = {}
270
309
 
271
310
  if !parameters.empty?
272
- parameters.each do |key,value|
311
+ parameters.each do |key,value| #Delete all elements that aren't need to query
273
312
  unless ["controller","action","method","format","model"].include?key
274
313
  conditions[key.to_sym] = value
275
314
  end
@@ -2,21 +2,13 @@ require "data_models/model_rdf"
2
2
 
3
3
  class RDFa
4
4
 
5
- def self.model(model)
6
-
7
- end
8
-
9
- def self.attribute(model,attributes)
10
-
11
- end
12
-
13
5
  ####################################
14
6
  # HTML Tags
15
7
  ####################################
16
8
 
17
9
  #-----------------------------------------------Links
18
- def a(model,href,attribute=nil,options=nil)
19
- _html_code('a',model,attribute,"href='#{href||'#'}' "+options.to_s)
10
+ def a(model,href,value,attribute=nil,options=nil)
11
+ _html_code('a',model,value,attribute,"href='#{href||'#'}' "+options.to_s)
20
12
  end
21
13
 
22
14
  #-----------------------------------------------End Links
@@ -38,7 +30,7 @@ class RDFa
38
30
  nil
39
31
  end
40
32
  #------------------------------------------------END AUTO-CLOSED
41
-
33
+
42
34
  # This method is called if doesnt exist the method called by class's users
43
35
  def method_missing(sym, *args, &block)
44
36
  _html_code(sym.to_s,args[0],args[1],args[2],args[3])
@@ -49,14 +41,25 @@ class RDFa
49
41
  #######################################
50
42
  private
51
43
 
44
+ # This method generate a HTML tag with RDFa information included.
45
+ # @param [String] Html tag
46
+ # @param [String] Model's name
47
+ # @param [String] Tag content.
48
+ # @param [String] model's attribute
49
+ # @param [String] css and html tag options
50
+ # @return [String] Html tag with RDFa information
52
51
  def _html_code(tag,model,value,attribute,options = "")
53
- rdf_info = ModelRdf.new
52
+ rdf_info = ModelRdf.new
54
53
 
55
54
  if attribute.nil? #prefix + type_of
56
55
  options = (options || "") + rdf_info.get_prefix(model)
57
56
  options = options + rdf_info.model(model)
58
57
  else #property
59
- options = (options||"") + rdf_info.attribute(model,attribute)
58
+ if attribute!=model
59
+ options = (options||"") + rdf_info.attribute(model,attribute)
60
+ else
61
+ options = (options||"") + rdf_info.model(model)
62
+ end
60
63
  end
61
64
 
62
65
  unless value.nil?
@@ -66,6 +69,12 @@ class RDFa
66
69
  end
67
70
  end
68
71
 
72
+ # This method generate a HTML list tag with RDFa information included.
73
+ # @param [String] Html tag
74
+ # @param [String] Model's name
75
+ # @param [String] Tag content
76
+ # @param [String] css and html tag options
77
+ # @return [String] Html list tag with RDFa information
69
78
  def _html_code_list(tag,model,value,options = "")
70
79
  rdf_info = ModelRdf.new
71
80
 
@@ -1,21 +1,26 @@
1
1
  module DataModels
2
-
2
+ # This method reads all models that the project hash.
3
+ # @return [Array] The proyect models list.
3
4
  def self.load_models
4
5
 
5
- models = []
6
- models_valids = []
6
+ models = [] #All models will be in this list.
7
+ models_valids = [] #This list is only to models with database table associated.
7
8
  mod = nil
8
9
 
10
+ #Get all models in Model's folder
9
11
  Dir["#{RAILS_ROOT}/app/models/**/*.rb"].each do |file|
10
12
  models << file.gsub(RAILS_ROOT+'/app/models/',"").gsub('.rb','').classify
11
13
  end
12
14
 
15
+ # Here, get the correct model's name: Singular or Plural
13
16
  models.each do |model|
14
17
  begin
15
18
  mod = eval model
19
+ mod.columns
16
20
  rescue
17
21
  begin
18
22
  mod = eval model.pluralize
23
+ mod.columns
19
24
  rescue
20
25
  mod = nil
21
26
  end
@@ -28,14 +33,21 @@ module DataModels
28
33
  models_valids
29
34
  end
30
35
 
36
+ # This method return all model's attributes.
37
+ # @param [String] model's name
38
+ # @return [Array] model's attribute list.
31
39
  def self.model_attributes(model)
32
40
  model.columns.map{|att| att.name}.join(", ")
33
41
  end
34
42
 
43
+ # This method return all model's relations
44
+ # @param [String] model's name
45
+ # @return [Hash] hash with all relations and relations type
35
46
  def self.model_relations(model)
36
47
 
37
48
  relations = {}
38
-
49
+
50
+ #Build the hash with relation name and relation's type.
39
51
  model.reflections.each do |relation,values|
40
52
  relations[relation] = {"model" => values.class_name,"type" => values.macro.to_s}
41
53
  end
@@ -43,10 +55,15 @@ module DataModels
43
55
  relations
44
56
  end
45
57
 
58
+ # Return all RDF information stored in yaml file.
59
+ # @return [Hash] hash with all information stored in yaml file.
46
60
  def self.build_models_yaml_file
47
61
  self.models
48
62
  end
49
63
 
64
+ # Return data model.
65
+ # @param [String] model's name
66
+ # @return [Hash] data model's information.
50
67
  def self.get_model_data(model)
51
68
  begin
52
69
  eval model