rpictogrify 0.4.0 → 0.5.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: 98bfc90c4b65c31523c5fbb83597b1207ad6ff385e45103a563a4676d0ef2de6
4
- data.tar.gz: a1d198f5390328ea67a5b1bcce2d6edb16f55e535a6e57e3b3ffc6a5fb86af64
3
+ metadata.gz: 16f8ae00a030fcb82258a5885dda4f0de316b4e1d3ea98c0c32369ad6baf0f7c
4
+ data.tar.gz: 000f34d1b9d95c2ab8eaec9b3da7b859c01e120efa8ec5c18b9b7dc2dcb9ccfc
5
5
  SHA512:
6
- metadata.gz: 8e3d48f8b4ca2998ece98e9bcb122b0b50a530c3be917ad440a74f5f04f7cfd5c00e24f6df29df9a59600d34c46a393133de23d02793ddea64524299d6c2c00a
7
- data.tar.gz: afd350e78cd39368f717b983ea4a88059015a7f01ba397b9c5e3d5e32df5b70b04840cbd7a776e941d2472ccb95cf44b1464b94aaebc81f6d2f62fff843697e2
6
+ metadata.gz: 07cb42697c11d430ac62712e15cc21f5d761b2150d04e63c4b6dc1c80d8e742c4e3298d3c07f68e285777741676db21db4b3446e3e744a1df6b547337bfd086b
7
+ data.tar.gz: 8cf24261df62a257b1648348c7d6103a21029ecb61321b28572ed7102b003dea3327a1ba02df719512e2d888cbe9034b127e4113c2d0de3680312df4fa470f52
data/README.md CHANGED
@@ -36,14 +36,17 @@ Rpictogrify.configure do
36
36
  self.theme = :monsters
37
37
  # pictogram directory. default is 'public/system'
38
38
  self.base_path = 'public/system'
39
+ # register a custome theme with assets. assets see assets/themes
40
+ self.register_theme :custom, assets_path: 'vendor/assets/rpictogrify/themes/custom'
39
41
  end
40
42
  ```
41
43
 
42
44
  ## Usage
43
45
 
44
46
  ```ruby
45
- Rpictogrify.generate 'jim.cheung' #=> 'public/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg'
46
- Rpictogrify.generate 'jim.cheung', theme: :avataars_male #=> 'public/system/rpictogrify/1/avataars_male/jim.cheung-2935966159678137421.svg'
47
+ Rpictogrify.generate 'jim.cheung' #=> 'public/system/rpictogrify/1/monsters/1313467160.svg'
48
+ Rpictogrify.generate 'jim.cheung', theme: :avataars_male #=> 'public/system/rpictogrify/1/avataars_male/1313467160.svg'
49
+ Rpictogrify.generate 'jim.cheung', theme: :custom #=> 'public/system/rpictogrify/1/custom/1313467160.svg', use custom theme
47
50
  ```
48
51
 
49
52
  ### Controller / View
@@ -57,10 +60,10 @@ include Rpictogrify::Helper
57
60
  Then you can use the following methods in views.
58
61
 
59
62
  ```ruby
60
- rpictogrify_for('jim', theme: :monsters) #=> 'public/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg'
61
- rpictogrify_url('jim') #=> '/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg'
62
- rpictogrify_tag('jim', html: {class: :avatar}) #=> '<img class="avatar" src="/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg" alt="jim" />'
63
- rpictogrify_url_for('public/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg') #=> '/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg'
63
+ rpictogrify_for('jim', theme: :monsters) #=> 'public/system/rpictogrify/1/monsters/1313467160.svg'
64
+ rpictogrify_url('jim') #=> '/system/rpictogrify/1/monsters/1313467160.svg'
65
+ rpictogrify_tag('jim', html: {class: :avatar}) #=> '<img class="avatar" src="/system/rpictogrify/1/monsters/1313467160.svg" alt="jim" />'
66
+ rpictogrify_url_for('public/system/rpictogrify/1/monsters/1313467160.svg') #=> '/system/rpictogrify/1/monsters/1313467160.svg'
64
67
  ```
65
68
 
66
69
  ### Model
@@ -79,8 +82,8 @@ end
79
82
  Then you have the following methods in user
80
83
 
81
84
  ```ruby
82
- @user.rpictogrify_path #=> 'public/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg'
83
- @user.rpictogrify_url #=> '/system/rpictogrify/1/monsters/jim.cheung-1512422874962937463.svg'
85
+ @user.rpictogrify_path #=> 'public/system/rpictogrify/1/monsters/1313467160.svg'
86
+ @user.rpictogrify_url #=> '/system/rpictogrify/1/monsters/1313467160.svg'
84
87
  ```
85
88
 
86
89
  ## Contributing
@@ -96,4 +99,4 @@ Please write unit test with your code if necessary.
96
99
 
97
100
  ## License
98
101
 
99
- The gem is available as open source under the terms of the [MIT License](MIT-LICENSE).
102
+ The gem is available as open source under the terms of the [MIT License](MIT-LICENSE).
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'rpictogrify/theme'
4
+
3
5
  module Rpictogrify
4
6
  class Configuration
5
7
  # default theme, one of these themes: avataars_female, avataars_male, male_flat, monsters. default is :monsters
@@ -13,5 +15,10 @@ module Rpictogrify
13
15
 
14
16
  @base_path = 'public/system'
15
17
  end
18
+
19
+ # register a custome theme with assets. assets see assets/themes.
20
+ def register_theme(ident, assets_path:)
21
+ Rpictogrify::Theme.register(ident, assets_path: assets_path)
22
+ end
16
23
  end
17
- end
24
+ end
@@ -15,6 +15,23 @@ module Rpictogrify
15
15
  rescue NameError
16
16
  raise ArgumentError.new('The ident argument must be one of themes: avataars_female, avataars_male, male_flat, monsters')
17
17
  end
18
+
19
+ def register(ident, assets_path:)
20
+ define_class_context = ->(binding) do
21
+ @@assets_path = assets_path
22
+ def assets_path
23
+ Pathname.new(@@assets_path)
24
+ end
25
+ end
26
+
27
+ theme_name = Rpictogrify::Inflector.camelize(ident.to_s)
28
+ theme_class = "Rpictogrify::Themes::#{theme_name}"
29
+ if Object.const_defined?(theme_class)
30
+ Object.const_get(theme_class).class_eval(&define_class_context)
31
+ else
32
+ Rpictogrify::Themes.const_set(theme_name, Class.new(Rpictogrify::Themes::Base, &define_class_context))
33
+ end
34
+ end
18
35
  end
19
36
  end
20
37
  end
@@ -10,14 +10,12 @@ module Rpictogrify
10
10
  include Singleton
11
11
  extend SingleForwardable
12
12
 
13
- attr_reader :mapping, :resource, :ident
14
- def_delegators :instance, :mapping, :resource, :ident,
13
+ attr_reader :mapping, :resource, :ident, :assets_path
14
+ def_delegators :instance, :mapping, :resource, :ident, :assets_path,
15
15
  :width, :height, :shapes, :colors, :symbol
16
16
 
17
17
  def initialize
18
- @ident = get_ident
19
- @mapping = parse_mapping
20
- @resource = parse_resource
18
+ @ident = get_ident
21
19
  end
22
20
 
23
21
  def width
@@ -40,18 +38,22 @@ module Rpictogrify
40
38
  resource.at_xpath("//*[@id='#{id}']")
41
39
  end
42
40
 
43
- private
41
+ def assets_path
42
+ Rpictogrify.themes_assets_path.join(ident)
43
+ end
44
44
 
45
- def get_ident
46
- Rpictogrify::Inflector.underscore(self.class.name).split('/').last
45
+ def mapping
46
+ @mapping ||= JSON.parse(File.read(assets_path.join('mapping.json')))
47
47
  end
48
48
 
49
- def parse_mapping
50
- JSON.parse File.read(Rpictogrify.themes_assets_path.join(ident, 'mapping.json'))
49
+ def resource
50
+ @resource ||= Nokogiri.XML(File.read(assets_path.join('resource.svg')))
51
51
  end
52
52
 
53
- def parse_resource
54
- Nokogiri.XML File.read(Rpictogrify.themes_assets_path.join(ident, 'resource.svg'))
53
+ private
54
+
55
+ def get_ident
56
+ Rpictogrify::Inflector.underscore(self.class.name).split('/').last
55
57
  end
56
58
 
57
59
  def view_box
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Rpictogrify
4
- VERSION = "0.4.0"
4
+ VERSION = "0.5.0"
5
5
  end
data/lib/rpictogrify.rb CHANGED
@@ -24,6 +24,10 @@ module Rpictogrify
24
24
  @config ||= Configuration.new
25
25
  end
26
26
 
27
+ def reset_config
28
+ @config = nil
29
+ end
30
+
27
31
  def configure(&block)
28
32
  config.instance_exec(&block)
29
33
  end
@@ -44,4 +48,4 @@ module Rpictogrify
44
48
  path.to_s.sub('public/', '/')
45
49
  end
46
50
  end
47
- end
51
+ end
@@ -2,6 +2,10 @@ require 'spec_helper'
2
2
  require 'rpictogrify'
3
3
 
4
4
  describe Rpictogrify do
5
+ after do
6
+ Rpictogrify.reset_config
7
+ end
8
+
5
9
  context 'configure' do
6
10
  it 'load default config' do
7
11
  expect(Rpictogrify.config.theme).to eq(:monsters)
@@ -16,11 +20,27 @@ describe Rpictogrify do
16
20
 
17
21
  expect(Rpictogrify.config.theme).to eq(:avataars_female)
18
22
  expect(Rpictogrify.config.base_path).to eq('public')
23
+ end
24
+
25
+ it 'register theme' do
26
+ custom_theme_assets_path = 'vendor/assets/rpictogrify/themes/custom'
27
+ expect(defined?(Rpictogrify::Themes::Custom)).to be_falsy
28
+
29
+ Rpictogrify.configure do
30
+ self.theme = :custom
31
+ self.register_theme :custom, assets_path: custom_theme_assets_path
32
+ end
33
+
34
+ expect(defined?(Rpictogrify::Themes::Custom)).to be_truthy
35
+ expect(Rpictogrify::Themes::Custom.superclass).to eq Rpictogrify::Themes::Base
36
+ expect(Rpictogrify::Themes::Custom.assets_path).to eq Pathname.new(custom_theme_assets_path)
37
+ expect(Rpictogrify.config.theme).to eq(:custom)
19
38
 
20
39
  Rpictogrify.configure do
21
- self.theme = :monsters
22
- self.base_path = 'public/system'
40
+ self.register_theme :monsters, assets_path: Pathname.new(custom_theme_assets_path)
23
41
  end
42
+ expect(Rpictogrify::Themes::Monsters.assets_path).to eq Pathname.new(custom_theme_assets_path)
43
+ expect(Rpictogrify::Themes::Monsters.superclass).to eq Rpictogrify::Themes::Base
24
44
  end
25
45
  end
26
46
 
@@ -44,11 +64,15 @@ describe Rpictogrify do
44
64
  path = Rpictogrify.generate 'jim.cheung'
45
65
  expect(path).to include('avataars_female')
46
66
  expect(path).to include('public/custom')
67
+ end
47
68
 
69
+ it 'return pictogram path with custom theme' do
48
70
  Rpictogrify.configure do
49
- self.theme = :monsters
50
- self.base_path = 'public/system'
71
+ self.register_theme :custom, assets_path: 'assets/themes/male_flat'
51
72
  end
73
+
74
+ path = Rpictogrify.generate 'jim.cheung', theme: :custom
75
+ expect(path).to include('custom')
52
76
  end
53
77
  end
54
78
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rpictogrify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Cheung
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-11 00:00:00.000000000 Z
11
+ date: 2022-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -104,10 +104,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
104
  - !ruby/object:Gem::Version
105
105
  version: '0'
106
106
  requirements: []
107
- rubygems_version: 3.0.8
107
+ rubygems_version: 3.2.3
108
108
  signing_key:
109
109
  specification_version: 4
110
110
  summary: Ruby version of the pictogrify to generate unique pictograms
111
111
  test_files:
112
- - spec/spec_helper.rb
113
112
  - spec/rpictogrify_spec.rb
113
+ - spec/spec_helper.rb