Commit ef06ad0b9b491ab2a8bd8f4767c22720d470abe5
Committed by
Rodrigo Souto
1 parent
c6b5c34e
Exists in
master
and in
29 other branches
expose image urls
Showing
8 changed files
with
128 additions
and
42 deletions
Show diff stats
app/models/article.rb
| ... | ... | @@ -701,6 +701,11 @@ class Article < ActiveRecord::Base |
| 701 | 701 | person ? person.id : nil |
| 702 | 702 | end |
| 703 | 703 | |
| 704 | + #FIXME make this test | |
| 705 | + def author_custom_image(size = :icon) | |
| 706 | + author ? author.profile_custom_image(size) : nil | |
| 707 | + end | |
| 708 | + | |
| 704 | 709 | def version_license(version_number = nil) |
| 705 | 710 | return license if version_number.nil? |
| 706 | 711 | profile.environment.licenses.find_by_id(get_version(version_number).license_id) | ... | ... |
app/models/comment.rb
| ... | ... | @@ -65,6 +65,11 @@ class Comment < ActiveRecord::Base |
| 65 | 65 | author ? author.url : nil |
| 66 | 66 | end |
| 67 | 67 | |
| 68 | + #FIXME make this test | |
| 69 | + def author_custom_image(size = :icon) | |
| 70 | + author ? author.profile_custom_image(size) : nil | |
| 71 | + end | |
| 72 | + | |
| 68 | 73 | def url |
| 69 | 74 | article.view_url.merge(:anchor => anchor) |
| 70 | 75 | end | ... | ... |
app/models/profile.rb
| ... | ... | @@ -935,6 +935,13 @@ private :generate_url, :url_options |
| 935 | 935 | image.public_filename(:icon) if image.present? |
| 936 | 936 | end |
| 937 | 937 | |
| 938 | + #FIXME make this test | |
| 939 | + def profile_custom_image(size = :icon) | |
| 940 | + image_path = profile_custom_icon if size == :icon | |
| 941 | + image_path ||= image.public_filename(size) if image.present? | |
| 942 | + image_path | |
| 943 | + end | |
| 944 | + | |
| 938 | 945 | def jid(options = {}) |
| 939 | 946 | domain = options[:domain] || environment.default_hostname |
| 940 | 947 | "#{identifier}@#{domain}" | ... | ... |
lib/api/entities.rb
| ... | ... | @@ -2,17 +2,34 @@ module API |
| 2 | 2 | module Entities |
| 3 | 3 | class Article < Grape::Entity |
| 4 | 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 | 17 | end |
| 13 | 18 | |
| 14 | 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 | 33 | end |
| 17 | 34 | |
| 18 | 35 | class User < Grape::Entity | ... | ... |
lib/api/helpers.rb
| ... | ... | @@ -13,6 +13,16 @@ module API |
| 13 | 13 | @current_user = nil |
| 14 | 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 | 26 | #FIXME see if its needed |
| 17 | 27 | # def paginate(relation) |
| 18 | 28 | # per_page = params[:per_page].to_i |
| ... | ... | @@ -105,5 +115,27 @@ module API |
| 105 | 115 | error!({'message' => message, :code => status}, status) |
| 106 | 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 | 140 | end |
| 109 | 141 | end | ... | ... |
lib/api/session.rb
| ... | ... | @@ -11,7 +11,6 @@ module API |
| 11 | 11 | # Example Request: |
| 12 | 12 | # POST /login?login=some&password=pass |
| 13 | 13 | get "/login" do |
| 14 | -environment = nil #FIXME load the correct environment create a method in helper | |
| 15 | 14 | user ||= User.authenticate(params[:login], params[:password], environment) |
| 16 | 15 | |
| 17 | 16 | return unauthorized! unless user | ... | ... |
lib/api/v1/articles.rb
| ... | ... | @@ -2,44 +2,55 @@ module API |
| 2 | 2 | module V1 |
| 3 | 3 | class Articles < Grape::API |
| 4 | 4 | |
| 5 | + before { detect_stuff_by_domain } | |
| 5 | 6 | before { authenticate! } |
| 6 | 7 | |
| 7 | 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 | 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 | 33 | else |
| 18 | - begin_date = first_update | |
| 19 | - end_date = DateTime.now | |
| 34 | + begin_period = from_date | |
| 35 | + end_period = DateTime.now | |
| 20 | 36 | end |
| 21 | 37 | |
| 22 | - limit = params[:limit].to_i | |
| 23 | - limit = 20 if limit == 0 | |
| 24 | 38 | conditions = {} |
| 25 | 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 | 42 | end |
| 29 | 43 | |
| 30 | - #FIXME load article with environment context | |
| 31 | 44 | get ':id' do |
| 32 | - present Article.find(params[:id]), :with => Entities::Article | |
| 45 | + present environment.articles.find(params[:id]), :with => Entities::Article | |
| 33 | 46 | end |
| 34 | 47 | |
| 35 | - #FIXME load article with environment context | |
| 36 | 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 | 50 | end |
| 39 | 51 | |
| 40 | - #FIXME load article with environment context | |
| 41 | 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 | 54 | end |
| 44 | 55 | |
| 45 | 56 | ... | ... |
lib/api/v1/comments.rb
| 1 | 1 | module API |
| 2 | 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 | 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 | 30 | end |
| 19 | - | |
| 20 | - end | |
| 21 | 31 | end |
| 22 | 32 | end | ... | ... |