Xwitter 0.3.0.1 → 0.4.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
  SHA256:
3
- metadata.gz: f4e6bcb2959064f032dbe69ce723dac00ce897d23ed51c786c094981414b3ed6
4
- data.tar.gz: 1dc433bc78c1d995df2068e830c42324f25747c4333f439e32f4011788850acc
3
+ metadata.gz: abdbb05a5cd81884154473636023b5040e1bb2a9803f451da0267b011178e82f
4
+ data.tar.gz: 8d6fb1088756eae4ca6a3b3e7fdfa59a90ee18a0212db47365466f325def55a2
5
5
  SHA512:
6
- metadata.gz: 3d9dd7529af133847d773bdd7608fe092d938524c0bd8cbd75d25582f11c054e29563a99572ba64c0bacf2c696ced2da47555dac2d6d4b30c178fff91c3a72c9
7
- data.tar.gz: 0e52ca5e37dd9551378c74158d5311ff480ce65241ff413e0e967998b701d1adcb7a99f945df3dbc6b6fbd88ccf723c550af1a328017c20819d4510ef708c649
6
+ metadata.gz: 45cf24ac6a2985ff2701fc823f64dda317547f1e6e093623785aefdf55c3541160845a1a399c8c1de924728ce4cbbd73632c958880363bb87695ce13ac977a8d
7
+ data.tar.gz: 0d92263a775c8151a6d4ea39fc4a2e3e170a35cf34992aa3f1a534b9c8c33b061d82e21ebe7a124cce3255b8d050c5264dd8cf0c9da5b05f9b83046d392b051f
data/Gemfile CHANGED
@@ -13,6 +13,7 @@ gem 'sass-rails', '~> 5.0'
13
13
  gem 'webpacker', '~> 3.5'
14
14
  gem 'react-rails'
15
15
  gem 'ridgepole'
16
+ gem "aws-sdk-s3", require: false
16
17
 
17
18
  gem 'uglifier', '>= 1.3.0'
18
19
  gem 'mini_racer', platforms: :ruby
data/Gemfile.lock CHANGED
@@ -43,6 +43,21 @@ GEM
43
43
  minitest (~> 5.1)
44
44
  tzinfo (~> 1.1)
45
45
  arel (9.0.0)
46
+ aws-eventstream (1.0.1)
47
+ aws-partitions (1.96.0)
48
+ aws-sdk-core (3.22.1)
49
+ aws-eventstream (~> 1.0)
50
+ aws-partitions (~> 1.0)
51
+ aws-sigv4 (~> 1.0)
52
+ jmespath (~> 1.0)
53
+ aws-sdk-kms (1.6.0)
54
+ aws-sdk-core (~> 3)
55
+ aws-sigv4 (~> 1.0)
56
+ aws-sdk-s3 (1.17.0)
57
+ aws-sdk-core (~> 3, >= 3.21.2)
58
+ aws-sdk-kms (~> 1)
59
+ aws-sigv4 (~> 1.0)
60
+ aws-sigv4 (1.0.3)
46
61
  babel-source (5.8.35)
47
62
  babel-transpiler (0.7.0)
48
63
  babel-source (>= 4.0, < 6)
@@ -82,6 +97,7 @@ GEM
82
97
  jbuilder (2.8.0)
83
98
  activesupport (>= 4.2.0)
84
99
  multi_json (>= 1.2)
100
+ jmespath (1.4.0)
85
101
  libv8 (6.7.288.46.1)
86
102
  listen (3.1.5)
87
103
  rb-fsevent (~> 0.9, >= 0.9.4)
@@ -217,6 +233,7 @@ PLATFORMS
217
233
  ruby
218
234
 
219
235
  DEPENDENCIES
236
+ aws-sdk-s3
220
237
  bcrypt (~> 3.1.7)
221
238
  bootsnap (>= 1.1.0)
222
239
  byebug
data/Installation.md ADDED
@@ -0,0 +1,25 @@
1
+ # yarn
2
+
3
+ Need node, npm, and yarn.
4
+
5
+ # Postgresql (production)
6
+
7
+ # Ridgepole
8
+
9
+ ```
10
+ $ ridgepole -c config/database.yml --apply
11
+ ```
12
+
13
+ ## Heroku
14
+
15
+ ```
16
+ $ heroku run 'bundle exec ridgepole -c config/database.yml -E production -f Schemafile --apply'
17
+ ```
18
+
19
+ # ImageMagick
20
+
21
+ ## Heroku (stack heroku-16)
22
+
23
+ ```
24
+ $ heroku buildpacks:add https://github.com/ello/heroku-buildpack-imagemagick
25
+ ```
data/Procfile ADDED
@@ -0,0 +1 @@
1
+ web: bin/rails server -p $PORT -e $RAILS_ENV
data/Schemafile CHANGED
@@ -32,6 +32,15 @@ create_table "messages", force: :cascade do |t|
32
32
  end
33
33
  add_foreign_key "messages", "users"
34
34
 
35
+ create_table "user_subscribe_topics", force: :cascade do |t|
36
+ t.bigint "user_id", null: false
37
+ t.string "topic", null: false
38
+ t.index ["user_id", "topic"], unique: true
39
+ t.index ["topic"]
40
+ t.datetime "created_at", null: false
41
+ end
42
+ add_foreign_key "user_subscribe_topics", "users"
43
+
35
44
  create_table "message_topics", force: :cascade, id: false do |t|
36
45
  t.string "topic", null: false
37
46
  t.bigint "message_id", null: false
@@ -14,3 +14,10 @@
14
14
  *= require_self
15
15
  */
16
16
  html, body { height: 100%; }
17
+
18
+ nav.left-nav {
19
+ width: 40px;
20
+ //height: 100%;
21
+ //float: left;
22
+ position: fixed;
23
+ }
@@ -15,6 +15,12 @@ body.theme-dark {
15
15
  body.theme-leaf {
16
16
  color: #162727;
17
17
  a { color: #20c728; }
18
+ .btn.btn-primary,
19
+ .btn.btn-success,
20
+ .btn.btn-warning,
21
+ .btn.btn-danger,
22
+ .btn.btn-dark,
23
+ .btn.btn-secondary, { color: #fff; }
18
24
  h1 {
19
25
  color: #384b54;
20
26
  }
@@ -0,0 +1,36 @@
1
+ class SubscriptionsController < ApplicationController
2
+ # GET /subscriptions
3
+ # GET /subscriptions.json
4
+ def index
5
+ @subscriptions = UserSubscribeTopic.where(user: current_user)
6
+ @subscription = UserSubscribeTopic.new(topic: topic)
7
+ end
8
+
9
+ # POST /subscriptions
10
+ # POST /subscriptions.json
11
+ def create
12
+ respond_to do |format|
13
+ if UserSubscribeTopic.create(topic: topic, user: current_user)
14
+ format.html { redirect_to '/subscriptions', notice: "You are subscribe #{topic}." }
15
+ else
16
+ format.html { render :index }
17
+ end
18
+ end
19
+ end
20
+
21
+ # DELETE /subscriptions/:topic
22
+ # DELETE /subscriptions/:topic.json
23
+ def destroy
24
+ UserSubscribeTopic.find_by(topic: params[:id], user: current_user).destroy
25
+ respond_to do |format|
26
+ format.html { redirect_to '/subscriptions', notice: "You are unsbscribe #{topic}" }
27
+ format.json { head :no_content }
28
+ end
29
+ end
30
+
31
+ private
32
+
33
+ def topic
34
+ params[:user_subscribe_topic][:topic] if params[:user_subscribe_topic]
35
+ end
36
+ end
@@ -1,7 +1,35 @@
1
1
  class TopicsController < ApplicationController
2
- # GET /users/1
3
- # GET /users/1.json
2
+ # GET /topic/:name
3
+ # GET /topic/:name.json
4
4
  def show
5
- @messages = Message.topic_of(params[:id])
5
+ @messages = Message.topic_of(topic)
6
+ end
7
+
8
+ # POST /topic/:name/subscribe
9
+ # POST /topic/:name/subscribe.json
10
+ def subscribe
11
+ respond_to do |format|
12
+ if UserSubscribeTopic.create(topic: topic, user: current_user)
13
+ format.html { redirect_to topic_path(topic), notice: "You are subscribe it." }
14
+ else
15
+ format.html { render :index }
16
+ end
17
+ end
18
+ end
19
+
20
+ # DELETE /topic/:name/subscribe
21
+ # DELETE /topic/:name/subscribe.json
22
+ def unsubscribe
23
+ UserSubscribeTopic.find_by(topic: params[:id], user: current_user).destroy
24
+ respond_to do |format|
25
+ format.html { redirect_to topic_path(topic), notice: "You are unsubscribe it." }
26
+ format.json { head :no_content }
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def topic
33
+ params[:id]
6
34
  end
7
35
  end
data/app/models/user.rb CHANGED
@@ -8,6 +8,7 @@ class User < ApplicationRecord
8
8
  has_many :observe_users, through: :observes, source: "to_user"
9
9
  has_many :observed, foreign_key: "to_user_id", class_name: "Observe"
10
10
  has_many :observed_users, through: :observed, source: "from_user"
11
+ has_many :subscribe_topics, class_name: 'UserSubscribeTopic'
11
12
 
12
13
  has_one_attached :profile_image
13
14
 
@@ -16,4 +17,8 @@ class User < ApplicationRecord
16
17
  def follow?(user)
17
18
  observe_users.include?(user)
18
19
  end
20
+
21
+ def subscribe_topic?(topic)
22
+ subscribe_topics.where(topic: topic).exists?
23
+ end
19
24
  end
@@ -0,0 +1,4 @@
1
+ class UserSubscribeTopic < ApplicationRecord
2
+ belongs_to :user
3
+ validates :topic, uniqueness: { scope: :user_id }
4
+ end
@@ -18,9 +18,20 @@ html
18
18
  body(class="theme-#{current_user.try(:theme)}")
19
19
  .navbar
20
20
  div
21
- = link_to '/', root_path, class: 'btn'
21
+ = link_to '', root_path, class: 'btn oi oi-home'
22
22
  - if @user.try(:persisted?)
23
23
  = link_to '@' + @user.name, '/' + @user.name, class: 'btn'
24
+ - if user_signed_in?
25
+ nav.left-nav
26
+ .navbar
27
+ = link_to '', '/' + current_user.name, class: 'btn oi oi-person'
28
+ .navbar
29
+ = link_to '', '/subscriptions', class: 'btn oi oi-folder'
30
+ .navbar
31
+ = link_to '', destroy_user_session_path, class: 'btn oi oi-power-standby',
32
+ method: :delete, data: { confirm: "Are you sure logout from 'Xwitter' ?" }
33
+ .navbar
34
+ = link_to '', root_path, class: 'btn oi oi-wrench'
24
35
 
25
36
  .container
26
37
  = yield
@@ -21,4 +21,5 @@
21
21
  .field
22
22
  = f.label :theme
23
23
  = f.select :theme, %w[dark leaf], include_blank: 'default'
24
- .actions = f.submit
24
+ .actions
25
+ = f.submit class: 'btn btn-primary'
@@ -0,0 +1,16 @@
1
+ h1 Your subscriptions
2
+ ul
3
+ - @subscriptions.each do |subscription|
4
+ li
5
+ = link_to subscription.topic, topic_path(subscription.topic)
6
+ | &nbsp;
7
+ = link_to 'Remove', subscription_path(subscription.topic), class: 'btn btn-sm btn-dark',
8
+ data: { confirm: "Are you sure remove '#{subscription.topic}' subscription?" }, method: :delete
9
+
10
+ h3 New subscribe
11
+ = form_for @subscription, url: '/subscriptions' do |f|
12
+ = f.label :topic, 'Name'
13
+ br
14
+ = f.text_field :topic
15
+ | &nbsp;
16
+ = f.submit 'Follow topic', class: 'btn btn-success'
@@ -1,2 +1,9 @@
1
- h1 Topic #{params[:id]}
1
+ - topic = params[:id]
2
+ h1
3
+ | Topic #{topic}&nbsp;
4
+ - if current_user.subscribe_topic?(topic)
5
+ = link_to 'Remove subscription', subscribe_topic_path(topic), method: :delete, class: 'btn btn-warning'
6
+ - else
7
+ = link_to 'Follow it', subscribe_topic_path(topic), method: :post, class: 'btn btn-success'
8
+
2
9
  = render 'messages/index', messages: @messages
@@ -41,7 +41,7 @@ Rails.application.configure do
41
41
  # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
42
42
 
43
43
  # Store uploaded files on the local file system (see config/storage.yml for options)
44
- config.active_storage.service = :local
44
+ config.active_storage.service = :amazon
45
45
 
46
46
  # Mount Action Cable outside main process or domain
47
47
  # config.action_cable.mount_path = nil
data/config/routes.rb CHANGED
@@ -1,7 +1,13 @@
1
1
  Rails.application.routes.draw do
2
2
  resource :profile
3
3
  resources :messages
4
- resources :topics, path: 'topic'
4
+ resources :subscriptions
5
+ resources :topics, path: 'topic' do
6
+ member do
7
+ post :subscribe
8
+ delete :subscribe, to: 'topics#unsubscribe'
9
+ end
10
+ end
5
11
  devise_for :users
6
12
  root 'messages#index'
7
13
  get ':username', to: 'profiles#show'
data/config/storage.yml CHANGED
@@ -6,13 +6,12 @@ local:
6
6
  service: Disk
7
7
  root: <%= Rails.root.join("storage") %>
8
8
 
9
- # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10
- # amazon:
11
- # service: S3
12
- # access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
13
- # secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
14
- # region: us-east-1
15
- # bucket: your_own_bucket
9
+ amazon:
10
+ service: S3
11
+ access_key_id: <%= ENV['BUCKETEER_AWS_ACCESS_KEY_ID'] %>
12
+ secret_access_key: <%= ENV['BUCKETEER_AWS_SECRET_ACCESS_KEY'] %>
13
+ region: <%= ENV['BUCKETEER_AWS_REGION'] %>
14
+ bucket: <%= ENV['BUCKETEER_BUCKET_NAME'] %>
16
15
 
17
16
  # Remember not to checkin your GCS keyfile to a repository
18
17
  # google:
@@ -1,3 +1,3 @@
1
1
  module Xwitter
2
- VERSION = "0.3.0.1"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Xwitter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - myun2
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-11-18 00:00:00.000000000 Z
11
+ date: 2018-11-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -51,7 +51,9 @@ files:
51
51
  - ".ruby-version"
52
52
  - Gemfile
53
53
  - Gemfile.lock
54
+ - Installation.md
54
55
  - LICENSE.txt
56
+ - Procfile
55
57
  - README.md
56
58
  - Rakefile
57
59
  - Schemafile
@@ -74,6 +76,7 @@ files:
74
76
  - app/controllers/follows_controller.rb
75
77
  - app/controllers/messages_controller.rb
76
78
  - app/controllers/profiles_controller.rb
79
+ - app/controllers/subscriptions_controller.rb
77
80
  - app/controllers/topics_controller.rb
78
81
  - app/helpers/application_helper.rb
79
82
  - app/helpers/messages_helper.rb
@@ -92,6 +95,7 @@ files:
92
95
  - app/models/message_topic.rb
93
96
  - app/models/observe.rb
94
97
  - app/models/user.rb
98
+ - app/models/user_subscribe_topic.rb
95
99
  - app/views/follows/followed.html.slim
96
100
  - app/views/follows/index.html.slim
97
101
  - app/views/layouts/application.html.slim
@@ -113,6 +117,7 @@ files:
113
117
  - app/views/profiles/edit.html.slim
114
118
  - app/views/profiles/show.html.slim
115
119
  - app/views/profiles/show.json.jbuilder
120
+ - app/views/subscriptions/index.html.slim
116
121
  - app/views/topics/show.html.slim
117
122
  - app/views/users/confirmations/new.html.erb
118
123
  - app/views/users/mailer/confirmation_instructions.html.erb