Commit 98be0da5b8c3decbc3166f4b44b5d8d650562359

Authored by Leandro Santos
1 parent 8856c65f

expose image urls

app/models/article.rb
@@ -692,6 +692,11 @@ class Article < ActiveRecord::Base @@ -692,6 +692,11 @@ class Article < ActiveRecord::Base
692 person ? person.id : nil 692 person ? person.id : nil
693 end 693 end
694 694
  695 + #FIXME make this test
  696 + def author_custom_image(size = :icon)
  697 + author ? author.profile_custom_image(size) : nil
  698 + end
  699 +
695 def version_license(version_number = nil) 700 def version_license(version_number = nil)
696 return license if version_number.nil? 701 return license if version_number.nil?
697 profile.environment.licenses.find_by_id(get_version(version_number).license_id) 702 profile.environment.licenses.find_by_id(get_version(version_number).license_id)
app/models/comment.rb
@@ -63,6 +63,11 @@ class Comment < ActiveRecord::Base @@ -63,6 +63,11 @@ class Comment < ActiveRecord::Base
63 author ? author.url : nil 63 author ? author.url : nil
64 end 64 end
65 65
  66 + #FIXME make this test
  67 + def author_custom_image(size = :icon)
  68 + author ? author.profile_custom_image(size) : nil
  69 + end
  70 +
66 def url 71 def url
67 article.view_url.merge(:anchor => anchor) 72 article.view_url.merge(:anchor => anchor)
68 end 73 end
app/models/profile.rb
@@ -911,6 +911,13 @@ private :generate_url, :url_options @@ -911,6 +911,13 @@ private :generate_url, :url_options
911 image.public_filename(:icon) if image.present? 911 image.public_filename(:icon) if image.present?
912 end 912 end
913 913
  914 + #FIXME make this test
  915 + def profile_custom_image(size = :icon)
  916 + image_path = profile_custom_icon if size == :icon
  917 + image_path ||= image.public_filename(size) if image.present?
  918 + image_path
  919 + end
  920 +
914 def jid(options = {}) 921 def jid(options = {})
915 domain = options[:domain] || environment.default_hostname 922 domain = options[:domain] || environment.default_hostname
916 "#{identifier}@#{domain}" 923 "#{identifier}@#{domain}"
lib/api/entities.rb
@@ -2,17 +2,34 @@ module API @@ -2,17 +2,34 @@ module API
2 module Entities 2 module Entities
3 class Article < Grape::Entity 3 class Article < Grape::Entity
4 expose :id, :name, :body, :created_at 4 expose :id, :name, :body, :created_at
5 -# expose :is_admin?, as: :is_admin  
6 5
7 -# expose :avatar_url do |user, options|  
8 -# if user.avatar.present?  
9 -# user.avatar.url  
10 -# end  
11 -# end 6 + expose :author do |article, options|
  7 + {
  8 + :id => article.author_id,
  9 + :name => article.author_name,
  10 + :icon_url => article.author_custom_image(:icon),
  11 + :minor_url => article.author_custom_image(:minor),
  12 + :portrait_url => article.author_custom_image(:portrait),
  13 + :thumb_url => article.author_custom_image(:thumb),
  14 + }
  15 + end
  16 +
12 end 17 end
13 18
14 class Comment < Grape::Entity 19 class Comment < Grape::Entity
15 - expose :author_id, :body, :title, :created_at 20 + expose :body, :title, :created_at, :id
  21 +
  22 + expose :author do |comment, options|
  23 + {
  24 + :id => comment.author_id,
  25 + :name => comment.author_name,
  26 + :icon_url => comment.author_custom_image(:icon),
  27 + :minor_url => comment.author_custom_image(:minor),
  28 + :portrait_url => comment.author_custom_image(:portrait),
  29 + :thumb_url => comment.author_custom_image(:thumb),
  30 + }
  31 + end
  32 +
16 end 33 end
17 34
18 class User < Grape::Entity 35 class User < Grape::Entity
lib/api/helpers.rb
@@ -13,6 +13,16 @@ module API @@ -13,6 +13,16 @@ module API
13 @current_user = nil 13 @current_user = nil
14 end 14 end
15 15
  16 + def environment
  17 + @environment
  18 + end
  19 +
  20 + def limit
  21 + limit = params[:limit].to_i
  22 + limit = default_limit if limit <= 0
  23 + limit
  24 + end
  25 +
16 #FIXME see if its needed 26 #FIXME see if its needed
17 # def paginate(relation) 27 # def paginate(relation)
18 # per_page = params[:per_page].to_i 28 # per_page = params[:per_page].to_i
@@ -105,5 +115,27 @@ module API @@ -105,5 +115,27 @@ module API
105 error!({'message' => message, :code => status}, status) 115 error!({'message' => message, :code => status}, status)
106 end 116 end
107 117
  118 + protected
  119 +
  120 + def detect_stuff_by_domain
  121 + @domain = Domain.find_by_name(request.host)
  122 + if @domain.nil?
  123 + @environment = Environment.default
  124 + if @environment.nil? && Rails.env.development?
  125 + # This should only happen in development ...
  126 + @environment = Environment.create!(:name => "Noosfero", :is_default => true)
  127 + end
  128 + else
  129 + @environment = @domain.environment
  130 + end
  131 + end
  132 +
  133 + private
  134 +
  135 + def default_limit
  136 + 20
  137 + end
  138 +
  139 +
108 end 140 end
109 end 141 end
lib/api/session.rb
@@ -11,7 +11,6 @@ module API @@ -11,7 +11,6 @@ module API
11 # Example Request: 11 # Example Request:
12 # POST /login?login=some&password=pass 12 # POST /login?login=some&password=pass
13 get "/login" do 13 get "/login" do
14 -environment = nil #FIXME load the correct environment create a method in helper  
15 user ||= User.authenticate(params[:login], params[:password], environment) 14 user ||= User.authenticate(params[:login], params[:password], environment)
16 15
17 return unauthorized! unless user 16 return unauthorized! unless user
lib/api/v1/articles.rb
@@ -2,44 +2,55 @@ module API @@ -2,44 +2,55 @@ module API
2 module V1 2 module V1
3 class Articles < Grape::API 3 class Articles < Grape::API
4 4
  5 + before { detect_stuff_by_domain }
5 before { authenticate! } 6 before { authenticate! }
6 7
7 resource :articles do 8 resource :articles do
8 9
9 - #FIXME See if it's possible to use pagination instead of DateTime control. see a way to use this pagination logic genericaly 10 + helpers do
  11 + def default_from_date
  12 + @article_created_at ||= Article.first.created_at
  13 + @article_created_at
  14 + end
  15 + end
  16 +
  17 + # Collect comments from articles
  18 + #
  19 + # Parameters:
  20 + # from - date where the search will begin. If nothing is passed the default date will be the date of the first article created
  21 + # oldest - Collect the oldest comments from reference_id comment. If nothing is passed the newest comments are collected
  22 + # limit - amount of comments returned. The default value is 20
  23 + #
  24 + # Example Request:
  25 + # GET /articles?from=2013-04-04-14:41:43&until=2014-04-04-14:41:43&limit=10&type=Blog
10 get do 26 get do
11 - first_update = DateTime.parse(params[:first_update]) if params[:first_update]  
12 - last_update = DateTime.parse(params[:last_update]) if params[:last_update] 27 + from_date = DateTime.parse(params[:from]) if params[:from]
  28 + until_date = DateTime.parse(params[:until]) if params[:until]
13 29
14 - if first_update.nil?  
15 - begin_date = Article.first.created_at  
16 - end_date = last_update.nil? ? DateTime.now : last_update 30 + if from_date.nil?
  31 + begin_period = default_from_date
  32 + end_period = until_date.nil? ? DateTime.now : until_date
17 else 33 else
18 - begin_date = first_update  
19 - end_date = DateTime.now 34 + begin_period = from_date
  35 + end_period = DateTime.now
20 end 36 end
21 37
22 - limit = params[:limit].to_i  
23 - limit = 20 if limit == 0  
24 conditions = {} 38 conditions = {}
25 conditions[:type] = params[:content_type] if params[:content_type] #FIXME validate type 39 conditions[:type] = params[:content_type] if params[:content_type] #FIXME validate type
26 - conditions[:created_at] = begin_date...end_date  
27 - present Article.find(:all, :conditions => conditions, :offset => (first_update.nil? ? 0 : 1), :limit => limit, :order => "created_at DESC"), :with => Entities::Article 40 + conditions[:created_at] = begin_period...end_period
  41 + present environment.articles.find(:all, :conditions => conditions, :offset => (from_date.nil? ? 0 : 1), :limit => limit, :order => "created_at DESC"), :with => Entities::Article
28 end 42 end
29 43
30 - #FIXME load article with environment context  
31 get ':id' do 44 get ':id' do
32 - present Article.find(params[:id]), :with => Entities::Article 45 + present environment.articles.find(params[:id]), :with => Entities::Article
33 end 46 end
34 47
35 - #FIXME load article with environment context  
36 get ':id/children' do 48 get ':id/children' do
37 - present Article.find(params[:id]).children, :with => Entities::Article 49 + present environment.articles.find(params[:id]).children, :with => Entities::Article
38 end 50 end
39 51
40 - #FIXME load article with environment context  
41 get ':id/children/:child_id' do 52 get ':id/children/:child_id' do
42 - present Article.find(params[:id]).children.find(params[:child_id]), :with => Entities::Article 53 + present environment.articles.find(params[:id]).children.find(params[:child_id]), :with => Entities::Article
43 end 54 end
44 55
45 56
lib/api/v1/comments.rb
1 module API 1 module API
2 module V1 2 module V1
3 - class Comments < Grape::API  
4 -  
5 - before { authenticate! }  
6 -  
7 - resource :articles do  
8 - #FIXME make the pagination  
9 - #FIXME put it on environment context  
10 - get ":id/comments" do  
11 - present Article.find(params[:id]).comments, :with => Entities::Comment 3 + class Comments < Grape::API
  4 +
  5 + before { detect_stuff_by_domain }
  6 + before { authenticate! }
  7 +
  8 + resource :articles do
  9 + # Collect comments from articles
  10 + #
  11 + # Parameters:
  12 + # reference_id - comment id used as reference to collect comment
  13 + # oldest - Collect the oldest comments from reference_id comment. If nothing is passed the newest comments are collected
  14 + # limit - amount of comments returned. The default value is 20
  15 + #
  16 + # Example Request:
  17 + # GET /articles/12/comments?oldest&limit=10&reference_id=23
  18 + get ":id/comments" do
  19 + conditions = {}
  20 + conditions = ["id #{params.key?(:oldest) ? '<' : '>'} ?", params[:reference_id]] if params[:reference_id]
  21 + present environment.articles.find(params[:id]).comments.find(:all, :conditions => conditions, :limit => limit), :with => Entities::Comment
  22 + end
  23 +
  24 + get ":id/comments/:comment_id" do
  25 + present environment.articles.find(params[:id]).comments.find(params[:comment_id]), :with => Entities::Comment
  26 + end
  27 +
12 end 28 end
13 -  
14 - get ":id/comments/:comment_id" do  
15 - present Article.find(params[:id]).comments.find(params[:comment_id]), :with => Entities::Comment  
16 - end  
17 - 29 +
18 end 30 end
19 -  
20 - end  
21 end 31 end
22 end 32 end