Commit ef06ad0b9b491ab2a8bd8f4767c22720d470abe5
Committed by
Rodrigo Souto
1 parent
c6b5c34e
Exists in
api_tasks
and in
4 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 | ... | ... |