freya 1.0.1 → 1.1.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
  SHA1:
3
- metadata.gz: 2c9111ae237a9bc5744ed5a64faf02117d4a4ecb
4
- data.tar.gz: 01cbd34c7c5f10ca504a6179b6c23a64e6fa65b6
3
+ metadata.gz: 515e1502e619118de4e98afefbb1fffa741b6b8e
4
+ data.tar.gz: 92d32ab14f439374c40ef72f449fcf1e22f8dafe
5
5
  SHA512:
6
- metadata.gz: c8cc482062754853c3731e9c8559a707cda0f38e05b589e96223893cf730fc553ffd78a1f13027359af2bfc8e983e18f10d72ee0774c1eb29c748682bcb759be
7
- data.tar.gz: 6816b58e12243095ce606496ecdce599111b0c852106a5cce8ee5ea9278f01b6ed67a66f6d0febcdc6501c3d27252fc7661c63d51465d9e9a5affbd8f0b15800
6
+ metadata.gz: 05fc4c172a4b0c7e61bce3da6ee2f3e2ed30d4e589a428e12842e22c9babd414e9e28ae53fcf6057c8ee5c623f141d75fd813b7d67e1669267fe33d24b483cd8
7
+ data.tar.gz: 369b83801ecc30a6fa1c8c429ef4424d05d4e749156178ac372215c46f4de71628147461409f4837bb90cbfec5848618c706ab814e46277b0f7a5a9ec97b1536
@@ -1,55 +1,7 @@
1
1
  require 'freya/version'
2
- require 'active_support/core_ext'
3
- require 'yaml'
4
- require 'rails'
2
+ require 'freya/template'
3
+ require 'freya/email'
4
+ require 'freya/gmail'
5
5
 
6
6
  module Freya
7
- class Template
8
- def self.config=(config)
9
- @config ||= config
10
- end
11
-
12
- def self.config
13
- @config
14
- end
15
-
16
- def initialize
17
- return unless File.exists?(File.join(Rails.root, 'config', 'emails.yml'))
18
- self.class.config ||= HashWithIndifferentAccess.new(YAML.load(IO.read(File.join(Rails.root, 'config', 'emails.yml'))))
19
- end
20
-
21
- def [](name)
22
- name.present? ? name.to_s.split('.').inject(self.class.config) { |result, n| result.fetch(n) } : nil
23
- end
24
- end
25
-
26
- class Email < OpenStruct
27
- def link
28
- extras = %w{ cc bcc body subject }.select { |extra| send(extra).present? }.map { |extra| [extra, send(extra)] }.map do |extra|
29
- name = extra[0]
30
- value = extra[1]
31
-
32
- #cc and #bcc must be repeated for every email in the array
33
- [value].flatten.map do |component|
34
- "#{name}=#{Rack::Utils.escape_path(component)}"
35
- end
36
- end.compact
37
-
38
- extras = extras.empty? ? '' : '?' + extras.join('&')
39
-
40
- "#{to}#{extras}"
41
- end
42
-
43
- def body
44
- Template.new[name]
45
- end
46
-
47
- def cc
48
- ([base_cc].flatten + [self[:cc]].flatten - [to]).compact.uniq
49
- end
50
-
51
- def bcc
52
- ([base_bcc].flatten + [self[:bcc]].flatten - [to]).compact.uniq
53
- end
54
- end
55
7
  end
@@ -0,0 +1,45 @@
1
+ require 'freya'
2
+
3
+ module Freya
4
+ class Email < OpenStruct
5
+ def link
6
+ params = params_mapping.select { |param_name, url_param_name| send(param_name).present? }.map do |param_name, url_param_name|
7
+ [send(param_name)].flatten.map do |param|
8
+ "#{url_param_name}=#{Rack::Utils.escape_path(param)}"
9
+ end
10
+ end.compact
11
+
12
+ base_url + '?' + (params + extra_params).join('&')
13
+ end
14
+
15
+ def body
16
+ Template.new[name]
17
+ end
18
+
19
+ def cc
20
+ ([base_cc].flatten + [self[:cc]].flatten - [to]).compact.uniq
21
+ end
22
+
23
+ def bcc
24
+ ([base_bcc].flatten + [self[:bcc]].flatten - [to]).compact.uniq
25
+ end
26
+
27
+ private
28
+
29
+ def param_names
30
+ %w(cc bcc body subject)
31
+ end
32
+
33
+ def params_mapping
34
+ param_names.inject({}) { |params, param| params[param] = param; params }
35
+ end
36
+
37
+ def base_url
38
+ to
39
+ end
40
+
41
+ def extra_params
42
+ []
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,23 @@
1
+ require 'freya'
2
+
3
+ module Freya
4
+ class Gmail < Email
5
+ private
6
+
7
+ def param_names
8
+ super << 'to'
9
+ end
10
+
11
+ def params_mapping
12
+ super.merge({'subject' => 'su'})
13
+ end
14
+
15
+ def base_url
16
+ 'https://mail.google.com/mail'
17
+ end
18
+
19
+ def extra_params
20
+ ['view=cm', 'fs=1']
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,25 @@
1
+ require 'freya'
2
+ require 'yaml'
3
+ require 'rails'
4
+ require 'active_support/core_ext'
5
+
6
+ module Freya
7
+ class Template
8
+ def self.config=(config)
9
+ @config ||= config
10
+ end
11
+
12
+ def self.config
13
+ @config
14
+ end
15
+
16
+ def initialize
17
+ return unless File.exists?(File.join(Rails.root, 'config', 'emails.yml'))
18
+ self.class.config ||= HashWithIndifferentAccess.new(YAML.load(IO.read(File.join(Rails.root, 'config', 'emails.yml'))))
19
+ end
20
+
21
+ def [](name)
22
+ name.present? ? name.to_s.split('.').inject(self.class.config) { |result, n| result.fetch(n) } : nil
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,3 @@
1
1
  module Freya
2
- VERSION = "1.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -1,14 +1,6 @@
1
- require 'freya'
2
- require 'pry'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Freya::Email do
5
- before do
6
- File.stub(exists?: true)
7
- Rails.stub(root: 'freya')
8
- Freya.send(:remove_const, 'Template')
9
- load 'lib/freya.rb'
10
- end
11
-
12
4
  describe 'methods' do
13
5
  before do
14
6
  IO.stub(read:
@@ -32,6 +24,8 @@ describe Freya::Email do
32
24
  end
33
25
 
34
26
  it 'returns a email body based on names separated by point' do
27
+ reload_template
28
+
35
29
  IO.stub(read:
36
30
  <<-EOS
37
31
  test:
@@ -92,6 +86,8 @@ describe Freya::Email do
92
86
  test_email2: This is the second test email
93
87
  EOS
94
88
  )
89
+
90
+ reload_template
95
91
  end
96
92
 
97
93
  it 'responds to emails defined in emails.yml' do
@@ -114,8 +110,26 @@ describe Freya::Email do
114
110
  EOS
115
111
  )
116
112
 
113
+ reload_template
114
+
117
115
  Freya::Template.new[:test1][:email].should eq('This is the first test email')
118
116
  Freya::Template.new[:test2][:email].should eq('This is the second test email')
119
117
  end
120
118
  end
119
+ end
120
+
121
+ describe Freya::Gmail do
122
+ before do
123
+ IO.stub(read:
124
+ <<-EOS
125
+ test_email: This is the test email
126
+ EOS
127
+ )
128
+ end
129
+
130
+ it 'builds the mail link for gmail if the type is set to gmail' do
131
+ Freya::Gmail.new(name: 'test_email', subject: 'subject', to: 'test@test.com').link.should eq(
132
+ 'https://mail.google.com/mail?body=This%20is%20the%20test%20email&su=subject&to=test%40test.com&view=cm&fs=1'
133
+ )
134
+ end
121
135
  end
@@ -0,0 +1,15 @@
1
+ require 'freya'
2
+ require 'pry'
3
+
4
+ def reload_template
5
+ Freya.send(:remove_const, 'Template')
6
+ load 'lib/freya/template.rb'
7
+ end
8
+
9
+ RSpec.configure do |config|
10
+ config.before(:each) do
11
+ File.stub(exists?: true)
12
+ Rails.stub(root: 'freya')
13
+ reload_template
14
+ end
15
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freya
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matteo Depalo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-12 00:00:00.000000000 Z
11
+ date: 2013-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -94,8 +94,12 @@ files:
94
94
  - Rakefile
95
95
  - freya.gemspec
96
96
  - lib/freya.rb
97
+ - lib/freya/email.rb
98
+ - lib/freya/gmail.rb
99
+ - lib/freya/template.rb
97
100
  - lib/freya/version.rb
98
101
  - spec/freya_spec.rb
102
+ - spec/spec_helper.rb
99
103
  homepage: ''
100
104
  licenses:
101
105
  - MIT
@@ -122,3 +126,5 @@ specification_version: 4
122
126
  summary: Minimal email generator
123
127
  test_files:
124
128
  - spec/freya_spec.rb
129
+ - spec/spec_helper.rb
130
+ has_rdoc: