ramen-rails 0.0.7 → 0.0.8
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 +4 -4
- data/Gemfile.lock +1 -1
- data/lib/rails/generators/ramen/config/ramen.rb.erb +15 -7
- data/lib/ramen-rails/config.rb +6 -1
- data/lib/ramen-rails/ramen_after_filter.rb +3 -24
- data/lib/ramen-rails/script_tag.rb +8 -6
- data/lib/ramen-rails/version.rb +1 -1
- data/ramen-rails.gemspec +2 -2
- data/spec/lib/config_spec.rb +0 -4
- data/spec/lib/ramen_after_filter_spec.rb +48 -10
- data/spec/lib/script_tag_helper_spec.rb +38 -5
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0304673a1479bb4520012e46b5b5c3bcc04b0921
|
4
|
+
data.tar.gz: ac116b3c00a3f5f47ddafc7d03e2e4bef8712a4d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: baf021f697ff2ed7a24b52feb9598a87f7180dac43ad3966186af524d5bbaa5ec02006f17689cbcff23a660547bf63e75315c8479637918c81536f9fddcb2a4c
|
7
|
+
data.tar.gz: bc3321d94ebc3f498492a316cdd016a452433d526bcf94dd07920afe0aa6b0eca14270cca73ae3c029c962037320ff599688034aa25ee82cbc80c0743465ca4a
|
data/Gemfile.lock
CHANGED
@@ -37,12 +37,20 @@ RamenRails.config do |config|
|
|
37
37
|
# config.current_user_value = Proc.new { current_user_value }
|
38
38
|
|
39
39
|
|
40
|
-
##
|
41
|
-
##
|
42
|
-
##
|
43
|
-
##
|
44
|
-
##
|
40
|
+
## Custom Links to add to the Ramen Tray
|
41
|
+
## You can add up to 3. Each requires a `title`.
|
42
|
+
## Each requires a `callback` or an `href`.
|
43
|
+
## Links w/ `href` will have target="_blank".
|
44
|
+
## Callbacks are *strings* not JS functions.
|
45
45
|
#
|
46
|
-
# config.
|
47
|
-
|
46
|
+
# config.custom_links = [
|
47
|
+
# {
|
48
|
+
# title: "Submit a bug",
|
49
|
+
# callback: "$('#submit_bug').modal('show')" #<-- String!
|
50
|
+
# },
|
51
|
+
# {
|
52
|
+
# title: "Knowledge Base",
|
53
|
+
# href: "/knowedge_base"
|
54
|
+
# }
|
55
|
+
# ]
|
48
56
|
end
|
data/lib/ramen-rails/config.rb
CHANGED
@@ -4,7 +4,12 @@ module RamenRails
|
|
4
4
|
|
5
5
|
class << self
|
6
6
|
|
7
|
-
attr_accessor :manual_opt_in,
|
7
|
+
attr_accessor :manual_opt_in,
|
8
|
+
:environment,
|
9
|
+
:return_url,
|
10
|
+
:return_label,
|
11
|
+
:ramen_js_asset_uri,
|
12
|
+
:custom_links
|
8
13
|
|
9
14
|
def ensure_not_lambda!(v)
|
10
15
|
if v.lambda?
|
@@ -127,30 +127,10 @@ module RamenRails
|
|
127
127
|
nil
|
128
128
|
end
|
129
129
|
|
130
|
-
def
|
131
|
-
|
132
|
-
|
133
|
-
begin
|
134
|
-
company = controller.instance_eval(&RamenRails.config.current_company) if RamenRails.config.current_company.present?
|
135
|
-
rescue NameError => e
|
136
|
-
Rails.logger.debug "Swallowing NameError. We're probably in an Engine or some other context like Devise."
|
137
|
-
Rails.logger.debug e
|
138
|
-
|
139
|
-
company = nil
|
140
|
-
end
|
141
|
-
|
142
|
-
return nil unless company
|
143
|
-
|
144
|
-
obj = {}
|
145
|
-
[:url, :id, :value, :name].each do |attr|
|
146
|
-
obj[attr] = company.send(attr) if company.respond_to?(attr) &&
|
147
|
-
company.send(attr).present?
|
148
|
-
end
|
149
|
-
|
150
|
-
obj
|
130
|
+
def ramen_custom_links
|
131
|
+
RamenRails.config.custom_links
|
151
132
|
end
|
152
133
|
|
153
|
-
|
154
134
|
def ramen_script_tag
|
155
135
|
obj = {}
|
156
136
|
obj[:organization_id] = ramen_org_id
|
@@ -170,8 +150,7 @@ module RamenRails
|
|
170
150
|
|
171
151
|
obj[:user][:value] = ramen_user_value if ramen_user_value.present?
|
172
152
|
obj[:user][:labels] = ramen_user_labels unless ramen_user_labels.nil?
|
173
|
-
|
174
|
-
obj[:company] = ramen_company if ramen_company.present?
|
153
|
+
obj[:custom_links] = ramen_custom_links if ramen_custom_links.present?
|
175
154
|
|
176
155
|
super(obj, organization_secret: ramen_org_secret)
|
177
156
|
end
|
@@ -17,18 +17,24 @@ module RamenRails
|
|
17
17
|
self.options = options
|
18
18
|
end
|
19
19
|
|
20
|
+
def ramen_js_asset_uri
|
21
|
+
RamenRails.config.ramen_js_asset_uri || "https://cdn.ramen.is/assets/ramen.js"
|
22
|
+
end
|
23
|
+
|
20
24
|
def generate
|
21
25
|
if ramen_settings.blank?
|
22
26
|
raise EmptySettings.new("need to pass ramen_script_tag a non-empty ramen_settings argument")
|
23
27
|
end
|
24
28
|
|
29
|
+
ramen_settings[:timestamp] ||= Time.now.to_i
|
30
|
+
|
25
31
|
add_auth_hash!
|
26
32
|
|
27
33
|
ramen_script = <<-RAMEN_SCRIPT
|
28
34
|
<script id="RamenSettingsScriptTag">
|
29
35
|
window.ramenSettings = #{ActiveSupport::JSON.encode(ramen_settings)};
|
30
36
|
</script>
|
31
|
-
<script src="
|
37
|
+
<script src="#{ramen_js_asset_uri}" async></script>
|
32
38
|
RAMEN_SCRIPT
|
33
39
|
|
34
40
|
if controller
|
@@ -46,11 +52,7 @@ module RamenRails
|
|
46
52
|
|
47
53
|
user = ramen_settings[:user]
|
48
54
|
|
49
|
-
|
50
|
-
secret_string = "#{user[:email]}:#{user[:id]}:#{user[:name]}:#{ramen_settings[:timestamp]}:#{options[:organization_secret]}"
|
51
|
-
else
|
52
|
-
secret_string = "#{user[:email]}:#{user[:id]}:#{user[:name]}:#{options[:organization_secret]}"
|
53
|
-
end
|
55
|
+
secret_string = "#{user[:email]}:#{user[:id]}:#{user[:name]}:#{ramen_settings[:timestamp]}:#{options[:organization_secret]}"
|
54
56
|
|
55
57
|
ramen_settings[:auth_hash] = (Digest::SHA2.new << secret_string).to_s
|
56
58
|
end
|
data/lib/ramen-rails/version.rb
CHANGED
data/ramen-rails.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |s|
|
|
9
9
|
s.authors = ["Ryan Angilly"]
|
10
10
|
s.email = ["ryan@ramen.is"]
|
11
11
|
s.homepage = "https://ramen.is"
|
12
|
-
s.summary = %q{Rails gem for Ramen}
|
13
|
-
s.description = %q{Ramen helps B2B SaaS product teams build better products through workflow-
|
12
|
+
s.summary = %q{Rails gem for Ramen (https://ramen.is)}
|
13
|
+
s.description = %q{Ramen helps B2B SaaS product teams build better products through workflow-enhanced customer development}
|
14
14
|
|
15
15
|
|
16
16
|
s.add_development_dependency "actionpack", "~>4.0"
|
data/spec/lib/config_spec.rb
CHANGED
@@ -4,7 +4,6 @@ describe "RamenRails::Config" do
|
|
4
4
|
|
5
5
|
before :each do
|
6
6
|
@user = Hashie::Mash.new(name: 'Ryan', email: 'ryan@ramen.is', id: '1234')
|
7
|
-
@company = Hashie::Mash.new(name: 'Scrubber', url: 'http://scrubber.social', id: 'comp-1234')
|
8
7
|
@organization_id = rand(1_000_000)
|
9
8
|
@organization_secret = rand(1_000_000)
|
10
9
|
end
|
@@ -14,14 +13,11 @@ describe "RamenRails::Config" do
|
|
14
13
|
config.organization_id = @organization_id
|
15
14
|
config.organization_secret = @organization_secret
|
16
15
|
config.current_user = Proc.new { @user }
|
17
|
-
config.current_company = Proc.new { @company }
|
18
16
|
end
|
19
17
|
|
20
18
|
expect(instance_eval(&RamenRails.config.current_user).id).to eq('1234')
|
21
|
-
expect(instance_eval(&RamenRails.config.current_company).id).to eq('comp-1234')
|
22
19
|
|
23
20
|
expect(RamenRails.config.current_user.call.id).to eq('1234')
|
24
|
-
expect(RamenRails.config.current_company.call.id).to eq('comp-1234')
|
25
21
|
expect(RamenRails.config.organization_id).to eq(@organization_id)
|
26
22
|
expect(RamenRails.config.organization_secret).to eq(@organization_secret)
|
27
23
|
end
|
@@ -5,13 +5,13 @@ describe 'After filter' do
|
|
5
5
|
before :each do
|
6
6
|
@dummy = Hashie::Mash.new({
|
7
7
|
request: {
|
8
|
-
|
9
|
-
|
8
|
+
original_url: "http://hiryan.com",
|
9
|
+
},
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
response: {
|
12
|
+
content_type: 'text/html',
|
13
|
+
body: "<html><body>hi</body>"
|
14
|
+
}
|
15
15
|
})
|
16
16
|
end
|
17
17
|
|
@@ -45,19 +45,57 @@ describe 'After filter' do
|
|
45
45
|
ts = Time.now.to_i
|
46
46
|
auth_hash = (Digest::SHA2.new << "ryan@ramen.is:person-1234:Ryan Angilly:5678").to_s
|
47
47
|
ts_auth_hash = (Digest::SHA2.new << "ryan@ramen.is:person-1234:Ryan Angilly:#{ts}:5678").to_s
|
48
|
-
|
48
|
+
|
49
49
|
filter = RamenRails::RamenAfterFilter.filter(@dummy)
|
50
|
-
|
50
|
+
|
51
51
|
expect(@dummy.response.body).to_not include(auth_hash)
|
52
52
|
expect(@dummy.response.body).to include(ts_auth_hash)
|
53
53
|
expect(@dummy.response.body).to include("script")
|
54
54
|
expect(@dummy.response.body).to include("Angilly")
|
55
55
|
expect(@dummy.response.body).to include("hiryan.com")
|
56
56
|
expect(@dummy.response.body).to_not include("company")
|
57
|
+
expect(@dummy.response.body).to_not include("custom_links")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
context "and custom links" do
|
62
|
+
before :each do
|
63
|
+
RamenRails.config do |c|
|
64
|
+
c.custom_links = [
|
65
|
+
{
|
66
|
+
title: "Submit a bug",
|
67
|
+
callback: "$('#submit_bug').modal('show')"
|
68
|
+
},
|
69
|
+
|
70
|
+
{
|
71
|
+
title: "Knowledge Base",
|
72
|
+
href: "/knowedge_base"
|
73
|
+
}
|
74
|
+
]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should attach tag" do
|
79
|
+
Timecop.freeze do
|
80
|
+
ts = Time.now.to_i
|
81
|
+
auth_hash = (Digest::SHA2.new << "ryan@ramen.is:person-1234:Ryan Angilly:5678").to_s
|
82
|
+
ts_auth_hash = (Digest::SHA2.new << "ryan@ramen.is:person-1234:Ryan Angilly:#{ts}:5678").to_s
|
83
|
+
|
84
|
+
filter = RamenRails::RamenAfterFilter.filter(@dummy)
|
85
|
+
|
86
|
+
expect(@dummy.response.body).to_not include(auth_hash)
|
87
|
+
expect(@dummy.response.body).to include(ts_auth_hash)
|
88
|
+
expect(@dummy.response.body).to include("script")
|
89
|
+
expect(@dummy.response.body).to include("Angilly")
|
90
|
+
expect(@dummy.response.body).to include("hiryan.com")
|
91
|
+
expect(@dummy.response.body).to_not include("company")
|
92
|
+
expect(@dummy.response.body).to include("custom_links")
|
93
|
+
end
|
94
|
+
|
57
95
|
end
|
58
96
|
end
|
59
97
|
|
60
|
-
|
98
|
+
context "and a company" do
|
61
99
|
before :each do
|
62
100
|
RamenRails.config do |c|
|
63
101
|
c.current_company = Proc.new { Hashie::Mash.new(name: 'Scrubber', url: 'https://scrubber.social') }
|
@@ -65,7 +103,7 @@ describe 'After filter' do
|
|
65
103
|
end
|
66
104
|
end
|
67
105
|
|
68
|
-
|
106
|
+
pending "should attach user & company" do
|
69
107
|
filter = RamenRails::RamenAfterFilter.filter(@dummy)
|
70
108
|
expect(@dummy.response.body).to include("script")
|
71
109
|
expect(@dummy.response.body).to include("Angilly")
|
@@ -46,26 +46,62 @@ describe 'Script Tag Helper' do
|
|
46
46
|
end
|
47
47
|
|
48
48
|
it "should calculate auth_hash correctly" do
|
49
|
+
ts = Time.now.to_i
|
49
50
|
ramen_settings = {
|
50
51
|
organization_id: rand(1_000_000),
|
51
52
|
user: {
|
52
53
|
email: 'ryan@ramen.is',
|
53
54
|
name: 'Ryan Angilly',
|
54
55
|
id: '346656'
|
55
|
-
}
|
56
|
+
},
|
57
|
+
timestamp: ts
|
56
58
|
}
|
57
59
|
|
58
60
|
options = {organization_secret: "1234"}
|
59
61
|
|
60
|
-
auth_hash = (Digest::SHA2.new << "ryan@ramen.is:346656:Ryan Angilly:1234").to_s
|
62
|
+
auth_hash = (Digest::SHA2.new << "ryan@ramen.is:346656:Ryan Angilly:#{ts}:1234").to_s
|
61
63
|
|
62
64
|
output = @template.ramen_script_tag(ramen_settings, options)
|
63
65
|
|
66
|
+
expect(output).to include("https://cdn.ramen.is/assets/ramen.js")
|
64
67
|
expect(output).to include("Ryan Angilly")
|
65
68
|
expect(output).to include("auth_hash")
|
66
69
|
expect(output).to include(auth_hash)
|
67
70
|
end
|
68
71
|
|
72
|
+
context "with a changed asset config" do
|
73
|
+
before :each do
|
74
|
+
@js_uri = "http://cdn.ramen.dev/assets/ramen.js"
|
75
|
+
RamenRails.config do |c|
|
76
|
+
c.ramen_js_asset_uri = @js_uri
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should calculate auth_hash correctly" do
|
81
|
+
ts = Time.now.to_i
|
82
|
+
ramen_settings = {
|
83
|
+
organization_id: rand(1_000_000),
|
84
|
+
user: {
|
85
|
+
email: 'ryan@ramen.is',
|
86
|
+
name: 'Ryan Angilly',
|
87
|
+
id: '346656'
|
88
|
+
},
|
89
|
+
timestamp: ts
|
90
|
+
}
|
91
|
+
|
92
|
+
options = {organization_secret: "1234"}
|
93
|
+
|
94
|
+
auth_hash = (Digest::SHA2.new << "ryan@ramen.is:346656:Ryan Angilly:#{ts}:1234").to_s
|
95
|
+
|
96
|
+
output = @template.ramen_script_tag(ramen_settings, options)
|
97
|
+
|
98
|
+
expect(output).to include(@js_uri)
|
99
|
+
expect(output).to include("Ryan Angilly")
|
100
|
+
expect(output).to include("auth_hash")
|
101
|
+
expect(output).to include(auth_hash)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
69
105
|
it "should work timestamp into hash if provided" do
|
70
106
|
ts = Time.now.to_i
|
71
107
|
ramen_settings = {
|
@@ -105,14 +141,11 @@ describe 'Script Tag Helper' do
|
|
105
141
|
|
106
142
|
options = {organization_secret: "1234"}
|
107
143
|
|
108
|
-
auth_hash = (Digest::SHA2.new << "ryan@ramen.is:346656:Ryan Angilly:1234").to_s
|
109
|
-
|
110
144
|
output = @template.ramen_script_tag(ramen_settings, options)
|
111
145
|
|
112
146
|
expect(output).to include("Ryan Angilly")
|
113
147
|
expect(output).to include("auth_hash")
|
114
148
|
expect(output).to include("hello")
|
115
|
-
expect(output).to_not include(auth_hash)
|
116
149
|
|
117
150
|
expect(@template.controller.instance_variable_get(RamenRails::SCRIPT_TAG_HELPER_CALLED_INSTANCE_VARIABLE)).to eq(true)
|
118
151
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ramen-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Angilly
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04-
|
11
|
+
date: 2015-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|
@@ -94,7 +94,7 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '4.0'
|
97
|
-
description: Ramen helps B2B SaaS product teams build better products through workflow-
|
97
|
+
description: Ramen helps B2B SaaS product teams build better products through workflow-enhanced
|
98
98
|
customer development
|
99
99
|
email:
|
100
100
|
- ryan@ramen.is
|
@@ -146,7 +146,7 @@ rubyforge_project: ramen-rails
|
|
146
146
|
rubygems_version: 2.2.2
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
|
-
summary: Rails gem for Ramen
|
149
|
+
summary: Rails gem for Ramen (https://ramen.is)
|
150
150
|
test_files:
|
151
151
|
- spec/lib/config_spec.rb
|
152
152
|
- spec/lib/ramen_after_filter_spec.rb
|