shrift 0.0.0 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b30b6e4d8482529d44dd7e2eab9d4f5a7b9d4780
4
- data.tar.gz: 113a2e6080990929fce5a4d83ee52edfc6825aa9
3
+ metadata.gz: 1ffd10c8e7f662dcd01939712e0f864dd5b6e159
4
+ data.tar.gz: 12153ba532ac676cfa55daeb6b017822c6427831
5
5
  SHA512:
6
- metadata.gz: 99f31f6c54bedeb9efbf2bfe307d3ff8c8e626e16de059700c008484b0e47d92c9faf83c6df505cbc0b20c5db88be6556beedb12b331367eea36d8161878192a
7
- data.tar.gz: 44745b162d371fe0ed813a13554458fd3dc5bf3492358a0bd89c159f703ec0d3418efef68d6eb8e8f8255538f92b9a666218a4935ffffff898cb21975488a6a0
6
+ metadata.gz: 939ae77dd4dc6b30b350b6d9bd4467d5533d61a8b9ea6a3d891370eb6ffe402d83acff3edce152dfd7c3d006082225d6783b423053c7db4aa2dceb19067b2ad8
7
+ data.tar.gz: 39c347c5b630b14d98a6a623ed4b3aae6ad65593d4195b39de7e993a62f0ecc2a6974e16bed2960cbfb2a6e771c9c5284455037859b1c4c0403b5fee61a5397a
data/.rubocop.yml ADDED
@@ -0,0 +1,23 @@
1
+ # https://github.com/bbatsov/rubocop/blob/master/config/enabled.yml
2
+
3
+ Metrics/AbcSize:
4
+ Enabled: true
5
+ Max: 22
6
+
7
+ Metrics/LineLength:
8
+ Description: 'Limit lines to 80 characters.'
9
+ StyleGuide: 'https://github.com/bbatsov/ruby-style-guide#80-character-limits'
10
+ Enabled: false
11
+
12
+ Style/SpaceInsideHashLiteralBraces:
13
+ EnforcedStyle: no_space
14
+ EnforcedStyleForEmptyBraces: no_space
15
+ SupportedStyles:
16
+ - space
17
+ - no_space
18
+
19
+ Style/IndentHash:
20
+ Enabled: false
21
+
22
+ Style/MethodLength:
23
+ Enabled: false
data/.travis.yml CHANGED
@@ -2,3 +2,4 @@ language: ruby
2
2
  rvm:
3
3
  - "2.1.5"
4
4
  - "2.2.0"
5
+ - "2.3.1"
data/Gemfile CHANGED
@@ -8,4 +8,5 @@ group :development do
8
8
  gem 'minitest-reporters'
9
9
  gem 'reek'
10
10
  gem 'rubocop'
11
+ gem 'yamlable'
11
12
  end
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- shrift (0.0.0)
4
+ shrift (0.0.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -50,6 +50,7 @@ GEM
50
50
  coercible (~> 1.0)
51
51
  descendants_tracker (~> 0.0, >= 0.0.3)
52
52
  equalizer (~> 0.0, >= 0.0.9)
53
+ yamlable (0.0.2)
53
54
 
54
55
  PLATFORMS
55
56
  ruby
@@ -62,6 +63,7 @@ DEPENDENCIES
62
63
  reek
63
64
  rubocop
64
65
  shrift!
66
+ yamlable
65
67
 
66
68
  BUNDLED WITH
67
- 1.11.2
69
+ 1.12.3
data/README.md CHANGED
@@ -2,9 +2,13 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/folkengine/shrift.svg?branch=master)](https://travis-ci.org/folkengine/shrift)
4
4
 
5
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/shrift`. To experiment with that code, run `bin/console` for an interactive prompt.
5
+ Makes short shrift of objects.
6
6
 
7
- TODO: Delete this and the text above, and describe your gem
7
+ ## Warning
8
+
9
+ This is alpha software and only works with basic Objects.
10
+
11
+ Shrift is a simple DSL generator that turns Objects to single line Strings for easy storage and debugging.
8
12
 
9
13
  ## Installation
10
14
 
@@ -24,7 +28,55 @@ Or install it yourself as:
24
28
 
25
29
  ## Usage
26
30
 
27
- It don't use right.
31
+ Given a simple class:
32
+
33
+ ```ruby
34
+ class Character
35
+ attr_accessor :character_name, :strength, :dexterity,
36
+ :constitution, :wisdom, :intelligence, :charisma, :hit_points
37
+
38
+ def initialize(character_name = '')
39
+ @character_name = character_name
40
+ end
41
+ end
42
+ ```
43
+
44
+ I setup a Shrift that maps the first cell to character_name, the second cell to a ShriftMap of most of the integer
45
+ fields, and the third field mapped as an integer to hit_points:
46
+
47
+ ```ruby
48
+ shrift_mapper = ShriftMapper.new(hashmap: {
49
+ ST: 'strength',
50
+ DX: 'dexterity',
51
+ CN: 'constitution',
52
+ W: 'wisdom',
53
+ I: 'intelligence',
54
+ CH: 'charisma'})
55
+ shrift = Shrift.new(Character, [ShriftCell.new(:character_name), shrift_mapper, ShriftInt.new(:hit_points)])
56
+
57
+ bub = Character.new('bub')
58
+ bub.strength = 15
59
+ bub.dexterity = 14
60
+ bub.constitution = 10
61
+ bub.wisdom = 18
62
+ bub.intelligence = 3
63
+ bub.charisma = 6
64
+ bub.hit_points = 4
65
+
66
+ bubbu_shrift = shrift.short(bub)
67
+ ```
68
+
69
+ This returns a Shrift String of:
70
+
71
+ ```ruby
72
+ bub:st15dx14cn10w18i3ch6:4
73
+ ```
74
+
75
+ To turn it back into an Object, I just need to pass the Shrift String into the Shrift's classify method:
76
+
77
+ ```ruby
78
+ new_bub = @shrift.classify(bubbu_shrift)
79
+ ```
28
80
 
29
81
  ## Development
30
82
 
@@ -0,0 +1,16 @@
1
+ # A basic Shrift Cell mapping to a String.
2
+ class ShriftCell
3
+ attr_reader :field
4
+
5
+ def initialize(field)
6
+ @field = field
7
+ end
8
+
9
+ def process(target)
10
+ target.send(field)
11
+ end
12
+
13
+ def set(value, target)
14
+ target.send("#{@field}=", value)
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ # An Exception thrown when a Shrift string doesn't cut it.
2
+ class ShriftException < Exception
3
+ end
@@ -0,0 +1,12 @@
1
+ require_relative('shrift_cell')
2
+
3
+ # A Shrift Cell where the value is in integer.
4
+ class ShriftInt < ShriftCell
5
+ def process(target)
6
+ target.send(field)
7
+ end
8
+
9
+ def set(value, target)
10
+ target.send("#{@field}=", value.to_i)
11
+ end
12
+ end
@@ -1,26 +1,59 @@
1
- module Shrift
2
- class ShriftMap
3
- attr_accessor :default, :map
4
- attr_reader :shrift_map_string
5
-
6
- def initialize(shrift_map_string, default = nil)
7
- @default = default
8
- @shrift_map_string = shrift_map_string
9
- parse(shrift_map_string)
10
- end
1
+ require_relative 'shrift_exception'
11
2
 
12
- def fetch(key)
13
- map[key]
14
- end
3
+ # A String that alternates between characters and numbers. Short hand for a collection
4
+ # of variables that hold integer values.
5
+ #
6
+ # Shrift map keys are lowercase.
7
+ #
8
+ class ShriftMap
9
+ attr_reader :hashmap, :shrift_map_string
15
10
 
16
- def store(key, value)
17
- map[key] = value
18
- end
11
+ def initialize(shrift_map_string)
12
+ @shrift_map_string = shrift_map_string
13
+ @hashmap = {}
14
+ split(shrift_map_string)
15
+ end
16
+
17
+ def fetch(key)
18
+ @hashmap[key.downcase.to_sym].to_i
19
+ end
20
+
21
+ def store(key, value)
22
+ @hashmap[key.downcase.to_sym] = value.to_i
23
+ end
19
24
 
20
- private
25
+ def to_hash
26
+ @hashmap
27
+ end
28
+
29
+ def to_s
30
+ @shrift_map_string
31
+ end
32
+
33
+ def self.to_shrift_map(hash)
34
+ ShriftMap.new(ShriftMap.to_shrift_map_string(hash))
35
+ end
36
+
37
+ def self.to_shrift_map_string(hash)
38
+ shrift_map_string = ''
39
+ hash.each do |key, val|
40
+ shrift_map_string << key.to_s
41
+ shrift_map_string << val.to_s
42
+ end
43
+ shrift_map_string
44
+ end
21
45
 
22
- def parse(shrift_map_string)
46
+ private
23
47
 
48
+ def split(shrift_map_string)
49
+ until shrift_map_string.empty?
50
+ shrift_group = shrift_map_string.scan(/^([a-zA-Z]+)(\d+)(.*)/).first
51
+ begin
52
+ store(shrift_group[0], shrift_group[1])
53
+ rescue NoMethodError
54
+ raise ShriftException, "Unbalanced ShriftMap: #{@shrift_map_string}"
55
+ end
56
+ shrift_map_string = shrift_group[2]
24
57
  end
25
58
  end
26
59
  end
@@ -0,0 +1,61 @@
1
+ require_relative 'shrift_map'
2
+
3
+ # I map ShriftMaps
4
+ class ShriftMapper
5
+ attr_reader :hashmap
6
+
7
+ def initialize(hashmap: {})
8
+ @hashmap = hashmap
9
+ clean
10
+ end
11
+
12
+ def fetch(key)
13
+ @hashmap[key.downcase.to_sym]
14
+ end
15
+
16
+ def store(key, value)
17
+ @hashmap[key] = value
18
+ end
19
+
20
+ def parse(shrift_map_string)
21
+ hash = {}
22
+ ShriftMap.new(shrift_map_string).hashmap.each do |key, val|
23
+ hash[@hashmap[key]] = val
24
+ end
25
+ hash
26
+ end
27
+
28
+ def to_hash
29
+ @hashmap
30
+ end
31
+
32
+ # :reek:UncommunicativeVariableName :reek:FeatureEnvy
33
+ def to_shrift_string(mappie)
34
+ return mappie if mappie.is_a?(String)
35
+ return mappie.map { |k, v| @hashmap.key(k).to_s.downcase + v.to_s }.join if mappie.is_a?(Hash)
36
+ @hashmap.map { |k, v| k.to_s.downcase + mappie.send(v).to_s }.join
37
+ end
38
+
39
+ def to_shrift_map(mappie)
40
+ ShriftMap.new(to_shrift_string(mappie))
41
+ end
42
+
43
+ # Shrift Cell Methods
44
+
45
+ def process(target)
46
+ to_shrift_string(target)
47
+ end
48
+
49
+ # :reek:UncommunicativeVariableName
50
+ def set(value, target)
51
+ shrift_map = to_shrift_map(value)
52
+ @hashmap.map { |k, v| target.send("#{v}=", shrift_map.fetch(k)) }
53
+ end
54
+
55
+ private
56
+
57
+ # Convert Hash keys to symbols
58
+ def clean
59
+ @hashmap = Hash[@hashmap.map { |key, value| [key.downcase.to_sym, value] }]
60
+ end
61
+ end
@@ -0,0 +1,3 @@
1
+ class ShriftVersion
2
+ VERSION = '0.0.1'.freeze
3
+ end
data/lib/shrift.rb CHANGED
@@ -1,9 +1,30 @@
1
- require 'shrift/version'
2
- require 'shrift/shriftlet'
1
+ require 'shrift/shrift_cell'
2
+ require 'shrift/shrift_int'
3
3
  require 'shrift/shrift_map'
4
+ require 'shrift/shrift_mapper'
4
5
 
5
- module Shrift
6
- class Short
6
+ # Making short shrift of Objects.
7
+ class Shrift
8
+ attr_reader :clazz
7
9
 
10
+ def initialize(clazz, guide = [])
11
+ @clazz = clazz
12
+ @guide = guide
13
+ end
14
+
15
+ # Turns the target class into a Shrift String
16
+ def short(target)
17
+ @guide.map { |cell| cell.process(target) }.join(':')
18
+ end
19
+
20
+ def classify(shrift_string)
21
+ zippy = @guide.zip(shrift_string.split(':'))
22
+ objective = Object.const_get(clazz.to_s).new
23
+
24
+ zippy.each do |cell|
25
+ cell[0].set(cell[1], objective)
26
+ end
27
+
28
+ objective
8
29
  end
9
30
  end
data/shrift.gemspec CHANGED
@@ -1,15 +1,15 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'shrift/version'
4
+ require 'shrift/shrift_version'
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = 'shrift'
8
- spec.version = Shrift::VERSION
8
+ spec.version = ShriftVersion::VERSION
9
9
  spec.authors = ['Folkengine']
10
10
  spec.email = ['gaoler@electronicpanopticon.com']
11
11
 
12
- spec.summary = 'WORK IN PROGRESS - Ruby utility library to make short shrift of objects.'
12
+ spec.summary = 'Ruby utility library to make short shrift of objects.'
13
13
  spec.description = 'Custom object serializer DSL'
14
14
  spec.homepage = 'https://github.com/folkengine/shrift'
15
15
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shrift
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.0
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Folkengine
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-05-01 00:00:00.000000000 Z
11
+ date: 2016-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".gitignore"
49
+ - ".rubocop.yml"
49
50
  - ".travis.yml"
50
51
  - Gemfile
51
52
  - Gemfile.lock
@@ -53,9 +54,12 @@ files:
53
54
  - README.md
54
55
  - Rakefile
55
56
  - lib/shrift.rb
57
+ - lib/shrift/shrift_cell.rb
58
+ - lib/shrift/shrift_exception.rb
59
+ - lib/shrift/shrift_int.rb
56
60
  - lib/shrift/shrift_map.rb
57
- - lib/shrift/shriftlet.rb
58
- - lib/shrift/version.rb
61
+ - lib/shrift/shrift_mapper.rb
62
+ - lib/shrift/shrift_version.rb
59
63
  - shrift.gemspec
60
64
  homepage: https://github.com/folkengine/shrift
61
65
  licenses: []
@@ -76,8 +80,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
80
  version: '0'
77
81
  requirements: []
78
82
  rubyforge_project:
79
- rubygems_version: 2.5.1
83
+ rubygems_version: 2.4.8
80
84
  signing_key:
81
85
  specification_version: 4
82
- summary: WORK IN PROGRESS - Ruby utility library to make short shrift of objects.
86
+ summary: Ruby utility library to make short shrift of objects.
83
87
  test_files: []
@@ -1,5 +0,0 @@
1
- module Shrift
2
- class Shriftlet
3
-
4
- end
5
- end
@@ -1,3 +0,0 @@
1
- module Shrift
2
- VERSION = '0.0.0'.freeze
3
- end