acts-as-messageable 0.2.1 → 0.3.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.
- data/.travis.yml +6 -0
- data/Gemfile +1 -0
- data/README.rdoc +59 -26
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/acts-as-messageable.gemspec +7 -3
- data/lib/acts-as-messageable.rb +1 -1
- data/lib/acts-as-messageable/acts-as-messageable.rb +29 -12
- data/lib/acts-as-messageable/message.rb +11 -1
- data/lib/generators/acts-as-messageable/migration/templates/migration.rb +4 -1
- data/spec/acts-as-messageable_spec.rb +31 -3
- data/spec/spec_helper.rb +2 -2
- data/spec/support/user.rb +4 -1
- metadata +28 -16
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.rdoc
CHANGED
@@ -2,55 +2,88 @@
|
|
2
2
|
= ActsAsMessageable
|
3
3
|
The Acts As Messageable allows communication between the models.
|
4
4
|
|
5
|
+
http://travis-ci.org/LTe/acts-as-messageable.png
|
6
|
+
|
7
|
+
|
5
8
|
== Usage
|
6
9
|
To use it, add it to your Gemfile:
|
7
10
|
|
8
|
-
|
11
|
+
gem 'acts-as-messageable'
|
9
12
|
|
10
13
|
== Post instalation
|
11
14
|
|
12
|
-
|
13
|
-
|
15
|
+
rails g acts-as-messageable:migration table_name # default 'messages'
|
16
|
+
rake db:migrate
|
14
17
|
|
15
18
|
== Usage
|
16
19
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
+
class User < ActiveRecord::Base
|
21
|
+
acts_as_messageable :table_name => "table_with_messages", # default 'messages'
|
22
|
+
:required => :body # default [:topic, :body]
|
20
23
|
end
|
21
24
|
|
22
25
|
== Send message
|
23
26
|
|
24
|
-
|
25
|
-
|
27
|
+
@alice = User.first
|
28
|
+
@bob = User.last
|
26
29
|
|
27
|
-
|
28
|
-
|
30
|
+
@alice.send_message(@bob, "Message topic", "Hi bob!")
|
31
|
+
@bob.send_message(@alice, "Re: Message topic", "Hi alice!")
|
29
32
|
|
30
|
-
|
33
|
+
=== With hash
|
34
|
+
|
35
|
+
@alice.send_message(@bob, { :body => "Hash body", :topic => "Hash topic" })
|
36
|
+
|
37
|
+
=== Custom required
|
38
|
+
|
39
|
+
In User model
|
40
|
+
class User < ActiveRecord::Base
|
41
|
+
acts_as_messageable :required => :body
|
42
|
+
end
|
43
|
+
|
44
|
+
@alice.send_message(@bob, { :body => "Hash body" })
|
45
|
+
or
|
46
|
+
@alice.send_message(@bob, "body")
|
47
|
+
|
48
|
+
==== Required sequence
|
31
49
|
|
32
|
-
@alice.messages -- all messages connected with @alice (inbox/outbox)
|
33
|
-
@alice.received_messages -- @alice inbox
|
34
|
-
@alice.sent_messages -- @alice outbox
|
35
50
|
|
36
|
-
|
51
|
+
class User < ActiveRecord::Base
|
52
|
+
acts_as_messageable :required => [:body, :topic]
|
53
|
+
end
|
37
54
|
|
38
|
-
|
39
|
-
@alice.messages.are_to(@bob) -- all message to @bob
|
40
|
-
@alice.messages.with_id(@id_of_message) -- message with id id_of_message
|
41
|
-
@alice.messages.readed -- all readed @alice messages
|
42
|
-
@alice.messages.unaded -- all unreaded @alice messages
|
55
|
+
@alice.send_message(@bob, "body", "topic")
|
43
56
|
|
44
|
-
|
57
|
+
== Conversation
|
58
|
+
@message = @alice.send_message(@bob, "Hello bob!", "How are you?")
|
59
|
+
@reply_message = @bob.reply_to(@message, "Re: Hello bob!", "I'm fine!")
|
45
60
|
|
46
|
-
|
47
|
-
|
61
|
+
@message.conversation #=> [@message, @reply_message]
|
62
|
+
@reply_message.conversation #=> [@message, @reply_message]
|
63
|
+
|
64
|
+
== New API
|
65
|
+
@alice.messages # all messages connected with @alice (inbox/outbox)
|
66
|
+
@alice.received_messages # @alice inbox
|
67
|
+
@alice.sent_messages # @alice outbox
|
68
|
+
|
69
|
+
@alice.deleted_messages # all messages connected with @alice (trash)
|
70
|
+
|
71
|
+
@alice.messages.are_from(@bob) # all message form @bob
|
72
|
+
@alice.messages.are_to(@bob) # all message to @bob
|
73
|
+
@alice.messages.with_id(@id_of_message) # message with id id_of_message
|
74
|
+
@alice.messages.readed # all readed @alice messages
|
75
|
+
@alice.messages.unaded # all unreaded @alice messages
|
76
|
+
|
77
|
+
You can use multiple filters at the same time
|
78
|
+
|
79
|
+
@alice.messages.are_from(@bob).are_to(@alice).readed # all message from @bob to @alice and readed
|
80
|
+
@alice.deleted_messages.are_from(@bob) # all deleted messages from @bob
|
48
81
|
|
49
82
|
=== Delete message
|
50
83
|
|
51
|
-
|
52
|
-
|
53
|
-
|
84
|
+
@alice.messages.process do |message|
|
85
|
+
message.delete
|
86
|
+
end
|
54
87
|
|
55
88
|
|
56
89
|
Copyright © 2011 Piotr Niełacny (http://ruby-blog.pl), released under the MIT license
|
data/Rakefile
CHANGED
@@ -16,7 +16,7 @@ Jeweler::Tasks.new do |gem|
|
|
16
16
|
gem.name = "acts-as-messageable"
|
17
17
|
gem.email = "piotr.nielacny@gmail.com"
|
18
18
|
gem.summary = "Make user messageable!;-)"
|
19
|
-
gem.homepage = "http://github.com/LTe/
|
19
|
+
gem.homepage = "http://github.com/LTe/acts-as-messageable"
|
20
20
|
gem.authors = ["Piotr Nielacny"]
|
21
21
|
# dependencies defined in Gemfile
|
22
22
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
data/acts-as-messageable.gemspec
CHANGED
@@ -5,16 +5,17 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{acts-as-messageable}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Piotr Nielacny"]
|
12
|
-
s.date = %q{2011-05-
|
12
|
+
s.date = %q{2011-05-31}
|
13
13
|
s.email = %q{piotr.nielacny@gmail.com}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"README.rdoc"
|
16
16
|
]
|
17
17
|
s.files = [
|
18
|
+
".travis.yml",
|
18
19
|
"Gemfile",
|
19
20
|
"MIT-LICENSE",
|
20
21
|
"README.rdoc",
|
@@ -32,7 +33,7 @@ Gem::Specification.new do |s|
|
|
32
33
|
"spec/spec_helper.rb",
|
33
34
|
"spec/support/user.rb"
|
34
35
|
]
|
35
|
-
s.homepage = %q{http://github.com/LTe/
|
36
|
+
s.homepage = %q{http://github.com/LTe/acts-as-messageable}
|
36
37
|
s.require_paths = ["lib"]
|
37
38
|
s.rubygems_version = %q{1.6.2}
|
38
39
|
s.summary = %q{Make user messageable!;-)}
|
@@ -42,6 +43,7 @@ Gem::Specification.new do |s|
|
|
42
43
|
|
43
44
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
44
45
|
s.add_runtime_dependency(%q<activerecord>, ["~> 3.0.0"])
|
46
|
+
s.add_runtime_dependency(%q<ancestry>, ["~> 1.2.4"])
|
45
47
|
s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
|
46
48
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
47
49
|
s.add_development_dependency(%q<jeweler>, ["~> 1.6.0"])
|
@@ -49,6 +51,7 @@ Gem::Specification.new do |s|
|
|
49
51
|
s.add_development_dependency(%q<sqlite3-ruby>, [">= 0"])
|
50
52
|
else
|
51
53
|
s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
|
54
|
+
s.add_dependency(%q<ancestry>, ["~> 1.2.4"])
|
52
55
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
53
56
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
54
57
|
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
@@ -57,6 +60,7 @@ Gem::Specification.new do |s|
|
|
57
60
|
end
|
58
61
|
else
|
59
62
|
s.add_dependency(%q<activerecord>, ["~> 3.0.0"])
|
63
|
+
s.add_dependency(%q<ancestry>, ["~> 1.2.4"])
|
60
64
|
s.add_dependency(%q<rspec>, ["~> 2.3.0"])
|
61
65
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
62
66
|
s.add_dependency(%q<jeweler>, ["~> 1.6.0"])
|
data/lib/acts-as-messageable.rb
CHANGED
@@ -9,7 +9,6 @@ module ActsAsMessageable
|
|
9
9
|
# Method make ActiveRecord::Base object messageable
|
10
10
|
# @param [Symbol] :table_name - table name for messages
|
11
11
|
def acts_as_messageable(options = {})
|
12
|
-
class_eval do
|
13
12
|
has_many :received_messages,
|
14
13
|
:as => :received_messageable,
|
15
14
|
:class_name => "ActsAsMessageable::Message",
|
@@ -18,15 +17,13 @@ module ActsAsMessageable
|
|
18
17
|
:as => :sent_messageable,
|
19
18
|
:class_name => "ActsAsMessageable::Message",
|
20
19
|
:dependent => :nullify
|
21
|
-
end
|
22
|
-
|
23
|
-
table_name = %q{set_table_name "#{options[:table_name] || "messages"}"}
|
24
|
-
ActsAsMessageable::Message.class_eval(table_name)
|
25
20
|
|
26
|
-
validation = %q{validates_presence_of options[:required] || [:topic ,:body]}
|
27
|
-
ActsAsMessageable::Message.class_eval(validation)
|
28
21
|
|
29
|
-
|
22
|
+
ActsAsMessageable::Message.set_table_name(options[:table_name] || "messages")
|
23
|
+
ActsAsMessageable::Message.validates_presence_of(options[:required] || [:topic ,:body])
|
24
|
+
ActsAsMessageable::Message.required = options[:required] || [:topic, :body]
|
25
|
+
|
26
|
+
include ActsAsMessageable::Model::InstanceMethods
|
30
27
|
end
|
31
28
|
|
32
29
|
end
|
@@ -51,11 +48,31 @@ module ActsAsMessageable
|
|
51
48
|
# @param [String] body
|
52
49
|
#
|
53
50
|
# @return [ActsAsMessageable::Message] the message object
|
54
|
-
def send_message(to,
|
55
|
-
|
51
|
+
def send_message(to, *args)
|
52
|
+
case args.first
|
53
|
+
when String
|
54
|
+
message_attributes = {}
|
55
|
+
ActsAsMessageable::Message.required.each_with_index do |attribute, index|
|
56
|
+
message_attributes[attribute] = args[index]
|
57
|
+
end
|
58
|
+
when Hash
|
59
|
+
message_attributes = args.first
|
60
|
+
end
|
61
|
+
|
62
|
+
message = ActsAsMessageable::Message.create! message_attributes
|
63
|
+
|
64
|
+
self.sent_messages << message
|
65
|
+
to.received_messages << message
|
66
|
+
|
67
|
+
message
|
68
|
+
end
|
69
|
+
|
70
|
+
def reply_to(message, topic, body)
|
71
|
+
reply_message = send_message(self, topic, body)
|
72
|
+
reply_message.parent = message
|
73
|
+
reply_message.save
|
56
74
|
|
57
|
-
|
58
|
-
to.received_messages << @message
|
75
|
+
reply_message
|
59
76
|
end
|
60
77
|
|
61
78
|
def delete_message(message)
|
@@ -1,5 +1,9 @@
|
|
1
|
+
require 'ancestry'
|
2
|
+
|
1
3
|
module ActsAsMessageable
|
2
4
|
class Message < ::ActiveRecord::Base
|
5
|
+
has_ancestry
|
6
|
+
|
3
7
|
belongs_to :received_messageable, :polymorphic => true
|
4
8
|
belongs_to :sent_messageable, :polymorphic => true
|
5
9
|
|
@@ -13,7 +17,9 @@ module ActsAsMessageable
|
|
13
17
|
:recipient_delete,
|
14
18
|
:sender_delete
|
15
19
|
|
16
|
-
attr_accessor :
|
20
|
+
attr_accessor :removed
|
21
|
+
cattr_accessor :required
|
22
|
+
|
17
23
|
|
18
24
|
# Sample documentation for scope
|
19
25
|
scope :are_from, lambda { |*args| where("sent_messageable_id = :sender", :sender => args.first) }
|
@@ -66,6 +72,10 @@ module ActsAsMessageable
|
|
66
72
|
received_messageable
|
67
73
|
end
|
68
74
|
|
75
|
+
def conversation
|
76
|
+
root.subtree
|
77
|
+
end
|
78
|
+
|
69
79
|
def delete
|
70
80
|
self.removed = true
|
71
81
|
end
|
@@ -6,12 +6,15 @@ class CreateMessagesTable < ActiveRecord::Migration
|
|
6
6
|
t.references :received_messageable, :polymorphic => true
|
7
7
|
t.references :sent_messageable, :polymorphic => true
|
8
8
|
t.boolean :opened, :default => false
|
9
|
-
t.boolean :opened, :default => false
|
10
9
|
t.boolean :recipient_delete, :default => false
|
11
10
|
t.boolean :sender_delete, :default => false
|
11
|
+
|
12
|
+
# ancestry
|
13
|
+
t.string :ancestry
|
12
14
|
end
|
13
15
|
|
14
16
|
add_index :<%= table_name %>, [:sent_messageable_id, :received_messageable_id], :name => "acts_as_messageable_ids"
|
17
|
+
add_index :<%= table_name %>, :ancestry
|
15
18
|
end
|
16
19
|
|
17
20
|
def self.down
|
@@ -18,7 +18,7 @@ describe "ActsAsMessageable" do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
it "bob should have one open message from alice" do
|
21
|
-
@alice.send_message(@bob, "Topic", "Message body")
|
21
|
+
@message = @alice.send_message(@bob, "Topic", "Message body")
|
22
22
|
@bob.messages.are_from(@alice).process do |m|
|
23
23
|
m.open
|
24
24
|
end
|
@@ -48,8 +48,8 @@ describe "ActsAsMessageable" do
|
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should be in database message with id ..." do
|
51
|
-
message_id = @bob.send_message(@alice, "Topic", "Message body").
|
52
|
-
@bob.messages.
|
51
|
+
message_id = @bob.send_message(@alice, "Topic", "Message body").id
|
52
|
+
@bob.messages.with_id(message_id).count.should == 1
|
53
53
|
end
|
54
54
|
|
55
55
|
it "message should have proper topic" do
|
@@ -58,4 +58,32 @@ describe "ActsAsMessageable" do
|
|
58
58
|
@bob.messages.first.topic == "Topic"
|
59
59
|
@bob.messages.first.body == "Message body"
|
60
60
|
end
|
61
|
+
|
62
|
+
it "bob send message to alice, and alice reply to bob message and show proper tree" do
|
63
|
+
@message = @bob.send_message(@alice, "Topic", "Body")
|
64
|
+
@reply_message = @alice.reply_to(@message, "Re: Topic", "Body")
|
65
|
+
|
66
|
+
@reply_message.conversation.size.should == 2
|
67
|
+
@reply_message.conversation.first.topic.should == "Topic"
|
68
|
+
@reply_message.conversation.last.topic.should == "Re: Topic"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "bob send message to alice, alice answer, and bob answer for alice answer" do
|
72
|
+
@message = @bob.send_message(@alice, "Topic", "Body")
|
73
|
+
@reply_message = @alice.reply_to(@message, "Re: Topic", "Body")
|
74
|
+
@reply_reply_message = @bob.reply_to(@reply_message, "Re: Re: Topic", "Body")
|
75
|
+
|
76
|
+
[@message, @reply_message, @reply_reply_message].each do |m|
|
77
|
+
m.conversation.size.should == 3
|
78
|
+
end
|
79
|
+
|
80
|
+
@message.conversation.last.should == @reply_reply_message
|
81
|
+
@reply_reply_message.conversation.last.should == @reply_reply_message
|
82
|
+
end
|
83
|
+
|
84
|
+
it "send message with hash" do
|
85
|
+
@message = @bob.send_message(@alice, {:body => "Body", :topic => "Topic"})
|
86
|
+
@message.topic.should == "Topic"
|
87
|
+
@message.body.should == "Body"
|
88
|
+
end
|
61
89
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -33,13 +33,13 @@ def create_database
|
|
33
33
|
t.references :received_messageable, :polymorphic => true
|
34
34
|
t.references :sent_messageable, :polymorphic => true
|
35
35
|
t.boolean :opened, :default => false
|
36
|
-
t.boolean :opened, :default => false
|
37
36
|
t.boolean :recipient_delete, :default => false
|
38
37
|
t.boolean :sender_delete, :default => false
|
38
|
+
t.string :ancestry
|
39
39
|
end
|
40
40
|
|
41
41
|
create_table :users do |t|
|
42
|
-
t.string
|
42
|
+
t.string :email
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/spec/support/user.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts-as-messageable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,12 +9,12 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-05-
|
12
|
+
date: 2011-05-31 00:00:00.000000000 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activerecord
|
17
|
-
requirement: &
|
17
|
+
requirement: &5338400 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
@@ -22,10 +22,21 @@ dependencies:
|
|
22
22
|
version: 3.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *5338400
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: ancestry
|
28
|
+
requirement: &5337340 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.2.4
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *5337340
|
26
37
|
- !ruby/object:Gem::Dependency
|
27
38
|
name: rspec
|
28
|
-
requirement: &
|
39
|
+
requirement: &5335900 !ruby/object:Gem::Requirement
|
29
40
|
none: false
|
30
41
|
requirements:
|
31
42
|
- - ~>
|
@@ -33,10 +44,10 @@ dependencies:
|
|
33
44
|
version: 2.3.0
|
34
45
|
type: :development
|
35
46
|
prerelease: false
|
36
|
-
version_requirements: *
|
47
|
+
version_requirements: *5335900
|
37
48
|
- !ruby/object:Gem::Dependency
|
38
49
|
name: bundler
|
39
|
-
requirement: &
|
50
|
+
requirement: &5334660 !ruby/object:Gem::Requirement
|
40
51
|
none: false
|
41
52
|
requirements:
|
42
53
|
- - ~>
|
@@ -44,10 +55,10 @@ dependencies:
|
|
44
55
|
version: 1.0.0
|
45
56
|
type: :development
|
46
57
|
prerelease: false
|
47
|
-
version_requirements: *
|
58
|
+
version_requirements: *5334660
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: jeweler
|
50
|
-
requirement: &
|
61
|
+
requirement: &5333300 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - ~>
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: 1.6.0
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *5333300
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: rcov
|
61
|
-
requirement: &
|
72
|
+
requirement: &5331960 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ! '>='
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: '0'
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *5331960
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: sqlite3-ruby
|
72
|
-
requirement: &
|
83
|
+
requirement: &5251020 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ! '>='
|
@@ -77,7 +88,7 @@ dependencies:
|
|
77
88
|
version: '0'
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *5251020
|
81
92
|
description:
|
82
93
|
email: piotr.nielacny@gmail.com
|
83
94
|
executables: []
|
@@ -85,6 +96,7 @@ extensions: []
|
|
85
96
|
extra_rdoc_files:
|
86
97
|
- README.rdoc
|
87
98
|
files:
|
99
|
+
- .travis.yml
|
88
100
|
- Gemfile
|
89
101
|
- MIT-LICENSE
|
90
102
|
- README.rdoc
|
@@ -102,7 +114,7 @@ files:
|
|
102
114
|
- spec/spec_helper.rb
|
103
115
|
- spec/support/user.rb
|
104
116
|
has_rdoc: true
|
105
|
-
homepage: http://github.com/LTe/
|
117
|
+
homepage: http://github.com/LTe/acts-as-messageable
|
106
118
|
licenses: []
|
107
119
|
post_install_message:
|
108
120
|
rdoc_options: []
|
@@ -116,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
116
128
|
version: '0'
|
117
129
|
segments:
|
118
130
|
- 0
|
119
|
-
hash:
|
131
|
+
hash: 4035680522358941194
|
120
132
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
133
|
none: false
|
122
134
|
requirements:
|