social_stream 2.0.4 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (120) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.rdoc +2 -1
  4. data/base/README.rdoc +2 -0
  5. data/base/app/assets/javascripts/social_stream/relation_customs.js +8 -3
  6. data/base/app/assets/javascripts/social_stream/timeline.js +1 -2
  7. data/base/app/assets/javascripts/social_stream/wall.js +11 -0
  8. data/base/app/assets/stylesheets/social_stream/base/contacts/_contacts.css.sass +1 -0
  9. data/base/app/assets/stylesheets/social_stream/base/contacts/layouts/_contacts.css.sass +1 -42
  10. data/base/app/assets/stylesheets/social_stream/base/footer/layout/_footer.css.sass +3 -2
  11. data/base/app/assets/stylesheets/social_stream/base/layouts/_layout.css.sass +4 -1
  12. data/base/app/assets/stylesheets/social_stream/base/mixins/_layout.css.sass +48 -0
  13. data/base/app/assets/stylesheets/social_stream/base/profile/_profile.css.sass +21 -25
  14. data/base/app/assets/stylesheets/social_stream/base/sidebar/_sidebar.css.sass +1 -27
  15. data/base/app/assets/stylesheets/social_stream/base/sidebar/layout/_sidebar.css.sass +1 -24
  16. data/base/app/assets/stylesheets/social_stream/base/toolbar/_toolbar.css.sass +2 -11
  17. data/base/app/assets/stylesheets/social_stream/base/toolbar/layout/_toolbar.css.sass +18 -5
  18. data/base/app/controllers/contacts_controller.rb +17 -22
  19. data/base/app/controllers/permissions_controller.rb +3 -1
  20. data/base/app/helpers/contacts_helper.rb +9 -14
  21. data/base/app/models/actor.rb +28 -2
  22. data/base/app/models/contact.rb +18 -1
  23. data/base/app/models/permission.rb +21 -1
  24. data/base/app/models/relation.rb +14 -15
  25. data/base/app/models/relation/custom.rb +27 -24
  26. data/base/app/views/activities/_new.html.erb +1 -1
  27. data/base/app/views/contacts/{_link_custom.html.erb → _button.html.erb} +0 -0
  28. data/base/app/views/contacts/_contact.html.erb +1 -1
  29. data/base/app/views/contacts/index.html.erb +1 -1
  30. data/base/app/views/devise/passwords/new.html.erb +6 -8
  31. data/base/app/views/devise/registrations/new.html.erb +5 -7
  32. data/base/app/views/layouts/application.html.erb +7 -8
  33. data/base/app/views/permissions/_index.html.erb +12 -12
  34. data/base/app/views/permissions/_list.html.erb +10 -0
  35. data/base/app/views/permissions/index.js.erb +1 -15
  36. data/base/app/views/posts/create.js.erb +5 -4
  37. data/base/app/views/profiles/_personal.html.erb +2 -2
  38. data/base/app/views/relation/customs/_custom.html.erb +2 -27
  39. data/base/app/views/relation/customs/_form.html.erb +1 -1
  40. data/base/app/views/relation/customs/_index.html.erb +1 -1
  41. data/base/app/views/relation/customs/_list.html.erb +5 -4
  42. data/base/app/views/relation/customs/index.html.erb +1 -1
  43. data/base/app/views/relations/_relation.html.erb +33 -0
  44. data/base/config/locales/en.yml +10 -5
  45. data/base/config/locales/es.yml +20 -40
  46. data/base/config/locales/pt.yml +5 -1
  47. data/base/config/locales/zh.yml +17 -9
  48. data/base/lib/generators/social_stream/base/install_generator.rb +0 -4
  49. data/base/lib/generators/social_stream/base/templates/initializer.rb +24 -0
  50. data/base/lib/social_stream/base.rb +70 -0
  51. data/base/lib/social_stream/base/ability.rb +13 -1
  52. data/base/lib/social_stream/base/version.rb +1 -1
  53. data/base/lib/social_stream/test_helpers/controllers.rb +12 -6
  54. data/base/social_stream-base.gemspec +1 -1
  55. data/base/spec/controllers/permissions_controller_spec.rb +2 -6
  56. data/documents/app/assets/stylesheets/social_stream-documents.css.sass +2 -0
  57. data/documents/app/assets/stylesheets/social_stream/documents/explore/_explore-documents.css.sass +1 -2
  58. data/documents/app/assets/stylesheets/social_stream/documents/explore/layout/_explore-documents.css.sass +2 -13
  59. data/documents/app/assets/stylesheets/social_stream/documents/mixins/_mixins.css.sass +19 -0
  60. data/documents/lib/social_stream-documents.rb +0 -2
  61. data/documents/lib/social_stream/documents/version.rb +1 -1
  62. data/documents/social_stream-documents.gemspec +1 -1
  63. data/events/lib/social_stream/events/version.rb +1 -1
  64. data/events/social_stream-events.gemspec +1 -1
  65. data/lib/social_stream/version.rb +1 -1
  66. data/linkser/app/assets/javascripts/social_stream/linkser.wall.js +11 -14
  67. data/linkser/app/views/links/create.js.erb +3 -4
  68. data/linkser/lib/social_stream/linkser/version.rb +1 -1
  69. data/linkser/social_stream-linkser.gemspec +1 -1
  70. data/oauth2_server/app/assets/stylesheets/social_stream-oauth2_server.css.sass +1 -1
  71. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/applications/_applications-oauth2server.css.sass +1 -1
  72. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/applications/layout/_applications-oauth2server.css.sass +4 -0
  73. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/create/_create-oauth2server.css.sass +3 -7
  74. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/mixins/_mixin.css.sass +10 -0
  75. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/show/layout/_show-oauth2server.css.sass +15 -6
  76. data/oauth2_server/app/controllers/site/clients_controller.rb +14 -11
  77. data/oauth2_server/app/models/relation/manager.rb +19 -0
  78. data/oauth2_server/app/models/site/client.rb +10 -6
  79. data/oauth2_server/app/views/site/clients/_avatar.html.erb +15 -0
  80. data/oauth2_server/app/views/site/clients/_edit.html.erb +6 -0
  81. data/oauth2_server/app/views/site/clients/_edit_step_2.html.erb +11 -0
  82. data/oauth2_server/app/views/site/clients/_edit_step_3.html.erb +10 -0
  83. data/oauth2_server/app/views/site/clients/_list.html.erb +20 -17
  84. data/oauth2_server/app/views/site/clients/edit.html.erb +5 -6
  85. data/oauth2_server/app/views/site/clients/index.html.erb +1 -1
  86. data/oauth2_server/app/views/site/clients/new.html.erb +4 -2
  87. data/oauth2_server/app/views/site/clients/show.html.erb +49 -42
  88. data/oauth2_server/config/locales/en.yml +21 -3
  89. data/oauth2_server/config/locales/es.yml +26 -11
  90. data/oauth2_server/config/locales/zh.yml +25 -0
  91. data/oauth2_server/db/migrate/20130619134332_site_client_admin_to_manager.rb +24 -0
  92. data/oauth2_server/lib/social_stream-oauth2_server.rb +1 -19
  93. data/oauth2_server/lib/social_stream/oauth2_server.rb +33 -5
  94. data/oauth2_server/lib/social_stream/oauth2_server/ability.rb +23 -0
  95. data/oauth2_server/lib/social_stream/oauth2_server/engine.rb +6 -0
  96. data/oauth2_server/lib/social_stream/oauth2_server/models/actor.rb +2 -2
  97. data/oauth2_server/lib/social_stream/oauth2_server/version.rb +1 -1
  98. data/oauth2_server/social_stream-oauth2_server.gemspec +1 -1
  99. data/oauth2_server/spec/controllers/site_clients_controller_authorization_spec.rb +112 -0
  100. data/oauth2_server/spec/factories/site_client.rb +2 -2
  101. data/oauth2_server/spec/models/site/client_authorization_spec.rb +20 -0
  102. data/ostatus/lib/social_stream-ostatus.rb +0 -4
  103. data/ostatus/lib/social_stream/ostatus/engine.rb +11 -0
  104. data/ostatus/lib/social_stream/ostatus/version.rb +1 -1
  105. data/ostatus/social_stream-ostatus.gemspec +1 -1
  106. data/places/config/locales/en.yml +0 -1
  107. data/places/config/locales/es.yml +1 -2
  108. data/presence/lib/social_stream/presence/version.rb +1 -1
  109. data/presence/social_stream-presence.gemspec +1 -1
  110. data/social_stream.gemspec +7 -7
  111. metadata +30 -26
  112. data/base/app/helpers/permissions_helper.rb +0 -21
  113. data/base/lib/generators/social_stream/base/templates/relations.yml +0 -39
  114. data/oauth2_server/app/assets/stylesheets/social_stream/oauth2_server/mixins/_mixins.css.sass +0 -5
  115. data/oauth2_server/app/models/relation/admin.rb +0 -9
  116. data/oauth2_server/app/views/site/clients/_form_step1.html.erb +0 -7
  117. data/oauth2_server/app/views/site/clients/_form_step2.html.erb +0 -20
  118. data/ostatus/app/decorators/social_stream/base/relation/custom_decorator.rb +0 -3
  119. data/ostatus/lib/social_stream/ostatus/models/relation/custom.rb +0 -22
  120. data/spec/dummy/config/relations.yml +0 -39
@@ -23,10 +23,6 @@ class SocialStream::Base::InstallGenerator < Rails::Generators::Base #:nodoc:
23
23
  copy_file 'initializer.rb', 'config/initializers/social_stream.rb'
24
24
  end
25
25
 
26
- def create_config_relations_file
27
- copy_file 'relations.yml', 'config/relations.yml'
28
- end
29
-
30
26
  def create_config_sphinx_file
31
27
  copy_file 'sphinx.yml', 'config/sphinx.yml'
32
28
  end
@@ -20,6 +20,30 @@ SocialStream.setup do |config|
20
20
  #
21
21
  # config.relation_model = :custom
22
22
 
23
+ # Config the default relations that will be created and customized by actors
24
+ # config.custom_relations = {
25
+ # user: {
26
+ # friend: {
27
+ # name: "friend",
28
+ # permissions: [
29
+ # [ 'follow' ],
30
+ # [ 'create', 'activity' ],
31
+ # [ 'read', 'activity' ]
32
+ # ]
33
+ # },
34
+ # group: {
35
+ # member: {
36
+ # name: "member",
37
+ # permissions: [
38
+ # [ 'represent' ],
39
+ # [ 'create', 'activity' ],
40
+ # [ 'read', 'activity' ],
41
+ # [ 'read', 'tie' ]
42
+ # ]
43
+ # },
44
+ # 'site/current' => {}
45
+ # }
46
+
23
47
  # Configure the type of actors that are suggested in the sidebar
24
48
  #
25
49
  # config.suggested_models = [ :user, :group ]
@@ -25,6 +25,76 @@ module SocialStream
25
25
  mattr_accessor :single_relations
26
26
  @@single_relations = [ :public, :follow, :reject ]
27
27
 
28
+ mattr_accessor :custom_relations
29
+ @@custom_relations = {
30
+ 'user' => {
31
+ 'friend' => {
32
+ 'name' => 'friend',
33
+ 'permissions' => [
34
+ [ 'follow' ],
35
+ [ 'create', 'activity' ],
36
+ [ 'read', 'activity' ]
37
+ ]
38
+ },
39
+ 'acquaintance' => {
40
+ 'name' => 'acquaintance',
41
+ 'permissions' => [
42
+ [ 'read', 'activity' ]
43
+ ]
44
+ },
45
+ 'colleague' => {
46
+ 'name' => 'colleague',
47
+ 'permissions' => [
48
+ [ 'follow' ],
49
+ [ 'create', 'activity' ],
50
+ [ 'read', 'activity' ]
51
+ ]
52
+ }
53
+ },
54
+ 'group' => {
55
+ 'member' => {
56
+ 'name' => 'member',
57
+ 'permissions' => [
58
+ [ 'represent' ],
59
+ [ 'create', 'activity' ],
60
+ [ 'read', 'activity' ],
61
+ [ 'read', 'tie' ]
62
+ ]
63
+ },
64
+ 'partner' => {
65
+ 'name' => 'partner',
66
+ 'permissions' => [
67
+ [ 'read', 'activity' ]
68
+ ]
69
+ }
70
+ },
71
+ 'site/current' => {}
72
+ }
73
+
74
+ mattr_accessor :list_relations
75
+ @@list_relations = {
76
+ user: [],
77
+ group: []
78
+ }
79
+
80
+ mattr_accessor :available_permissions
81
+ @@available_permissions = {
82
+ 'user' => [
83
+ [ "read", "activity" ],
84
+ [ "create", "activity" ],
85
+ [ "follow", nil ],
86
+ [ "represent", nil ],
87
+ [ "notify", nil ]
88
+ ],
89
+ 'group' => [
90
+ [ "read", "activity" ],
91
+ [ "create", "activity" ],
92
+ [ "follow", nil ],
93
+ [ "represent", nil ],
94
+ [ "notify", nil ]
95
+ ]
96
+ }
97
+
28
98
  mattr_accessor :suggested_models
29
99
  @@suggested_models = [ :user, :group ]
30
100
 
@@ -59,6 +59,13 @@ module SocialStream
59
59
  a.audience.include?(subject.actor)
60
60
  end
61
61
 
62
+ can :read, Contact
63
+
64
+ can :manage, Contact do |c|
65
+ c.sender == subject.actor ||
66
+ c.sender.allow?(subject, 'manage', 'contact')
67
+ end
68
+
62
69
  # Users
63
70
  can :read, User
64
71
 
@@ -90,7 +97,12 @@ module SocialStream
90
97
  end
91
98
 
92
99
  # Privacy
93
- can [:create, :read, :update, :destroy], ::Relation::Custom, :actor_id => subject.try(:actor_id)
100
+ can :manage, ::Relation::Custom do |r|
101
+ subject.present? && (
102
+ r.actor_id == subject.actor_id ||
103
+ r.actor.allow?(subject, 'manage', 'relation/custom')
104
+ )
105
+ end
94
106
  end
95
107
  end
96
108
  end
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Base
3
- VERSION = "2.0.4".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
@@ -13,6 +13,12 @@ module SocialStream
13
13
  model_class.to_s.underscore.to_sym
14
14
  end
15
15
 
16
+ # :client for Site::ClientsController
17
+ def demodulized_model_sym
18
+ @demodulized_model_sym ||=
19
+ model_class.to_s.demodulize.underscore.to_sym
20
+ end
21
+
16
22
  # Factory.attributes_for(:post) for PostsController
17
23
  def model_attributes
18
24
  @model_attributes ||=
@@ -42,7 +48,7 @@ module SocialStream
42
48
  count = model_count
43
49
  post :create, attributes
44
50
 
45
- resource = assigns(model_sym)
51
+ resource = assigns(demodulized_model_sym)
46
52
 
47
53
  model_count.should eq(count + 1)
48
54
  resource.should be_valid
@@ -58,7 +64,7 @@ module SocialStream
58
64
  rescue CanCan::AccessDenied
59
65
  end
60
66
 
61
- resource = assigns(model_sym)
67
+ resource = assigns(demodulized_model_sym)
62
68
 
63
69
  model_count.should eq(count)
64
70
  resource.should be_new_record
@@ -88,7 +94,7 @@ module SocialStream
88
94
  it "should update" do
89
95
  put :update, updating_attributes
90
96
 
91
- resource = assigns(model_sym)
97
+ resource = assigns(demodulized_model_sym)
92
98
 
93
99
  resource.should_receive(:update_attributes).with(attributes)
94
100
  assert resource.valid?
@@ -103,7 +109,7 @@ module SocialStream
103
109
  rescue CanCan::AccessDenied
104
110
  end
105
111
 
106
- resource = assigns(model_sym)
112
+ resource = assigns(demodulized_model_sym)
107
113
 
108
114
  resource.should_not_receive(:update_attributes)
109
115
  end
@@ -114,7 +120,7 @@ module SocialStream
114
120
  count = model_count
115
121
  delete :destroy, :id => @current_model.to_param
116
122
 
117
- resource = assigns(model_sym)
123
+ resource = assigns(demodulized_model_sym)
118
124
 
119
125
  model_count.should eq(count - 1)
120
126
  end
@@ -128,7 +134,7 @@ module SocialStream
128
134
  rescue CanCan::AccessDenied
129
135
  end
130
136
 
131
- resource = assigns(model_sym)
137
+ resource = assigns(demodulized_model_sym)
132
138
 
133
139
  model_count.should eq(count)
134
140
  end
@@ -59,7 +59,7 @@ Gem::Specification.new do |s|
59
59
  # Syntactically Awesome Stylesheets
60
60
  s.add_runtime_dependency('sass-rails', '>= 3.1.0')
61
61
  # Bootstrap for Sass
62
- s.add_runtime_dependency('bootstrap-sass', '~> 2.3.1.0')
62
+ s.add_runtime_dependency('bootstrap-sass', '~> 2.3.2.0')
63
63
  # Customize ERB views
64
64
  s.add_runtime_dependency('deface', '~> 0.9.1')
65
65
  # Autolink text blocks
@@ -30,13 +30,9 @@ describe PermissionsController do
30
30
  end
31
31
 
32
32
  it "should not render index" do
33
- begin
33
+ expect {
34
34
  get :index, :relation_id => @relation.id, :format => "html"
35
-
36
- assert false
37
- rescue ActiveRecord::RecordNotFound
38
- assigns(:permissions).should be_nil
39
- end
35
+ }.to raise_error(CanCan::AccessDenied)
40
36
  end
41
37
  end
42
38
  end
@@ -1,3 +1,5 @@
1
+ @import "social_stream/documents/mixins/mixins"
2
+
1
3
  @import "social_stream/documents/responsive/responsive-1200px-min"
2
4
  @import "social_stream/documents/responsive/responsive-768px-979px"
3
5
  @import "social_stream/documents/responsive/responsive-767px-max"
@@ -5,8 +5,7 @@
5
5
  .audio,
6
6
  .video,
7
7
  .document
8
- .author
9
- font-size: 13px
8
+ @mixin docs-style
10
9
  .actions
11
10
  color: $gray
12
11
  font-size: 12px
@@ -6,16 +6,5 @@
6
6
  .audio,
7
7
  .video,
8
8
  .document
9
- display: inline
10
- @include makeColumn(3, 0)
11
- margin-left: 19px
12
- margin-bottom: 14px
13
- .thumb
14
- @include makeColumnoMargin(1, 0)
15
- display: inline
16
- margin-top: 14px
17
- .brifing
18
- @include makeColumnoMargin(2, 0)
19
- display: inline-block
20
- .author
21
- margin-top: -10px
9
+ @include docs-layout
10
+ @include docs-style
@@ -0,0 +1,19 @@
1
+ @mixin docs-style
2
+ .author
3
+ font-size: 13px
4
+
5
+
6
+ @mixin docs-layout
7
+ display: inline
8
+ @include makeColumn(3, 0)
9
+ margin-left: 19px
10
+ margin-bottom: 14px
11
+ .thumb
12
+ @include makeColumnoMargin(1, 0)
13
+ display: inline
14
+ margin-top: 14px
15
+ .brifing
16
+ @include makeColumnoMargin(2, 0)
17
+ display: inline-block
18
+ .author
19
+ margin-top: -10px
@@ -5,9 +5,7 @@ module SocialStream
5
5
  module Models
6
6
  autoload :ActivityObject, 'social_stream/documents/models/activity_object'
7
7
  end
8
- end
9
8
 
10
- module Documents
11
9
  # Picture thumbnails
12
10
  mattr_accessor :picture_styles
13
11
  @@picture_styles = {
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Documents
3
- VERSION = "2.0.4".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 2.0.4')
15
+ s.add_runtime_dependency('social_stream-base', '~> 2.1.0')
16
16
 
17
17
  s.add_runtime_dependency('paperclip','~> 3.3.0')
18
18
  s.add_runtime_dependency('paperclip-ffmpeg', '~> 0.9.0')
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Events
3
- VERSION = "2.0.2".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 2.0.4')
15
+ s.add_runtime_dependency('social_stream-base', '~> 2.1.0')
16
16
  s.add_runtime_dependency('rails-scheduler', '~> 0.1.2')
17
17
 
18
18
  # Development Gem dependencies
@@ -1,3 +1,3 @@
1
1
  module SocialStream
2
- VERSION = "2.0.4".freeze
2
+ VERSION = "2.1.0".freeze
3
3
  end
@@ -1,6 +1,8 @@
1
+ //= require social_stream/callback
1
2
  //= require social_stream/wall
2
3
 
3
4
  SocialStream.Linkser.Wall = (function(SS, $) {
5
+ var callback = new SS.Callback();
4
6
  var regexp = /^(http|ftp|https):\/\/[\w-]+(\.[\w-]+)+([\w.,@?^=%&;:\/~+#-]*[\w@?^=%&;\/~+#-])?$/
5
7
 
6
8
  var urlDetect = function() {
@@ -47,20 +49,16 @@ SocialStream.Linkser.Wall = (function(SS, $) {
47
49
  } else {
48
50
  if ($('#post_text').data('link')) {
49
51
  $('#post_text').data('link', false);
50
- resetWallInput({ postText: false });
52
+ resetWallInput();
51
53
  }
52
54
  }
53
55
  };
54
56
 
55
- var resetWallInput = function(options) {
57
+ var resetWallInput = function() {
56
58
  $("#link_preview").hide().html('');
57
59
  $("#link_url").val("");
58
60
  SS.Wall.changeAction();
59
61
  SS.Wall.changeParams('post');
60
-
61
- if (options.postText) {
62
- $('#post_text').val('');
63
- }
64
62
  };
65
63
 
66
64
  var showLoading = function() {
@@ -82,14 +80,13 @@ SocialStream.Linkser.Wall = (function(SS, $) {
82
80
  };
83
81
 
84
82
 
85
- var create = function() {
86
- resetWallInput({ postText: true });
87
- };
83
+ SS.Wall.callbackRegister('show', init);
88
84
 
89
- SocialStream.Wall.callbackRegister('show', init);
90
-
91
- return {
92
- create: create
93
- };
85
+ callback.register('new_',
86
+ SS.Wall.new_,
87
+ resetWallInput);
88
+
89
+ return callback.extend({
90
+ });
94
91
 
95
92
  })(SocialStream, jQuery);
@@ -1,6 +1,5 @@
1
1
  //Display the new post
2
- $(".timeline").prepend("<%= escape_javascript(render @link.post_activity) %>");
2
+ $(".timeline").prepend("<%= escape_javascript render(@link.post_activity) %>");
3
3
 
4
- SocialStream.Timeline.update();
5
-
6
- SocialStream.Linkser.Wall.create();
4
+ SocialStream.Timeline.update("<%= escape_javascript dom_id(@link.post_activity) %>");
5
+ SocialStream.Linkser.Wall.new_();
@@ -1,5 +1,5 @@
1
1
  module SocialStream
2
2
  module Linkser
3
- VERSION = "2.0.0".freeze
3
+ VERSION = "2.1.0".freeze
4
4
  end
5
5
  end
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.files = `git ls-files`.split("\n")
13
13
 
14
14
  # Gem dependencies
15
- s.add_runtime_dependency('social_stream-base', '~> 2.0.0')
15
+ s.add_runtime_dependency('social_stream-base', '~> 2.1.0')
16
16
  s.add_runtime_dependency('linkser', '~> 0.0.12')
17
17
  # Development Gem dependencies
18
18
  s.add_development_dependency('sqlite3-ruby')